{"_id":"@midwayjs/command-core","_rev":"225-3f0c77b622d60d8f2e92e273d2bd83a5","name":"@midwayjs/command-core","dist-tags":{"latest":"2.1.0","beta":"2.0.14-beta.4","beta-2":"2.0.5","latest-2":"2.0.6"},"versions":{"0.1.6":{"name":"@midwayjs/command-core","version":"0.1.6","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"deepmerge":"^4.2.2"},"devDependencies":{"@types/mocha":"^5.2.5","midway-bin":"1"},"scripts":{"build":"npm run lint && midway-bin build -c","lint":"../../node_modules/.bin/tslint --format prose -c ../../tslint.json src/**/*.ts test/**/*.ts","test":"npm run lint && NODE_ENV=test midway-bin test --ts --full-trace","debug":"npm run lint && NODE_ENV=test midway-bin test --ts --full-trace --inspect-brk=9229","cov":"NODE_ENV=unittest midway-bin cov --ts","clean":"midway-bin clean","autod":"midway-bin autod"},"gitHead":"b67e2753cbdcc91813067ba2a1bb1ce7e85a3dff","description":"基于插件生命周期 + hook的内核","_id":"@midwayjs/command-core@0.1.6","_nodeVersion":"13.3.0","_npmVersion":"lerna/3.19.0/node@v13.3.0+x64 (darwin)","dist":{"integrity":"sha512-6QW9jCa4RRkcE+Z0FaVDzx0Y1R7WysUWkkXViDB3yD47+wan6gfl4Df0WbRMYPjy/HcAsiAI+WVKsV3kYO68GA==","shasum":"336ca4ef3fbfd8c0246ac03f7a05f741ec4115af","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-0.1.6.tgz","fileCount":31,"unpackedSize":59072,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeAua6CRA9TVsSAnZWagAAqfkP/jOjmJXL7vUb8JxUfQUB\nQvAa5BjxU/+YGYuBxAPeFiekd0GaAtcybObvvT+wnq/qlv/p4Oe+1Ox9Okba\nesLFYtY6ocldDGaSoquH2M00cGiWRdoaJcBozuK86CPcnwpk6UdDCvr9fAFg\nfEQY63Ba9T4+Ed4tF6/VX0No1llCURlTic2QVy8poZ7bjluYeatnFSipUOQb\n5MJOTq7c9RsC7uVsOQspl5pIwcWDT9EXOgoZQnRdUqzdFtM+42BZG+JPq2rL\nd/1sk907uimzK02qkv5aXye3nWqanUpBbayidIp7gXhElXyrVSGVuTkw8Y9x\nxf9QxVxevGNfTVgat9wpQVMpjQ307haLrv5o+UwZoENdEsrsroI8BbIICasL\nUILGaE1ITilhlm6MC7+jlutSVcHdPA2y7PRd8ClwLJy5n/1OJk1QEbVIfvXK\noiOL5GmHJ6Wa/0Eva6eJDLvAmUzAqiBYUn9jLo+LIaZtmcD6ogFEKIQmX9+g\nYZQJuu2qtRZv0bVs0ZKljDyf9MdOD2r66gIDARA1ftIx/i6hvqb4ZaBvHDCU\ns4RNk1v8LkFE+YTW4fKRq5b2kef0RrLe51SnXBF8uijm0Ptd1DH8kCOSX+w2\nK6YklFFzI5U2bEB9RG7FCMpy3w3SGWqLXoL0eZGWIzB/7UQd1W+BK5TVFxRp\nQp2G\r\n=6Rgp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCHy/Zo2o+CeQJyWVoXFwC8PKMQeOt4LFnvMF1WTtkFa0CIQCSOogWXYYLAynooQhmqHFOdJCYlFhCV05I0Z+PKo0mQA=="}]},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmUser":{"name":"czy88840616","email":"czy88840616@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_0.1.6_1577248442262_0.1834366583040845"},"_hasShrinkwrap":false},"0.1.7":{"name":"@midwayjs/command-core","version":"0.1.7","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"deepmerge":"^4.2.2"},"devDependencies":{"@types/mocha":"^5.2.5","midway-bin":"1"},"scripts":{"build":"npm run lint && midway-bin build -c","lint":"../../node_modules/.bin/tslint --format prose -c ../../tslint.json src/**/*.ts test/**/*.ts","test":"npm run lint && NODE_ENV=test midway-bin test --ts --full-trace","debug":"npm run lint && NODE_ENV=test midway-bin test --ts --full-trace --inspect-brk=9229","cov":"NODE_ENV=unittest midway-bin cov --ts","clean":"midway-bin clean","autod":"midway-bin autod"},"gitHead":"85f080b68112753bc2a3e7e5698dd49c41163f95","description":"基于插件生命周期 + hook的内核","_id":"@midwayjs/command-core@0.1.7","_nodeVersion":"13.3.0","_npmVersion":"lerna/3.19.0/node@v13.3.0+x64 (darwin)","dist":{"integrity":"sha512-eI8NKXsCa/Zo00LMuzfXricDbdnfTbK0alrj0TO7+tnyQNag7iG7ncBUU9iGMcTW5kjGi5VH25esFSj30gqiRQ==","shasum":"24fb83ece61fdc624160bde7af379af2cac5318f","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-0.1.7.tgz","fileCount":31,"unpackedSize":59308,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeAyWsCRA9TVsSAnZWagAAEqYP/2uEQoBMq8Z6KbgzIegK\ngiYw9rOcTim/eoFSuj3JekuuuH1j9dV2ozMHtupOKVNlR5brY4jatYPeUgAX\ndznkjvGVqPSSNJo3NakKW/Vr0k9S6YcbkrJQiA6BLzUvHPx/8nGrnNEcvAQU\nZc6jNoQJnQ9AJYLVNbIFFu75IDvUtW5hbbjc+0NknWgtyUJMQKbg1bizM3rd\nptnwKBn0VfNeGjmF5sPjb2D7+0cJRYMF2iP4G3xb2Rwwx5SDJ8bigj800bCB\nCjn9XtYOpXbSJ/aKQm38+S5w936CQom/vJLmbMQE2nzBVpVGcnmVri4HAtOG\nM88o37TJIEeZcQKaoTlrHSjchTMseXfLxczyGIzg7VGYj+TjZ+VVIuiEEDiZ\nBbhUdgvNH/5j1FhLj1CLGn00oJlRARe6O4eDPuInK2Jy87A5GQgyKhbBVXdF\n2dDfWqDAq7/fsjBBHOcGapQJKX1if23l/sn3jLFMO1hlA9K7dhmIHTCV/GU3\nGJ5LY5FDgjuUTLpEnpxlvofmd5chJbYyrlZ7kWjtTkcr4E0AiuKR5T8v2kTI\noUu3fGTRVpSac/y9iNW+u8VNAsSy+utkG43crdJyQgGDVhsSjupOdSopzyTN\nKDeibXPISchWjKbPiDk4BrxDIBXA0jzkv8cmzqF3VvqXi6ZGzKmTyM2HFaRk\n8f8A\r\n=/ip4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDAJXHS0khw6sAbi3F4f1Qm2e90DlpHIdfGLAj4siRf9gIhAL84WkJyvion9MYhaSWQgKC1AdSiVxzj0ZL0rtpZbblq"}]},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmUser":{"name":"czy88840616","email":"czy88840616@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_0.1.7_1577264555637_0.1262860287366001"},"_hasShrinkwrap":false},"0.1.8":{"name":"@midwayjs/command-core","version":"0.1.8","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"deepmerge":"^4.2.2"},"devDependencies":{"@types/mocha":"^5.2.5","midway-bin":"1"},"scripts":{"build":"npm run lint && midway-bin build -c","lint":"../../node_modules/.bin/tslint --format prose -c ../../tslint.json src/**/*.ts test/**/*.ts","test":"npm run lint && NODE_ENV=test midway-bin test --ts --full-trace","debug":"npm run lint && NODE_ENV=test midway-bin test --ts --full-trace --inspect-brk=9229","cov":"NODE_ENV=unittest midway-bin cov --ts","clean":"midway-bin clean","autod":"midway-bin autod"},"gitHead":"f74651e1236d174803d270e68042cd6fe4ba3d14","description":"基于插件生命周期 + hook的内核","_id":"@midwayjs/command-core@0.1.8","_nodeVersion":"13.3.0","_npmVersion":"lerna/3.19.0/node@v13.3.0+x64 (darwin)","dist":{"integrity":"sha512-UtTJoGR2InzIRUMQjgqF0Eifl2LzTWRUYctlrE3Eg/gh82BS08H3RAT2mkQaSShsJUJIz3YPAsIi2N3sisF8KQ==","shasum":"d7df905200732dddf46fb3dd9684b2ab61e3f0a3","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-0.1.8.tgz","fileCount":31,"unpackedSize":59466,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeA09XCRA9TVsSAnZWagAAzUEP/2/uD5ZX12E7Ph5wzqCM\nHrOY51kbzOaVwkm4GDq9c2GOCKZNOSz7uzS3Zk+GO3QSN4pIxdhyL1Ab+QN7\nE1DJeyhppj+LV7x5FwEKIuvwqFtLMwG2H6euQPAVRe4rlGG9ByYfm65OBmpk\nt8lk5CQbaFrmF6KOgjfKdIEixs3F3Sb72YPmmIcxDGrZV/eCcQgXVbkadOP0\nTl9kfRCIsv/+N+TqWRo6DRHGFHbcIViGJpHRDmqJCzo5ap9fvwfxuQtwEdPD\nupoNePhtyuunxSAHtyDNz9klQH0mXyASCNBGRGrY/LMogrKA9dwiA9m/LUE1\n0BEZHFu6kpQeHjyMtFg2qsL1uac67u23z02C4EmLNSsSXKj/468Rl7Cl71Ec\n8ByBHoqSC3+Te1fGtmrRDdq7hy7WeNoB82Zc11dy0zPjd8xhjBN2CVkOsmmH\nV30stqHOza0M+VWn5WN6/beHvZEShZfg6Vuza9unBAgJBYWJMPgCdTMhNjxW\npCaVRcP7+nzJAS17RatJJwmc591/NPDluI3iRdBcWAJJGHJhhyEv84qvTYMt\nrr1XIE9pFu8iHok/7jLW4M166b5WJ5HHmXSrNy/eVkh1pDDbjsK2zUqPbtKY\n1GoreZeWIDiW+24Fy2CRxBIrRByx+BNTeIyCaZSP/RgDjFN8u6PfOloLsqJw\nMOTi\r\n=OpCE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGBCbIFu0ET51RsOa2z6PTxXu9ApzNMBlpm3ZKGi7tyiAiEAvyvUF7ewLijpI72L3n18Ew6RJEOAI3cMsYi5jMlZTRs="}]},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmUser":{"name":"czy88840616","email":"czy88840616@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_0.1.8_1577275223061_0.8475544705501012"},"_hasShrinkwrap":false},"0.1.9":{"name":"@midwayjs/command-core","version":"0.1.9","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"deepmerge":"^4.2.2"},"devDependencies":{"@types/mocha":"^5.2.5","midway-bin":"1"},"scripts":{"build":"npm run lint && midway-bin build -c","lint":"../../node_modules/.bin/tslint --format prose -c ../../tslint.json src/**/*.ts test/**/*.ts","test":"npm run lint && NODE_ENV=test midway-bin test --ts --full-trace","debug":"npm run lint && NODE_ENV=test midway-bin test --ts --full-trace --inspect-brk=9229","cov":"NODE_ENV=unittest midway-bin cov --ts","clean":"midway-bin clean","autod":"midway-bin autod"},"gitHead":"7c06e4b0018d10524a16fea12c7744f2fd868714","description":"基于插件生命周期 + hook的内核","_id":"@midwayjs/command-core@0.1.9","_nodeVersion":"13.3.0","_npmVersion":"lerna/3.19.0/node@v13.3.0+x64 (darwin)","dist":{"integrity":"sha512-AdU+bXz4/zaNJ7AOj6hqjVLP3/QxPt0tVmnvgnhZWf1eyGpx1jHnoFj3+cv8FqgvllPr5Vz5qltd15b8g8F+Ag==","shasum":"0d5a43e471078841597a833081f0c9709b586100","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-0.1.9.tgz","fileCount":31,"unpackedSize":59624,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeBdb7CRA9TVsSAnZWagAAcw8P/2Udh5ByxgkISfDd/Lbb\nF7snyj/ooBtL8TlnGVHC04CB5qjs5HTWjN2ej1LIvJgDqTKbq8JjdvU8KXIe\ncwUvcUiheiNiZVnKkOvB+/k1/+mDfCTZ+mxXdDkP1i8CesG0MWDLBDi3a8hm\npz0Bbnij53lX1Tmko9dhnuQTHSNdVDNQlWO7qDYwCKx9TLSbW7aD+CthVVMm\n1Op0asYq8Li+Ue5MPU8JYVYeVyL9ATUMmIWDD6JeUDz3ECxD6o/VwCRcS4G7\nXCDiIb+30bFojPwF49tBa5AOR7j67CN61vLTHial6RAW6FZrhobOZiNNcim1\nMXz+edEnMHhyd99gnrh+Q0uWtQz1V3gKgZHNpIAZR0Jk7hTyvekUeBCtsOuH\n6d4sGi3bRJicL0kuKuX/hsMcVpWgrEvWi1hOQXAVMtKyVtmJ7FyuWu/mTr4t\n3sjdQ0sRXtEJ4E8Evs9Kk5yOCcCqfMA05YmRz9vA0A7Oi6OBx7A8IJkMT3uh\nHOromsRAILYYNER5gXbAYPJ5c9RgdcdPi3e60zIbTtoEgIUMqi1l2BnXM9Dn\nDeXz1pqLqRyRsT6ODHeLGkNkwa9ZFB2QE5alFs6kmQ7qhXBVUJ3oxDEy1tf8\nWMYkmB01llI3jsrNqhdZIxf/qqwViHDwYyQfv5WjujvzU9Z3wWit0tl5tq9g\nVPl2\r\n=2y2k\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHyojGwdP19Fv0YMXKwAEQw+mKLDPwdU0LcN8X7941h7AiEAjL7dzC6nXk15yE7Jo6RMg8mQKqfRn4dfjp0MFIcGOao="}]},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmUser":{"name":"czy88840616","email":"czy88840616@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_0.1.9_1577441019463_0.049090973746271915"},"_hasShrinkwrap":false},"0.1.10":{"name":"@midwayjs/command-core","version":"0.1.10","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"deepmerge":"^4.2.2"},"devDependencies":{"@types/mocha":"^5.2.5","midway-bin":"1"},"scripts":{"build":"npm run lint && midway-bin build -c","lint":"../../node_modules/.bin/tslint --format prose -c ../../tslint.json src/**/*.ts test/**/*.ts","test":"npm run lint && NODE_ENV=test midway-bin test --ts --full-trace","debug":"npm run lint && NODE_ENV=test midway-bin test --ts --full-trace --inspect-brk=9229","cov":"NODE_ENV=unittest midway-bin cov --ts","clean":"midway-bin clean","autod":"midway-bin autod"},"gitHead":"d8c8c6a7dc9448658711bdd820bfbb859cfee2ea","description":"基于插件生命周期 + hook的内核","_id":"@midwayjs/command-core@0.1.10","_nodeVersion":"13.3.0","_npmVersion":"lerna/3.19.0/node@v13.3.0+x64 (darwin)","dist":{"integrity":"sha512-9KSFSmKIkJ3PmNV5JFIQB2iX62voxtO/cZGyZMFfimJ7bz+UJFGVnpuqe0hKsQAU7KJjmbavFbMOc/RmrVvsag==","shasum":"d5e914cd758f079f5a171e557c227be9ecd552c9","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-0.1.10.tgz","fileCount":31,"unpackedSize":59785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeBg+bCRA9TVsSAnZWagAA7XIP/1x3N9JR5wTG2etnT2dZ\nGIUuHRcv8CeLm72cRCrEskYTfvf5+rAUR9axQrPbecVcxPuo5HDI+Fjg8Oiq\n52ynOh+gY7q74+74gTJ/+Gi3mO7ViDeAiSEsK/nfdySQ+FDIwpqaxP/8cMlU\nk/2SO+/I/zDissvN5GK/wgZlBaL/kCy5UDjeaCADMBxSR/U9xOFmEe/h5GFu\noQr0qqGmbMs72MFIHyvHnV/rLavAMUrzETYNvtwK4Tg+vMKF091LyhNd7M2T\n//5A3RgVhJtOwaor83rlugqewUOYL+No7iNiwUXvTs0CBtQZ9oBpCcatWFRR\nYNg2pDUg4tVGxRQ7L54Rty0KkheTU97i0J72hKmcJ7WBueZjUdY5TK2AqZ7e\niMIedw4E7oqY3wJopaLwK8cmkChZ47GPr6YeqzKyAemvoeVEVkBGc8fvx8Jm\nNNqgkbfHiHnr9cWZOjXyQlHZE0XeEDXvDcT/kXO+A6ZoJi7sACjViaMz/9Wg\nQ2ZX0eayzbyFbkDKkUIR44Q/4bRaw8o16g1Gr9Pq2rnM32iJOEiu7WxIDCSb\nk96fSaWlLgtLEv2YIoppcVhBgxi0Y7tDmk+5DfrTaHQv7lqvzGIS3okRldA+\nmHQDeO/+RNUFhxC8mu/3OHCHqQQv3IXoAzvnz7VXXjibiiEdkpjvj2jk2g98\n3PkK\r\n=BEll\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDmhKnfzuvDalPb36ccVBv5lDiP9qredcZkimi0k36vJwIgYo0zMCV5hi46Nqcu+GaBr671A7fYPEMet4U4D3kqZvc="}]},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmUser":{"name":"czy88840616","email":"czy88840616@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_0.1.10_1577455515458_0.8492957328201312"},"_hasShrinkwrap":false},"0.1.11":{"name":"@midwayjs/command-core","version":"0.1.11","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"deepmerge":"^4.2.2"},"devDependencies":{"@types/mocha":"^5.2.5","midway-bin":"1"},"scripts":{"build":"npm run lint && midway-bin build -c","lint":"../../node_modules/.bin/tslint --format prose -c ../../tslint.json src/**/*.ts test/**/*.ts","test":"npm run lint && NODE_ENV=test midway-bin test --ts --full-trace","debug":"npm run lint && NODE_ENV=test midway-bin test --ts --full-trace --inspect-brk=9229","cov":"NODE_ENV=unittest midway-bin cov --ts","clean":"midway-bin clean","autod":"midway-bin autod"},"gitHead":"a1f3d862baba40c8d5a1ccba32ade02ee6485981","description":"基于插件生命周期 + hook的内核","_id":"@midwayjs/command-core@0.1.11","_nodeVersion":"13.3.0","_npmVersion":"lerna/3.19.0/node@v13.3.0+x64 (darwin)","dist":{"integrity":"sha512-otYTJCzJnPlBMSVfdULwxuy0fNqX4Jv2XgmJZDzAT1A0KrAM7jA6wnpEIK6H+sHkRkDZItqrdHv3RmUo7cbPpg==","shasum":"fc7bacba15cb91e1be5435a8ad018804f6d57d3c","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-0.1.11.tgz","fileCount":31,"unpackedSize":59946,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeCZ+GCRA9TVsSAnZWagAA+9QQAI1+vc9ZUvLWr0zpUffv\ntQVcf6Q8oU3ISlMUSmPlDA8Cvv4wVpQrc7TOf5n4V5qEC+yIuJINIKO1KMbB\nn2HevUpeBc+8X0o7NcZnw38qmc+x5iYVsz3AoBUDzQFoF+PbqYa91JzGkwzi\nqT/ModNDQwgNFmXIMlPKRsqek78LtRkjTX2qK4QupN3oMpFCVXK4Xf25dcFi\n5IFowi8UieEYLxxwtLkW7puVbLw7L/hgamEhd2JoUhNel0T/cMnYIg5adkIs\n9DFwQJQzLVjReEPCcxgbZcXeI29fEewJ2430IyZ8nV3Dem4HOXthzpDICGPq\nOIxTn39zRX6N5KIF86cs24mlP+45KgCb7Kv3/WOwk5q/VkDx2FNkYapq3GVp\n8jwjiNbynxFr/7vSXmvST7uHumxghdeZYPKvt9P1shrBEymQmL1bqk4lMi30\nmk2Fa9N8MPHT2NVwEsA+V3csLObg/zcoGsz16uraQ54W+yx4pXqAr4Hvo9PT\nHMCiOaUCj7h5Kju70EOaJEQwQocGc9Tk/tjjBM+QCEtIN3mJB1qHxFnrOUAw\nsbjUW6YGHkSQPT5wq8ZStdlAxlKJP4NQW8zdAJNxGRdtxu/uBBdfDW46YqfI\nGHYKd3Mrmlr1EfCX9QyPwgx/UVbOOQsyV7RrXZPN534A1lUKC19GSNekFzkf\njbjF\r\n=eoam\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGvgAm56c9A5U3/FHMZhDcSf35NUMpwhi1XOtKoG7Z8wAiAQP+TtkDESX7i5xGf10DyRTXCQGq4W75PUbC0g9h/C3Q=="}]},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmUser":{"name":"czy88840616","email":"czy88840616@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_0.1.11_1577688965615_0.0912674232330406"},"_hasShrinkwrap":false},"0.1.12":{"name":"@midwayjs/command-core","version":"0.1.12","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"deepmerge":"^4.2.2"},"devDependencies":{"@types/mocha":"^5.2.5","midway-bin":"1"},"scripts":{"build":"npm run lint && midway-bin build -c","lint":"../../node_modules/.bin/tslint --format prose -c ../../tslint.json src/**/*.ts test/**/*.ts","test":"npm run lint && NODE_ENV=test midway-bin test --ts --full-trace","debug":"npm run lint && NODE_ENV=test midway-bin test --ts --full-trace --inspect-brk=9229","cov":"NODE_ENV=unittest midway-bin cov --ts","clean":"midway-bin clean","autod":"midway-bin autod"},"gitHead":"b32136104d2c1e56a44e9a8af92880752df980f1","description":"基于插件生命周期 + hook的内核","_id":"@midwayjs/command-core@0.1.12","_nodeVersion":"13.3.0","_npmVersion":"lerna/3.19.0/node@v13.3.0+x64 (darwin)","dist":{"integrity":"sha512-xGI5PrGBW3H/u9IwXRoOdcLgrf1z1rBiWDyHiGvM3qK5eoWz+JTla0ILh/5ezB3PWPH/2GfST6pGZ89wVmOYtw==","shasum":"5c2383faf5fef9afad6e81dbc810a89d1c4d6eb6","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-0.1.12.tgz","fileCount":31,"unpackedSize":61406,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeDFfICRA9TVsSAnZWagAAMXoP/Au/V69/APHCcqfdHM4D\ngKIp5N4flhkXm0rRoqf7hMJwmg1+0h7XDuzXsEPSgz21ORfG5noC9C0acdGU\nHUu6JtEeFsWeKbIvZDIpUZyEtgP5UousUy4DxWAiDO5iss2MBnj5NXdVe+L+\n5BNy8UCzqDlOXw7I90GT9XSrRhAOtWsSVnJeoeNqJY+QMcM4r8Wde8ZvJBiu\naUiE2N3tXV8SrRLESmNsbOpARhzp/0B9tESrfqEqZoim09gt22vLtVPnMQpM\nweJBU8F5EECaE2DSCNSSIi4Pk07lJjaSZvdzSHOmxXI6PAiZVhwnwnW4mtwX\nFpmwDyAJNiFSlwLKLhozQvAYR6/69db5AwGYHHcVghx5i8jT+ktP+ck2PQTf\nSn7uTikuOD2avTnZkVWH4iIs1qKLSZPcZBamZYpjq7QejvuPTELk1PSFSbIJ\noZbQxOM/ntid+a5AamUDBGGo0PFhNm7wM7iol6mOjccs00aAY8y3PcS6oq0y\nH3Dv/82SNuy3+/iagK5456iDCE7tNdN3Iv5izxpJkNGGavTxFTslO3lNl0zz\nkmN8a4Z8+3DLDQqHwo0cppIPtEnpOvnasWjK5ZjPfagN0+1ePKx7X/Rmf+GU\n9z3toZ+2TOJ8Gg28/OkWHxHMoNQCDlFB1KExrHl+Dkc9YBrOEDVc5ctmktBT\nPuI6\r\n=ntB4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDnwHsf3l7HVL6R9hnemWh/M07jvVjjbiyJTyr+bpAmbAIhAPzNkGqqkJpP4bahRZKP/KBYJtjQjkEVd5mj3RzE5lV6"}]},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmUser":{"name":"czy88840616","email":"czy88840616@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_0.1.12_1577867208112_0.3496154798994442"},"_hasShrinkwrap":false},"1.0.0":{"name":"@midwayjs/command-core","version":"1.0.0","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^9.0.1","typescript":"^4"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"license":"MIT","gitHead":"58706de896b8e3b50605bb29f40ff29abe43924d","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.0.0","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-uzyqo5KBThtgh8TwR5aLxQgFPCk98L22FRO+Ir+JF/kSEkmyvU2yzrOgWmfwKJjJSQjLFD12gHWLCaKrm3KsCA==","shasum":"7bb62d59bb7fc9e35231ebd8cd338ae9f4ae1d8a","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.0.0.tgz","fileCount":63,"unpackedSize":165806,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYt11CRA9TVsSAnZWagAAgnUP/2i3cfy9aKnAYfrznvSL\nzlv4/mOi9Yf1TYUyZpqhhHzKGRZX4UjZ8F+ccAL01Y/xbXf+kHXz4wJe+96K\nStMvaPH81MD3aqRxtVObSxx60el+3NS+gUBtd3vA37bdydRUKhQFZGEG6EkC\nk/wB/0YK8ebdsIzykxk2aaoBW8L++PnJQ7fXyzMJaW9latMilAtdROS/Src+\n8pj5FUTBNm1xXbixplBKTqP8S+P6v4WwcvW0aHlP+UhmNyCyZa+ue6bw/NCa\nHLWRCU/S3uyuG17lRuiV1a3KF52tUwfNXPqrdWwuVJokgbbIVOqePXLoIAHy\n5AOiKBSYGxM16QdgYL1vz+EJZIxbRubtF9dH4ULv1vr2Avxf4vM92ccjJexv\ntaHaSirEbpbG8xgAYw2gy1Hs4y5pDSWvphuarAqHebwpmlD7BTiuopDVTuYj\nAdKWdubdoWO4zibjqQqhlzaIVJZQ8Jb7bUhtQ12qd6ob/5t9U3PF7xydHO6J\nqUAK4OauANWgESBRPA0kpJAxV/5RBCm3l9gDtpp+H/jWQB14X0lPKnAmnVdX\nmAMDNoOvQtnSRbn1S8QYcyNk2kwJ5ngEVN+8ugSzum4Ib65XbUbg72I0zn+/\nL3iyrfNooEqyPd/2SUuF8hQuBPWZuLBsI5XuXcb9IKP9BLgJnir/NqC5FBx8\nz+tL\r\n=XkdI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB6JbWzmYZsFs7AMOH6oyefqa6LYCcWaTCVRL+qsrvp4AiEAz6OOS2aBPmTxwe8BXE3OGVd6NMOislYtprjOrPolCeM="}]},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.0.0_1600314740817_0.8168095473582393"},"_hasShrinkwrap":false},"1.0.1":{"name":"@midwayjs/command-core","version":"1.0.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^9.0.1","typescript":"^4"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"7aec6c2d5ba2b4c1b5f66145432823a5b804bbaa","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.0.1","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-jJZL3pQpuEPufNsLyt5Gx4HHGGv2bxySbdP4Yv24QFRcinAUbwZvWvFIxtAxYiUJUvS9nvOP5tnSZva2JyWPUQ==","shasum":"6b3fdb8ac968eadc0d187edcf55aacf7de192364","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.0.1.tgz","fileCount":63,"unpackedSize":166067,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYv6nCRA9TVsSAnZWagAAp2sP/1l7GK+stGANBwygGwNK\nkw2/UpRBaWynZVQ1samekXvD0z9SgqGzcMENC52vhFbS7+F9+h4zzENyDOnX\nGDsuj2eLtKJxZFNfFiHx2P4nQpCfTKfAKuq1ONzJbTPOWaYHYZdFAKJs+8qo\nIBm008a2JOtLKVqAC9ES52Y+gZWlcWTpchjpF/1f+eX1D3kpxLdO4DM481vV\nyodQ1NGB73/0LUnmRobtujfwhwFB3pLmw3LmDD/6tkDfnKjJ06QDKsEOQOmx\n+THLbo0ryzp8SJPAzranwkZ1PpHxmeP9gYBVqn8HHVfLmbKW+F4pvBJLvQZA\nu9WbNJnYiJdpDORGa4NVMRernBbW3iJhWKvtkQGiXmcZNE2Et6VF+arTFDxc\nQ75F0l9H3zoSyXhawSHihzX1kCS22gnhAqgIhpRHS2aTsNcKQ6zDNOth2wDR\nRV6A25WNPl71vW8gW1K8jKH7b1NfIUuMcCa5V0H0W1HST1Epr6L60QZ1MGsm\nSBp0NuTogJ9XtFEi/RYlKkLBiTulRpzouG+7SgtIl+VjZc9th/DKHO266Fua\nY3rYSLwSkgRE30ORxWAHTFibg+rS/Pra61DiZmRqe4FANOyqyHONGCjtsj2q\npItrX1yC94zxj/nxI0q6xMSI+Nc2W39xIgEOqPPrZuDoBfXN5s4B/AnQD0ih\n+6t9\r\n=LBZp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCdhC2uYlJEMiZz8RXSPN8DY7kPT1re3asv+5RcFVAKYgIhAK8JI7fFpOeJx/8wV2I+NULJ0/n1N7J+ssse5RZk6K8W"}]},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.0.1_1600323238672_0.26125211695270645"},"_hasShrinkwrap":false},"1.0.3":{"name":"@midwayjs/command-core","version":"1.0.3","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^9.0.1","typescript":"^4"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"5da7b2a4decf58990d5577ddb0c006962acea2bf","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.0.3","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-YzUX4eLeoeSpHXkwJE0wi3Xp2xYN61KC1seiwFk+DhbtYZQg4oRGMHEDU4nzYx1hwV60DDIzo7FCWHUQKPIE6A==","shasum":"09b2d2661503288f45c7f542dc8b832516dd726f","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.0.3.tgz","fileCount":63,"unpackedSize":166357,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfZxmOCRA9TVsSAnZWagAAO4gP/RaS8ORHFHPcOSv+20s/\nf9WzStv5xqXZdP6di3qRSy7U/v3GVubE9QyKXZOaA9wFghEZMbaga8a5cqdT\nuxVI0wcRUKMHYLYA1HV9bg0a70Y2gOSxOZZj6t2Dpy+I7TgQujg+ZEohGJHF\nEziJzjCZC8g8Ygz8H+pkWgeTvaXlWDm4chgxudU+ci827X8I+e7ZaqYSsreo\nKv2ja+XgIM++13Hs8SrdBh+wbVsAFIwOEmkbQbQh6Rnsaw2ECAFwcGwFvXI3\n/iUG2nvq2b0Uo44/ICq0cgbFvKs9ZccejYQ2aSs2uFZgNs6/k+qZvxLhBgyA\n4M4iL3m5bCA1uYISN99rcAvdPkJZJxAZsURs9PQe+HhzSlv5fzLFcUmc8von\nXCp62smPIvCQH2J9Y5LPu66m6onY0g1pawiDWfW4wLVNAB6BxRCvtL8tgbEL\nmUEc0hXmQxtrgKS17XmnSG5MYTUyZiQxCxqX74AXgosvkeJh2ddN3J5o+AB0\nkdTANKRKYnFL2+vG8jGw9tKWZpSBKZ0zGfBKFGteVawNIGSTCuYjAe/onGeV\n+4qBZIzxThAGbEbaiYrgTVbw9ngF98DFNi11cmZnFt3w63PDM2v62Xec8jb/\nuRY6LfhfkZfYaQ3jadj/m88P0IKKicEbLwHAWcCpX1cf/JVs6oyN2E1X+2Ho\nn2GO\r\n=Ydyy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCp1XTmp+RZS4kFwhspjg2WksO2LJE8nN373ZA2DJtxsAIgavN1zs/AjCP/WR4MVQj209v/4F021POlLERhFP1gMk0="}]},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.0.3_1600592270238_0.5584420100026875"},"_hasShrinkwrap":false},"1.0.4":{"name":"@midwayjs/command-core","version":"1.0.4","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^9.0.1","typescript":"^4"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"1234a63a3706e759c9f6727224930f6f29b257de","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.0.4","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-6tGs4FsCTEJziAErCoZsocXSdm0DaCNl9TmSz3YVLwI3L60ml2dfXdR8FPEP2nm8kni50eaG/3hh0XXpaeokjw==","shasum":"bbde956d9453fc5493cfda626b16b5620868b695","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.0.4.tgz","fileCount":63,"unpackedSize":166577,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfZ2ERCRA9TVsSAnZWagAAvK0QAIVISSwyLrTQiiXIVylG\n0Fo1W6JxJ6UBoEvXlSwWKfnG51NkejZwS+8Ksp4SA8r+A9P+WNQnZL0aM1Wp\n6bc58GW1mSqQ9m0efVWezn10Zn50LsouVfMqvu3PhfGXa6cG7X52R7Ast+6G\nkZYaOS1Vnlk3mFmz0cOs/gfVMi2vlNNO4fIuKF+Z1IjDaE1wlj0/AlTWXNr0\nsqPgbCzqRi+UDgDrJaXaBBSRyKvfi4aLatsb8KJIum+cTk4B1eSpPYHGfvGr\nTm+xXwLSM4o1c4rq3ngI7esUBuFVfWDmMwweVndlFtq5NX023dqvTatI793o\nH2fP9ZQlYIGGBBx8HUd30ap/Zw5fMb6I3au9x/yACEx1yojqGJYS3dGm5C7O\nArKlS8QWHxT+BJ9OWRTuSLkKW4mA+MBW8Coib5uOxOnBf4CKLk0hKQbuDbQT\nFEGwlcGQe2B3c+bAAqIDmYJ0DiqnjPFLuGrZJH3C3rsohXj7MyaWjuinAb7X\nBreieOOejKz4U/qYnoViiM+4OER0uceRjWcddssLCOPVgMQGAn/Km6dlilKO\nrd0wZMsgA/hR9QjioluhZPvBWComTFa4F69KTK9QXdNXQD2kqB0W3YHtGP62\nLLnGjz9ryPcoIOkKgHDxBnH+AgXnGn1rwP8Af+es1/55+hkMc98l0MZN0a1c\nsGTV\r\n=iqdX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD2lEX0IPrYc5dKPqWYIoYMeP8nsBmyTcW5C5/ZDL8C0QIhAKl/uyFtbaPS2DFOVnhAEeYiDJXOk6KAPtE2NS2KibKO"}]},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.0.4_1600610577376_0.343613388813758"},"_hasShrinkwrap":false},"1.2.15":{"name":"@midwayjs/command-core","version":"1.2.15","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"294747f079ba35e9c220cade3bf1bf830ac0219d","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.15","_nodeVersion":"14.5.0","_npmVersion":"lerna/3.22.1/node@v14.5.0+x64 (darwin)","dist":{"integrity":"sha512-1umALfJj4zgmsv897Pfl5NQ8gkASjqNaUrwsjOi88uBgAmnQiRUbM54QfChDo2HAlZcx5S71IV8X8Yi2x3rhyQ==","shasum":"ee7250b87e4d9b882f0fb0fd4fc5b977747e7f4f","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.15.tgz","fileCount":59,"unpackedSize":173672,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaagFCRA9TVsSAnZWagAAOxoQAJpxLZffZxWYJiaA0QrO\noFS6gdNIs12HRLR8LAmESpHWp2OBoskyxxSZNMCudOpPrRvvI1R8OSacUUP1\nbAmS/4ri8PJ+4ARC9pK0M/pRQfEUWL/Txfq5ytF07ThVSsuIVUA9RyZL+5tb\nWI8Cv1+aTqx1nP9Q3MTpcwsFphDU7VNTkG3uaKlZvUbgGtGCUGTKg2fWnPuA\n/AyxJzDgMgCTu95O8aB9g4xlaevfvvtl/BhREerLBpgnjC3XC/Cb6y9wyBdo\nsXHzXnEYL5JWDhAEABZ3tEGOC17QfHFDKVfya5ychEetQzRST2sgcfkUDZwB\nD+Xr6zJHGLtCQPWD7mDQJYRWX5MDbvv26DRs2XG5P/tRIiHvt2vSde0GsyLq\n/Mq32l18T6LrsZNVfq7joTVJXG/dxGNa2ZCja/5iqXNn61grB6X5AmdUItQF\nvMqo4M4wf2GK7m8dVGnG5dscG7RWI9k+wb1BxxQDalOlPMT+RSnQ0emQjJRR\nPgkN+bn/qD1+ZTHV0nvn42ikVbvYHMkRUoIj/TTXmnRfIA6UbaO3Y/RklSas\nLk6GUOmXhSyncBq3aCCTpFpCrypfqxFAhVTcekqtk5+bjVLaAV6Wq1e9otOf\nEWc88TAQxic8sLuVq3PxXsqrHcimz+6ZH8cE9mKBM6Gllbf62YPUmYRYZ7I+\nZsOx\r\n=Wc1X\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHrWwfUyi1jL1UyLm83pdYerLtBt59d6yLe/zHYGCiI2AiEAnLlt5viEolB1TPXhbMiwfGODVtwcrAP378cvO5LFL+U="}]},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmUser":{"name":"czy88840616","email":"czy88840616@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.15_1600759812861_0.6822445709087526"},"_hasShrinkwrap":false},"1.2.16":{"name":"@midwayjs/command-core","version":"1.2.16","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"1057cd46c843e5f99cbf2245256755737875c515","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.16","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-7Kvf1TT4ax34cyYHh5bEjN43MuVFVKGNf4YTEeEn4f+rSA/dTRHEhC4btApBYKHiRIezw09eg1M9E8JvRzPL+Q==","shasum":"133ae174104132ec5dff6657a0b8feb82112ebc8","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.16.tgz","fileCount":63,"unpackedSize":179519,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfac/vCRA9TVsSAnZWagAAFRkP/0i7Y9On9bVBw6cQSWqx\nMea80LSW0H4PjUyLU8MIopnw9YipquwTVUGoUcEHQd3A9uHP46cc3zfWUZA8\n8QigbNrcJn6Af5/w15uixdEhCF76Zm4Jd+2b7Lov14M48eL9ce0CjhnuNw1Y\nzeO9/r/+Tj0a+t78rCdd2j3IjaaJqkDr1BElve3+ONGhXDmjp3LsiOhdFVIQ\nEfBlEDBYpPYwUxN5q0fJgLaiTKvvvuUEqwgAROdHRwRkebjVfDshKBDorWVk\nI45wR9AeKdt9xCN+KXqThaemF42g/67raVqFjwybvEO6YMFQXbXOqak3A4Bu\nrI7vNgj2txQAm3/Of88+w3igUAM5o+F5L/Qvr/NxcPzsqPg0Gr/ZPi4HU+Wv\nQsYRr+FpDev8QWF3fx3dNfDRhMrNSQLj6Td5bCP4kiDzP3uKDmK602LL/2yS\nklFuCmSQX2oUNuJySa89Jh+scY2LPJ8nmMHx4P2FlUScJUOjoSfuazjlXbaO\nLSyGZAHp+C3iRmlo6kTtTOo0/lRPeF0jxxpEkSCjc/2OZwxpVO0FThiNcs2g\ntuoiPHQAr+o3ub+QHBKZdmPWt51aDF4CZJ3R4z7IIyIG1mEfauzTvATjnQ2D\nG9mtVr5ybRr8u/T7IxNlQJJyNraZtniPxTTwy/em28x83ztcdwWNbCa5X7+P\nzmT9\r\n=NZOY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAZeSP3zRguHCBun2SPR5zzHzBgsaQy8SKVmblCzwHYYAiEAv/cvE4GWybWAJK1mkEcNHuffnzYsYl5W5DbfDeY94ZA="}]},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.16_1600770031402_0.9351305622431032"},"_hasShrinkwrap":false},"1.2.17":{"name":"@midwayjs/command-core","version":"1.2.17","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"d00f188de77a26a41b8dde7fea3bdede7a464f39","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.17","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-+Df3bL2Kdl3WlkBIjlCBd97hnSDOLQoyC/Khg/y3TyV/HDcxW+DMFopC9AR63ZCQsV72qFU6XEsRNC/mBofJbA==","shasum":"5130c64208ac28368a9ac039738dc5d6e5536020","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.17.tgz","fileCount":63,"unpackedSize":179660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfauARCRA9TVsSAnZWagAAB5gQAI2k/1G8vanQOxFva286\nC59Asf3LV2OZLGeKiCUJ5lGLHqbi+F1WCgzwP3RlwED2vhYCQQ3sZPK8hgUz\n4UqLNXlfGbxI8KbQtVgoKu08nw/KfOLHURpBt2aYsFYZQU7n0pDFq56bOuNI\nNbLXwj/O9wycUinSyDWd58GKgk/2pfSoMYXskn5ZJlxbqQPhnorS1Z8pgZ0O\nD75ytzX7N218IwRa9r1ER9QiV79D57PFfsF9qDHyxwJcYbl/68ml9qx89T1W\n6n2UP+nXzy7rcUroevpSBM6MWqVw7Zh4MDlceej4wA1XeXr7T+ylRAGVO1E7\n6yKZbGXCFxGvvrNpTNh83YykRfNYEw5+zRHKOOVOhWUvskv/WIMDyyo5xtAp\nHoaOcOtNZK0HJ6ABj/y13V6ej47UqEBBxV/s/LTHQNoEPFqo8JGtBIleSafh\nKWITaRlA7XjYii+sYUsNgrryPmZ7J9zcnqWifMODW3kuaqOhwUsVciFlkA4u\nENLqzlY3tT4B/F2jWcW43J30mSg15nZ3gaO8Ml0/jCMyllgxgOw9HjnyNPwd\nAUjH1t79bJhLgX9RRjzTuVRhtoIf6KFQB268mxm2G21uLP12e4J++EIxrI00\nk1HVb8Hw8H0zH5dqnoTzDAvNyAj/xr3Tlwpj7LkdX55FlQv9JN3JzdxnWw9a\n9cHn\r\n=VDU7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCfb2Zhd1XhLTSFuaqS+1Kluo9tKWSNx7kUxcO3i9du4QIhAMAQv9TuR+DrusDkfCGQWy5v9agIBoamsoJRjWAR81Ee"}]},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.17_1600839697136_0.5753131711533597"},"_hasShrinkwrap":false},"1.2.18":{"name":"@midwayjs/command-core","version":"1.2.18","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"218717cbf2056f771108b819d74bd9a4a6ce9d99","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.18","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-qshHNWeuBiSdfhufS2EnGMBVniQ3V9OcMFWt5ycboqe9EL2SRNrZi/dBwVjzRXVTvq52b21cqD764tjS6j1+ag==","shasum":"a9dfe50561a9f3d368caef7715fed10a4ead9fae","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.18.tgz","fileCount":63,"unpackedSize":180431,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfaxu0CRA9TVsSAnZWagAADpEP/A2P36McRvZ9gkomtenF\n5HhZhnNTJiR53eNF4nCHr8scBOzmjLdto6jW9yQOtLIOHow07woooWFZLV3h\nbujVP5Z1nsn27s4DV3HBhq4zZINcyzy8os1oHzLO2Pa/GrePL07QJkgwhW2k\n+aTBqLt6LUmqwtR3KsjK57PMa9dg4S9UqFrA7lz9SBpX0rYSZSjChovA5SpX\njwvvWaWWvryWs52Ighc6YPPtCagZblDKx1hqDuPqdmzHh6DJ8oHApSzf/kDK\nwueZottN8JU/DiSMmzLJjJlv9L8yWcH8qcCXdo6owMQGMyjY+Jbpx2h2EFIK\n/X9lzUtKx4TvJDIaubeMFpirwno6Y8ZmfURDsOU0wnhtfb5X56pF5CIHPEBI\nWFab8Gs+utbZFAeRZU3VElaSVABwwGWEaVP3fkNObcIbmNyK9AxD/4HHnxEY\n84ytSz6OxC2GyCJCpTr96N+tItirwWOnvwVQEYeRzOBoCjxUdf1IdrrekGHX\n18VjOuKBIbxb1CZrh5goTu9XZh2P2nXHJdVK0IWXIQKcRFMdtVH44a3krdtp\nutGlGsC9u4boLGDGlnanT2ZDcfcvS0hNyAM4mRQHTtd2FaGALzbmLi0MZB6k\nuJRgdX8zUDiSCkLsqMLDno+6eJhRyf59O8WDgPgCeYuhAciiJlanezjSmb5/\nn/A+\r\n=lmIZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCcs/tMHpkVocPD56DsIkjpncsuzIOoOvgRQOz5bj50AgIgCGc6Z+hshmbOzn+SP9lCAE23FEgo6kr9/dV9IgBYI7c="}]},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.18_1600854963292_0.5316053775870848"},"_hasShrinkwrap":false},"1.2.20-beta.1":{"name":"@midwayjs/command-core","version":"1.2.20-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"fc62704521b47d151f1833f63fa5df5aa9303803","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.20-beta.1","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-ESwC/Q5wFWyIN1bHVoZS4/tyfrvIMpNNJa7YIxFp4qbRqoLeUHYmzYqF0TyljWPUT24JBg1RLJAnoVxiVQhMXg==","shasum":"cf8423d174bf90ed9a8c7a8dd442135d40f9e397","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.20-beta.1.tgz","fileCount":63,"unpackedSize":180863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjQq2CRA9TVsSAnZWagAAZGMP/1FYrVib3wMxK51wwYB+\n3FMvY7r0dgpnoIcXXwcXFxkdERb4ngZrvQ9Bacx7w9u6mYnTVhMVXWviG5pJ\nNVPLEyJbQCvHnaEPxxFpb7lQAJZPA3/TxOXjg6q7uAhuLXsfunBRH94bMB//\nJ5EUajXMZLX2cfu56Ntgp2YQmjF/QNPJaSDPvIPnN29/7gwfJV16NP1oBCzq\ncuE0eDYSKsauhw3DNspIFgveMYy10qM2sqZQDZd6yG4gsvZLwFIwtHuL6T5n\nn3/yOVNPYvfsgQjW4LNB+Bpwg5626eayroT64EWNTTRZOP6v+Rpr5VzrKxhS\nWuqthSCUwEdmAIJb6FcVUO+NysHdJ192ikPTO0cQhFDlZG+TBrikZ92ULoJv\nmhn2O+ybWQssN9+RhdFkXgYwjdRw546ct6E3IwEPtrOkurHDS5Wq74rQ+k3L\n79L4Kt19lhxPja9QFWLpr+uJh0kgcDLbcRjCYztElhH5WLvrQqpZ+vRJlehM\nFzm6LFYbuDQpoofDogQsrmBRuIwZ5ygWq6AQiKa9KuKXJuUTp6W9Ggsao4DI\nPdsRWaQs5WoYMjRWRGPM0V+sspkB12eHyZ6p+vlVdm6CV6RwuYjrYgVXRt9W\n0gQVZ0pFv8dtWCLwiambxRXvo1Xs8zaabbcPvzgFWGoWOtg8jNAJsZKYXKKg\nn4qF\r\n=hyRb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDR0QuhKCwCvf6sNBGZ2QSR1D28rDHlIwYPQxdnFn1kzAIgYpkHBk+sNnlWXDYPEzV17S1s2KRWqKYNJk0BSNV7S2U="}]},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.20-beta.1_1603078838052_0.1255496155640785"},"_hasShrinkwrap":false},"1.2.20-beta.2":{"name":"@midwayjs/command-core","version":"1.2.20-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"00b30b03fbd2516c975572e2477c3f82405b1f3d","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.20-beta.2","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-3SLk7EcdrSKhiFh0H+bxMdH/QUZV3L1AKSnlVcv1IH/52Ckm4LBAh2COUywwuioMIoAsuo9vTPufKtRNiVWgDA==","shasum":"d881b8b16f0d65b765546f6b2f8ab319156319c2","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.20-beta.2.tgz","fileCount":63,"unpackedSize":181037,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjTlbCRA9TVsSAnZWagAACz0P/1MOHbeWE+nFZdeGa3qU\nqKAIkml4oNy1pn0gJm6+OHL6XypPo6Yh5XfBrvvf/V4ectcfcYPdyP/b7vDG\nVwao79RJPiRJ56HunDqZwRMeHVF3rabbzmFYUKeR6JosHqrdbn6hOs3OAJLv\n5Mdus5x2zAxSeavY2rjZCz0WvS17r92WnflrhvKXCYUxRtDozVmMnfDQqAzB\n1un6rt8okF36dQGh8Lr9YsHklyQrxRAmUQ5HUOWDQaLFh+obJ4Nd3Llnf/PT\n6FsQ86Qx06kUWpxVTdCNhhzESK8Nt5mCnEUJ1pMoiLNs4/QfpO6/n7PEIn2u\nT2hWUI3F5tTvWAyn+1biTB7n8qvwrlsXw9uor9PyBykIQ30Z00TGFwZsUoeQ\nZPpUgTZlJblNOfXfZ1PQBFBxZBW4bsDWj+yARPvf2eOMjuvXXFpxTdVGi8Rw\nc4S28gs98xhOwc5RNIYwk4+384ey9NDXOQ3gxjNeGDRhGrTGhaQreI0L+M89\n8moNjxYQ0pDWHmw1WBkUT30X2lxfIOltECRDWIVUTwtpsq5EuY6hLHe76CFb\neX9FpVmMOjqdPKl1GF6tS4kFxC8sXHicwEX//rGvjDYdDPL+Yg4ygO+oSnLu\ndJUl07yDux2EYxIVHK7qi/+DEupC2+pJGzAo/ZW4DwjPOrEj/110p0zm25xG\n500/\r\n=qJKj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDT1eJ08Tikn4pDCrCvmTFDbwPls5Tmjpr3KZfKr01XawIhAOXE+zjDX+nVy3KDlm3qrKzyZHQOnMj/joT9hTk18w7Q"}]},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.20-beta.2_1603090778777_0.9304017026732487"},"_hasShrinkwrap":false},"1.2.20-beta.3":{"name":"@midwayjs/command-core","version":"1.2.20-beta.3","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"0ed939af1e40ed3473e89a0ecde4dde27655942d","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.20-beta.3","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-eb/fikndMHjuqQKYe0lQ+7lv2lf0DW+J9ilM8h/VOxcoo/ABYQRCz9Wm9ZIDo6/CWU3sAl33ndIFSClGLl5soA==","shasum":"5c33717797145099a67a881d33adc23aac8319e3","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.20-beta.3.tgz","fileCount":63,"unpackedSize":181211,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjUrOCRA9TVsSAnZWagAAjG0QAJ3ffVeLhCord+Xqq2jh\nmjaIRxLVD2lMqBKgBfyH/T1K3kpOEy+jcbdLgwhSBdXvAwNRdSUAWRuoL667\n5kM0kNDx9jC4mZVfR2SLMm3IatSc3d7B3ah9t8/IlYTNohfOtihYEwTjM3lK\nq679ar1YNCW1veEMzUUsorjba+qh6tKa48TOR+2bHLmkcAgpYyXtMaBhsaom\nAskz4EL7ARj1Xr+Kp1KkJcvZyS8OVEg+WBruaCxa2pRVyvAF8F3dK1L1d/Oz\nevpH6gH6CiKPgnXfkMhX4hUvjMvsxwYRscM7gj/Q4lhSGx2Sq5fF4KDtpK3C\nvWnpjxD9GtIhS9ugnOFwAZXildXMeZlbylp9lF71McRK24Nb0UArc2dUPt6C\nZcIeL0JL2L9Bawpps34uXYqd3METPUVRCsCm5KTFducKPlLHaGdmr4n7mznj\nPuAdTdx78tPRSlSW5a2rWoys6akQY0gbDModJ6NY9QzHFRNKorL9bVO7aDm6\nLrbrWsgO/VgNNmxr5tXg89lWLkhaWgbcaUC8kiLeuQXMiF45IBGM/mSBV4X2\nHnDWMxIgYu/VnQxy3ojQ5EHw9Ud2WQnWZNMEzLse3MXpW4c7H3g/h25Le0eC\nDYsTCxRxRs93fiKxxMMGDK9+eVlMLSrp2ZcmgzUbsTOKkJrdzvMr6cWOVYmZ\nP4eK\r\n=m1V2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDA7fdI7yw6Qptkc2ThSx5ZbH3TZbFWcc3GzvEfl4IX3AiEAoonDirQIJX8JRMvURMefamk1fNSowG3kr2VrxuTOEbs="}]},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.20-beta.3_1603095245894_0.9310771174380945"},"_hasShrinkwrap":false},"1.2.20-beta.4":{"name":"@midwayjs/command-core","version":"1.2.20-beta.4","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"9791d9352c5e3123561de983b04824ab678ce36c","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.20-beta.4","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-CpCnWI9KmUXXuqiv59nM3tMND/LMB2Qk5/Br+f2V7qaKDfCFEW5/QDSJPhWJ9ydGIxuMOMHzYZkoTXdX13M5gQ==","shasum":"2888034576523d94e5470c08395b61e28186e2cf","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.20-beta.4.tgz","fileCount":63,"unpackedSize":182008,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjVelCRA9TVsSAnZWagAAkmoP+gMuLdiNWBl0WFTMkc9w\n7OH9btHAMbd37CbJP36YdsHNAhdAmsC1yWtgsAtRbUfj8j9XwfOd0npIs+gs\nShgrbJv48b1YTJpzPS4NFKz82S+8q0UU9tsYxbdP7fCXEmicajm5RJdNE260\nUiC/d/yH9I/wSouU1kOKZ61B0cklmae2hAN765zlfIZ5lw2AKe3TiCzSSpdu\nJOWK8x1aimgsOK+1hlbT18UfUHGiiAq6a98CaesYP7FmPbMBOhuSTmoK9w3y\neR79/pOyxoEZGyB0it77snV1MKyHoCkofdWt3Y5+s4NimXuq+b0cRuCU0JXa\ny4ujNpY3JB2SBfxF2iikIeM1IVUiVYyu2hNAmHR8rd1eEWycy4ximY1PsypP\nrZGMPNrPLk5dBHRK5628Wm/csSubOvEOkr/5sT1lGbBdLNlshoFl1cVWU7hi\nsRy7G3WIVhl9Ee5E6spR/QHioxfhpvDmjy6jJvwwH7YgwYd2wa1ymNDkOgZw\nhEAb4lZQ3RzYs97sD5d05byw8YlNRNEOpZX5i6wUpljhPq+4rU+gFgHD3Nwv\n8vh1FpANPZK2TJI/4Hhdj/vvyssjQYFVHNz5mMf4RMaJWvxgzkC8ahAD8x4w\nJKddOn41JNCRfzrZPqMjQSYFsu4P7O6WMvMOTuxkGlydPVeN4hHSK/5acMgm\nwgfp\r\n=4U3K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAOS95aRNXk7twM/FBc7xx+kSlyFXIqRXkkBJn71we6eAiEAkZdERZn34XjwW3ZlUHzc7qGlYN5rjGGtgzpXqafO4XM="}]},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.20-beta.4_1603098532536_0.903786353172451"},"_hasShrinkwrap":false},"1.2.20-beta.5":{"name":"@midwayjs/command-core","version":"1.2.20-beta.5","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"dc90f9000c13725ff3db4b0c428238ab9d226bfe","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.20-beta.5","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-56T7XcCq6JwUUAqSJlFVVukcLwH55EppEWkAZhbX7UmYG4HqWZFqiUym+JH6Q7L16odWkByCFbA84xYCyVd+AA==","shasum":"494fd605408e72d9a08f303a11edbb4e8b3a976f","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.20-beta.5.tgz","fileCount":59,"unpackedSize":177471,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjVwwCRA9TVsSAnZWagAA040P/2BE6y6q9p4m8zJR0k+q\n3IOM3A7yrpTlLguovS6FLEXPZmcqLZfiHRsQSWN0ChuoUkX04ksvBK0aLruV\naLTSY49d9WwOG6xRgI8eDn0tWtOSVjXRyFdJFgymSV8H8FUkTojBwx2+ZEYE\nOTD9gZx5BBGBiJ+XLgcQtEzpcVSB225NxJ5Dwbt/zN9REDTuu5QIbngWUGqO\nUig2yAr6gLXDh2GA+wygVcP7Lq8/EU8gS4RcpyM1BhY/PFUz1yPJBTq1hfvZ\nExYW0X/Wdw8GnmJOfUJ5RPyTww8d9hdJYyZ11gnGAO7yvMJBTDryXq6V65jD\nIRgGho6gf6E9cqM49VQeBphEjpXXkyvN0PSD+z4h9uja0y7tiFbxbMOFqVdb\naobANsBU7Y4HzWXTsKtBvYz6U2vkQ5xIc8SdJRVWbV6yrHm8SzAGccqaCzp6\n6ThKBJnE0JCla5lnW5NIgLh0dpHg1j8ZUbtkOPDYcq6Hxv+QShDRsTxCNQlo\n+M1OWGtEAUH4dC/dZIit7hvCPB827ApLv7+3GfYp6tdVbGC948Z0KDO22U5R\n9tu5BMOtxg0GgslfcB6LKYD4E7Et+/ggStD8IPNOKZWEDwcQSa8i9fcAObDV\njp7Vx2UHgE+Yfi7F1MXLq4510qFFzXrcK9G2ETIKwQtCzI9xgj/1xnH5ya+H\nhPQI\r\n=ReC0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCDI4svcmSvfueQJmaE2tuT95aZ5L4fWoQZuXEWxAA7rQIgNXm7iVA3hQGAKXwlcPykWPMusuN619+h/0Y6+S1mxuQ="}]},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.20-beta.5_1603099696377_0.9840286153490723"},"_hasShrinkwrap":false},"1.2.20":{"name":"@midwayjs/command-core","version":"1.2.20","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"d52802e13e833351031b3d93376fabd4d96fd238","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.20","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-dkwi7NfCaCquwWgxymTAbb2bRQbSqcLeeLOapAYxnQoEg+zoRXu123trbqGhuuEM/6SMiKiQFpd7DLA9nFJYag==","shasum":"d83782a06ff45bc213f02ead592abb004dc762ea","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.20.tgz","fileCount":59,"unpackedSize":177624,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjV+8CRA9TVsSAnZWagAAHeAP/2+OINmfzXM8YSodmOY2\niDDmszIdU9XTMuHi//cZ4xtLESCwF7Gcu+Bz/RAOvzclKMPcVjTrXZJTQ9jI\nb02QnBURtfxAIrpV+UATkhUJMtpai3ixOqEC+jZIUtK5Sqdzvs1337AFgLU9\nvaAUZPlFOLdy1QCx5Eb6Sg9YRMaUVA8H/wS6GSgc/ReKyGxvsprxRUalv5Br\nM0Xj5bQp/kyvDeTJ/n1+W7HM9CihBPmAkOpB63oDPemmb1NIMuaJFpWCzOrs\nbX+JEDYyzKlTkh6SgJQqN4+hTtzIzlsKI9oBjmynvKp43mY8Bht+TMphJ8xf\nu3Be02eHZz4lz58iWVpcUwjBNw8cex0UHY7Lh7ciXgxZSTHUyCucxO10sHWM\nUcWpI7CtIAooM7URkZDLijln19tTNXEEbaX/WaOV1ChlJMCtQ7aZTvDwG+nh\nk8HdtYR8Mx22hkf401Mc54kCByIbyBToUjpUquXhTZpaaFrHNquhjLVm2H+V\nTAfVIYWnCG/QIF2W2aJExMUg5AXPZgiX06lKj7zz4C2GOONk22YC2Tj4BpL6\nRhDmNr7SmHUkSw6hDnTaAYYdFJ04ClH1eQBBHy3t7n9+OVfdJFCyP44diDxd\n4Z0dHlU445vl+vq1crwuCNnhFnFXMbZsqBZMn7MPR/1SaslWyEVBZIAzR2yK\nVnA8\r\n=RbS7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCN+JJcHKn+qGs1b2C2F8gWSGvuW12QPs3x1FMV38TJdwIhALoLKxpM5S4YnTfJIiKPw52OK0y4Qb0pcjX+TG1mWWQu"}]},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.20_1603100603746_0.26464713721672295"},"_hasShrinkwrap":false},"1.2.21":{"name":"@midwayjs/command-core","version":"1.2.21","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"0f4eedfa6a3e9ff5473acbc024edb73000250dc3","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.21","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-JwCottbjoDjHRiNsr08S7p9mhr3tikPbYsb182xyBCV23tYRnilPElmFJNtVs4mVgLH50Kzy4PV06xvGudQ3Lg==","shasum":"4f5f64a78b994741195c92a8dbaa40f6984ea67f","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.21.tgz","fileCount":59,"unpackedSize":178215,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjpAaCRA9TVsSAnZWagAAOqIQAIxIvfMXreEjXY86fBJ1\nvqBya4pwc67w87nuOFxK5qtAZFcKKMV01Mz1DbxfuyT7hXAVv1uBSVoUjyFC\nSWS3qHRvqGAyg+XgmfB+KR0/E8bK0/wbyhwcguD6H8vrysSb5GQ71NXzN6ZE\nQ6HnS8YIK52Ffu2zM2x7R1N6F5GbH5LGgWHoO8/P9aTkKGjBj3rFK+4ngCDS\nHd7WRfjgypBPpfhWwEVof8G63+U4BZxWS37yOjx3LG4uIfN89S63g4iOFYtw\nN9wOptJz0PUjTCn2JYqBZd3TtZDeLfNEgHnKEyxxiNC/OkA2OulHxZL6y+69\nFJ98T1qSNoxNKyus668BCryhhrFoUcQ5/4QwLuW/v3ahY0ob+98gUWvr0+p1\nWm23k5CPm0ybCGVUpDIsPWX3Cj8ZumBzJbDCiRrQYVCrq45iTNIKiRIe2s4d\nQlgJVELF47ou8G92PGAj0ePKksDRGX+psKjqCSidP+yptwcejQ6nyjW/psxX\n2OiMF9slcNB/uVXCr8K9VxeOQ3LpNeiu+sAYa2jvYUVjvh7D3w1sLSIlAMXM\nkOF65IcbzRLVS6moC3NHONKDDmlwzEmOmRKCmq6Vks0yfrLBO7Z6EjBQZniX\nPRWD+fga/ELrhgaegv0I2b2Tf26kbnEyAhkd9u2s1pHmMSNqyzMCxBSohsIu\nPS1R\r\n=1W+V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHw9fXCCEUJ6Q5Ur/wUvFs08AUiKhxfSNjM+3ySSKBxIAiEA4XNH77r59l5sFWL/M7SAKfI5jfH1K3ZCTzUHewcXWXo="}]},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.21_1603178522021_0.5376606007441311"},"_hasShrinkwrap":false},"1.2.22-beta.1":{"name":"@midwayjs/command-core","version":"1.2.22-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"d7f1b13ffa44576e34325132e30ff13bc7739a90","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.22-beta.1","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-mU34o9uyhWF8kTXLpYG0rjP1wqJ9ZOXxX9FA3XrTL8QtnnsFsM661xhCPoBV93XVTYmfpUmkJpKE6JRr07438w==","shasum":"ba1f2b7f2dbddc5cbc2a2879daa9eff667285854","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.22-beta.1.tgz","fileCount":59,"unpackedSize":178389,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj/hGCRA9TVsSAnZWagAAEcwP/Agngp9pWgjDgiimF8sw\nUVVL+Z9LjIt5Tyg7xGfAsG8CTdWQA1frduub2Qy0jCiXGk9PFqmwF6TXyq1/\nWYXF3o8oPt8rN8IE+/dwyjacWrGbHjpE/QGMvWVJxc+BQC2a0nD8wKFfUBcx\nHnwX4DjCQo3x5VRYByFME0HEF1tSUU6zvK+RE7nkdFzVbksaSt7b+MQ931IK\njqzBCknOw/E8xAD2VZOQZ4BikzSQMjYavRjXhwLvAgHQLQn5IW1C9cgbNRNX\naVVIVTfDORCf6YjYm8MWREfM/6Wf2u/Sjjf8gfNtCuB8bL1xbbOJPkpDdC+W\ntnz28u+NfVf2rmzdxoqKNHioOr4Ggh4werL4XeUd+qnI3TWCQXa/TsO/vTog\no0+BeYgZFZ//7ArDG/G7HXjL2oTUm8UEU+X+6MoNyV+dFltzZNfuP/z/Orn5\n5sYqYzSYfq2ptKb1fcQ2+yonNIeHefjuAbIbbxxSXnEYlQaUxApTgVYSqOYZ\nWzrUNPxuHoT/3mUmz10mCPW9InHyGjeP7mmoO8cO7X6SXflT0L3YXmy135iC\noBso8RH2TBaT/Q09u1hJ8bln2TzBuVblrrQTBXRb1CsZGhhLNDABwwpGmK3d\nCgK+7fFZUvANWzbIOdlNl2AZ1qhK1oC+oO2ikeljoc4h5nm/RZrV8SN5K6+u\nFFjv\r\n=pQbw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHtUSQ8av02WFwMGhml9PHh9EUiR6lWRr6iyVt3AOUpgIgWvvlO7S5nhSrCfsyQCYuzXE7RllH1FuI3leTxdX9OQ4="}]},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.22-beta.1_1603270726327_0.6238836410521706"},"_hasShrinkwrap":false},"1.2.22":{"name":"@midwayjs/command-core","version":"1.2.22","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"ad14afc125ac143c63972e2f186e5afa977c7420","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.22","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-OGgs83151DgiodhO/HN5WPBAjFNXANOgVCgGtftmfRX0niTi9Zg/0w5IrXMS33ooSfTuJ4Zz7vjIkYMGPV5dKg==","shasum":"5e7a1681a244849ae75bd652bde52a868668368a","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.22.tgz","fileCount":59,"unpackedSize":178542,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj/qoCRA9TVsSAnZWagAAUBoQAIj58kfIcNz5rJGKN/CV\nOOh+G5b5+TBXAU76dbliWQHGF7HsyQTrWysAmAIWUU3BSu3b8v9q56bEizdt\nyrX7THdZm3zmr+fpURWUFBLstuiGpzmKrMt6tOksvgjpyQwoWGuu8tWAgD1X\nFrVssxtSuwQ9C+1NH04/JC1odj6mLcQr9Hk8/8oJUfRnTFUWmTK/DQuFjNWl\nacOxFkumLHpGksN3JVnrJTfKnI64m7PZGQKX5WS9eoI8G0yhcWonaI/R6Iyw\nBoQPAzShNmgnH5OLglUDhzlcBYveO35aI6pKWASxpRyz3ha0UIj01NlRUPQG\nGzQTwCxmD07J2aYiV5nZXlsUMz8vghhncHg9N4sF0sEmDM6OdLjTbwRUIicR\nAYgENxiOXO8E2IBxwU/JuuXXR9bIN1AP1tC7cGbj0pR6TYnyaJ38Lfuol64w\nKn9CuwermKu4DhBWZH5zezAXGsAvywkfZrwdaXVQ+xZIKA3ciBcZxop1V5EH\n+eEvI9lFR3xc4eGYh8oe1BviaBmqQJUCrktD8N82P3umEpf5559ZCcdTRtJt\nrcLIEf6qFsji8ff8RFlPUVIG6Hup5jKEtGhvCo3y6AdIZqwN3cavm2VSl6Ne\nGT7RuEKOmB8Rr2ZK80s91ZOjFkbCmof3hbHXLi/wuXlOcSDhrmbbK6CAULFv\nMFuz\r\n=MDTk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHWgPrHPFcx9mOw3hAZ2WDsSrlIxa51JfBhS1cSyLzK3AiAVZOdOFF8pcvdnmZhl5f758GK3QgYJ9KyratKfl0RcVA=="}]},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.22_1603271336446_0.3766216038787853"},"_hasShrinkwrap":false},"1.2.23-beta.1":{"name":"@midwayjs/command-core","version":"1.2.23-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"cc099ba6231e4bb24f4efecdc4ec6a72fb324e05","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.23-beta.1","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-8nQGmo/Ik7heyynq3ChCsfr+dTyQwvEvUVhsfj+vnfke1nBusnWC8CkvvVsC31uBBf7OYC+yGkGT/Buae9P1fA==","shasum":"1e82d271d08307c7b7f7183f981a71a6ce0a0dc3","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.23-beta.1.tgz","fileCount":64,"unpackedSize":183934,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJflpTPCRA9TVsSAnZWagAA270P/i8xjDx03JCv86DBtJTB\nELBXtq0/mCV/UFxrKuJXkwSUODRkCu/yGhAJV0vntNg52b3BNQcnGRWCA5Ph\n5J0Jix6QvjwR3TuD4kLslPDsVuGlSF9TJmlE9YKAIrx2/PWOfgPcr5NaMD4H\nP7Ls9iIOXPI+ArlEHUxPp6l7iAoLZsebW/+1/oH17bTWMzKhd3td4xl3V6/7\nTMvXHB+RGX6I67sIZpw0yWp35x0jJnBoBF5XGWdTylIQ6Fg3l+ND9wlFToNZ\n0t9MZuTG1bfiQehvarF7Gj0st3E42dStxWDEeqjwxfIZ3LoMu4OuZoIybOzT\nz2wR0lLToVWlfnhFhJx31PfDbeuAfjObtoDBe5b+DsSiHhujbCU6GS7kSaLP\nxJPvL2RMtUhQtDJEEaZDSpYXwMD7Hs+3bKxAsQJxPz9umXownWibIwYm7abN\nUCr5r4tTzFyefx7K7mJHw23lSPkQ4NBzG8/7770oMmZ6KsQSYsqyINkmPMVC\nc538IPVRLVb/21d8pfj0wiLxL+WUZnVXOMG+u0nheWij7eCrcUA6Aa+GyAaE\n3PYIQGdq+dDh8ABpOufwgMJ/lBe+fvNwCMuDWv//OGzQOBZttRdljDKI1Eae\nPMzpv5J4DvGnp/fwbj0fgQdqcu1FNThuDBjsJZ+I83d6T9XvhaNvFjrCKIgb\n+WFq\r\n=bRAp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDxr3e3eouwwNzH9psxDlpAWSWPZORY9/xtGfvhZPGFQgIgCWWeaKESb/lOzbXcc1V3HFQ/GXIX/FXwpMtWkxTsOWo="}]},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.23-beta.1_1603704015173_0.7107806091704496"},"_hasShrinkwrap":false},"1.2.23-beta.2":{"name":"@midwayjs/command-core","version":"1.2.23-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"6dfe4424e9fc7d9e65fb2e730227142a1d78e3b4","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.23-beta.2","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-PbXugWU2wlmh7n94conjTxKujtrS0bJDv2mh886nnuDgSbTEN+m8fBkYgxMrJEvWStDDSdVfx4P4UK4nvi8xYA==","shasum":"7aebfaef091ad3020e5c7ca21167ddc79e2102e2","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.23-beta.2.tgz","fileCount":64,"unpackedSize":184108,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfm8OmCRA9TVsSAnZWagAA9VYP/1bDUsUaMFFiiC+N/jAX\nOwLYCFuVk0AOrXCrRThVblVD6C76BPIAU2oxlyjzbtHZwRCeHyzk8ZRCk0ah\njXukaM6W905khgfSLa3G1IzQHJZaIT0qfnzpJnPnq1zRA9NnwYsu2Y2tSjBX\nL48S9lVS/P+Rc8twP5W8DtldtEaocQgaFzcppb8dzOzWLmtWyk5AC+WWT+jx\nnOCuX38oqsBieKQL4D/lsLjBHzhrwvGOCqMFSLpMpmnnvAsu+WoutSLflh65\nXtOwHRiZQnVPc+2HUVPZ5s9AfgVAk4FGsu0NmK+TphtnN4X9cEew9YxXTdCM\nxd5Wb9igc3HhhiNqBYt9JakqFLCHdaLNMAvzOfFsxgxnk3t2fh/bdAIPcaDq\nWPSnFGrbZlGOREGXHufxgxUZN88fYKFdDQxm6sS6c8a8qZljZDb5pctfWr1f\nydQCZMHb7EKAzqShgnz8c1NvLmqRGvn71Y+j7kE4xr731XHqevbMuHUQBQGw\nplk4CZdP3eAQJ29T8IZ4gPx9aIDQYc71QEMygXKd8HmFpQLIJO0iLTIl7wlD\nmSCokfgquiKT2lKHUIMT13nohuMMhUm0BXrCW4JzIg/TaHaaUTwRhqnlWq5p\nB9Tqta+uP/KN4zrYnMiD/gKIMZb01kBG1VnFrbUtFx4IpoxZb1NZMVeXdPhy\n8BUZ\r\n=ij/0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmiY6tOm6jnjkB0a1FebHYVo+/vpkRmAgdr0nOM3mViQIgQrI6a4U3TainNEeuz3fIAfvjxnwfxTQ5u09rQE4jYME="}]},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.23-beta.2_1604043686168_0.25239929821365004"},"_hasShrinkwrap":false},"1.2.23-beta.3":{"name":"@midwayjs/command-core","version":"1.2.23-beta.3","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest  --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"35befdab1341919f481c04ba659e626f8d7c738e","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.23-beta.3","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-MWK8fzKNk6Tesz14g6mC+meXWJqUtdC2kD6NX30hrtctil1ZA0JmjNUuc0ZNdIb4mQv/HvKN5abDsFL446SJqQ==","shasum":"8c224cd63808c0d154e5e211e93cc3764588e46e","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.23-beta.3.tgz","fileCount":63,"unpackedSize":179411,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfqg15CRA9TVsSAnZWagAAIGEP/j8mog8Rb9Hx7bWaZoH/\nth9ZStNtgmLwKts/Uy82pJidHmZgHDAlN6Kn1ux1srkPT9adEMV4PYhtIGBv\n+oW6ksFckCvTq4UoATExUI3erprgrqb2Q1IibQlnfErO45WpDysLH8vqs5qg\n/Nc9/kvfU9uiTR0L9vFNA90k4t+idIIJbu+gQfuBt3GaRidJqTWGmNxe7t4G\nRmoZVgHSWHlqhUzPhq8SnkNfVsT8xM6aD2ZXmY9XRqw/biHSHAuf/+nq9Woi\nKevO1IFqm5w8wRPnl1IXpYUqNdN0gf6FHCcKHRqNWF5akf2jQ+ERBqkzmHHP\nRxZ8V9aRN2nxkOmVtVsW/ms8m8v9f6mJP3GlnBoe7GS4pbXHtZlLDOx7sp+F\nOhdItxnEkvX5CQH1CLL2RetixEgfZh+8ZN7vA1O/qqTifaIKrcWOjaK5F0VQ\nsaYg2E3VWJwHPAPbB4D1eptKa5iA+zXbGG1bcJwGa8rbydqYChSbLLhZdi84\nkiLTfSHgVoHauRUft9iRKVFzIbOGYnZsAXlLPbnaNKwE3+4lbWK9VCGb/BfV\njK4XbvOarEWgegbUEweAOcAM5JtW4pbeWTlqBBya+5RtSUqmghop2tu7WkOa\nlYp78TwhCzTy1ugIl1rmvTEuTgjBkBzyftH8Cy9zI96u0sdDsTfRouRCmPOH\nVmY5\r\n=kVbU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDSE5dqG0WsYQy4p6i13xAVZwZHJSJH3P2IVF8OYpwZzAIgMmRlTzQYp5XpG89SgZs5Se7xkK1FUgitqb6172cACII="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.23-beta.3_1604980089325_0.9334045969346043"},"_hasShrinkwrap":false},"1.2.23":{"name":"@midwayjs/command-core","version":"1.2.23","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest  --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"a8c0a0c6ee3f0b6eb43e9a42eb6ef609b0b61d85","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.23","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-e8URJWQmB4hcoH0l0fuNI3uflJcOAXB1wNDVv7ybcStEz/J7m9P6vh2OOZS1FRMIGTeOofq8GhDegM+6JfCaIQ==","shasum":"7d99223c9e28dc9c392007538f82c3cae29d10b8","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.23.tgz","fileCount":63,"unpackedSize":179564,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfq5V5CRA9TVsSAnZWagAAgsQP/0yNeTNAkA6dXU6l/mhr\ni9mDE+Yd+36sfIz3vaYeSerKH5dIlczTJN3YqJ6GL6xIl8shfHvHfotTn00a\nkDvNsyMLCiWZdghUNYcTt0g+TyRygztQ7ro+RjeZXHR4JuQTOQvoNZm+nZeD\n6im2WRKj47RGiq64dlFMnMfe/etdfM1yh4agKEPaOwYIGdJG+WpR+qL0KIsh\nmtBsP5xRyY84PNrzfs6wXXa8zBOKiZeHAP8r7Xq1nrErXVddO4sTZTBlJ5Ag\n1DuneTW6ljj1R6EVxrq6pZ0bB/9lvTWtp+cMIdtRHKlO3QVEihFDhZuKqr3x\nmKxtInh8y1qXhb5nSuOBwT0GliNh8t8hYd/40GZDt1aN1x6Q3156CKpr9qU4\np9No9wbrURWPBsFQk60herWuRoQHQ/Wo98JNo8rkz+kJPaiWBe3ou1hXt84j\nmv7QkpdfIbWcu6iNkTKcUO4XZAE9N3k9h3v8R74l+h5ZnNUFkA/d5FkgyJFA\n3mFXw7bbZag5IE3+xF6V2XS+Mzk5YpRjp1eB9OsoWvoPcS8LEgsmbrETaCrO\npQlVNM4fVmeGkdYVszC3VGRNHjSSKOXTXdJZodJ2Nh4A9WPjVeISlS7peYMm\nJUQcFeubj60OGOg2SU/DofbHigK+0lWqxIm8l6OwJk1+2qzyyrZhBB8FUouW\nYew5\r\n=5a7I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBvRYJ1KfIZLf7ErCDQDgve3gbUsfmAxuKPy2YgTwzN4AiEAhRqjd6YX8INxkAELTuMAhM2QEHwRLIn3I8AjdmcmAsM="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.23_1605080441410_0.9513216542014216"},"_hasShrinkwrap":false},"1.2.25-beta.1":{"name":"@midwayjs/command-core","version":"1.2.25-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest  --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"f0eaad221a9d8072f73fb7ceacfe50b172ea4ba1","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.25-beta.1","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-q39UeIdRlwl4rjoXuCFbKzQh0m5sHlV5R9+qmCep6qDIiJYvgNkh/Xr324rXpnBtxVqWjVNLcZWikZ+VD/gJGA==","shasum":"8641c0412978478ba49a75dffdd55ab776a5f8fd","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.25-beta.1.tgz","fileCount":63,"unpackedSize":179745,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrO4cCRA9TVsSAnZWagAAro8P/1/lVjMzLbv83kkykjid\nXoeUxpJO6VO0HHiStrvxSDjTrKcvXJ6cucckPXMuA9+ibGx7r8AUoRXEzo/n\nJ0eHafSqPTxcmEojXeSMHqZ8gMxmagGuFX/bz6p1X83dCTPUjl7cEWc4CGjU\nuNn4mAsLWTQDsaL1qFSNUqNqUcr4ClajMPGIkPQP1+mf/0pM3B3KK3fUwCy7\nWRcoOFZmNHwe2mfmBHUdHj7Q90CzDLr9MuWbDVC8VSdo00cOkxrIMq2q+Ij/\nmxQ5vmTPnmytDf04pqfwVvTsJChq75gGYi7A+K1gb2ywBTzo0vX2uNg1P6Rl\n17cSskaxkwWJc7VIaXzQRuObF04Y9E1kGqoJm8pIo8DrZpVCf+Fo6y0bgalU\nPY6rPBxcZnA/CqSIaEhHn5R4345woHWWuwKdayIEJayzLZYq4gbfB7n+vuXu\nDH2tKRkFXXUVW01jwMqSWvoNjwUbkhM9MYO6Xe5JZAlis1qiIMoPclxpkq1V\nUbtMKLO/mVUYfnBWAyoiUCLLvSE6rl5CJd3/DsWdChS05ycsO25UbNuzfGyl\nONt3UZj2wfNmQLvOfjrcwM27LRjieKuZ4OKUufM6vNDMPKYqNimDdI2apARS\nATS1iQt0ecJw6/Vi1+M1Xj7eCRQIe+qL8sxx7r3bYABtWG/dimNPY5yNJagr\nYw/S\r\n=UJPW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDpaz4cpKYEhlUJIpGt0/EKSxeAd0Nbkakp3kKO8ytNwgIgMxLDIB5UaBKtwuu/41qsFfGc3obZkMonw0eEVmMTU7M="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.25-beta.1_1605168667953_0.9199416050422005"},"_hasShrinkwrap":false},"1.2.25":{"name":"@midwayjs/command-core","version":"1.2.25","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest  --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"9c901c3df3d25e6d2111fb6a39f57dfd30f4c6fe","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.25","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-gI1HOaxG73kjHgAEqlJ58t58IQHsdVKxXd8xtcVmK9vCSPdjEkpBhy5ua51NxbeFnRVgfKn4GSXH+fju6mOrnQ==","shasum":"f555a8fa1ceb2fcab7c77380bcd4b87d3bac7913","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.25.tgz","fileCount":63,"unpackedSize":179898,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrQCkCRA9TVsSAnZWagAATRoQAIXRsmm8SXzrFBlUsMv2\nwwv3uP3hWeedk1hITOysGwWJOusLHQsqCTHdHTHkoZsqFZhKJs/buabCtGai\n/xjU5FoJrazkJYjMohLDU7sIbDMdOMAmZaIMHamYdL55b71JpmXhm3EujEuV\n6U6ldAiE4q8IRSz+jRyv2toGs956zmADDAYxw+oV7kffSDXEax9hvU25M7fL\nn+A4YXjbm6pYN6IAOfXKAlIwV7pN84UgNH7Ji47zntxpwfbmt6CtD2sb8kIX\nGrifvAlKn2avQzREqvW/Fd+JVDZkfKmImS0lW5N1XIbXxiMjXldxuNESJPBg\ncxAcQhdg1Q5BDcVfPTVfvtBzd4tIpXp7nISinSJ1C3MJSw5EBO4DlI4M3ybm\n7wuf5VgEPOIyONKusQPb0tE3qrx+C+qoBAF6apuYsx1jGtghA5lb/6xM5zqT\nclzwZa1QHo9IEF156/kz95PCEMVXLcvZ0QxG8SQgIAOUQlQPS5WWxWTRIKzh\niLUEC++RwujUUzRHTxu2dEgaHX/RPe3+k87RRO09V44+5BOET78CnO808vtH\nTaYa59W+zr6TOo6rmp6SsWtbQZkWJeAU8BlfqYgSLp9Ygno9NY7WMm2imnRC\nW6D5p8TAefImXAZsl7PPo12aQBvRTHyUPB1ePzAdtAmmtFA9C/LB7kycajGB\ngta2\r\n=OPEg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBv03y6EMBDY6PoNKdgA/HqCs0D10mnnKFpfWTza3zOtAiEAkLOcxCUYZBg5rb0I732nbSMBZYQ77HkTESbKqeKV6HI="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.25_1605173411883_0.0575832923421673"},"_hasShrinkwrap":false},"1.2.26":{"name":"@midwayjs/command-core","version":"1.2.26","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest  --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"5aca44273d96a7d5695e9f6ac7cb0e8f999a8984","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.26","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-onldQUTZprXgzrwM6TtmpnyNg8Un6LpYB7ILKw/MqwvMjixW3buBBWwYWBiKQWTRdyeQtwqwCZzameEPkSbcJA==","shasum":"1407b1e90692bea8dc8e7949c85674d938dc392c","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.26.tgz","fileCount":63,"unpackedSize":180628,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsz1xCRA9TVsSAnZWagAAtgUP/RVHCZyDAr7x0WyQtJw8\niHBuRCng/weXF70bsKLK8Bgxspk8OWFhhOFhMUJiC3srygvS/AZ3IcHHKeG5\nULHwh4Rtf+kMJnvYNKtFs72TuJcDFjhPWHyl2lq8w6tud+nr6yV4ckeq6ggU\n8DkRHOZ7H/5DILLTX1nYlsaYmSRwNjtlhfgKW0eGPJuRC87HkAEbqkQluban\ntaDMY67IfOo/rMm+aeIVi7NcxzlZwQvVRV4eSsMjGkjmCIQXsA/DFnOdYlsT\nbuJ5s9KsDekeIiNZNaawWKpQ9BOmPGt4wYn5fSJfolc7rOHtsfZ7IxFc4ug3\nkdgAFFFjWkuwkAS7q01DuuYC15OA8XSX0f/uzLgeBB/He3ulciYKYahGhFxv\n/rufoG7SbrxWLW4IxKd5tGXTYBXWmkdoEVaP9dJgqq9u7lFzIcNlwa7CrtWk\ns/fhy07t/hAPLE6Td0Cpr5/Hdhs58of78dchoNwijsa/xj0ejTz2GKg0uzlR\nGuOwaK3w/vB1cBirneomNQFlB/iAhgaoP2zDCXHLA6tbhRCXpwxfOWy+v9mM\nF54XZdQGcYKqvco3f/qwyca3F57spH51O20dctqikoNBrbOlK1JnUaKoYRln\nXE/qepzaNnRNZFFbwKr8cJzDR6i5RwWoiKyRsFQNJdoRnE17x0yAAvTWiM9F\nAWkL\r\n=1zL3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGJ+bElCL85ST9+CQdOj07BoA2iJJLYCKxr7csBQk66JAiAUZBLYS7QA1Q1KC8k5HyvgNeo9+tQ/DMHGSLmbUEP4gg=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.26_1605582192521_0.6237838546556862"},"_hasShrinkwrap":false},"1.2.27":{"name":"@midwayjs/command-core","version":"1.2.27","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"6ebbb55f0aab225dbcabace71c37b7df1e8e1de3","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.27","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-rfLhuvQ5FO9r+5y8iGX1+/ep2qQpXwfYPoJQ6ASJ6BQS7nbzrFjuA7S2JSvq0A3dGewmlmI+0cB1D8GL/0SpjA==","shasum":"52dc5834af5f08fa74db5b4a3b651fddf7d475fc","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.27.tgz","fileCount":63,"unpackedSize":180802,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfs8wjCRA9TVsSAnZWagAA1lEQAIkZIJa4bfd9+VikRnMR\noQdoIrRbuRb1l8VBjjSdrQ7BKijtHELu1cmie4W/umUOkTZc42PFufSytCcf\nS2B5ja2+xuudNc1FGH8dd+4943TNdnt5kp6jpE7ZEaEqfgpxhXOVZFzh0Tro\nm8mQQSNQuWwCDj0eM1ZYqsr5ZuuBGkYWMiecOLgXVoWQDUiOfmX0lrxwTwPD\nA7nTaogxznzdy1PISJcUgzp5J6HYuJqz1M1au7C+fpUPGSE9aoPR9B/0nOxQ\nuHUnaLOzT4u8XBAl1TrwaFEzC2PIXRljm6Azy3VaOW1Fiu8tZa/fd4KMH0vd\ntSrW8POiQy1IVk/gwi8zz8fanWR3tJ0CFoQKn6jGxGbvSpAy8NC/KbjA8tMc\nI3Q2TuSsE3+4pcEkBdSPWVdG74d5/h5VrMhN2gkFaRL6L4pvg8MlSzNU+C6o\nTVbSHvN1fyqxiFYByqIB/X3SrgVBTJvvK2jRe2IZnSi8M0gfY0ROyABONdop\nzafWk6JuT06K1ENKZGhbodyCBr6f4BnQ4ckRNCnXWNdEANm5vJ8v2tEkhLHO\n2GtZu/BagUW05s0c6Q6dDVmgccCfj0bBEyIYfmp2ZoOKVAFat0OfuHvRZgHn\nP9RIFjioBRmYkXw5PZjRMZJwMy8Y0ugcKBqS4NjbY/I4s7czGehLLv9IIMXg\nK1q1\r\n=VE+7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCNl9yoy0tIgQF6q4nR2Ar8eKHutRl6bgyRVc/+US31wAIhAP4YfOn+LimSty9jITv3GnyJ3ZlvHYbREUCItgUVx49L"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.27_1605618722824_0.8936302882444402"},"_hasShrinkwrap":false},"1.2.28":{"name":"@midwayjs/command-core","version":"1.2.28","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"78a234d2c70f7fcf026fa3fe8216d80a2e010ba0","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.28","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-sIkWM/9ml3BYHkhveiU93kvqgpDeHwLZ/RQJr8qXEG+ZhZXHE114fptG6mU0SgaBtIeIgefhVs/sjIZ258sDbQ==","shasum":"d6deff05f2c3347544da085aace07c0e8ba79798","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.28.tgz","fileCount":63,"unpackedSize":180977,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftJcWCRA9TVsSAnZWagAAdM4P/AzoxKPFuY5jtjPc/14z\n9sRQl+rfpUuOkcdbnSEsGlXk14MUO4EI1PjoTjCf4R4paBfpgczTzD4zOBT0\nbmOMDx7F0Ihl+9lITcrDHnSwR/bwXOJhyr5/NjnFpwqLUUeIHB7PjCFJDj26\nPxybG4mIoZy5N0hdJ1cZq7SzjqoG/qC+0vIEvTw0lCSrvaBIPZdl+VmJhUcO\nMGXzbSY+kevM30Sb5twlo7cCjBTt9t7VRFkCiv90LaaYEqCbfhmP1cj1RGPZ\nc8c2B6RGdCKWSM2Aofi4OT4hC+5NNTPzpU4xihKpGSb3V7hUBn8O3zURaLcx\nAk7I/JWzDKSolZctnONVxgd70P0khfBes4zLzQ9EbxWB8RHFq9tr3nIQo0O9\nOeZmh0d4KKSdsCdVE7T56ENE07RrTGqc8ZZSF4i2ciopm+d7KtoZcZCse5qH\nSUjD5utN0Up6p7L+DG20+587xeHGUTXdXmL7Efod4p2mZURzPUrQlz+ZzycB\nSiFojELJa1AufkTe0QoUiVyHcpCnt0yLLsKhQU718v/MCnrIZUeyJE5ujvlF\nF2V9MACJFntgA6gYDa710SBzyHuTQ42QBzzPkseF1cqGiudWkjdCoXdlieW0\nabMvImbUzf4Ht5bWA1552Z4i3+0+bCGoshOKBigI98iNQVAhwW64qq/Fzs3F\nNkEY\r\n=DyUK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHT67+MoZRPceHoENYW8i2yhmXVPAfrMSoO6vHuyEyjNAiEAv0P/k756LhOGEqiaQuD2/aD3MLv4xVkSywJujopUdR0="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.28_1605670678305_0.19790718478731573"},"_hasShrinkwrap":false},"1.2.29":{"name":"@midwayjs/command-core","version":"1.2.29","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"84cf7c76246f0735e0fe0a9ac82eeab4a0250087","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.29","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-Eq9qskKwvQT8TOhS5PxN4T7sQPPnuphozg6jM7DwIiDKMlzL6WMJVXWPLUTb3K1+maDgnbjJ+KwMFmRaSt3Cqg==","shasum":"671a156d7b343f78a7b43564f18465f021fcf75b","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.29.tgz","fileCount":63,"unpackedSize":181152,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftNqjCRA9TVsSAnZWagAA49IQAIG5X20xSkqnmOEaRanq\nPJO4QUeHcYaovW+jYKE8c+kToerXd51AfG2kLvY6tpVTZozBYSvIiymXOOsD\nU724smgolxacwlmpRZevZe5FDe4Y+rgkvT1MKJ1HrYWZcHwgW5PoELAJPUYX\n+rh1q+HdhrM2pQvKE5L6wMOwxhpbi6vifn13iW0yuB/9qJOqFkKYFdJh5Aiu\n1YxIzVLz+N+6HaMoYaaohxFvH6TXTsP3A4qr+klWDPnTVdJrvOpqGdnIRJwD\n51lcELe5ysoA1tixNb4qPKobA2zCtm0+xGJ4bOSFLbXrfDdKnobI0ik5Sqfp\nvQZhdh2GYv6247/m4YOXUSsZ533wkWDDPjsDkw35OvB1DdG6hscZL3eHClcR\nRGFxxnbt7kM+1qSqnYUzYLTg0sJb9+umoW4rYZaKpb+fSBpBOYP0GhCGwkWd\nqG+nTvXY2lVparg9u4Gt3pEE//TR+A1rL0xnatZp3U89vlaeDEjG38z+MrcE\nR2J+IDz99sDv9imYKtGjhbTa5sGfDBF9GfqWVTVZ5yfpRffecmeWtpOThKcz\n1nwrt5raDWoseeTWw64FKaztgTlkb+JGCPCKvJc5fIRRsbvDXHF4hUJL2fj7\n/XmbiIadvQtQxbluDjyjo0l1fUEHNT4gLWmvq3nDigG6er/Rr9Zzuv8Mdvuh\nXVVw\r\n=mY7u\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGtZxgT695r/0yanvjDeArk8rSL2iU8XjhvlkIjofFm7AiBuTrDNfMvmftgxIlthlyNCe1WUS1PbO0wonad4e6E0qA=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.29_1605687971057_0.8435531496456181"},"_hasShrinkwrap":false},"1.2.30-beta":{"name":"@midwayjs/command-core","version":"1.2.30-beta","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"8f5dba5f06b9e931fea84b6fe82cebba145af8a9","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.30-beta","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-P3Bjz16RKGY0fRBaf/iAwm5srY4Ll8aJFalyl8sUmGNtaBRIpXh2eZRv3Ywi2HPdWPcEcHlNAnArlzpGfw46KQ==","shasum":"84e97b39e6a7a4c0106408e4aa3fd2923bcd64a4","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.30-beta.tgz","fileCount":63,"unpackedSize":184083,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxGA1CRA9TVsSAnZWagAAjZAP/iXrGrVUnKM9HwEtxYEf\nR3fXQVKKN2kFSibbQxB2xrEbD20DhT8Az0fX36SSOgeo0WxguTlSuwXpkYPU\nqZSxAYoN2oazv8ho5pfT4PH0/NKGEyHPKpYfxk04dqL/DIL/VzotYj6zm0Yc\njg6jo87tcMwdFaIUsckL21fQAjr8KdcHbRkcBkzu/cTbwFY50fV4f62FUTnP\nA98lwsR9Bh6u4xxeeftswdkwazf+RHm8TrgtDLAJJbJ64VN9a5bbbzBxox5+\nQc+Q5YOm8lhSU9icMig+FSGsnxIpOXh4vsHqZZZ/zccEXX3qubVRtwhEKsat\niKlCc/AJFEIg4tjKo7CrigTOtSqcdASjd1jpUcqOWvtym4DHPjGGQYN4uBdh\njbyBPtOIifz/YKSdkDWcy7EzfqPRAUlmGvRNcDvHKO7N1Ci0sZIdrRIY6qAo\nvGiKXA2g0T+gmGQhQAKFJgDp5i3a0JMSGrebUl03GmAfRtMcHLW0j9SvnIjM\nbcs3Ub+lLpVcSw04PIsjfVOQuSJTUZrCNxaTmCuvZh5ZQcttaHXj5axW9ftE\ncdT3cWK698/2r/GE0RSl+q2GrwX35AnDigt4opCpzdMOzmi7DkdWM8xRhMhS\nfQC05H3x7oh1Xd3RqiH+b6NuZFWbwgEZNf1QmxpnbijinwaUA5NptuRqVw0j\nQ3Pb\r\n=GrBj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDzWnSYe0mgC+Xarj17HYBs8nszuh3ysMrN0qJ3+hQJUQIgUl5KLpAJauDZCx3sk8wNuja4XxrHdR+4X3OK0/lfET4="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.30-beta_1606705204967_0.00020161331487655865"},"_hasShrinkwrap":false},"1.2.30":{"name":"@midwayjs/command-core","version":"1.2.30","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"../../node_modules/.bin/jest --coverage","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"979a5b45eade456a5fc26e177b0dc3de597cdb70","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.30","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-RcUUW+2OGfTw3yT20WDYBD0lR7+0BzpUkx3vq51tZfbBdsPfBvW/zoIHShnBDMV2y3pWLx5Rpcbf6NvGMvuPHQ==","shasum":"06a5e761c7ede9ed0ecd8192255b04cff32a27e2","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.30.tgz","fileCount":63,"unpackedSize":184236,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxHAFCRA9TVsSAnZWagAAlM8QAJ/W5HO5xPD76l/rIvHc\nuhBTQxjlrgXfAGzfCtKcNteTjPiXAHDhmIeeEKHQ1F/nVZ0EM6tp3JjsPTe3\nAyow9Avr4JVso6MDJ8WYUYyv05uQYHgQrTJJkPlQ6C2v/cR2zkUJeM4BS7uS\nys/xg1417zh1lqEUZKYtAY2Plt+M2OvheyGSaCHve08wdub6oEDKkYn8/XSb\n8PfBlnr62mB8HRJBwkm3NpBRFqPKR7XhtjLhNunH+owABxAABbq268QyzBlV\ntYUCKE5VCgTw5GlKd5U2DoMtO6snquIRPscGgIhfowxsI8GZPgoLcQZJrERQ\nkbV0EML+j6Q29Z//zvqCruqs8WY9wHO3wWzA+YFkUGxPBZsSewIhsPzOGmxM\n/QblSKugUfUWoDSxCeA2SfHnWrgtsRSX4xc1tSbI6DbwRU1dBp8ADGe7NwqL\ndD+fSgMkKDGXDom5Er6B1xvGT4QMMFrORf+8ikEbY32aRMNWWBEo5IbPWRAM\nPOLMfsLF7svJnlh3aJfXt+6F8VMVAP5gqbWr/jtYsRR01CObxiG5T8XifNn4\n9iZ2lz1bB4eN5ndBRZffWUQ/yYuWh9Y/uyHUalvj/oYtbkiLbwe4MJ7m+5mx\njrm5koN0vZLMVJfA/KmqQKCowk43HHWky9DcYvSVKvW7oibLJ7v95tJCko/8\nQAWh\r\n=IqxK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFxc8tsWy42N2IJL47hP6CIWMWwNzmQXeWTwAFSbJdwQAiB6eFN4Geg7DlA1kaUqsBBREZEHz//F61/IUqgVNKizqA=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.30_1606709252983_0.9615636763766198"},"_hasShrinkwrap":false},"1.2.31-beta":{"name":"@midwayjs/command-core","version":"1.2.31-beta","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"2a24d9c312da0ef9f5236751fb47f95a05dc6ebb","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.31-beta","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-ln+HmDlYN7pCcO2DoorB1a9kFuCher5/ISWxFDTThyerAB6OCcOy0m3w2pQ4wwRpt6vXgDjhAcv1AOCxOiKXBw==","shasum":"c9641dbeb2f876fec3dc611ef23f69fcc3b0a4c8","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.31-beta.tgz","fileCount":68,"unpackedSize":188058,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfx4ovCRA9TVsSAnZWagAAqvcP/iVCBJaVxS6gEd2Lw/tS\nJyIcaQIw0AaBMmRaZXhb39W845Bj3Q/P3fr6JXfp8H88d1VowN6+mtNS6oU1\nq+oPyp8LjjrDsc0rcHHsscvI/rLwn85dSg2+plVa5roHWaNhBCxrGAN52BqY\nr3SRZxh2N5wjx2i4WBc7GJDWTgs6yexCIASKN1to+QRXVuO8fN0t9+awVR6W\nspXdoxl6p1U6WcaBvqDmOxCZoM6ESL5LbZtbxOJ5MYfdftzGv++Jp5KVHW/o\nOcE/QM24e8n1PsNw0GhJ6AxENp8/5VdcHI2PQB4/enZc9VaMyH0XfISHD15q\n1gZBNq+sLkU9Mg6m25gwwPBx6EA+Vcr8JjepGcWQpyPetw7Lfjasyxu13vOT\n7u6t6fHyD4QAdMKZB8K0yGyggoJvjbIcaWDS/q95Ur0FLbUmD/F9n0ArPb4l\ngs3OSvGxrrTlAWzeI/QZGmvjnL4BSUEYLpOsNg1owf3xpQqBu780rUGtYcS9\nUUpAJHEubgRhzA3f2yAHEZeeJRsmx0xvRfacZEcivAv1RtYi/+4SyGSA15VD\nnnhFqmzXhDlHgd4VsJdThNLiuXk5E9FSURo2WZN6M3RqDL+Qjsvc+sgKqYaO\nLJkM7e3gEvb6BVJPiJbZalkwqhgXP3hZN5MJlg0QopqWgQEtLHxOJUCjTlnP\nhQWH\r\n=wF82\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3Wv5G/MIlJk5BVWqoEMWwPzXDNVLo8jYQXvg0/WfnBAIgP6cYJ5bYnTD43kDhLpsf5IZ1oUOLpI/0O5rduEunDgs="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.31-beta_1606912558912_0.001835461215620393"},"_hasShrinkwrap":false},"1.2.31":{"name":"@midwayjs/command-core","version":"1.2.31","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"6cf8bd8ffcca8fd4d5c5428025ab910b79f71654","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.31","_nodeVersion":"12.16.2","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","dist":{"integrity":"sha512-dU+HSPhuKKuolIGdhY4a9BQT8b9KTCCVSrOot0HkX4Uk5k4TVn163glyE51+ZBrPRYv8QsfxN21z7T/oOAidOw==","shasum":"14396e68cd037269f60690695073189b07b469bb","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.31.tgz","fileCount":68,"unpackedSize":188206,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfyH6KCRA9TVsSAnZWagAAw+EP/3jQD5DtjNXNl03IMrEy\nX28sH0YrUeU6QMrmcNqCOFi9MDyHpp2QoSt7RgcTzLhURavaIaTCu6WUIBCe\nU3gBIbhS7sK8SJdVQ6XAv4W++hbcWjLHKy4FmuEhid/mQnPoxUfTdsjKF3Xj\nT05mPlFTy3p+rkci6TnjSslmhYS/FBo0K6Fj9kJaMloFKiaOtAHP2nLiZPNz\n8WM8EHMwf9JCc3cBPkLrcDoyKcdYHukjUtApiK/8rAbaQQseyeKPU28wMkNx\nGnxsjnOaFLd/ix0tx9/xRYDPx2rSEy799Eq618P8grW/lnnLedVMQpEtUZmW\nZnNTUsNQ11AOWultT3bpD1WrxVdipHfCqFEdEVA21niyUOYRAVtQdo4Iguaq\n27R2LxZScfONJvED5iXD+0GSH1uabsF5dQMd1fomWFG/ygINdXoQn8qK6T6q\n1H3o987YcqqOjK/CTmJ5H9nMikYviNwbD0pQkVePVYgr7+HVa/BLDMsvmEs2\nExahf62fYggZxIyrQ7Q2JDc/48EIRi/0OM+zVTGpf0XZgRHpcjbEuEI22Nxh\n0uwxYzD+CWvjtKyybT762t2O3jt7R3pW22BhwG+7lJBL5Mob2TUafIOmTCTE\nB3PzSgHknuzoY4rEgl9nXKywZyxyPHJlOEbJCHU7TpFmVXYmrzkzSYK+OVhQ\n/oc1\r\n=WmMh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHohmdmI6jNM+2yAXpAkZ6jzyvLadviPAfWRP9k6FhDmAiACJKfS4eH+IYTDBIZCl0+eNOO8OK7qFZI+CLZeB0qY3w=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.31_1606975114254_0.36411326667973665"},"_hasShrinkwrap":false},"1.2.32-beta":{"name":"@midwayjs/command-core","version":"1.2.32-beta","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"a4780db0e06235b7043fd56f643133b604cd3b98","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.32-beta","_nodeVersion":"14.15.1","_npmVersion":"lerna/3.22.1/node@v14.15.1+x64 (darwin)","dist":{"integrity":"sha512-fKSkUS1zm1X8ratAwaia2VrVjuYMjBIROQYaZKnWzsHjApeCGLFS+ErrPJW1HFS2lqqXp0FsrOUEApqw1EU/Og==","shasum":"df5fa7a405a275f0c01e4878558d9da663c650d7","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.32-beta.tgz","fileCount":68,"unpackedSize":188367,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfzzdCCRA9TVsSAnZWagAAXeQQAJv53UJD/GbOCfVnEs+/\n955itH/fCp56nmFZVwrX00DTsWYVO9wI6qu/a77Vucgvd+uFfgLegO6cIplK\n2ESHoWLsp1YPOUOJ34dejWz9Bd4nZcUx1brgiDSilT2LCNYQ+jliE7gUAl8f\nyLzJiSXmpTJcWkTyEEQ+CJuiNe8c/ubqhS/RA31ju1B1ycmVOmdgp+EoOtb4\noVM1YG1hKBItqMlCNCsJL+bQiJCg9wtBrGu/1JrcGuE66Kbxp707izqlCO6p\nHSJmd3AvGD1Evdj7jSzCHMNL/79XNQA8ZRhg732QeuQJYkRfuBJoSSA0ZiBB\nN2tiFTUv9+/v8fQV7gJ0CXfP5ZJOsZ7Ylk2xl83daBrJXIeukVZ1pps4t0M/\n8n0Tffcnec4n1FPjs7CTLtj3q1lD3JUX33/0Jyx2zUMaMmte10tG45HLPMDV\nmqJu2HuvtKEUkkyxqiP2Kb46i5wQZ6H7lpAs710SFxgbhBf8zKcPeOTEdG8Q\nQmrvGRbhIbe9omqnZrKqWUnjUFgAEBw5TvesDcBJugYA/UIv2lhTOidXLhpU\nHu3NViT/E5kkd9RqV0r71RaLX6jvT/fv8ac9KE17re9WOkw+siEWcuOvZ7VO\n4WmlmQTSNToqngZ+vgMl+Zx6iFbbtzAgBdIgbvI41MuY2YYjpCVOgoR9r35T\nVjwE\r\n=Fzlc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGJxkNswEVy188YA3pQ3JVlY/P5bVMq73srjGx5TAOGYAiA4lGEPhOKKaxov1AxQfh3IeEV5aMEpgp07h+ZEmztrKQ=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.32-beta_1607415618222_0.18412839699327477"},"_hasShrinkwrap":false},"1.2.32":{"name":"@midwayjs/command-core","version":"1.2.32","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"e357b05230ca308593ebe421c11650c3fcfff08a","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.32","_nodeVersion":"14.15.1","_npmVersion":"lerna/3.22.1/node@v14.15.1+x64 (darwin)","dist":{"integrity":"sha512-js5NjakFPREDqNRvC3b4yjnwUECZLr8mqWPJ66InvPRxk3lQQSeByhTbtD3In/sH3j8RbBjwZnKj4GHpk4srmw==","shasum":"30f08f9f7b6ffbd770169b82c8250ecb86b35d7e","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.32.tgz","fileCount":68,"unpackedSize":188520,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfzz8MCRA9TVsSAnZWagAAqIUP/3mdV0OGqF3lJQHhTk+Y\nJqIpOp/q1AowDOGWRjRLDgw3bY5kIVlRoG5JkdfbsT9nAJ1+QglCDx1aneAK\n3cor7Y0U1NputbkXeaaFSlcHi5jQ28Wc/4iDImVh7cuK7PffUAZ2JsQouLxJ\nWCXjW6G+A4mHLKEsXIhJxWdtaEylAd05Sh/oi6bRf4T+Unx6gXoolZy6Mps0\n2IEPid4v8Ox/N890U5+rHAbP6C7cRsd9YyKx8M7eqhENEYq4OFCjhKYxpiPP\nAMJUNAe9nxjYQ/5CRx0xny9n8GzAP9NQOpyONAi0V3gcC/Tn3fLwcURwUQl6\nGxsJkAaIJWwFyvWup5AmCTwJ9jslquWVvCURylsLeo6KKm0EMqvHmbcu4413\nZa09ALoNlSHl4rNKTTN+V3zdyisL9i1cRoBp7cQ9FqlWIAyOfrG287mybmdE\nr7KJ8SPE2YSVwl36lECEn13hVJ81KCNlaJfkWQ0ZISy3kNVdeqy55gGSHUio\nTozkH8Gx1nC2B65yGOrZMPgd2MsoUi+tV6hiWlrFPZm35eL5aVbJrDgh9A2x\nM+qTfrX9QjKLZaOpUmvK/T+5w34NY1j7Fo7hSAGFiAbMrlqxt9pY7+OJrOeQ\n0QaKiB8YWFZng2+H5tT4JzGeECUdQOEjbwyLMA89CkJxVMF8Go0dvRgwxXFm\nWX3s\r\n=QEOV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDsvlA5j+vFjDMbcesBNiChE0FWCxf34UgGbicSQMt63AIgOO511g2sMNfwXkTI13yZ0eDmImGHD5mW5xt7Lq2BOTQ="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.32_1607417611737_0.8949606667831393"},"_hasShrinkwrap":false},"1.2.34-beta.1":{"name":"@midwayjs/command-core","version":"1.2.34-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"6c35df5537f4439d72aa447d01fb9ff7b43bd659","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.34-beta.1","_nodeVersion":"14.15.1","_npmVersion":"lerna/3.22.1/node@v14.15.1+x64 (darwin)","dist":{"integrity":"sha512-/1cByEXfY70bKsf9ewpVWiXasVO7HXExGMApgkdI32bgLCRcllvBfcM+RMGvhuAnSb02fjffKyylJ45VqP4d9w==","shasum":"99a9af057efe75b025734a513eee73cd0395be14","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.34-beta.1.tgz","fileCount":64,"unpackedSize":179010,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf3zwWCRA9TVsSAnZWagAAOIoQAJJmBqfUL7ZJDH6QvwFz\nyqU1zyUpWI20DSua9+GJgcSLAinXCepNunGJ0zeOZLpSMnkSByX+Ion3knDp\n1kh/CWai1gOMKIMFtKqpN2nxIbkpjiTZqQlxKGoqgSYQtpXJXeCOAJm94Pxr\n5tWfo7qkAIbzNeBKbkCPmqQ/7xUA+0oNFXtVL5MCq+mQhqXjQrw0sIVO5OSl\nLR5OWWArf/f1GK5xdU8NfBm30HmNCTDfZ/98yP8KZcdTditxYBmycUJrduFw\ncQPJIZOxn2tave9AElpVDv1yEBrfUJ7IFWAFS+tJ4C1YfRYDSV4DBorMiatz\nzJc30lvyQ+3lNkCDXjsgXBOX3m/FVo/BtNUEBaR+W93az55FynMNLpnSGi7i\nCI5VCKoB1cF1W92DwqMj2882afEG6ARtPoUcXUi75QjvBsZndGMh8iReXtlf\n7KSHgQw/3vxS9+t5lbxA9IinlNP9qKwzS0Kkd/VVj6ngzhqGVoE9TDM/cCoT\nqibSgY2/Rck2ZQDnMVJ+FxgrCu7xb4pGWgzsbCN96jhemrErrnK0crp8voEs\nJ4tNrcgvbRnfm/vtFqJJ8FaeYLfmTV3iOtvX/aSxiEvMrx5BEcfkEwdcvr/O\nqumyG6BPwk9vOZ63NuxzKs2LE+iSCK9IOxhXF8+ASVDFOm6lc98I4xJtZKAY\nd6kZ\r\n=QmRb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD5iBG6c4vudOCTMweFiq7crVe67rJb+ECU0CBnqDgFOQIhAP/0d1KysocVD9EDENhg+vhI034eoBuuujoaz1dF8s8K"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.34-beta.1_1608465429655_0.20570472201282541"},"_hasShrinkwrap":false},"1.2.34-beta.2":{"name":"@midwayjs/command-core","version":"1.2.34-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"d347dafc099cc3421c180aa45612d3137049c904","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.34-beta.2","_nodeVersion":"14.15.1","_npmVersion":"lerna/3.22.1/node@v14.15.1+x64 (darwin)","dist":{"integrity":"sha512-ggmYDLdcQqhmL71bzZdLPBvlCQH29OSJiIEcdcmyt1rPfY4XqhdIds2zHa9g5D2aeTHoPtrH8L/k/NIDKN2vLw==","shasum":"e3c54d6e7d65817baff0080b84a24039369076d2","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.34-beta.2.tgz","fileCount":64,"unpackedSize":179010,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf30pPCRA9TVsSAnZWagAA0bMP/RzLuUKkPlt99eBHhLTA\nOlFByxfmCg8P6vP4KRAVXQS6wRtQ4eBGXdUx1oTGa28unFEknZYQxXskswdg\nqEuG3pw2LkwdlQqSIOvTlk3hEEp6OreXFW1YqGQfN16BH8avjyvNqS9rAcP9\nnLaywx0B8cHMiCcjkEDtDHrIGVlU4/zlxZ8wUFNiGG6ZKL+QmhLuF5aTirTo\n25T6P/eBap1+WI6sj02ZOr79GIVaQ9mLz8WVV7v1P8OFOpyjzkJx3eEWMulM\njxW2mfFlVhWJhJ9pn8vcMyRlhaOVldGthXh9/4tMu6q/+mbj79R6LlCvENKE\nKLs9kAXTqh/eIvRuIem7YAubpOgI90e5f9+b1lOHkc0Ue7sOmM9KsB5HzGCY\ndqhxCePaf4n+xveERsuMdYHuzicmMSozfLX3l3ObjjV6EhL7714ve6F+stBC\nf2t4IdU7u7SbgAIgFVNQvBw6a3QzGs2Iv1OugR2bhjpcsvD9waSOnMhkqASc\nXP6RN6B5bIhec+5M5cfM/APimPmxdM8zDgk331fhSLPDxmQINUQlN8D0yolp\nvV5IMeoUVAX3S5pdv7FSY/ncH65rDi5l0Xbw4qU8nwcJwSIy+VejAxBeoBef\nFklC9bWsOAq/VInnmq0Y9iI+mLkqQ9aKaN01nfcPYy/lZLIvic+1DgtQuiiH\nJthh\r\n=pivi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDjUGfPcyq35JP/49xl2XLaEeF39JnrgXJ6wF47kpZZiQIhAMEw/vzXQe5g6q1eByx2dqDLMOGilZw/JtOjU8KyBE25"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.34-beta.2_1608469070814_0.10100729448509105"},"_hasShrinkwrap":false},"1.2.34":{"name":"@midwayjs/command-core","version":"1.2.34","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"03ec4f65ff511a42beb97d54d17c60f8a77cbea8","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.34","_nodeVersion":"14.15.1","_npmVersion":"lerna/3.22.1/node@v14.15.1+x64 (darwin)","dist":{"integrity":"sha512-k6TnctmdRLMjafTToc3hrsDH+F21GnQE0lc5fPTuEii9a0fFfBRJrP/zN1ecddbEDNd5gk9M4n+WxRffMm2oZA==","shasum":"a8600d92e19fe33a5369482b35d5988da11e0d9b","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.34.tgz","fileCount":64,"unpackedSize":179163,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf31YJCRA9TVsSAnZWagAAOPEP/2jZ2+s+jEVacs7pkZBd\ni9urQqGWkd6ADAiilJW/g4pB4Bf3dM4VpowijQl9CoEEeJRU1Wbd7h5b5NSl\nm9SmPqS4sISDofBRbsGnoncvIHLQJbNpy4dy722wd07nrk7mX8OuZ6Ha6V/6\nOmtzY2b0hwC9THOV4OWZlJ5mpY3Pa10fHFWFjOVWAaL7wHpkWdy9Rdwp25NU\nUygMyemWP1+Dix+Wyi24HB4/HpbKstAP4hR3LeZn0Rs7cU1nPItfeSkcSWjJ\nZZVWlF+TavAdVZc52H3AlavjTFLRaA/mB40Q31vrpE/PoF/B/mNQ4aBMo6Gp\n+NPAzzi5c8TJjChkSodcfsK8xfFsrw03yKHnSrfSCfR6ZDJ67g9D6ONyM9Yn\nj6sV7O8cECs2Bh5punOJOkO8Vn8rujBjlTJqBEmj/afpq23TZE9iSMqSTZlz\n+RXPyJBetFzujB8XBD81CRHa+T7mqBPa1TyOn+mX2JkM+K8jcdpqvkVouv/p\nCb0I9CzaBakjXMsuuDVWaDRwGAs0nY/Po2REsIPEiUxfKjStLP7kp5+mDe+4\nCAfek/tHM3usT4dWhV1k5WuTFu81CHz/hi9xpx0r+LabNp3RQW8Vyci3iSAw\nEW5UPrUBkYnjiBhBStJXAS4kvD39gVcvXf/LHwkJBQhMvoSTXop28/z4PKQQ\njAgQ\r\n=7Il4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC/8MGDbGIfKsw8QozM5XBTjsbijs0LW/N/AOc6CVk8LgIhAOLGRsaW5t7wwcsJuYj7K5pf19JT8U3IZtVazSBgj3i3"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.34_1608472073262_0.6628087558647158"},"_hasShrinkwrap":false},"1.2.35":{"name":"@midwayjs/command-core","version":"1.2.35","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"d71e942747af75beff8171cb3b60f7a4246c5d23","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.35","_nodeVersion":"14.15.1","_npmVersion":"lerna/3.22.1/node@v14.15.1+x64 (darwin)","dist":{"integrity":"sha512-aLWr1Ik8GzoRz2jBl9XIvDU1HW3Oh7rhbFPwlnXgTpFnqq8onOc3bNBfEXMBfCbrhDJ4BCKhg8HYJFB1NUpv2g==","shasum":"c7514ec3f6d4efa82aa7b9355f4c6982085a82bc","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.35.tgz","fileCount":64,"unpackedSize":178745,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf5ARiCRA9TVsSAnZWagAA46MP/RhN/9PpXWcqIfdBizm/\nbmZRbouUTRLIoqwJRfBlZYlfikBqqAZ3sJJNDXAwadOw/llSdaw+lOMx2c+P\ne4hD+WCHeb8bTskxJf6cy2RtaIs8nqFeYIjItyuWmcntITbDP+89uhi/b5hj\n4q5uNBCUPx84xUBq07yB5tIbLWT6JzQTSrTNXFXs46du2rZ+ch/hI75l30wn\n5PjNUCBPVepFno8VHwQeZ9w/+YLHmeQA3OPdyRZgcLFgKo8+32ZuSZ6UcRF6\nBGfjXCjv+fmzxQwSyAFkKisR1HGVibEAgCPpfehRcqH2ImyYVGLJTZCA1Esc\nvfb5cq0OpHqqUgvmM7VJQdiIRmZxWKHBpawah9rDkUzxoHRcQcMDP5kLmjgd\nGZqMBO2CafCtxTD9riEdGFwQE4hgN8NOiG0/AVCKugnpLjbdXhonByNJDHVk\nUI2otc8tBgyekKmBKu2tBugLCLLXm87jgkv1Afjz4ttLfT2NNXFJIy03IcQm\nlfGu7ULlYJG9oCnHG1EU9ADmdH88OTPNgxxgQTJnX5/MUpBRXjqOjKDTKjlk\nmHEviI5puImvcqgAP9CAB3lnfmbeNogquUjZk4bdpOEnI6QdQSHb7xef3MQa\nXief/bgM+iFVcTrZPHled9EkWaZeM/vj0vepynadLeF9qq9cZ19vzDA9++Bz\nLu6B\r\n=L60y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID8Q3pfvw1Z8VBuVuh/Ud4DMgi4u3icpy9m+g3wWYPcLAiANLSE083os+TtIUBxoFtPPmxmhav51HMvsKzMB0fPPXw=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.35_1608778850159_0.7308711602486877"},"_hasShrinkwrap":false},"1.2.36-beta.1":{"name":"@midwayjs/command-core","version":"1.2.36-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^3.9.7"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"31488759e6ab08d5151588eb8b51631bcf2b8fde","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.36-beta.1","_nodeVersion":"14.15.1","_npmVersion":"lerna/3.22.1/node@v14.15.1+x64 (darwin)","dist":{"integrity":"sha512-hnZpYLAcGPzBuMqYRdfxG8ZovePGvqhB1+AdjXILA0iaS0+4fglmrPMzrDjuG3jQ+DLttkQQTjktJKnL1HHDfQ==","shasum":"8a5dd03981fd9ab927258316621dc70b0bdf96b9","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.36-beta.1.tgz","fileCount":64,"unpackedSize":178754,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf8s8pCRA9TVsSAnZWagAA1L8P/1u1L++EteosDxf8vgJY\n2hvbGRcCPMFrYlVVtntShkv0wwC95gvvnqUuO4ouK9iesKmtUTPYgIit9qhh\nnlwNz00EweTRWe7D/W51iOdQ5IX4ZQvOZs0T0bWpvGKfjKIdPI9pHxTnBfgR\ncDy+vR8XikccKXKcch47yb6P5razUPRr4ggGjavFzW2zZlg4+bDTp+ug7/7N\n39AOUKnsb7U+PBxngj/SaSoSrb7ig0adhzUZyFKUq/uwpoubWZFGum3bGceS\niQ5jkG4TrNWmYCiVbyrX9ZdPW3iQnmbSxfhN5l5OTMIC8aIrJdH01yLEkJF8\nOL6Vb4DwLQc/8VXrvCsTaNPnaJkGPQbYohdJ999fg9U/hW5xb3uU/Hq7u6Ck\ny3wcA5kSUl2jsQz4g7r5l5y8uPMVRBmP4y/NGbbi605G54hHwOYkBUV/5DvT\nrgyPiJfJQCjx/uHPN4TrypWWPKYZWNf19zjC/A/p29DDzKCoZlgKMTvCWxQI\nKJhklkF3kswPGqlcugtYGxtrnPLARenqMLzJoi/Qwu2hersocDLGI7UXLWC8\ncWQZvrTUHde14OfGZ1F/ukC0H0aTUUoMF5szsX897jGWXwE+4pVR0E686yba\ntvRwZ3rPHyao6YtihAPHRnA2+XRimPmD9i02ZZBv78FrfU48o4o59YPoRYbH\nFboL\r\n=4JlZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH2laUCYSfDasoirnYQN0wOEsAH3ouJIMOQyDbxmqaoTAiEA415Z+7lUn1DxeEoe+kXOVvqjwgCfRP1RdF5hD2vAj2o="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.36-beta.1_1609748264910_0.1503077809345874"},"_hasShrinkwrap":false},"1.2.36":{"name":"@midwayjs/command-core","version":"1.2.36","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"4deb3b73a31511aac18d1cc0846a6cab290e4f30","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.36","_nodeVersion":"14.15.1","_npmVersion":"lerna/3.22.1/node@v14.15.1+x64 (darwin)","dist":{"integrity":"sha512-q11dp3osoUdKtNRQhLFGqU154ZNx1zbuw78nNy4z9Cmw/X7GVGLk0JBt6Dj1mDBrP1PB1NNteUJvrKNnP9Lzrw==","shasum":"57d0bca2e68f2da28bb3bbb5444428a5b9713d13","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.36.tgz","fileCount":64,"unpackedSize":179098,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf8tthCRA9TVsSAnZWagAA40EP/2CDF5QVoHMHJ+ZygUsr\naj/spgohZpWJITmcV6WsWWKjU/94hOjtOqs2+0Ubhcxu88ZRGFiiVXUigXXO\nu3dHhWMUVMKjM3kaSM8bVQC8ZllAspL/D+wVwZocAByM4UkTuuy5MzzoJMn4\nkjVIhrkF0pC96YC1XX8B05hbzAv0+4jcZN0SLEC5bcRsjdOUJlmxCJ8cnAzI\n4hZB7UlYRmMjoMJfxinHe0Y8GPUfvTyJtSBvQJTasE9uavv4lTU1a8JJ85RJ\n3yq6XQQnABzrhoU46bcTIkL5Rxcmmx/PgAL/D954d+DrC6RMqW5mHpvGE3JH\n42I4nM32MxkmDUlKRc29ckXUAhQS1neuz/FSmFUhmzQzCws1XjcJ+/MRvdov\nwN8ohlWs+AcveCz3cGPuUHKPIkk1SDIHdAt6c0J7aEhIpOJncJK2SixPCFnK\nkbmjohz8f33WJREgNow8BnFviQeatVph+7YMsIkKFJBGpG+g1dAUBrrMN+Mz\nYtC143ALhh8d/mye82uJ8YMlFfQfZL6A4h9Xei2Eh74lXsfgKBey2Zs6hZDb\n4mwrHcBhrLRXjGckV4r4HC30wUQxQoRB4zXgx7VyAuY/GhymA/zyYLRLhLkR\nNMgkhz+9Ru8S8sze16iV7FdpPwnWLmkV1WD16giyTVZdQ6D3nSozEPFXKSl7\n04cw\r\n=Qabs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG6QKFLxlCg/F47/ArSwMrNFCj9I5fBlAbjY4dYplRDVAiEAi6oEp8+0LxlBuKCnQ8i8OlZy5yn91B+Tpoj1RRPcIyY="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.36_1609751392814_0.006098838426819908"},"_hasShrinkwrap":false},"1.2.37":{"name":"@midwayjs/command-core","version":"1.2.37","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"fe3e1dd72cc488466cf2cc22064fb63c962be8bd","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.37","_nodeVersion":"14.15.1","_npmVersion":"lerna/3.22.1/node@v14.15.1+x64 (darwin)","dist":{"integrity":"sha512-MWl3+420fSemgKFvvmZ/QlGVKdQOdjDezH7STyVlBxEsaM/Xrb0RXabt6aUTdFC7RuyOD4/pRdKuda7zJCwgHg==","shasum":"a8368fc27ac454647b62ad78370dac8633f8844b","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.37.tgz","fileCount":64,"unpackedSize":179396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf+AUaCRA9TVsSAnZWagAAkwAP/j2gEopuHoshjg/iappU\nUd5OdsXqCPnnKMJsKZhelPBTCyxoCEEM4qQUsVdU8WgnIvIcnehnUms4/BY4\nPCqLxoqWOJFm+vE+4ldfPzMKqoLQ21IkjpOF+8reyucXW014hW4ch3Pck/UT\nd3IyF/k3zRGFaOaiiFZyFacTYXb1wXYt2yKdgBDN0hxprXEKemKMgSQmurih\ng7wkRCiKVkEIQ5taZMpQp8gEFDrxqdv6rqx5EAoCt9IIETg0U1lhdVWJBAZ3\nTLbSchW6UINjEfYVNwVPXj1BV7Dvpr+c9oygdFyl2y6xBiloNnyM4JMBTKFJ\nPJKpudXdPLswZ1CNZehKsgbu5RJgxJRh1yFskP1cU/Lg2/MSe/O9YsiHhZsk\nVo4k4hqJc27ieD/VL014Ff7rpR8otc8tZatpgoFAsT/P7iXSDobsUXKdiTgw\nog96GE98IJxu0M+CDR+fsI2y+sdcFpymP8kKlDLS/D3J8+K3NvxSyr1BESfP\nnT0r4SrB0rDbYB9dZIP1WRGiRF6+nbpMpFhKuyt6RZp4Ufkj4dw3Ws7LrW5+\n5P4MC99Nfy48cbdzZckylZsyf8+38Men0F1gwuG7UGiwN+GRRV2wA34yzn0Z\nsGbL0/Ov5K0yZCgUrMjl/yaQtIvP+jRzKBfVp/+tPb6zsbcjxoBwuB68vtwo\nyVOL\r\n=o5qM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGHZhwQ4Vz3WP88M2t5R6l5MnDWXbhDJ83G8rn9JRzVPAiAYRsa0KcSx/DjVhjemC6YtClhzvWZBp6K0eiaak0bi9w=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.37_1610089753519_0.5380642722435134"},"_hasShrinkwrap":false},"1.2.39-beta.1":{"name":"@midwayjs/command-core","version":"1.2.39-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"472bd3b325e9837c822ec5209aecda0757c93630","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.39-beta.1","_nodeVersion":"14.15.1","_npmVersion":"lerna/3.22.1/node@v14.15.1+x64 (darwin)","dist":{"integrity":"sha512-5cQic5BeOuaj0oU2ACUmGv95JyWRHSFgrneOAzsr3SdxHcp3kcNti07PnWLaCsztjbGRPUA74CaQEtkvjZZOPg==","shasum":"206da2f9b8f9ea9a6bad5bd45d059a5f098c33e3","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.39-beta.1.tgz","fileCount":64,"unpackedSize":179995,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/+ICCRA9TVsSAnZWagAA9LgP/j3xlcSLF4w1KxMwkvf4\n1v4f9hsGSag8pt2U6ZK7K9siiRLNXoyWb91E4pplWUcRFNlbdnD8I7zbJhzh\niFkE3hzTQcL6XSEOzUdpufiw/5wbM4taI7Ki2TFNVn0kw4jYafulD/uVQZN5\nNag5mUsw1/ABu9XUompIBPW7JUjnkxF9FGoN9wJoBvqppw3xH9xV2YcaTFjO\nl3HVlrRLGDqWmSyfoDorDPlZp6qWKhCPTPQOriu/mQ0zbpV3HHG1f8Q9xLDI\njfDFPsyT2ooMDky8SmZSuGzRMK3o+D8DxObPl+tl1JX1F+7suKVFuTX333mU\nQbk1WzjNDGsibexvSKECXYHWCWFhufXafMI/3b2wb7Ei5f4HGU3TASKudwHm\n3rzSVDQiz5QbarLVubSR24VLeW1uPCeK0LIJigB4Q5Ws0WtlB1H1Z0mS3Ktw\nZORJTS5jZWVXgKXlJRRqTO7Da1jm5zUmKWR60NC01Kury/voBTyyTKJLd9Xx\nJ5e1VsQ8EAfY0gyXx2wXFT6cb7UBbgHt1kGg10+6hhYs2OgflyD9LNoZOOGN\n2avl2wMXTslpxBkcy3GkjrubIngVNkGnwik+za2kBOAyhrEUVvKNn9LHCyEz\nR2R3JPkuLB4bsK2gThNHgOFFQZ7lF0FpCS0J9Nee9ogpzQpSPocUXLKGi5ke\nhkKB\r\n=3g4q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAWSKfJuYz4ZKVqDiVranzHoyUono7VH++VeGgejABZFAiBVqDm8WPdphIGfCm66oBEMjg1xRTgsOS9RzEh6pTH/SA=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.39-beta.1_1610605058084_0.2548861687296069"},"_hasShrinkwrap":false},"1.2.39-beta.2":{"name":"@midwayjs/command-core","version":"1.2.39-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"49d1c9e5bf408170caa11e595fb6bff0d25f5899","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.39-beta.2","_nodeVersion":"14.15.1","_npmVersion":"lerna/3.22.1/node@v14.15.1+x64 (darwin)","dist":{"integrity":"sha512-yp//kkD99C9maawletmsqRi/woY6CvOqh6W9H+gIP4WJK3mq0p3g489HqVyR0FCsxN8XUNLPcpUeyyWmMbzvqg==","shasum":"7b449cf1c10bd663d77b4b933b37f109ec923f79","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.39-beta.2.tgz","fileCount":64,"unpackedSize":179995,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgBTtdCRA9TVsSAnZWagAAAh0P/0yKfigmZjVduIjrSKFP\nOCrRrbt3VMLDPGk2r54Xriqu+5hIlmL09wPE8zKWtqLCavKzrf3T1AvyeNuq\nTnpXV6R8qEZGfJ7KK09XRkrwvd+vaMImLtlE0cdMTy2KgInLDqfip6SMQTPD\nKVH8n1GXTdwnURY77MRAuufTsAj04eha5r3y4fna659uHwmS1vOu3Cvhin42\nLws/jrFc3XgFnig46YG1cAG2U0RJBWJ0lNTYp/QEGuC4O1I3K2HY0vbcLu5u\n+fNOu68ni7GzCRVxznRlD4s0HBxaLoxgfbTFXJCdwf3ZnO6z+AkKDoL8wgax\ngv6a6zhVeDo6CMy3djAbWVoBZqcx8nNjcKxZOlpTf/6ddfbXZTdLoKh8DkWy\nMK1u1j7kVLXGCkh2Z0Qo/x612bdWaNUb3++IDGqyWq+Fg5ur7NGqHiHKy4U1\niwAG4wNTgs9Nc+Zbpyf1Wvc0of3+2F6xJHQqdujQuPuufXIdOeEflBveKyfb\nr2HLQt1vQOyuwa5LAYkHjWOJAOCSjo0I4pg9q0kPgRd4eQmezb7AOBQYhUcF\njgI0wmT8vJqzjcVcHp+3WC1KHas/6cVCY5tOB6PSpwBq0OaxzqY0GC3BKQBm\nd1SPIcuKjh4Q5gvJIymTlT5DTD8XNeQoT3KLgF/+tzzuZkVlAw01litVyB8w\nKsbi\r\n=VR5S\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID7zR2Ql0K16TkQjNxhYf2UgqV2aJICSWwL6ChJENt/WAiA/pTwcdy9Yd2LqtqxSvLkdzuXJlrYHKSLRmXw2X4ZJOQ=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.39-beta.2_1610955613338_0.9728169148224581"},"_hasShrinkwrap":false},"1.2.39-beta.3":{"name":"@midwayjs/command-core","version":"1.2.39-beta.3","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"1ec9d2b837adcf0b8ef06dbae42827b75b80ba01","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.39-beta.3","_nodeVersion":"14.15.1","_npmVersion":"lerna/3.22.1/node@v14.15.1+x64 (darwin)","dist":{"integrity":"sha512-AOD3OivoWmz7HjAUloO5kRVwmYV1I9QyZree+avRbhxrXmVxsTs1vdJzRNufkbfe9NEsXD0dQkWGDzSqLr4fOA==","shasum":"b8d20cc421d33376c8e9e9757b9b649df7c731ad","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.39-beta.3.tgz","fileCount":64,"unpackedSize":179995,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgBUuuCRA9TVsSAnZWagAAVeEP/2Hs7NygPIyNV/gxTJbU\n7LqC8S55xxtpGKmjgnW9NMrPdTZM9agmysdC4TjaaZhS3dd6zwLoC+DRVuQn\noRQb5UoGP4LfkcCctZMngUdjYVPAvMBKkDKy8CkX7UXlPi1OUstAfYH1lrsu\nyj0WGnTpAR/pDJCgQTw1aXfwd4vXDDBkWggOp7Ke7EPQPzAsm2I9no5BWjH5\nilBFrMEFXaHQr5/BUEmqfYKhe0SRDotX2Th/MlUgY5fLY3FruELL1sksgpnc\njqaiJivR0A4Pcdz3yOnsSmZU6L6kFBY0tRSYEZt5H0XCXUOYPjXRF4UO5dpb\n7nr/41YMEedh0GiHfbln0drYb3/K7jgkF97xdvb++eQlNnMfC5ONOtN6fGPi\nJFfNlEwEMq5vSEyKzX+gGsSC9boCFgT0LBCcs/1yK0OONAlQhH3Ln/M8A9Qs\nVeGMrReXj2PJNjTsPQlll7KiSrrfUr5KRjYu+Ztz1PmGfSy1DCAXobn0jmqF\nNFarl8F64uRhJg/oM6wygqVhG826h2mShBVlYjCDd+pTny75Maa3d2BSa8Vt\nhK1L0fXQheFatg8bLc0XlqMWnnnnoiawGK8s0J8R1y6LBURpC6hfEv3sTSqB\nwoeVmUHTID74oCYnQwt8kRaNkJEO8nn5SRoUHGGH2Kb+iMWslATYejaq0165\naKeV\r\n=I7Tl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCKsAi6KHM1IEgnogZtyOXAGVmNmc1bpCPs/pferxZUXgIgBHRZOlY5Xbdle1RQcGZPu5ZH09jGyQLZ3jJzD+EhF4E="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.39-beta.3_1610959789880_0.9466590250623934"},"_hasShrinkwrap":false},"1.2.39-beta.4":{"name":"@midwayjs/command-core","version":"1.2.39-beta.4","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"dd895f253f483409e193d00aae4eaf4500792282","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.39-beta.4","_nodeVersion":"14.15.1","_npmVersion":"lerna/3.22.1/node@v14.15.1+x64 (darwin)","dist":{"integrity":"sha512-ZWhG0mP+N9bGdtQ4KH5E4POcUeJ9A2X5JI6vwvzOcyu/J+rN+FC7XhqiVBaO5tbDBZwkhAFqcSYQ8PaShMpYSA==","shasum":"5e8598ce0d1b02243ec341cf3e567a6d9363ece9","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.39-beta.4.tgz","fileCount":64,"unpackedSize":179995,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgBWo3CRA9TVsSAnZWagAA8gkQAKND9U7JJhyTYSTYh4uc\n/LyjJZ79Lb4536DpRXYJZruxLhJ1FpIEYWPS7wQF2Lk9w4MVSWX5v2ZyE7Ec\nX1xv5jUWX/URSQksMuF+NDjrIdw39Zs2UPQAsPB3+S9LFIuc4vR1M80zXEez\nfkVz22kAXw3U/R2Ve+iKQ8ECKwpwDAGwQUh0e+Qx1Uzeve2yg7Z6sTSCMzVk\nNNYzq7HuIBsja49hEv3lwQiD3+7i8d2bpumKjJVS2si6ziXnRiJIEoREz/lC\nposS+OVdIuHmUpEU9ko/3KwWsscTKEncpGQOzyWmgFQYbLaUihJqS8WJEsJ2\nfjpILlYMOyTOPTIEJAlDmwH+qYZLo2A7GRqjLGhcr8cEUf6NHyj3eU+QNKj8\nO8RKM+nsX5zgrblzVzegID/QjT19O+kjdeIzzFyF+eL3SK1w/GH/67QXCdHL\nUQQGrvr7svQLwRLqqSEJiORcZm6sIK3ZVaBr4FXlSeJZ6aVqrUGw6mz169R2\nnenNZ7WeYhrP3jILFy7j8l7++on3vvaIkGpqi4zItCGno1hCjpQO8j+KhB9O\numP7jr2Hgxly+QkVXj+rpqLc5DsrznUBsfCKIs5oub3Jsl8TGRXQ5Mq3kZeu\nbuHFRvv/xrF6VHEbVGPWJ4JAVmO8FYqd0xyAdmnpToX/yAbYvNNhk/ugUJxZ\nG5R1\r\n=GN2C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwh4GkisJXurbMI+fGAn3Na/Hzy7yGZh1okW3rKBzjGQIgaDNk+I714KeCs6pVHCuJ1fQ9kZqHlyl9yjdsKtMe5zI="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.39-beta.4_1610967607353_0.8907432315738839"},"_hasShrinkwrap":false},"1.2.39-beta.5":{"name":"@midwayjs/command-core","version":"1.2.39-beta.5","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"d2f5e483f0c2c92abefeceb67dd2a41b456ea544","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.39-beta.5","_nodeVersion":"14.15.4","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","dist":{"integrity":"sha512-iQr71gXX3ihpuJzUcXNFuxLC8RE21duQtSXyMpXS5YdgxvAsUympNH/dlZ16Wqz6RGrHC9AxJc8lCML5TQJ02A==","shasum":"8a5555ec7a99b987910213f27181ac6e8a753202","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.39-beta.5.tgz","fileCount":64,"unpackedSize":179995,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGmRHCRA9TVsSAnZWagAAIs4P/1ZLGqx2Bou28bGOqREh\n3HaJRK2cjCbGdI7VRXgHKdY3o3x84vFRzn5Bt6iZcDL40a7LMINiuMIqnzq1\nYtbg2i+70ZCVrx67cuGL/ERZP6CzhrBPGkWuiGW1X66Az0ymAvr+kgv379Tu\nSQqnciWsWWSgOWGfPMZu6b4Brn3bNxVRfhaxsgquiUEyIGxtrxU4DhLrP1i2\nbvIR5N3AKBDv7tFylHDb4BqqPiOn2LQVrwF1Ci0vxdVRRTz1ho/kXLbYQU3Q\nG6Oh05bjnF40+lzRqapIHJ0t2CEvJPiGns3jAjT0y+S/70cFQXZY+z0WtP5f\nKwP5yExJ96XSJe+vVsS0P3gafGXthEtYCSO2sovc+d+kAXXboxVsS7O1TJ8t\n6CSpoLGelm5+NBbBS7i4YnB3Mr6/3uCj4weI0T4TcILUHOWCuwYX8Fp1xY1l\nZigtIc/DIn3/ltADIPFnK5A3L2/NXrKJSNWAp1kPMQ1kdOYv50CiTI6fhSji\nGqAKM4kb1sXWWJtKIXb5f7aZDm0LJV4MOvEVYTDUnt+fXqF/qncYVld2yehs\nSnwxqKq4sHClA7Yp2UosgAFWYaSHf5N75Tvmi8CiFkKvcaDaHoE4hMsNExSf\n6tGi2UNC2n4gxaJPIAN/ZVbPjeiDrRWRkbtolsMCdHNEA/pbGiJuhl/8SX/5\nTIm6\r\n=Z2rQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDs/1k3mO8xheVX8DSD/dFcuWUSoMqLE2w5cSWVAh4eRQIgJZ4I6lM5Gu/+QPXxWz5kMp8vKNOUjAbAKmbF8s5KEPA="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.39-beta.5_1612342343021_0.5760993720257108"},"_hasShrinkwrap":false},"1.2.40":{"name":"@midwayjs/command-core","version":"1.2.40","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"d5c0b37752ad71c4e69d0d9e153be460a4f4e605","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.40","_nodeVersion":"14.15.4","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","dist":{"integrity":"sha512-UT8DJcD4/ajgFbLhTGMQNoqL5tYSo9+xlgPFsOQ+WQ0pnwOcTf2BbVAhcRbWCSCp0C5+TNWdtvtjiyYoIhFLFA==","shasum":"d9451ca2e0fc2fe23999292af3ae0af27d4cd336","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.40.tgz","fileCount":64,"unpackedSize":180148,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGme9CRA9TVsSAnZWagAAbKwP/Avlz73bvifG2hZN0Z65\naQ4U/d2ZmQxpxHiFWlN2HQcWUJUPxxyr5WK4Da4XLgKS5cuv78ww7NFru7gt\nkuQ2BOKNY9nbUYf9tIRRxf0bZr+2U76/wPhTMvaEu9BSWb6dWWC3tdUo2wXK\nw617I6FQwKEMEduArUG4nInZD6dQ+OF0blqXTAMEdCUqzsjS6dnPIzVokZIi\nKDCKyV5jzwS1nJxYBuJ/nKPCYqwL73KsPQFvv3yZvMy2Oo/LeXWJBL9em2nC\nF+EU/0VntnIX0rBxBWligVMqr3MUZiBXwuOJy0OEuplXGKkJ0l3uGkVJd3uc\nHR80Yx9N7c7an0I+rVf1HokHmx0iXYqCco4XHmL6y4TAldixNlK99t7AyBjd\ntFMhRupV+8hv7YqKEGc1U2E9lTGmeKAx/bVe9Ivd3aZcdEFIcfgl0iyi3bov\nWId3gWZaSbpjcN+WkbjQns2SPWN9w4GucScJtGZuiow6NjDNLcJ8Xd5Yv3d2\nvlmyDHYztD+1W5lDYrD/MFKrLm/MK85PinwsCxn9BG/qHRmBh9KDe6mLxQZ4\nP/lyBUr6qWbORQdkyffOPyx9vLLFJVO1LqEpHMdsHrpbowqsBgayWowRbmJJ\nq2+Pseqj1gRHt6scJ400BYbyItC0PzDzB5cWteGXr2pOHmlTAWJz8n1iFWtZ\nhOEh\r\n=al8n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHw/7mz4VUQ+p2BtjN6gwp+2x6KerwbBBJDni9G1l5B0AiEAtFwnYJobnBOsqzAUlMot5K+V5nMhhv+oaJR2ft0oexU="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.40_1612343228776_0.875075654514486"},"_hasShrinkwrap":false},"1.2.40-beta.1":{"name":"@midwayjs/command-core","version":"1.2.40-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"347bf75be36b07b85814c337bf381f1ac55254b5","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.40-beta.1","_nodeVersion":"14.15.4","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","dist":{"integrity":"sha512-D9uUDZeOL1MgHeT7uVi/CTrTpCBEZG35IGFxu5xv/OFhTVDrvjZ5Bs09FpHFw4JSGgHZoxoVlbJ4Eo938e8mgg==","shasum":"b7a895385e5fb4ee27516951ee1f6f8406c45391","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.40-beta.1.tgz","fileCount":64,"unpackedSize":180155,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgH5gECRA9TVsSAnZWagAALEIP+wYqLruEdUG4as1sc864\nOiTnXBEixBVGAPxnQV7mDf6II9Nc15UDKogMl/iW6EvtGyKfxqxcMUV6e7cc\nrPvPtiHK51NO16Zj3yTB5/jxQdvCme//fhwfUNJr17QPUshX8QOimrhglO7E\n4wTlSOKHGvGYMO4pPXkCjh7pcruo4sbZAuFNowMaVVcJv7rzls3mqeMqfvWI\nlnpFU57t/15GUhhLu1UNJtalfu5EabHwfUxwVt2/T173QjCKKi5ra3fIUpJl\nWy3ezBhBucPgB8pzvi9+blZ7l3UcKrff8+5loaU47UC96xfLaIPKIj4Hg+Cg\nWbTvP2cddNwWVOph61N/C7w1BrGIwc5heS+rQ6jGCqan6lV2pNnIQdG4AmsQ\nqeNh70S2u8s3RzVz8w2jN6sNYlYKNoR82RfzRrsfV3fMcFK4T/oUxY6KyQ3f\nuwHGEtjxMmYYit6w9bgAJB9hfMoZ4lWJO6wwxq33frMtu+EfaYAz4cfBP+6o\nCgDyVo1K4vgMG7DZshTohz7IasCs6ozL7utJ+hEXZgNNsU6ZkaP9A1w9DzO+\nPacephmPclJXdmO/TX8DiwKf3pGDTjPjnK6d/8vvJXRTrq+OyuM9h8jKOi4O\n/nz3bzT8FVrcERxgO+H/zzp0qP7++zUFAMcgrwB4Vco6nWMsSogUXS467p29\nvcV7\r\n=Axzo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD0FkWn8u1KEI5Zi0tQdEtFn72ohfyr2RTJ8BQo7OMakgIhAPiIySIMoBtyKZvDKfOz3tJkNsScQ/NZxnZ6XWWzNOK0"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.40-beta.1_1612683268378_0.12815389668503885"},"_hasShrinkwrap":false},"1.2.40-beta.2":{"name":"@midwayjs/command-core","version":"1.2.40-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"effc7ac8b49d65ef84e307e8d2f72e72d8cfb3ac","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.40-beta.2","_nodeVersion":"14.15.4","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","dist":{"integrity":"sha512-wtQIfWqSTHh9F9ADwNQJEpKD0L/bxBm2uVDBSCb81SRORkYbytJGEc2jG2NVoAL7MIe79wnCwixblQDc4dZLaw==","shasum":"21c0e32b3b9c5e3b7f39ff6df8442e8f0b35501f","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.40-beta.2.tgz","fileCount":64,"unpackedSize":180155,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJ7nNCRA9TVsSAnZWagAACYwP/1cyAT6OQOgvEWcwR1BJ\nAvYwNwEelbE1v79wiy5oCmR7hzfR97fJVJIpy4lWttlQ9RhKvHj1hNKj26xw\nebUXl8oTq42oV4rfVerdnoMj9O8pk55x8ebAa2JwzC6yaSh4DGaVUt6fNMj7\nuJYcGGX7yKYJPn+uXYMvmxWdCeH5AkVulUYYdMRTaK0DOCtnPNwvgw3/p/6Z\nHtKCFPnDfXPZY/uCjk2W8rx5COgs0ggmnLSx+lS1PBmNWHXy48lkybgZTmJI\nCj0R/4th8RxCafwaXwsOrgm821UXpBG+0B6EtreyJb4ihONn0FKHsST+VoYU\nYO7D5MxBm4+4OEIm/QeyfZy9r+1E/HXyssIyNycsVbCWCHSd5gccmlXbPmuG\nAhUW+jM6tNxwfWfS/Yh+3JXCvaldcoLvjZ0QHErF2HpKHJBjti7iFUpghfbh\n8GcyrbNkr163YcSLsHujvbP22SWVnh2ynMtxKikcIz5eXr3lT/JUSnwhRWeX\noI6sR9mjRofgZKVC413OY8fyRe+kC3TqaWI1ugYYvIJ26ZDVmoWjWNt9/vXz\ndys/luh5vOG8VewPhFZ4Uw1sW2fFCKd64pTisbsdCsuCbtQAgSTvnLCWf1Zd\n/+iF3JQz0Z9JCjRc9ftZmEDXJAHpobKvCgi97sSwDbb5Qq8i30ur7Mtb0YOJ\neBwP\r\n=OKi5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAl2ybP7TVOFV+QIcxxl05OxJ47UyO4gzz2nEAOUTeckAiEAtFdGt3TWQmWERb0jnNKLNN0iT10LyayqhaoqpOJyumI="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.40-beta.2_1613216204702_0.9832484331199847"},"_hasShrinkwrap":false},"1.2.41-beta.1":{"name":"@midwayjs/command-core","version":"1.2.41-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"8ac6d7ef3af60d26681c9aacc5758ddd5bd9bbaa","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.41-beta.1","_nodeVersion":"14.15.4","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","dist":{"integrity":"sha512-Ll86BE6jC3Pryxw8MWdTiWQI0zOIJqpqT/wvIPvnAQ+bzMlz44K2ePVRk+pTQgHqHc3Q/htSv9cOoIgLVxW6Rw==","shasum":"21ff557d41d6a360a708c99e1c87f6a72f0a2510","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.41-beta.1.tgz","fileCount":64,"unpackedSize":180155,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgKIuxCRA9TVsSAnZWagAAt14P/3koClr85tN3TBQZ04a9\nmEdclK/DevG2jokz2qP/5x2G8rX9V/9j/Q8eohrL0TirJ7pUxBNUa7Cm5hMn\nv9Ov+Schsjj95ItXU4ytYpknFUituvwlyvLxWqqzccSXVWUhU1GT2jRkoT0t\n7kD6Z67tbSp9pXu0d303ntXRDcBlN0NKHh6oxICsdJ/kHnd3UhMQKigkirq9\nMLQaGqiR2/DY5+y9rCfWrtEDIjA4Bvq6MryXKnV0WxKvajQ2Dnf+PQkRtgjw\nFZRfeThOORviMfGh1zyH7fuFlv7khDq2/ysZaG2UeJw+atsBjiiXU+2IQyPh\nrm3rFqaCLfvbDptlp/G1T+97Xy6fXql1yjS21+kJ6lpqG8mKx4KjqFhV3YsO\nCyVO9FNZi7+u8yX+9Gfs4+qkmqbPB8fx9/UgHybkAp7/mhPifkkyuUom6Rze\n0CKDSDc96wMcHi4aU7kpBPOVXbr0AVl3KlZL6JmteB+NNAeGRvnleOLh+8j6\nyv4TdxhvutB+JqBGZDH98kAhzl5bdimrEZpRNCJd/I0rx3QWOlK03MByeXo6\nhDvQxjL5lOvzxz+vw9JEiX0xrP1BaFqq0YFsornNVopwBnES1Vtqq08cquG2\nzUrXKlJanZiKCPl2u5goU9CY9iIZvI9E9p1SCAbR5noLkwdvjGiI81bEdfU9\nsg0+\r\n=/xHp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/tPQ0q/FOPXfE8oThzdHWjtXrjeA/NCwHinsMQngNHgIgdaayFdo73rZ6qgTwd4gus11u6L2udbh4eJRGtr/9lr0="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.41-beta.1_1613269937558_0.5777946355791241"},"_hasShrinkwrap":false},"1.2.41-beta.2":{"name":"@midwayjs/command-core","version":"1.2.41-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"878f32b605017c89c2dd0a9cc735e664e50a42e8","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.41-beta.2","_nodeVersion":"14.15.4","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","dist":{"integrity":"sha512-Xn5/rOAKL8yn7V8d7V0/XQpl/lxDCE6Vo/QDxzAWWeCiVJpsPB2F3eRi6TZ7cSm41vgyQs0FvSi4SUQ2o4/doA==","shasum":"e6e370d0af7d6f7a46fa74c95a5cfe6d2722f3b9","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.41-beta.2.tgz","fileCount":64,"unpackedSize":180155,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgKJK0CRA9TVsSAnZWagAAA9sP+wYH7YCLqhzHaJRcItLq\n4L5h+nIiDuFoZhRpl0fFVj77oB5Ne9XAX6VJ/i1MAeroJuIM3VgAbwRbbPfd\ngrFws+GqnmSxSTfevEuq9rJyGbsntuKvFJeYJLWfiReNsVbFdAVcvEUORxZr\n6QwHNmByDPdLaQZrl3drpHGEsMMZz8zT3rSdjS76Sw+UR8pa9qtFkob4vMfp\nmw+ZV6kr7NRc/oVQ9EcoPg5AKyy2WhLM5n1fbs0NIfL675rzdo47DlMxOjUf\n70b5aLqop7hz65FXsd7mc0xVUvqqx5HRHrBUhWEqqiRDsyvIMNbovSG6hf3g\nK3Q3c3dECOdW4BgUZX6orWk1TIVcJx+W+Fp00Fwt9t7CP69e94oYzH91Czxv\nbGO8yL9v77UmZujjQPoa9SkfbdsrPZpG2w3QcuUb0kXvZjsoG/rlkpxdEiGL\nbt5szbjixjsRIB0mzb4cE461eXBMF0ihl/giBZitVYutCNEz9GvYgxmvJQbZ\noqwbT5hav7z7bYJLoU17Nd9OJfglNz0LWSQG9SCgMICelASkLTVdD9Gy/2Fd\nSfZ4pSXryi004+u9h6GoHDQ1coO9Hb3rv4D/HdqOG1XGYbVyT3VyGS/gioYA\nf2lL/bTf+l1WnvElm6l/aXOx55UXqVNuua/XaUL/oaml0ugMLuwkgrWFMlyE\n1L/h\r\n=cvrC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBN5ysk1nioGTDGek+SBye5H8qb+Uu3HBR1jm4qg5LAeAiEA4JiwSp/psuyP/8XZrDdaBTOQkDp8H4mBy5vqf1sD8yQ="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.41-beta.2_1613271732421_0.42280747385172046"},"_hasShrinkwrap":false},"1.2.41-beta.3":{"name":"@midwayjs/command-core","version":"1.2.41-beta.3","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"effeae67a04f15b9b0edd8a1b5bcfac6a33990f1","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.41-beta.3","_nodeVersion":"14.15.4","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","dist":{"integrity":"sha512-YNIoc3LSTumOh69NccnXF8UUUhPK0Z++IfESjjsBpJjMcg52py0zNfIYmmdz+v8jWvbr4g/0DIdlykui/L1enA==","shasum":"8b4489ab3e2db2872ff62069f2f3b93183335547","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.41-beta.3.tgz","fileCount":64,"unpackedSize":180155,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgKJfNCRA9TVsSAnZWagAA+qkQAI87y++HsAbX/x0n0LA4\nxpRKFt4UswczNpWZ59UlFu4IZoZ+aEwfCgChdFjcQTWfpThvtsaMUlzA0xo/\nNwohUba2YCYNTsV06o69PuBC5Qz5XfdRWgip3h9xofQr3WY+pCosPAeR6KWR\nM7swiuj7xTnGfHuYsgisYJzF/XsHXar2+6ivBrP7IAUzLWy7D5bPSO4W+Cl4\nG+4Ed5Kqqwx0fT1SJoZ6usTVLf2GNq6JaNR3QCPLjV5D/8cTCNeqcDYv4Fq+\n07ueeqIOThZQOh2TXoPpeuqxlkDlTDyRtuzsPZ+h/70Q94nDZZXK2lf0dbFl\nTrMXQKQ2Q6hkX9a7dAo5dW1u69trm7uasjaTrsRVdyGQzhVm9UrnYkTw0m+0\nDhvk4TIYPvGywmEWKblDhwYATAnDvndd1OYEmAaZ4+8ld1rA2Hh6VsbpI4H2\nRKzzFt3rx9md73UDoqguEIhRqCSiQ4+PcP/ZeHIIDthd70Jv2uXhsRhYS/Ty\nh57vEeRCwYofrnKaSx/U7Vg5mAPqKgRowgm/dW2uUd/Ux/rJaeUcirpW1usH\nS/t5EN7RCr7YCXbwjKSqcQfJe8u5grEHqS/nZi1wI0Lu/pFb4c1T/r3A8ci1\no0PNZmO8gxNTBrJ3EBCGHAc1b+RVyIl+jTC3xd7IpAIK4TEkU/W8J1SPM+EH\nF1lK\r\n=1qXQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBcIm8Jv/DMdWxY7AMJ/rGZs74mfudV210bIEh35P8eyAiEA9qhXZn3FDIlj9WFgoexP2hWq1O7rHs+tQmBLM8HOFPI="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.41-beta.3_1613273037213_0.6295596869943516"},"_hasShrinkwrap":false},"1.2.41-beta.4":{"name":"@midwayjs/command-core","version":"1.2.41-beta.4","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"25d4a3ddce60c2ceb372d272f9721137adfc7d8b","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.41-beta.4","_nodeVersion":"14.15.4","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","dist":{"integrity":"sha512-y1dnccampzB89LfBST6ggnGxVuKRZIsjvkdEgDg8WK3F3fPWJ9Ehmo1cjQT6desM7pp4VF3ev3M38RBRqFISdg==","shasum":"607d9722f589e6cdd6e9f844f0553e15d623cb06","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.41-beta.4.tgz","fileCount":64,"unpackedSize":180155,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgKJz+CRA9TVsSAnZWagAAk1kQAJ7KuV99R6z/vjGwIy/j\n+sIgsCKR2uoFDZbN2kEek4+0J+4GgGtGMo9611Ebg2AWJ8Ct95C0XaLuaFQ7\nIDjlmR+aJpKTWFrFPkkycgLjin7BmMWP4rHIe0MfFdAZuN4f5HQY/w2DYXUL\n3Y9N09+8mTAXGChCTVhj0DYDY/X710gGUqCKk17ESN8P1nSHLW6MVR19onG5\n6eJQovtm+emBirjBJ9xg67jEzyQ9j137TULkh/adQxEfNZmWXvQSdyJFqV81\nxfPwEaYFPRmcA7qm7SZj4y2R0ICVizyRtA2jh6GS3KUyhClmt2cc7tl5A4yE\nBBOxGHRgDfpiHkzONugm10nOa7xeE233uZ24ZXJB/hBy+FN+iy8DkOg+v+6F\nSXoag/BHb4iFAImpP+1AT7kfB3bmbZ1Qz8ZIKTzpTDkJibxpFDGLgdsLoJ2t\nj6PYG1NAze8V1DBjsOaZMd4p2bzTO8U5rD0I+zscU+1Tua4EpZsnwc2Sr1/w\n3Vd56NGCWtE9m16umYGoPD6UyyA05niUglNQS3d9Q/ymKE9/8gVZ0eZkvUve\nrscOyy419j8ImZ9rlFiqDGLplesWwIDqNthRaixqBAANmxlb3gP0DDDnl5Gq\nrocCJlFIDxgqL9cBFn6HPJtDjspHN4XyaQ69FiHQVDu0FSl97YdKrkGThjT1\nDo1p\r\n=NkQi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZp5gk50jVMjtpBdWhP8MKd2mU29jXQsAYm8jXLLJIAQIhAMI3g0j+wlISNhdbCln1Qd3KpIewS/l5AtcseSrnZXL4"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.41-beta.4_1613274365971_0.6748175089413777"},"_hasShrinkwrap":false},"1.2.41-beta.5":{"name":"@midwayjs/command-core","version":"1.2.41-beta.5","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"05886d9b9c6443a5235fd80ce6b374976d00ea1b","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.41-beta.5","_nodeVersion":"14.15.4","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","dist":{"integrity":"sha512-Lz8Jv5U2pfrZD7RBFQQQRZvx4VztdbwEHPmYTRZH/uXG4z8j8eJg0YrQTuqogTIMx9alp1+LvYPod9386FszVA==","shasum":"fd329dfe43746c97f7fa91bae4299e822c6538ee","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.41-beta.5.tgz","fileCount":64,"unpackedSize":180155,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgKJ4DCRA9TVsSAnZWagAAYrMP/i/ta/zeCOFMIqWwFmtE\nMuEGOJOfWzPqCycySsMBOYvuKq2nFeRbfLWEaFHXo9r/khWdAct0A2XBWOJ9\nQNcV+A0Gg63WtZ+756w0r4r0LodvN4aTi08G/IQVVUJgaSd/tQQJDt9wuQPY\nMVRR+7n9NZbx4lH1rn4EiaGNFqS+ozmVY8eP/TIELX8SmOrmWOjKBwE6ZYhQ\n7MpLutGjmuNK6F8Glsb3o1olZ73/Sna7THw1FOpg27pLErU2KrwX/kV0Xnwt\n737/QUW2uhhjSeFHwMT9ubmRM+ZUSYibCZ+qo3q+1SzMXItwlSFi7o4+GSVH\n9rgPjTa+OpBvf8Wc8K/7vj2L5+QE0u8ovyDXX5P3kyIM9T1hyvRIDlypcg8q\nzKS+NIuTdArI8mqnXzSJXsG68rXPfYtU20d0LB3j3c90sPt2iMhbn8WSeOzO\nHckWp81rKlR4LuehwCP/6TunTfsg86mPpEUflZqiYmwEus9qt7NAYoUYKwSO\nmfQYquR1vitieRKkv+YBZoSlEHXYalTVyzXLAbLjC1wkIQAWvPmPM4z/HmKL\nl0mzATqyDz7YRx3LdFf/kWUFH32Ht9fWsoD21cSNaSS7FdX4GJb2L6iRus9w\nq9vjNYC15gczSCmvx7PI0W1SvHbUSekh1BXOMF9zdzcKyvasKgzQ9REgU2F5\nrQ1j\r\n=7ruX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDQ24YVFadElwXi8ZACsiYth5vG0NzBkxA4oxqF4zcgcQIgRv6FquBlSl+/ewL4LIGQqMpnRc6Ivhj/Gz7NMg9+5sM="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.41-beta.5_1613274627011_0.15832837105920228"},"_hasShrinkwrap":false},"1.2.41-beta.6":{"name":"@midwayjs/command-core","version":"1.2.41-beta.6","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"a10304f268e8abebaa9e999d2885794e83913d58","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.41-beta.6","_nodeVersion":"14.15.4","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","dist":{"integrity":"sha512-DUx4plPrALyCaYBxZpse9Jy0NfG1IbiQtOVq1eOb7ClxGD3EM94sMuiqhhDUSd9Sw3zf2x3cKJSJ3jZL6GtZ+A==","shasum":"33feddbcbf1ded620194d1680e54b8d1f1d0cb45","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.41-beta.6.tgz","fileCount":64,"unpackedSize":180155,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgK1XvCRA9TVsSAnZWagAASmMP/0VtlYYsxOT8atzrDtcw\nFf4ZM32M5jB8bqvwhMKgWQAQigLIlr+EZb0XMqTxeCCLBUaQDlZnsaekFAa4\njnbY/ziKS8bzVWHUAZpH4i9V+vbdzFP3pFP3Da2wD+yV7MISbMEZT9+Lq/3e\nbCG16xwUEHGFoL39dul1CteIB14yBrdaAU+oCozSFE3e/W5vH7G9wRU/By9k\nh1UBe5LnUMuSB9wwC0OWYXkiOldShzMUpmb9QhhfUT5dJTCBBR6UTzLX8Wsw\nl+4v0kFVFbrlYBmTldCDN6r+m7HKjvgspkqNc7MQfv7DGu9MxNH4oxs8Epv7\nolGk/J+GYLGl/aDVB2ZxKBWyp+wuHGJxwHv3OpEVWWwqv+jir5kDjU2hHSkm\nFhhBi7KpiYuCj/1wcDVKYZ+Hb4TaKEHofOprlejHyxLLle/uMkzOk3VWl7hk\nhr2oEGPziE0D0Odiy59kszQ0kgtzsOQMzFRVsGiJbbhOE1+hh7paTzpt/YHy\nO58O2f5EMI4XUxMD8DiCc4LQL3pYlnNxIZQkRdEnt0ScVSUI6h01cEM1eotF\nT3Ot7dj1rvEZMrhaGrojAE5rtvXB3oHj+fCZ8FoJr8j979Njno62I0G+72gM\n9rhKmsUCyn2R7ToV30p+96/XS1nERHX+JoCC4C1s7W2Uhhmkzk3DZwug5Z+Q\nde/c\r\n=ljC1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFB4PiHlzxXUlAT915XebsWBKyD9MoXH/uGwzKGXe7A+AiEAnWXbz1TRa+1NELOA8kLxjCxjD6y09TDMJnv5DZhHGbA="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.41-beta.6_1613452783064_0.6355345345829873"},"_hasShrinkwrap":false},"1.2.41-beta.7":{"name":"@midwayjs/command-core","version":"1.2.41-beta.7","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"1227790e6e8fff4fefdd5df8f134d8263f61ff81","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.41-beta.7","_nodeVersion":"14.15.4","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","dist":{"integrity":"sha512-Qwc15eyDcGHKPkalZcl5zdCNsTNDyfdv3lpYFNFHybk+Ft7AUr4V17mxoJQAHKjFIaUGUpZWcjVsJf4wHNnSJQ==","shasum":"bbae9bac571327ae1e6e017e3376086f9aefce8b","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.41-beta.7.tgz","fileCount":64,"unpackedSize":180155,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgK2W/CRA9TVsSAnZWagAA4k8P/iXQ29laJmgVtGctuZo9\nMSc+QiUNuU/fgNV+8IX/37qH8rYLnIcUUMz/kRSzq19GtsD5an4ccls5QVC2\nHDgqXjbGJ9qF6lI9/pdEw4Nms2ZTgyqzVB6hy+d3gkCse6DxE7PE8SHtwfjK\ndK6zBGWcMGgkOtDMJRrSFqATTjvaHzVP/UnM9MbfP/mL27SzZs0hTaFBX8nk\nZIrhuHeYNDMEqx8SLO2tQFFiku5FbW4evFbUHUKm67hSJODMMJwdcPELZQcG\nGPpwzS5BW3NI+4GDH+FKEsyL7PFcmnuHJ0oJB3TMN7qB5X7ecgGiUIvZnyIE\nWeM7xpCgAIVr91D7gD+Din+/6zSM3KET3wMLXHYpX13Pwm6wpUzTGFiLqwUh\nOJ1ycn30BsOPKFkbVC4Lc28X/xIq/U/CP9kzLS50d3R7FTw84QaEzerY8/1G\nrfFU/dmxJQDJ2haxY+Zbvm68gyKjsntyCnCBo/Dq0EhY45myB7pOxLpDzhCz\ndrfxf3N8UuPMkY6g483NT9ljO6fwmwJssPM0bQAsflLaqUPmxUYjSDeY3VVy\nzyhWkYfqhKsdRLPqY5pqaGoHqeJqxPApHzdzwZIrjiiOtwUJvEFaAca6O5IW\n0IKaRptwL+hevAQrtEw2J1R7JqFwgc9ltxhSyKw5mqNPp+2xZ+0Kv9+rzety\nehNd\r\n=uFcH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC3GEtLZdfvSQOGuXIi1v2S75OkKutRU0FXPm3cVr2hqgIhANQTG6XTM57sutoQ6ykkXEUucDsjLR6bfTSkfrLAeouP"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.41-beta.7_1613456831012_0.33408074770974405"},"_hasShrinkwrap":false},"1.2.41":{"name":"@midwayjs/command-core","version":"1.2.41","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"2e8e308d6d0b13c9b690405143ff51c5ed7f894e","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.41","_nodeVersion":"14.15.4","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","dist":{"integrity":"sha512-CvBA/6Rgiro9Syq7m0yXHwHdpD0fg7/8x4dB/co05TrWpuxUjtT00gw6i71p/zdbE4WfjzUosIYe5Tny2gAnSw==","shasum":"0ce67c1296c3e4751ab4aeac1eb31c21b56e336a","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.41.tgz","fileCount":64,"unpackedSize":180301,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLLWZCRA9TVsSAnZWagAAr5cP/1hcswMh3IpFuFoV9p+A\nqhdaqIbNGfYWebmpfCwP9PclPzlX4Rj2d90XqcZs7foGO3+FurmbNDm6uijT\neC8WbnLMojTCVphOn2X9vo6TOXNmHD23vwn78umJ3Kie4T+Or5hlzOtavSyR\nR576tyPMlfv6WxqQM/VHQllq5iw6yDDLwB/sRZtcmI2vzhmLgjEz9gjX2vG6\nnrlXpaZGHEoSZhP8ZbOhBS9bF15YiN2+Ne36HYqavjusdY5I+LDOYszt4K4V\niB0zYSfB+m8Y0UMVJ0r3BUKz9+GDiXPLi0pXBNOBaYpQTuLk5+irJVWQIPhN\nRy9opLggH5KhrVkhFeQRZBBROjHBfJEsffe8f9fvA+hcjbNFxg6fVY8WnYM9\nupfJ3tavt8/Fra65uqqLH1HQ4ch6NoDAGHIaUC4OkOHuyBc5ss2dMsX5+Qhd\n+edCQXuEQutxn4g9HGcyiVH/CzNlM9uD2LkViMwUCFNg/Qzjiu2uB/vmgSIE\nBcZyCh0SaJimFVqKw7XWdYS2zRzYKTK9VTLMdgJP8FBtz4Br2Q3NjB28BHZG\nTk+EpuCgzBNi5YtHtcBEoO429FSUzcJdFaayZS1T4uWwgap8B2O2MCwyOKEw\nyZV9Io5MoR0dwOAzQkbvsEv7304+QI91XRWhSmVVbttjV3KEiRwTdXgRyyFy\nV8eB\r\n=F//X\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDsGpoq6yhHr2SHYGP8k3UGcYdY/RNP0I6Kbs+k6cXKhwIhAJFd8w8J2DfqpIh4uFXg9PGvt8Ur3G56LC38ktptkAmI"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.41_1613542808681_0.357849391420743"},"_hasShrinkwrap":false},"1.2.42-beta.1":{"name":"@midwayjs/command-core","version":"1.2.42-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"1b8c13e65d4275e504a446330d1befefc716eebb","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.42-beta.1","_nodeVersion":"14.15.4","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","dist":{"integrity":"sha512-iGau5t75JzH7/9Nfc88zxFWSAxn/4ZczAbsaP0SlqT8sX8TMkwzjJDrsq2SGpXcaw0Np4gpX0OlduaMjVNRWBg==","shasum":"ee15ea69292565f8b25e4fea308e44d4d33f62e9","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.42-beta.1.tgz","fileCount":64,"unpackedSize":180308,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLiZZCRA9TVsSAnZWagAAbEAQAJXkVQLWutsQaGvDvZvL\nlQIvW1hD5BI5rvv2b4E6L5R+LurQBk6ve4OgrZ1A0k0jfiq2UDKA3AkXdqbH\no7aShxFWPgXhAHUAMulFceHeLGeSHqzaWaiEmMmCOpJKorpvLmS5hwRr8jD7\ng77ax9TLiX5fc3VMx3KKapCgZXqMur6ufY0s2vmj40zGRGFzISutLbWuCWH1\nkQqPUD6UIoFttUxI/dFJ8ifBOdOB/K0LDvf3syNah4HjZCsBwqazt0TxfHyN\nGhu4UcqBFqdgK2ZWL2GtSNFHkhyg80/T8hXNp465FCOziiJknpSq7ZHVEJk6\ncRxwMoFXezt4mZSffKDi8mATQLH2zsVUlYHdNtefEjvCXCZHadRorsvdFE+X\nMQK4l7tUBKJQK2H1LeXcdmM8wjboXGJXCAeJGRM2ZyFUa0YEW2zugF84fLNR\n5g4EoUfdEFfQQWgwXcRHkZc3L3oh8icpst/BqXKxMpODhZ1ybq6XKdz2Tqqk\n9m0aQnN86uH+bVnPDHGHzJmqhsod4+5OxHBKPo6hQX18pNH7SuMcNDpJB3xP\nwYLDIaAIbmSbIMxGedlBv4djsWUiY2r/gn0MnK/su5gXfXaeVoLbyloQxau4\nhOdt7CS6M++K4taRxSkOo9XW4lonAb6TrAtRJd06dz9W4z/WfoB6Z9OTLxF0\nZDoc\r\n=7nYD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHGBW7uXAMIiN825MYNZgH/0mtBYwRUDS88SMKX0UkpbAiEAxBohzKyc0Vcitp6xfp/G1XEykhQtFtr6bq+OBY2g0x0="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.42-beta.1_1613637209349_0.006123369029186199"},"_hasShrinkwrap":false},"1.2.42-beta.2":{"name":"@midwayjs/command-core","version":"1.2.42-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"3b0f20ae3260973c19f21208db7653996ce4d46f","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.42-beta.2","_nodeVersion":"14.15.4","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","dist":{"integrity":"sha512-T2m9mbnLlsDev5D3LOd0IOO3gmTCL9h/rqTa4MQ2UNu7zAJbTvbVIP2nOu6L6Mg/DYYBkUKav0Ou8jbUgDKPEQ==","shasum":"061d6c5e979ab5c65d1e25e0de26687a9204fbaa","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.42-beta.2.tgz","fileCount":64,"unpackedSize":180308,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLzfPCRA9TVsSAnZWagAAeSsP/Rbo5z6LU69eXie9PFd5\nxQ8PYAdA3WwfMg3p55d6WawZ2TsJQgxbUn+nwNJr+gZtrzK/L4DrSUhC3W25\nRn4snDVBr/Mx9uEVxGSAj3aavpIJwC6eLrxsVcdjiCbVgUCroW9c5OESwbLq\ns9SDjg8+yIMwwIY3YsgqeAWvHHvUqB1LsTRfit8daI5DJgj6XtLazY4oD98Z\noGOfSOn4ravw6DnPZyLT8KuLgvJ34qqQEqkpu+1IvTeQ17axGpBkasVhDeru\nufP9NtaG2gLMvtg2ITEpQ5olw08ySlt5SMZJ0ZMqir88Bl/CsFttCIpMjOK+\nE8WGbRaSVcmL3PkNiqE9zDlMDYOtnXVxtWS+UmS5+XfFLhD7KRKWSnJTiWVG\ndS20jqWz5B3p5MfimAvB8t9qUVL1vj1EmoIXfj2aiH7W6ekHxszPmX70fOtF\nM5d37iB9Se94aFPAfPDO4QhG3+Rh4+y4ws+YBGUtlfQiOKcwBQJF5ou/B2Yf\nxjd8PqaxPbVnVuwkZ5WcHAD2GmqG1zMFbOug+SxtSuQ5kGEGtzRtjIjKVJII\nvZyjkWvZvhVupeD57HMvHcPX/c3YUbuNLEDQiKGftTFGnS5GLHgXFIlfod7+\nFP/B+l+SPvRvOhYXfgxPRYJoQvmoc3AURtV6B++y1uxgrE8iitJxtaf99ERB\n8jjS\r\n=PGGJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICGQ2+JKI/h9R0UWnL26jIQqK5E/y6Ev7WPoyHaGSY/vAiEAq92SxlSomaAaSkZANghL3v8F0xNO2ZkLKKxmXZVp/9k="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.42-beta.2_1613707214978_0.5140321081054595"},"_hasShrinkwrap":false},"1.2.42-beta.3":{"name":"@midwayjs/command-core","version":"1.2.42-beta.3","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"ffff35724021d93de86817770c28c469ddf54de8","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.42-beta.3","_nodeVersion":"14.15.4","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","dist":{"integrity":"sha512-lTB9Waqa5xl7ulp19yEvgdJ9J5fMfmy1kjWl3jpQLorZ501k9qUZEwUNmhNZX1Ngui6LRSd0eCd/8cBYzOkNqA==","shasum":"8dcff9f99e6eaa1e5bd045efc67bee045ae8d229","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.42-beta.3.tgz","fileCount":64,"unpackedSize":180308,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgL2PuCRA9TVsSAnZWagAA5moP/RZC7lsSIZ9lTFpcUmXq\nndDhc/TU3cntHhvNJZOyfmlz7fYGN26ARZNtCdOjmg/qWemAVvgJfl9zisYE\ntzU4APWpCmm9jPf0Xyk9VkJejkvbm/QNHdbJC5vWUt+iweZvIzu0bMW5LGwf\nt2xLmAHqZNfa5X7kPvRtugE4oSOPa1Iw+r9stBaVzroT/qW35pX52AtlUAUQ\n08AbowFJLaxSA5PGUZNY2MC5/RqIoVsjAgmGls8rlip8+FynkF+Ym0wuvy1w\nFPHhgrAn6TOarihWupdIcfGLd2odfkJ1BQ7qJDd+K1D20ZconXAcg/PYO0lc\nAyTjmNsy2xZzvVWp3U4dyMNXEJnNe1JTgTu8bit6twN3Ak427TuTOUqENfAM\n/PSJ5bOmieusi9A5xQVIafNuP/iDRBh3W3BoW/8vU//pJEuqkY/H47Xpya5E\n+MGiNfGY4+MJnq5Ex4Vco7j7CzmHqaRjLfvTcgLlVX6Id8qXkiKvaspRRyU3\nv11ksyJ64yowjqpRA12pAu7NW+A6aZkxsbzXerwCDhjE1Hi9Eio/wfYtJA4x\n7Y/pZwVOxxZ4uDu8VMx0P4LzXbt1uumthJrKijeIv9FupbLjO9Iua9Llc6b9\nFw7f9iQrdw+7/wpHmHNcFgJ4Rin74jXW9IHnp0IjPgRubZg11DkCUhvlntWD\neUFj\r\n=HUtl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQChysSmK5reM5TKfdwRp0XPWKlfb+mA9X9XRMN/gterEAIgNHFESGGuFIeZze0d9efCd6/DYEPxRb2ydLdMHDy3Uck="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.42-beta.3_1613718510218_0.39710127975129383"},"_hasShrinkwrap":false},"1.2.42-beta.4":{"name":"@midwayjs/command-core","version":"1.2.42-beta.4","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"a7b3bbe952098fc7fc1de60f9a8886f132e70df8","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.42-beta.4","_nodeVersion":"14.15.4","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","dist":{"integrity":"sha512-lJuZOTI5opsVjEBHNqEmhpMVZEOrDgndKdDWmBMS8LV0YqXa0gher9BOAsXyKSL3m6vE99zRav804XLJsW/Pew==","shasum":"537a99ed561ab3fb896bc80a924fe7e206289e22","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.42-beta.4.tgz","fileCount":64,"unpackedSize":180308,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNHXYCRA9TVsSAnZWagAAj88P/i+Kz9fYoqvkRuTeIac7\n7zDTGevGH4YsYY1wmxI/O6s3by3nWiP5dumRsHROgj+3U1z+UtXXGZ9QQjb0\nSzKIBT56p2affLP5MgJvzpyn8JSZGHYli5BlLnfaD4H1s1PVPuU21jI2NMIH\nxANMUk9UDIkziJFZL0kM64GdbumkWQ6TIRsc9TpoIYn3qqJaK4bFs/f8doUv\nzC/skneoMG6HGDjKo+QHsthTE2tedN+LOSYsbJ/Md1+nvEdAQgqB+PAgfxTM\n65uC3eICuv10GA2ODYX0MqUcqXn2nOaLnp1aU8eDzslti4Z06QW9kptVfg+w\nqzWhfnl+ZKE0P5OxTLK5FNifefNJnxfJZG0Vkm+VVluv/3DLaGlTCzl/oI3W\nYi6HhHLGJ5uxh9LEhs2CfQjQM9tAynYz8umz3YLcSyKtePwQrXbu2HZ7gYR7\npf1+rHnBuTmaz8AnOhKv8W4zGP2nZVN/vbn+5L8gM/y0FAcXtj6c2OeRqzUl\n97FcJfSP7HUP40wO0CN81f0tD/0X0oj5WWzTS42qHWNr3QZTmyUWnIzAZuES\nfQEKuQCHICayLKMyXSrfjWsb5IeA+1gcWch9Ec9L8A8O9V0n6+dRT56Hc6Kt\nMcUW8iE3vw1ucm4c3a1rIpWDIjg4imYyAlWZ+TV9MY0+RvVpl2hHjAJaFmQ1\n1cVe\r\n=A3v8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHzCCdTED6UeksOAEmsFi8gm3IJBJlQvVOwavVV5l/lfAiBcnp11rKF7NdAEdfZfXUPfwgW6g5K56lwyUITnLGHJaA=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.42-beta.4_1614050775905_0.1957891506668239"},"_hasShrinkwrap":false},"1.2.42-beta.5":{"name":"@midwayjs/command-core","version":"1.2.42-beta.5","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"59955b5c596fcfce31c7779304a22106941d9c39","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.42-beta.5","_nodeVersion":"14.15.5","_npmVersion":"lerna/3.22.1/node@v14.15.5+x64 (darwin)","dist":{"integrity":"sha512-a8SYw7fBWCj10QZLM/pkyX/Xv1mMkQ+d4D5aXwdX+Kc5dGUd7sZ+FAj1EfpeAI6cWeSgNUy7pJhdO5MiA7RfHw==","shasum":"9fad0d1248f516adbf65f2d2e7dad651965b3413","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.42-beta.5.tgz","fileCount":64,"unpackedSize":181467,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNMBBCRA9TVsSAnZWagAA1MEP+wQxxCcjJZzz1f9Dm9NU\nwmYb5YBHX0LzPyrfhVCBEcioDxXSW+YWTJhejDz9vuDeJpGjLXC2YkYYJetH\nIJSxp9I1nsjtfblknqot3lELVuXFPOZPkQ2pHyv4W1gGRC2U4c6N8+eJtqpn\nRuyWBHNfpOu8ildlGe3RaTK9vHvkxc1wXy4oWNASCpOvXr/kNGz93W2lWSre\n4FiPl8NmmlTMzOFEDt7QOj1H86oz+fKk8vqxvf/dhAei/7IcqdGFtlndD8Yp\n5udlB1BaA9lR9oVP4MBxhvpeDrWa2fGq30eVJgX27tpy/VbmhsUMt+lBoIrJ\nuHJRgCs15zvua+Y88gyIEnE/bvCJYmvLKKsZvaPPsceA2Knthut/wpfsYzRF\nk5KfA4qXQ+Lwc20tSCGmkdu+h/9Iazj7xTRkf2+b4wfunsAD5YHYdqtNvC2k\nFoDJXmv/UTwNqHBZFJ7r6YDOCWjPEPeJ4IcatxS1KcfqoKDGc9TB62GpWrlc\ny+FWkaao4xRO58I+qNGhaglteE2krbI6I67yQPU1Cz1IhpQ3pijb+GA30wYl\nuLqjd+WkDyi13lSvqYNFv4hZosSbqdqXFrYVXCl6g6th4gDptufaPFYEoQen\ndBWdAsIF3Apw5qR8grrxAS8V3NWt0uz+B+cYGWZgJ3jBIF3IA3/nv933PG4i\nCXXt\r\n=V3tS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXiEgLlFQ8X5Oa1axP/WareRuI38Sd0gHL+CTflCeuBwIgAUDApPAAf+2lhkvxk9PWWRWaUYMuNLVmQSIJ762jon8="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.42-beta.5_1614069825137_0.1347551417356232"},"_hasShrinkwrap":false},"1.2.43-beta.2":{"name":"@midwayjs/command-core","version":"1.2.43-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"3a550a2f89be0c5562a35e476030f3d304643412","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.43-beta.2","_nodeVersion":"15.10.0","_npmVersion":"lerna/3.22.1/node@v15.10.0+x64 (darwin)","dist":{"integrity":"sha512-S3xBQQYhFbBHrs/NkrgZNkM/IHx9vitibiYw0BYu8x4eS0hqd8YJMbI3DbOCVqcCiK4llKxwo/juxJNKuLD3cA==","shasum":"3a33ba5905e5b383b3d6cf2431c27c9eac2823a8","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.43-beta.2.tgz","fileCount":64,"unpackedSize":181567,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNhAqCRA9TVsSAnZWagAAWocP/ixeI+zIDg4YYk3nRydi\ndSndWIz6v+RbGKZYd41zapqeoEDmwZHrqZkJNHc405fHwFwt+tJir1N73YKe\nyHBMhlzjjp9G8k3qV2PVnPyRH/4LPtvX+VGa5KCNqaVnWYIeoyCqav++IyGf\nZGO5SncwGWljDx33+mYxZ8m0okwlmMKQgAd6e8+McCxaWnBdF2SLhK6eR3G0\nRxLeBbVZzObWXmoq7lV2xjey8ENIHtWfGFYFb76FkLlKMC+7axiAKR4GJHZr\nkxqQUGfEcgOiwxoay2w9QMP8msW1+HQ2p8CLnM9mcVfNCbgdVF9AE2D4ms+l\nxiCvnTfj8d0k0ZhMOm2qV+ahnSYHL9tKuwtpwdPbrlLkB4VOBihUhtH9q9zz\nSoQsh+6zWB2E1WFwv9xRF8ir5FNN8GrFtF+GxyatwdxIfXFzZtLOuSZ/8YIZ\nsV8MnBuf6hPeDN/hC+KA68lxRI5UakQk7f+W4vzsKTOPgfffEUQ6a4glPBly\nR7D+FtzezJvUDzkHI5X8M/+u1V2POupZ7zsZG/guH9EwLej6oanFL3Q11iWI\nCRhf45cRWHlrRAqmADg43NUJw7vaZF8FouAFgOlVfS1ndFRVrMi1Hqi82N43\nEzEYZBTsUeW2Bx3KKWprzsFJ69736Bq5m4CyX7HfUSNGbD/59oKUm67/Skl4\n+OuQ\r\n=Kf6U\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAQawwvL3hH/1TlnzUKPFUNg3snlfE0Q84TwzyJJ8JVQAiEA2o2MAPcSZFHbWDiOaVxRapbE5DjMa7LmVoDnaVuNs/8="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.43-beta.2_1614155818369_0.32240824376792854"},"_hasShrinkwrap":false},"1.2.43-beta.3":{"name":"@midwayjs/command-core","version":"1.2.43-beta.3","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"2c0efd5ae03d7a1db888fdaa67a5afc88dff72dd","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.43-beta.3","_nodeVersion":"15.10.0","_npmVersion":"lerna/3.22.1/node@v15.10.0+x64 (darwin)","dist":{"integrity":"sha512-vKk09mcTfrqedEAklCfXLuEvt8B3GqNtsG/HqMzWeh8fwpiTuyL/Oeukx6QOTkI5NIS0Nn2aP5a2XpWoJBT1VA==","shasum":"0f70d5ad605260f8558296e85eaf016f392087de","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.43-beta.3.tgz","fileCount":64,"unpackedSize":181567,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgN0taCRA9TVsSAnZWagAAbE0QAJ6ezsQbkAbTTwynOIdy\nCj7/L8HZDqeFlieHmto0lg62zc/+sUSh6GJFaX3pN41ny2sF40Euhh3vxhBQ\nq4sn5FVUKVXECslvffpfFcL9RZkdOELr2+lvj4zSjK8dom02EeIRY+IKoaCd\nQ0UNd2NCfnih8axrUr+DOw+qTirLaNhep9tJ7oVPFdPN2FEEwBmQRlkbIQHH\ngbtUS11Sbw0YCJlG2XiUWKuJgH201fb12Cl4OuMSFL3LNR98mOS1NrIbmV+F\nDBs3m1xQTI+qxsFYNRnDFgkNOBf+9e/W8iHXGAxDh8UJPH/AHIjg4ePn8Bre\nASSir8vRD6rWQlJPATDx7Lfuxps0UXpn1/mlU9S8toSsQ7rRKqKVv+ufjd7I\nRCoIN57HXBSag3lSbQ8Z4XweIpTO7hF4ha885+zpSl6u6M4ZfT3GxjYg/fYQ\ndyCsYFSxh+pkeNGDbKOa7hwRCWhHZYN1rn0pEegUGRW+nkFkYeP53eMxSv77\nhICtUIoxQDzZR2CGyiGLI1kcYIzBKJTdi9gnkBI0fYc2WCwEK/DGoYVkVYY1\nK3OTV4UQp4ZWrqtwlEpqiJv+zHaoGhLtTjaVgygC6VZjiZrJa5ezfG0YGV9G\nF+HtPeD1gKbWc/F1L0maPNsY96bR5XW5YPik2xDvmTPfmD1A/F58dO1pjiP4\nYCfM\r\n=dgkg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDllrs9Z7vk9eLE2nIadxY9Sdo/SQUdrMS7acQCGi0APAIgAz3LRGXLf1xAoXGZNdoHTirs8vAgfrXimc15IStzo74="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.43-beta.3_1614236506158_0.8500356798503763"},"_hasShrinkwrap":false},"1.2.43-beta.4":{"name":"@midwayjs/command-core","version":"1.2.43-beta.4","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"b158df6197c56a893413d8727c5eb57b6a5724bc","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.43-beta.4","_nodeVersion":"15.10.0","_npmVersion":"lerna/3.22.1/node@v15.10.0+x64 (darwin)","dist":{"integrity":"sha512-k04/ghicFaRQxGwkbuPXzFKR8/ZSjN2lTtvDGuH0UJNBVEz2HwPyV7PU4b70Q/U7Kr+QkK+JX/990+PBoePMTg==","shasum":"76291c9934e7794344160254c4a103205d45720a","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.43-beta.4.tgz","fileCount":64,"unpackedSize":181567,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgN0y+CRA9TVsSAnZWagAAB58P/RPcprBnNI8oAL3vqHQd\nJNVApuOvyMshs14aq7votbGcL8COGcR3huB/TTUKeVO5nshNI496qsf6FiaA\nL2NwV7kxtgMw62FX/I8MWnIdWqVxoGZ0jESOIhtxlcrDtGqJkc4Zz00GQA2d\nSYyLnnW9LK2sUMkbd7wauWx9tOwJVeaxJRHWk64AhItpqipqHvNhDjulbUzC\nQa9Puwr3cCQD4PsHmLNZ/ZfA5oppnm9GBTaCyUppDpKeWhIUEDWxUKTkX3cE\nMF2TG+d9X+VjXKiih6OoWrX0vKOpOU/enxpWOtJDtuR7e180yme04+JvIyKQ\n8LZZty74Fy04+enxyF8tJa34ei7boZOxvv6/2YT8lwAwdEqh2RlFH727y2f3\n/C++/mJtZowEEp/tU4G+NSdM9r6lcf+fxOkvzOmg/CQHq2bkOWcwr+iNzdLC\nna0ac9jomNJG5kNH9DJCtyRsYRQqWD+z9y/fImeYvR8qhqTLZOMr7pZFwrBS\n3r+K1MYOPXPrPxDa/CViYT1fjTGJRT5fcVYkK9HLB/B036HtzZ+aexPJUl12\ng/fHNM7lfN1BX/8jrb7cH+iTOr+anxifekT0LZr+oSoej0nYue/kqSND3+ix\nHRJUBO8FDP/UJW6cMCWrz318ESCpURE4/fZbS3bIbeQuisXW3GWDdnla+ybl\nTXfY\r\n=CAkv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHa91ze06Hu4f2F+gLqnpJsliMruHd+Xp4D0UC2Ia0SrAiEAg18G2cXi1pFm/nEuKm/Cgu1omyP0iTgxiMcQav1zMAQ="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.43-beta.4_1614236862377_0.8415678758037077"},"_hasShrinkwrap":false},"1.2.43-beta.5":{"name":"@midwayjs/command-core","version":"1.2.43-beta.5","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"dfab1e3e9eb3fe52d628d8a3c634a58adf288d4a","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.43-beta.5","_nodeVersion":"15.10.0","_npmVersion":"lerna/3.22.1/node@v15.10.0+x64 (darwin)","dist":{"integrity":"sha512-I5akbse9/Ay5m2yZ0cx8MwtanzGkImbO/LiFnY+a6c3+ovoW22BxLdATeY7qOfpLV3HS85Cvi5CMD1w+NSEjzg==","shasum":"c1f5e815a501c74a2dfd881fa5383d350ee86950","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.43-beta.5.tgz","fileCount":64,"unpackedSize":181567,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgN04PCRA9TVsSAnZWagAAV7MP/iPr+VZIMJXpDR7dZ3WI\nFFd/jpNDbFO99A9HKK4nmCaI5pZMflQQaZlrhv+ypo0kERg/kGL8720yzxIQ\nUScWVHbMxp1CzUO7vmRS7STJgKO7GAEu1zLCW1VzNyC7gilmnfOpUiKsCiv0\nmQx2hv7dJn/nPWS/JtLCbjCNFgdP/kpu00ox9XreRIezo02i+FL5SB1FikOQ\nyXoFakuqCekyt9HdANHwIsyWQPZWK/+Rl+aVSbUyaQFXB+sj1ZcPBrVi793/\noUZHBJ72HnAeLGYyfsMO7pFuX4MFCGBVBva1LITMv8wC1R1S5VHXXW157FB+\nKtBMZepjlaUso2mdaP2RwGhFbdgaYrnGjDEdyLdivR4/DIiznVKfl33LGdbw\nNfBbKv9X0c00DkHMuQmlMW+1dtTLWts8dFr+14MBFS6VkhMhuCO5a/QqAI6L\npzkhP1V0kQ97IdmTnX1p5Obpz96OpuplESfFmgZBN1UYALcBQv36ysmBL2eK\ng9fgheD/fcPSUj1tFRLo+uPdY+nOSRK6FBvtzbsTQwyodBp0EHWW2CYz6Yoj\nruaxhVEhjrSgHRSJ0uL+aJHYr7DjXUA0pVcXjylf/AyMuNMiL03+Fe+Il3qw\np/EvmWM8b+C4sgUa09ipWwsjoXyeY/ciYsV+92LAi/RcblQfCtvFPN9ISNYw\nNkIe\r\n=d09n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAp5bCfvzDvJUAjHqlRfz/4Welw+ZFhTiEU3TJ53ScolAiEA4amgyhTz5HJ4/GlMGZ8IZaVS0A9MFbBv9b8Lt6mcC20="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.43-beta.5_1614237199209_0.3601291052323714"},"_hasShrinkwrap":false},"1.2.43-beta.6":{"name":"@midwayjs/command-core","version":"1.2.43-beta.6","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"bdea0c207cae5e217985011ec045cfbe4a3f6594","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.43-beta.6","_nodeVersion":"15.10.0","_npmVersion":"lerna/3.22.1/node@v15.10.0+x64 (darwin)","dist":{"integrity":"sha512-mJjahj0gA/gyH14BIhaYqaxSuXK2Qbk9POLLigTwi2Q3L3uqI6W2MCY+Bhs2rUMtjwtIyILnWgIsjCL8C5V77w==","shasum":"7287f62687ef2cbf1b44b284d55c9edbb8593912","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.43-beta.6.tgz","fileCount":64,"unpackedSize":181567,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPK6XCRA9TVsSAnZWagAA2mIP/3s8mqLwUdCxpR4kS0NU\nIyU2goPjXceBpzNp05BmiM0U/z5h/4a56DE3HIa6JQRKsQbMATOjKMeanh1N\nRXDBX87cXchqJ+rVvPcs+2Uz8Xyn6ZXvtkw7KWKwwXhHpN1QcZDAla/9Fvqv\nd5WOY0J/wr+9/twSJSVfPmeigQK7NsdQp3JxdtVP1HFk9RKNr5pMHiRNa7Xy\nDIGuW57whNV400/wfIIb7Xdoe62PYkfEQPKpYD9J0J5HPHxguWckkZBvjOnU\nrqtI9Y4Ba5Rt1jsjbpb9X/ytC+LcqmDGx5pl6ruD+RM2PZqApOKRdb0AtWZM\nxG1Bq0wCbM+7d1ZaNGlADPFjrasl2vKoR6g9lDSVsIOZaBwjNoO5ozekr3Ex\nwMx9qgO7ezdvloQkZhgzemAFWa9F6r3BZLCJg2eobAR74vy4DDpFCC2qqxZe\nM0zKEhNUoLZ7FuerNNjt7mDXm64N/9plQ6g0+UaPyfoCVnlgpeI3coU14IAr\nyN9gyERiNNaPyLYNGtLnTqo0bwzftpA01SwwDmLkxNzpuqhP0KuFla5KwWRt\nou/Fky/2Vq2Rpm73tsOLlZLHmHRZ6rRGHjvU5dpPhq/Xf6GYRRrTqrhAfwse\nMCv6WoRFosJM6xQD4l7gHDQ3bylR7YpX1UD70Hqu8PN0BMnZfjFwJWiVATuB\n5YPj\r\n=ou+g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDraUioOpSlyM9ZilE/ap0xAF8RGTraimTpKwuDb3EKxAIhAI8HRDp+xBmMhba2nyEUCMOGnyLFute8GB5wLMZKJ9Rr"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.43-beta.6_1614589590671_0.735940068230915"},"_hasShrinkwrap":false},"1.2.43-beta.7":{"name":"@midwayjs/command-core","version":"1.2.43-beta.7","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"683a0dbe6983c1e26e4a4acc12b2c57eb8bf4f6e","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.43-beta.7","_nodeVersion":"15.10.0","_npmVersion":"lerna/3.22.1/node@v15.10.0+x64 (darwin)","dist":{"integrity":"sha512-SVlgHsjpWdyq2XRrUKediTop9nehJ7F38naFGNn0StVjz0Zrsh5WeW2ubU2ahTT4rwaUj0oFZrFxaEm72q+XUQ==","shasum":"92ef52689d562c9ab257d8dfe7ec348e130c801c","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.43-beta.7.tgz","fileCount":64,"unpackedSize":182675,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPN7HCRA9TVsSAnZWagAAipMP/3qVaQ77vwvBANpuIEC4\nPjmxAt1yqfT2QZ8qRhS21V/nHZ7qGOgJpGY6VfOy/TImNaK967cKct0rxtOT\nFAvOH3/xZ2SKv4IxP6X4JuWrHMhAGjcwMFY9W3wg6vxoDx4xA2jtb253yub4\nrycvMVhEu4aIqxqzST+tbFjViHgnw8fHpyNuwHd/o1yFe6bYchs44jr0MtxW\nD9RVByvFmhkVobiNfGm0hvW8vqW5W/jYITG7RlphvaaiPr7gHFSLfGEREuBC\n6jN1vXO6zKpyDn46gsUMl5nfZ9kvsRpvZ3zQYhDmhQDUOoUQ7V2GIQCAzkfq\nRROc2uwprZhXoSprhOgNUcE5/mTRjfNb5Fo4Yegb5uA0bRR5vMXadLORBTt8\nivTN2ALzcrV6lUfMpBgmkCAyX5lSMJ4Ae1sFsBGq6bitJzgGMVh0PfeEixgl\n+6eNR8O4LgzAJuVcBHouPe60JJN5/0FneftdmSriwCsBRdiMvlTGI1o5xr8a\n95hsruAAaAkxwh0cMQxRSDq2JsWLC2r2UWYeluiEC9smF3JhWShhGy7M4f+b\nc9v6C9a3PsseYUtSoePdhoXyYieLPCmhTHUxuDaZvBIuaE1OHFjsSaYJdr/B\nBMh8b3LkuGzZL9PGQKo5gYE1LYbCStqNTQ9kIwnxyWO96mpaBjvpjyQ1jKpl\njBfx\r\n=kX20\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICwEGuQB5HxuxvOWSdcnLEmggh6UjhHW7zXY/7kkbKPsAiBIfcGgeOeEtYHzYgF7lR/mnnDyt55UKXqTVFglnQlOIQ=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.43-beta.7_1614601927066_0.7209144278268886"},"_hasShrinkwrap":false},"1.2.43-beta.8":{"name":"@midwayjs/command-core","version":"1.2.43-beta.8","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"343729cee2152a162f2148a2c092035d990fefe2","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.43-beta.8","_nodeVersion":"15.10.0","_npmVersion":"lerna/3.22.1/node@v15.10.0+x64 (darwin)","dist":{"integrity":"sha512-A9CtX7itFYhE51c7AkHgTj1oIrdU+5wRuLSLys1MiCEdT5FweZc4GdTXbQy4ez3Gfq58PJuAUWsIX1PTb4Bbxg==","shasum":"fd577c2fc41128eb4546a1bb28cc0fd544ea90fc","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.43-beta.8.tgz","fileCount":64,"unpackedSize":182675,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPOY4CRA9TVsSAnZWagAAW2YP/ROFeyTwYQkmSHQ4fRIq\nylRnt1bLRu0FOwT9EHxkI2VMWF90jooIqzpO+njASITgjMto73lMU4KSywaL\njVJtoPUGCXqQ5Z/gRZtJNjBfzkOts6Sr1utqrWkN82/zi6JsSDzCoOVaJARI\n21htY17q0hozk/kNqhzWirGr50YJrRsrf+y5S1CQmuCcTqp5MAHxlltz/uOW\nXebvrwICu+xVtf0JUMxty7h/tV8E+njzl4nu7PDtcSd1b1MaFCiZ2vXFf2MA\nA7hk/yM86iq8Sc7tq6E3zhG00QfMf6NV5Ufo/tABloDIPfN4bOXFzIIUpjTm\n9FDAVRN6hG9yK9umPq6zagDZviqu4UbTvZYJAqByHYZtrXA7CIP21lpdYxUj\nIZyOppUJ5eBORKrgODfDOqYxI5GJBf0Vs1Ovmlu0kAHXYKXNI8KKqGAADrtw\nQjX2ghfHVbZak5aqTAGzQLfJ2Z9eK+oiPs9SsCeH0ddtikJvljtpfkd5L2R5\nxqtjYFrpg5Y4ZVxXdworImmXFUYatO41HEv/kW24vCL7akcvgx+jJ6aWH3RA\n/lhumIpdIMpapUjv3Iis5Apax7jkiQUartHvKRlh/xpGKRJzzX+pFaHqhxTj\nQ0DDGijkC8OV2Xaqk+/BYPogXld8FnLGaNkxx3ROWWxJLFqXMu2kljrSuSyz\n4Jg+\r\n=VU8v\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBoFgIO8NQxw8CCpS45g9kuWPDP0FqsGx++ZPqH/ktZEAiEAtMamgcgxc1jZABXNbqxpqYC/4Qh42ciJNzPl6hqJJnI="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.43-beta.8_1614603831912_0.032704700078748816"},"_hasShrinkwrap":false},"1.2.43-beta.9":{"name":"@midwayjs/command-core","version":"1.2.43-beta.9","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"8f40473461412d49d02bcbdaecc2d25e014d28d8","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.43-beta.9","_nodeVersion":"15.10.0","_npmVersion":"lerna/3.22.1/node@v15.10.0+x64 (darwin)","dist":{"integrity":"sha512-2jIHZX5HAIDlBAm2jN9ECTP3069vC0wQK7OksXDQSjkAkPGbQ5Lf230Agt3JucBZxMlruRlnpUy8FY+D6yG7bw==","shasum":"9d713a5e97768914083c2fda6744dee886d458cd","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.43-beta.9.tgz","fileCount":64,"unpackedSize":182675,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPdHQCRA9TVsSAnZWagAA1PcP/j8wiz2zpNmf3U6QgETn\nmU+hduu+VdEvH0sHrNpz/Ov9UP0AgA9SyhXfsVrNFbPgr8Qwg3vQ+R++TJr0\n63r2BuDl9NdD55tgijF5tKeaQASydg9Kk4ezan1Cx05y3z+iwHxweaLlIu7E\n3A0BYPyTPJPZ1/W+jM+nMDaRNHb0grosZ/RhniU2KGnzA/5wzGX8pKu9BHp5\nXeiwFmDjnQTs8Or/66/+ClpWx5Z0ZK8tQznO1WqO0kARtYy17sT4u6+Pu5eY\nkr88dzT+uB52+D/jaFvsBMBwgXTAUlPhamY/Blfy/GVCRydNfOKrUsdDJPSn\ntxuc6M3WkLQ2YA3Vt2gKtDXhv5u01At2zd45nYVzs5GqZKlaThH3XPQNMkap\n4BIXruVRx8yDVs4TN0Uz/dV/QP4qEqlmc8KWGl5xpGc96p9YOmHBXNd81wOR\nZyyb8sdsieb/ok5nnWU/ySiGWO+JsgR73M1zmCL2HqLU7oblEgogl6NP2YdW\nHvUK6caPErEyyrwULQ/7WoL8fS+MhDJG08LxIEVKn7gdsOXVExIsHSWONghk\n9gMRBs+daUVZuo+qljYr/mrDXLOoXMGILBRIKNdH7UqLHhU5RFknN5K4i6Tt\ny1NJzjX+lp/lpAGh432HiN71Dqy88HX+7zvrE7z2Gvxa7oOR70PRWp5Yz3Jx\n7ZVr\r\n=PZ8A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD9qI5tNuhtnCtq6bxhpXPKMiPYr68sS9pQx/PF5OGwogIgdmZTgaSPbQqBDtYXKHC71GaO3+p8jcuF4QTLtJCxLCU="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.43-beta.9_1614664144220_0.5567787356222695"},"_hasShrinkwrap":false},"1.2.43-beta.10":{"name":"@midwayjs/command-core","version":"1.2.43-beta.10","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"dd610afde7aeeee478438d15bfc6ffc461d05869","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.43-beta.10","_nodeVersion":"15.10.0","_npmVersion":"lerna/3.22.1/node@v15.10.0+x64 (darwin)","dist":{"integrity":"sha512-HymQuxAfqM/Ss69dqKjs3VSHBbF2t8biE8SbehTZQtT3sF066JApRFmWtuZAZDxB7DDODL3Ae5zqL8B+6ZXsHg==","shasum":"a75d0857b512e939b8388195c578ced4b1fd7da0","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.43-beta.10.tgz","fileCount":64,"unpackedSize":182676,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPvnXCRA9TVsSAnZWagAAZJEP/3hMH6Gbfs+fw9HOeqC7\n1GZZ+IpliXEyZ3nZSB0meGKCAWDa3k4eectJDbhbwLjmGBgHwXinunEX327b\nYG3VUk9Lw9GMhoncFIAeqSPGmXlwDyp7v72D8Tc/xJSoe7R6s5pXW+TP3vQZ\nDbK3ZGAwK54UWCpJQU1DT8dkwH6gAmIo5+7opXSKqBXz+C/FC8GJ5F06+1UQ\nXC0n2KNopcG0GvRKcDXnwKPyCMO55am+MheYxl1FYvO8KretszdLYjq/99Zk\nN/7OGGBoVTv4K8c4/XJFFuT2nBiKlw/CDuJcRFFQukMmXILoFnkca69H4ehR\nwWfvAyTWNyoOM0X+5dsgxNYPKLHx1Qz43XPpQOpILY0ecEWYb1hAJH74qcdi\niRzHCK1j1UcQnjFqJVRNUcpUfFAOVHq9FD2M9L1VSpt+vS5ZBerbpzTmEFxZ\nTcMYHSu101fcwMBTRyMZCMeOvAZtxSvXmavqsLMiB1NDt3lOO/g4lwoAe6Ol\nffwQJWGPPJezYguxCL3DBOLUQASQYiIgwCIDMRDwiXLSfD4LRYOeNCp7P7QG\nUhgOtZCngk0CaZw/lr74ZPmLayXAaSYvAmMROYuQCvwx7javF5bSxPhP9Aog\ntMlaY3lpkrt0nAGbn/26u0jqyv9addOwCZfxIZ/nMWGApVilP6DqSw2h30B+\ng+cm\r\n=bdEr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDKuJrZtreVouH86Z/ozv7wxLKFp35t51cVTaGKNo6f/wIhAOqwXTHV1ULHg7gkDtRlqkN+EpIOtvdsMSUWQLmMvMsX"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.43-beta.10_1614739926685_0.23171584694877168"},"_hasShrinkwrap":false},"1.2.43-beta.11":{"name":"@midwayjs/command-core","version":"1.2.43-beta.11","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"60e7c84a41cb7c53257b29e77251c284259e42ce","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.43-beta.11","_nodeVersion":"15.10.0","_npmVersion":"lerna/3.22.1/node@v15.10.0+x64 (darwin)","dist":{"integrity":"sha512-HV9czyYgjvk/R7sO6i+tGEVwpQ8CbyhSXmMThj6C/HbRSj6gzt1r+3+2PIa5NwZGqkQGvTEMXG0R1T478k06HQ==","shasum":"5078e6351eb94e7cb9fdc9feb2d7348215a97830","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.43-beta.11.tgz","fileCount":64,"unpackedSize":182676,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPxYeCRA9TVsSAnZWagAA0LIP/jrmjSo+MZtzgB4wMHYb\nYsqN4fyweuOxlwWTbGPkLWfTcwXCrJVY9c+5cZuAk64I7tgydGAsmcz4eNNJ\nKys9zFVC5ayi0BSe3IgQdhDY5e+zAPTEERghKwsl6EDeUQ1zqwHwEOAvswcv\ny/ebPS8YHQMViy1nCwHu7MkYxM25qb8cJjIpYUABELDLHXZWhhxgVcY6A/lg\ndkQRrB8DZTNW7QZQ6d5hbcPYvIaM9NJG/uGHDS5VN8q5jN3fps0Lu4L15hCp\n/MpaQI3d9VTU54S8gcGn+Ib4UV8eSfVvcdXplXhAQ+CoJHZ6aaP4yzOry/Ly\np35c2wgM38s1ipVMdTNN5nhECScUyjXZp8YMp0zTJQieLvT0SaTGtBjfMoef\n1fwtP1GbSK00e0ccJnJ3hL8bWW0hQrNgLY3WzARChSzaRw+tzXRi65G/az4t\nQoo+qmMoa+BFBS3emi9SBDrZXD05gX2MAkeaMepoAgeYSVtubwZt2YSTLja5\nejDL4fiWwaDhYChvRvmCnqDWHTHXEflzLemBOaAlOmcpQX3eMeWH5ApEm1gC\nJNwGFLXL/Za5YYF+Ey0NCfPXg992am/PzekDEcSCOGGSGXSKeTohfEhXSNb4\n3DEJrrohaM3zogv+mqf4JfCReOoFNZRITPaY5lqHOECR1iNRAewhKUiZBZLQ\nwBx/\r\n=NA6B\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB86KydY9lS0DQt3G2shMnouzGTJBiL1cJRe1iesYVDqAiEA2l6DG8GlTvHWbfBEfwbyYG3ol7A2BXTRgi+rMRtqZko="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.43-beta.11_1614747166303_0.10677614506857602"},"_hasShrinkwrap":false},"1.2.43-beta.12":{"name":"@midwayjs/command-core","version":"1.2.43-beta.12","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"3d6a99a8450560b95ee72abad2891e858687174e","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.43-beta.12","_nodeVersion":"15.10.0","_npmVersion":"lerna/3.22.1/node@v15.10.0+x64 (darwin)","dist":{"integrity":"sha512-Ff6eDy8PgWVpplvlvR90Aphj5Jr/Ax8zw+sym3mN2hnFJXVSs1Kfq3HWpLvBscDjxqPaaMUbZ+utB6unAReCBQ==","shasum":"edd3fed9f582bd221c39d5cb88868f861ea1422c","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.43-beta.12.tgz","fileCount":64,"unpackedSize":182676,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgP0hLCRA9TVsSAnZWagAAASUQAKPEu7e1oF5DoYXjhzfm\nXfiETAGnlGCvs3CYhqvNnhVlovafNbaeEpmop0fzzxDth28T5H2vc4W/UPtZ\nTL5w+nztcpfabsNKHZceurjFjuuqyF4Hau0cBQQXiHnSFHX1WLsJ3ITU+RjD\nY7WyOoROdCWZU4jVyoWWl4NnI3gq1FL4DTUaEiGrnmLMPWk4dzk6oJ7CnAyq\nQzE0Nt5A0gZR9J7e6ZwN7SxldBuYs15pwJAPWw6w3YiiacPibwC7OrgQzgmt\nLTAAwwZEiiD+b+4r6Tmm5yifow/C7k3mPetTVKLiJZf/trjZBKWI8f5DMmvl\nHpO7PvwcKayvcwfy3nQ3A6t4uwI4rlEbYjaIvPl4XeBw9nowEVRr1/i8taJ6\nUPZ8CU9gAzLnIc9rEVndo139N3rOVeIQqI/QBjxzgvHsXu4/u7JLTQe9XNfv\nzFTkjBkn7ZmqK9VMi7Eioxokj0YkFvDfnkI7SAlswfEBoADsXAPDAIGMV7c5\nJVFz6vDQ0LoivZRxMWu/v0BmP3m3Ey1GBns6j1wXeqnmZTJnkatg5LBODxk+\n7lRAjr6JnU4SKwddwK/xNqD5tv4ZQAjMuKTn2fWtgscZZZVGvk3l77zcZs0D\n3rbyy7arnaR7bVwrnp82C1gciybRQos3ono7CRS79QqzH0oUifh3n/2ji8/e\nDENU\r\n=YuBv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD8DsCfLg+LT1BKIe/ynHPO7oSBSc+mh4pGf1AbXSwmggIhANidS1zvrxmOPYbvzSJe/XjuI3snpCJzB8zbkp9gaXvF"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.43-beta.12_1614760010906_0.5722220098692927"},"_hasShrinkwrap":false},"1.2.43-beta.14":{"name":"@midwayjs/command-core","version":"1.2.43-beta.14","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"bf5254a3170c7e6cb90503e8985ac3fc6bc5621e","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.43-beta.14","_nodeVersion":"15.10.0","_npmVersion":"lerna/3.22.1/node@v15.10.0+x64 (darwin)","dist":{"integrity":"sha512-GohZwhaFmQtGyB5mOG55LYtOca7e17AS+bpsmiCRMzegp4F4O1iwYaob6SOCSxbiyKFBY8BiKM2hrLmoRrEd4A==","shasum":"14d95438e3476a985c2a0de4afc507f3867b6b1b","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.43-beta.14.tgz","fileCount":64,"unpackedSize":182676,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQKOkCRA9TVsSAnZWagAAOvkP/3DltxNoDjAA7QnrgtpL\nwtDvK1AQ+LHavKVYKEfGHDZ5eTKk17pQ0MsOuwe9yJzS6b5M2vRQXT/dn33y\n0i+pVxyu8qLA/3TLFUrQpHVLLtDN+1FANCP52bdjamqO73sK4RAGgsAzdTSr\n8dl1vqgFfTfI1nd08YH2ZYgKf6ZnsZDIiGzZae1Z/xbyNLeQzlYqfPBzh6hh\nykZWExApte6hFLPCubWQpBIsJx5N+rmSInGeMAHaEVoBo+5n8u0H+FMi5oZs\nTwzdIVwikHfXouw4xFCgT16wpdhJCl+TYtjeN8HfmZty1KelzQO3Wi9Njpqm\ns0DHaQtzvKXYKFmdpwk5zuQCeGj74NhlB4OXWcR2+QI/8tciUHfs+2OiQWSh\nHKuCl6j/4VHl/nlsZ32SnlTsUqTNIij3JAW+dSkNCZuKJdXd7m0LTP2ivrh8\nKE2up3zTxYjNA/bAOxQ1PGRfbQpxAvUgCCIzCzPoYOG+dj4jgJglorxdfTdU\nAcAlj32P1uWKAo1UUNQaDgDFtJHtOPVIBITrRXSEMrWz91QOfGLQOMhuE284\nvB/6ubBjM5qCHG7D+EFHwtjQxX7k1/E/BanZSW+r31vD+PsxJlZ97I+LUogh\naKXKkEBZXg8pSMePsHyaJbYTiYj5zoVGQxPRK7bYqa2ODacAdRMbMkfblInb\nWLL9\r\n=h4QK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAZr6tbLgfqF+IPm2EF8PzakDMzvJAh1HgWaEW/SysgSAiBP8nH/flcYcDhJ6kmJMliIwRnQ+Da7Hjgymn/Xw3XEDQ=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.43-beta.14_1614848931615_0.7484299849999059"},"_hasShrinkwrap":false},"1.2.43-beta.15":{"name":"@midwayjs/command-core","version":"1.2.43-beta.15","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"8ec03663f8a14958470e80616802d28cbef652c9","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.43-beta.15","_nodeVersion":"15.10.0","_npmVersion":"lerna/3.22.1/node@v15.10.0+x64 (darwin)","dist":{"integrity":"sha512-mnLoNrGaUeUTuu+prGstEosNR9pxnrwOQlvFcbhDQzgCdJgI1BnPYUjh3/BBGpIenZR30WeThw8uSjwICONWDw==","shasum":"bd75e0ef892b70cec6d215524497f1dc38c85f43","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.43-beta.15.tgz","fileCount":64,"unpackedSize":182676,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQKycCRA9TVsSAnZWagAAbh0P/1aj6lsvDLvnnfKlP0HN\n7rS0IwOudU+pm/5t+OX08/8QZckMMNzK9MUE3oqTInm7Ze7g+XtWz2FxxDYV\nlz52biJxVW0RuUIZNw3mpSxAFm2tUV9nWvxAvbuoQZNiX9JHALdi0EB+nsNa\nDPKu0JhqatYYF24F/0ZjI7vmDwbWFTlHmDgXI9W3ivEpW+7CpXofXdYahLoV\n+9XfbPokaeco6FnuA+m//jhImqsVK47Cea4OgExjb4sFaiYuz/2GTqAJEcxa\niGB9t9dERf0aYDGR2KbtFCqukeLV1UeY3sBMF7UmXmEccimtRFJZj3qkDy7N\nizfTukAiFrAjd5aYwSFVISdBl0tYR74G5ezSLug24VhpS5FuzvafFcUiZPGM\nWO11n4ardYK88FKjm7xKHU1ZdE3ql9inTrjGu0K6Bfql3DIHSEbt9A6Xlthf\nJJbDuz8ILyS/MTQ4C6S/LIRb+AmsDnURKFTIVoqGsLaVyM69NhFo5QEVQZlQ\nK2x5wN2jptwhcY9u12SHu7H4ivRWGujFINnuYn/yRZcb72dL6i8ZevgtkjFD\n4awZfwNyKr6BFMEIJ1R7d5R/MfndHuLW+tBjH/1p9oBqNv6C2PvfOy6qRnbt\niPeZfQp/iE991dH9Z/JsqXS1oH3LjUajLuoJ84D60abQwHks0/4BbBTxDFjk\nFlCv\r\n=AbIX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCrDCuXoEuZqZ1jimQsF8eQ148hKbs1SDpriaSenktrSAIhAN0qlcbLOSdxHXnUmPOpYEQop91eFOgTXuyJneYY3Ffn"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.43-beta.15_1614851227697_0.6948401280255938"},"_hasShrinkwrap":false},"1.2.44":{"name":"@midwayjs/command-core","version":"1.2.44","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"b0fe4e0bf9687b6f9bbb67ee31a37cf2329130d5","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.44","_nodeVersion":"15.10.0","_npmVersion":"lerna/3.22.1/node@v15.10.0+x64 (darwin)","dist":{"integrity":"sha512-4L51+Rys2r/0E9V6I18lFAJXEIlqQPtFiGY3XAeeU8eULSts16uz7xGlGpatZ+JJF7YBgdQaaraI6Y1LHRLfRg==","shasum":"7d44757a4db8ea63311971b27a784b9102d554b9","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.44.tgz","fileCount":64,"unpackedSize":182668,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQMJ2CRA9TVsSAnZWagAA5f8P/jOoc6CVQwuosF+gEpl9\nSh3sG3f5n3+OJ5cAYZ30SgNveTyZEMyFn+ba3JCuMXdthUvLZEvLAoGmGteW\nD34sroQYI/283YoZZ25N/u0FPJtLXM8/rN3EUDpwgC1r7Xumjy3QGc0RnhYv\njGTjF9rquqtMxwduj4mIAiooLjGKOXuE6NtEHUOyRHIqgeCdF6eF9dwtu6lQ\n6Jl9Dm/crA2IzwAqYdN/CecPO2B9XW49imdgXSRchUbGIiMqsKpn8wyyXC8Z\nTQUvP1VpgbTLiF+AS5I678uTdkFw1oDUFvDrmqjOImm09uFVq6ssBxsEf4KY\ncGsPmF2uZgnb6B5dfUCh9Yw/n38OrGZM5mrUNEGekAdi2ZPp89E3NlaoKioP\nAolUq3mnaD8WiQeNqSiLt/AsWp4O7QPsUGgFtl8hfOSsp9FcNbeXFr9eAO4v\n4uyFX89ujVLEL6wks8C+m/26EYh0e3VeOIa5hez8PuEwxaNRusW0cvuSA964\nXHpbKWfehzCFiSUnxPCpYesRzn+YQYbzeyyUI2GWiPCnEcQ+/YAOb8vuWc9d\nUl8u+hbgyfL8LpG5BpjDOpj2HwQ9wcPCZqdXV4M7P0edXuKWjndGnqZvRDXd\ntDb89BuAABD6zmcne4FdexE8viND7wh22PIwOeDFa0sFxt7cG8yCecs4jjf2\naSvw\r\n=8zD9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBFyIrIs2frX0sYnRLc2MjH+4KyHkqYFZXV4VXsxyvsTAiAMoUiISl1TzG1vbOp+XBDEpn+yKjJoCXNmZAEnqDVNYQ=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.44_1614856822099_0.5762314644665509"},"_hasShrinkwrap":false},"1.2.45-beta.1":{"name":"@midwayjs/command-core","version":"1.2.45-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"965b58e0d1d271d0981bbed790f2f006b18af47c","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.45-beta.1","_nodeVersion":"15.10.0","_npmVersion":"lerna/3.22.1/node@v15.10.0+x64 (darwin)","dist":{"integrity":"sha512-58TFcpECUpHIN24WgRy4zgFPQF5O3OnxJ0eq+doQgDLEYHhJvirId0n4VoLL5rWEDzW28eAHXna2Z1AvFPw+XQ==","shasum":"cb06507541b9bc54e540f3bd9e6191686aa0b16c","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.45-beta.1.tgz","fileCount":64,"unpackedSize":182675,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQNjUCRA9TVsSAnZWagAAsUUP+weLmNUVgnYRl1hEUnpk\nu9FDl0F6R3fsmXio3pIHI4HMr92offv7/sCgWnU7P6HvVLpOaNWTz8wI7uRW\nQR9h2IbsWlmUTwYdtD5jOFna6rigkuf8FvA6UeQfqXNDhJABjxKuuNnhwNui\nkVHdTmLIlSPruszhHGAqJYVdv1KLEP0sfOoHLhMBsoAX9TV1BjZqXaYo9vk2\n8rnkau0qsF7pn1DxcFVqfG57Ko3eU7MCr8W9UiYcFRTqHi2K1X9scIAuJuOf\nOHGX8lyp98tG2fygXvtx0wuXuhWsyaMQ93+8/X6djmPk6OF7eSWhnzVyImnG\nsx+uCvyZ1P0pMZxr5oB7kufuZSWVhecu7aT2FPyGrxwNiu45OqFzkcr9bxiH\ne1HW8ka/blh5buGvYp7ZaJMowFRuLg6XPzsPVaC/y342bEyw/T9bqCFZQYkY\nYWhlHkchav6nmfJgcdBlxUtk4S5BSX4kIYscssqCr8eDz+1oWhyji1bmkqxq\nEBH2mxkwwqASrUPLTsqLmYWlN9DXQ7VGuthjp8xN9JkOb8Kswsv7lPeOy8ds\nxYJM2FUdfIFpip4oFkTcBH0S+ubZGOHl6mG6yYtzNBrpUIaX3NPQiFNPuvd+\nwIcy02ViEhNGnDS1AIAVFGGclnW2mDeSJehAY7vcnRfNp6b3gDmqtTnQ1nZF\nNIyK\r\n=bwZ2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBv4dRrVVJ4NnhWjQmrA3nQGHN8rPZHuuDbozwlAdc+sAiBEOwBsqqMMsk5SR8ReYPMvKUd0pUV2Mi/H94i6VeqHYg=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.45-beta.1_1614862548053_0.027233370884309993"},"_hasShrinkwrap":false},"1.2.45-beta.2":{"name":"@midwayjs/command-core","version":"1.2.45-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"4d832dce8d60570917ebeadb7c2ba1ca0587f186","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.45-beta.2","_nodeVersion":"15.10.0","_npmVersion":"lerna/3.22.1/node@v15.10.0+x64 (darwin)","dist":{"integrity":"sha512-2slligmnUbjGuh602nfkJoL5qkCCzvt5+PmPXgBzXuZPG9017tPmjJsg0KEyNHYPrYc3Xxaj+gioiUKxf/cNYA==","shasum":"8ac4cf64e0d1575eac08274928aa689c89e0bff1","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.45-beta.2.tgz","fileCount":64,"unpackedSize":182675,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQNwhCRA9TVsSAnZWagAAmtcP/RhOGqCm1pt/ZIvVzsDa\ncKIZoRH/hAaOw1YdWc0U/0f/aVF4JdiwJMmhoCqwMpAwJ2T4mR973Gk7yics\nh3D1SHPEaBWQMszow14MHk4fgdG2DGIWy1xfzG/BKye7A2mtpg8FPfcKiiEF\nG8SfE7715/Y2f6NVjUmj/kgQwr0SMi9zscigybhRtJRcz8RR8Ri4tz8jioVx\n9RUC+C1dmIqW2nAFR6/G+1isGbtfwRtu4cLK4n/o4/Hk46oSRBTfmfCzfNQ7\nv5oUpE5Pr15Yq1kfICONwFqP8vFYphj1xNoUaH+acgbChKFzWfTLpNvlDIyG\nt9hmuDm2cm8gPaZPohcyj2Ulfn+OiwK+ZpVyYAhQudGT522If1Ymi7hcGW5L\nDnn87pp3zHXP9n1H+YmIKgJxqNpEPDr+GKBkJZgfS/ovVJ9Nkztkwl6YbbE8\n4CKGLgRyrlOVmpduiw49Vf0SFIu2o4xJXNe7p4Ff1skjNd9X0A5APHjmdqfP\nE7qEVIhSk2IhdJVwkWMbVh7NmoOl3HkWN3XVwcxpqypfYjbqrLGoGPnMGhY5\nPlF9BNi5/vFeHUgEr2XT4EYqqd2vjs6g/14p8eeu1A/YQRyo7uupipjU+dn8\nJwG/OtFp3RWtBYQr0OwUErpmV0zHYpMZaZmuxV5g0aSQBnsfDYrVpjCeZODB\ndD27\r\n=9Ujo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCma8SGyxvVUu586mNIcfl3EEQ/wBqqxyTimx7s5MHjFwIgeQhoA1sDgXMsWpVuVQPFcQRrVe57azoN6oHUVFKjb1A="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.45-beta.2_1614863392766_0.9386449913003474"},"_hasShrinkwrap":false},"1.2.45":{"name":"@midwayjs/command-core","version":"1.2.45","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"f5e48f26a1bdb177a22492f40de0ab3306c94b12","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.45","_nodeVersion":"15.10.0","_npmVersion":"lerna/3.22.1/node@v15.10.0+x64 (darwin)","dist":{"integrity":"sha512-yMIHzowxwBiTmVyhKZXZB4wWTxZx2zeRZXdBJP+oqG9xULn9WAuHetuk6Mnq5EwFpP2gNrCIlu7aevOVmBCfOw==","shasum":"ef13a01a2415a3a8542331be3b04fefa4d7730f8","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.45.tgz","fileCount":64,"unpackedSize":182821,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQN//CRA9TVsSAnZWagAATXwP/1uPiN62STkOucQG3Uwq\nNaYIu/QbcTsnR1RSnajuf1VyEyHsBnkel3CeSV/k8fNwEDsyp7Obs1RweMtC\nR8vqUWrTqTnMtnh5qK3aPbRJ6EhnIjIuF5r1S/GyOV+K2H/gnUTs/FQXnkL5\ne2YdaiwFgZ7NqeMhZl+2Ado1f0xrKLTQdiwV1afO99gRUXuqtBNcO64mGn9y\nv3q9Hb3oizxdYXdPWWUcC6vleUtVgctJtggKHQhmaKzJYlC9rXBSZqOOFQFV\n5nFIm0vIczYTmulDb5oHBoNCyAt1R+oq1b8YaygK44Dofb7NY7D9QobrX0M8\nC7EKSQRVXvsIAiBc+x8eVm33E/LDd6rRzjLEZW5QhWcmqkNLtz9HaGKhu/Eb\nPKY97NK5us0/hyT7yvdSIA3bgMglai6JV/dxVn2QKHIeuD3+aqz5BvBJoBIm\nT7Fxa3Qh2IOS4RU05CbJ5SBR3ell/J5T1vm7khzjpuJHKVx3+m4RsWvgwLon\nZXZZKs0buPcL2Sh3JtrF8X7dkutbJ81cCAIjYZ3x8kE8ztY4SZcfzP7jIQdg\nZ97+g+AXAFTh94MCxVaFrEZFUU3Hdql5ckjx6jR+T7xS67lEvEFuVvPp4/Zc\ntJE8IAct1H629LebAeZHlPtocJKJlBX1I5PUdZU/L6N+EUf3wAt632nE5Iah\nE8BF\r\n=FTMr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDj7RhdBc/MjlC7Yoxn4BDa6D3cOluhd0oF2ghGglZUcQIhAJm+oYUcsMliRrAfdaVmwpO6qSHEmp9vc3E482ARqC64"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.45_1614864382794_0.6905057842129414"},"_hasShrinkwrap":false},"1.2.46":{"name":"@midwayjs/command-core","version":"1.2.46","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"ee166b1b188d0a061801a3404ee64954ecab8381","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.46","_nodeVersion":"15.10.0","_npmVersion":"lerna/3.22.1/node@v15.10.0+x64 (darwin)","dist":{"integrity":"sha512-5AwoMWLkzHmzcj9PEMyqIsIRkr4FvC1OlKy+wISe/g/FoRy0MCyt0J8jV2bDZQ7rS4m/iRLS5PN5mjDzJpeUxw==","shasum":"313971facb5133e0a048dd8c3a625874173a8e70","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.46.tgz","fileCount":64,"unpackedSize":183494,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQhEiCRA9TVsSAnZWagAASSQP/jUOSUEOKOULHIzZ7zfl\nXWz5harKclvtKPPhIt+aZrugV/VD5vUSdym3ExifQ3QVJPV85d/oPl29MAp+\n+EgMQac9MFvxPgmGcBSTaPHjYlJNw1mfBiN1jmzslScMiQC7JLxWoFhY++GU\nR/q1yy1yXtBvEa9XcdR9FqyJnYaG18oeQUEZJUazGZACANrgSRYluTiU2Ng3\nYdbOLxizr7x2vvHC/nudRFvJCezX8daZqbOKC0HLKHLRBrv02NL2NZNCmYdr\njKgGJmqb0J/aaPPtYRggzLpaLt7/wpnJR8iAw2g45tMAds+dgVcFf+ur6+jp\n0bSCN4jfUsx05HWJFdqFWBuD32HALaz5rNJggI9K+VyPjCm6Atgk+ZpENuFf\n9pEVHTM5GkngTMSzJj5WP+ObzVTJcOPSmQVcQwXtDdq/yGrg9/g/IFgG8Qqa\nErkodbSlbi9HBH6JS886lk4+baUwX6CuxUWgYfm0y6iMX+O6/27nH5PYRjrM\nyFWHQYvyW2yMTL4m0AxrAbqEMRtyDF4ZozFO5TD4bFbXBdX3K5zxf8GbVbZ1\nUZYgJTnxbKi1Uofs3yCZrb0IV6dwyY0hy4XfAHcq/uHwu/1ZYn8k+kfJBt8C\nkQpjRUDShJsjAOxycpqvXNeKDUMt/I0OoR60l6r1iH0fB6Lp5NCVhl2cyzBZ\nH4yy\r\n=QVKR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDrEaaxRl2nLg5FZe5c+WlkTJg6gsDSIaa+MNVXUMQQmAiEA12E6uYMStNijBQ0tpddxKgiEZBm1j8YtTflnU2IgfsI="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.46_1614942498305_0.9552037221739009"},"_hasShrinkwrap":false},"1.2.47-beta.1":{"name":"@midwayjs/command-core","version":"1.2.47-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"58706de896b8e3b50605bb29f40ff29abe43924d","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.47-beta.1","_nodeVersion":"15.11.0","_npmVersion":"7.6.0","dist":{"integrity":"sha512-nXI176fpRPn/Abr09OZHuKxdRcJw/DIeyGZRUDHkPPjDD57oXFm46ZOlSWUaB30ctMeO6iQsFcpU7HYIG0gTTw==","shasum":"dcf095dc9a39b1687383627f77fd99775355fd9f","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.47-beta.1.tgz","fileCount":63,"unpackedSize":183202,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQlhRCRA9TVsSAnZWagAADuUQAJE+5w2oIgy1wOpFbOJB\nQzXI60vlX83TdAnzinEndVEf3IwPzkQ3wbkVKhfNv4BmOlBNw3O7Awt6R/9k\nJPfJIz0MR3VlDVufnbzVx9kh6Uu7sdYnu0kKk4XYoJYn375JHXltGmHnB7I3\nnulDJWmu7EhKPveNUuMWhmbPOixZmoELYOK+xWZMJTUy58wNRzDufPASueyF\nUkApxMdVXMXI3OyXWg7tAFc8FG1Jf8On26mu/ruDYPetmepeDj6wLBbnUW/v\n2KLplDWNg06cotCYYWPHhlIqdF4rON2Fou+gvP10gxac61pSYBdIMrgD0Ftd\n8oVc34zYVrBWeOucCtz41eEuahNQqvzKhdTvic4s4+NAgotvigE+3eQeNN1t\nJwL/+m13qbkK818ATNnfki2PPA+BaKduPbzYzhLEa+OMBiA3CA8VdqjtgAkR\nrXCn2pFWmW5aV03LdNgwdm14c43hAOVPTLtY02EJKW6+Htm8iPNME1Ctyna/\nUJ08KHAGHXd9KCV9+nZ62eJM5MYSOYuAZYndx35UDIun0UefvpBhQdRHshGX\npv0y+uANMvHw/XpyRa0+goo+Xg9f1lw9tETm3Rwe8YAb8O7BvqjYToZl0mZQ\ntqRf6zJjpf5z/ukEs7/guZOLKTqlo6Subor0M0i3tphExtHGBWhXbhOBKjkk\nNg9k\r\n=23f2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBGIc0jgCzcgUVobx25CkzFxC5sNOyE5abGa70WUtVI3AiEAmXyTe68+lIdmwDeLi3d1HIez9cKRWsKISW6hY1nS9Hs="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.47-beta.1_1614960720872_0.6908902272805841"},"_hasShrinkwrap":false},"1.2.47-beta.2":{"name":"@midwayjs/command-core","version":"1.2.47-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"58706de896b8e3b50605bb29f40ff29abe43924d","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.47-beta.2","_nodeVersion":"15.11.0","_npmVersion":"7.6.0","dist":{"integrity":"sha512-7V+U97GnbZO93Q2RRZWwYabgXcbwzVXCA+PZ7p2u+fCSYS7M/SpzY8LwtpjJu6fnTMCnIotbF/aYST+bWn47eA==","shasum":"7f6d3c3b9aa4b6ab4e956494dc8afeb52de2a132","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.47-beta.2.tgz","fileCount":63,"unpackedSize":183682,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQlnbCRA9TVsSAnZWagAA3o0P/jOjun/Pa3pZjQEK1B5K\nnoh2VmOLJ+/Z3riZHwC3lOTnYmrUFyX/gccAg28BNJeeQ7yjtOTD0MkRYGac\nbKcHXVOcTl21kK0B89tOB+jrSb3lw8L7qdsicKcJJqLtxTg7PoH7yhP59ib1\nOSSJoN1iN+c+oXpogELafrNRkcV6zuh3Uf31hgCCbyAXMFeaPoTQEKm5Zd3B\nC4/Q5FECLDXKLz6hiKYI8hqZzWkiXUUqS5lq1ofQsXoueHk3rn+MiRbzAP7i\njyANuxqFwr8aHgTQi91TOZ7KI3iyktE2jSscxFwinZT81QsbFjK4wCKbnKMH\nbRrM9IigMIQEz+AuAAzQqyNKu5vsc4bZ2+KM9LBzz7FcpYlXjOpnXYH6ff/m\nf7CdCgWEJ+t0xERPGvwGZXs96Qe2//JjUdkUSeJXZLCHY0Pi4/W1wScIke/h\nFZP3/5UCae+CuU8tHOOQR8t4F458TLCwKOm5cViqumRCpnIY19uIyyIqOgXx\nFhCyCCI3XIWMwD6G+6Gn1fmh4yxyy5578EjWHiUxb+XXqPap7OPljGfL+ADd\n4ipybKxnPBLu8k75f74aMDogdlY84QE86fqI6GnNZvf0M1us4ikTNKe8xzr4\nC+SXNM+PSK6ygrp3OJDuvlE1Km3wF9oAtF4g/IjXZtyapRyKU1DhbVDhtOMG\nM02+\r\n=hREE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC2MLsm0BVJVdURmvQrfCplMvjvXXYby1cAzfWoFlQfUAIgWSUt7jmijAoa2ILdyFQ3eKEfFft58XlSFWD9SeWf9cM="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.47-beta.2_1614961115497_0.13819054810103326"},"_hasShrinkwrap":false},"1.2.48-beta.2":{"name":"@midwayjs/command-core","version":"1.2.48-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"c6d73f000184ccbc1353790a2598450db19acba8","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.48-beta.2","_nodeVersion":"15.11.0","_npmVersion":"lerna/3.22.1/node@v15.11.0+x64 (darwin)","dist":{"integrity":"sha512-zT4uf7JH03xhEzSZxF4rAF75b9GK3GGcxNMWRgqkkvnNoySOmtn2SlxuWwusm3m4pq8dcGwiOUClYUWVtslZXA==","shasum":"1e5ccb493d01b208ca4ad84a69eeacb753fb7584","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.48-beta.2.tgz","fileCount":64,"unpackedSize":184318,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQl6rCRA9TVsSAnZWagAA0AYP+wZaFtvFAu9EH+YtWn1d\nLCGTeJrRAGkOSJnpLEkYEFaLsk7DFcDyTXKTgrldPgknv18kZbtQ/HfJscna\nOOVV05RCE1LSVqSnT6ks5cpYsoI/ILfIrQlv/IT98A9FgD/Lbb90to9UqXzX\n24CNfmbzv7IJAgRx4ta8UunapiwqAqYOmcQxK8oupBzNSQG5EKHfb71ed7+i\nBBKYc/A531MNNFvL2GRo5qRQgmM8wWYz8hjQZx6Dar5P7jmK4PsmnvdP5JJH\nWzLW1hFkjC/o7jHEIIM0aavI5MbOT9Y2Nm/yxD3nPwQT9mx/EKCMK+Yxd2j+\nmLcHQkD05ahWDGmz64QMsl32X1T/dB1g1ES0xVmO0qoKANqhPo8NoHV54HDv\nc6yjGGmrYsIeg/XuqG4UqS4TcpPTkXC1ZhnMNsoRlvXdiMQ4+fu6wWnxDV7k\n8+tKdP+o5GZZKnMVvUDGCFyN9nBiXuoFmIsRG4/n6V3MWIF2f7cTMC1ncgQB\nVYOmPR1/jqaOFnMa2bMJQS0+qT/eo++fd0rB9KvDmkf7sBqUirmWCEuaK2d3\nNT/Dh8LrVXW8NRKAWCBMz7Ro74jMfvvHKmlUu8OBzdxynKzEZz/du+k7zSCY\nj1GkjnGQtt499HTFspms1pMRwif5iN3qDNABcXKZ4KoZgTN0mft96K3/zavU\nyGno\r\n=PZsQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF09jpKU3OoGLN5fpi2hDnDEUWqwHKVnVQdVp/uNqI03AiEAiVq4a7xOGdqOMTAVgW4KAnOIU5uuMkSySBWt8VzjvnU="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.48-beta.2_1614962347054_0.5150791270796362"},"_hasShrinkwrap":false},"1.2.48-beta.10":{"name":"@midwayjs/command-core","version":"1.2.48-beta.10","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"ca1018e1c836aafa57745424f8109fa3839015a9","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.48-beta.10","_nodeVersion":"15.11.0","_npmVersion":"lerna/3.22.1/node@v15.11.0+x64 (darwin)","dist":{"integrity":"sha512-Tknxq7Fq1NRssxRVxgkrx6iBdmPTbMEooX/yOp//m4qsFdV+eY1Elq3QMOQqjUcOg91MKCmP/dHnNggBxPucNA==","shasum":"309bc9800d84c66873e7bdc1b5e303e8bc7371f6","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.48-beta.10.tgz","fileCount":64,"unpackedSize":184319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQl9LCRA9TVsSAnZWagAAdQ4P/j12YOKga/MXg8HtJq7o\nIVjf8Zh5ROvAyYeMHCOfHC8yyAXTUVdC61ltDwIoAhve6+Hdurw3yFql7keR\nWB5XqR2BIXgZh7qV1N086wYmWAcyriH4qF1xIn7fhQwXZF2QKEb0SsZxaVtn\nmgRZZkWsJBweqm61exRzxLcjdNxT+uLdcRiciZD2Xtn3eYCL5pCPsSTifbfA\nuH/6gFyQCTzOE2Q3oQG+qlgziK1dconEKblOCgOiQ4NQD3PEc5hGGV3wjesw\nqnS8/KTHKEhU8Bz23WO0AUfDMMGASD9NCg2eADgQRk6ity5eTeOROz4Vbqdp\nwRREFnnWg/2qaR6KRclGSRfvzXAKxjaKsqvjYTdzoemryTBUwcvJkJTmRqB0\nnea6isX3mN7r9knrWP0IKnvajUKkxt+gJYDOu/qi/eL1d1Ep5zdUUQA9BbjB\nQ/f0BJMAG8KEfoBDf5kpmFvWrdz/XKBCg3w/5sPzW0aUbcNE9K7l1Aja+DUj\nvk/812C+Ljs0qXJl7MDPsQV0uNEW1v4zLbbrBUpGlEy7J+CW+RVpq2/gitjh\nnsiTCPS/YB4gO04RYFfTDYiwV5sgmnevRGZIG5WDhQBnCqgWh+e0VaZf2ek9\nbtpaYeUhCqI1+SemWn7imdXbMRAl8hlwGLw3GPLb/FjU6ODefVWHl4zSN/Sr\nx8TT\r\n=ZEYH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCDDnR/r17i1EoungyC7sW2lrQMhqWgBwG8o/Wct1JazwIgeN2jlPR/CMYy1um1b9TnVTYX71eOr9DXUUZNz/iTcyQ="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.48-beta.10_1614962507495_0.5586139383384372"},"_hasShrinkwrap":false},"1.2.48-beta.12":{"name":"@midwayjs/command-core","version":"1.2.48-beta.12","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"df8afa02de24de3dda1f891f5c02da1b33496b38","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.48-beta.12","_nodeVersion":"15.11.0","_npmVersion":"lerna/3.22.1/node@v15.11.0+x64 (darwin)","dist":{"integrity":"sha512-MNHbXLLYtSQUeQO3yrD4AocyaI3xh+4efE9YAJT8OdlEtndHh3gfdS93DGoGAgdbMIm9WZDadiMH3DKaGHg0vw==","shasum":"039e2dc1e67be30b810c51bbf5ceae0667a37146","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.48-beta.12.tgz","fileCount":64,"unpackedSize":185115,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQv62CRA9TVsSAnZWagAA7qoP/1huTBc80ndX965Raux3\nohdFg/3HSEof8pe8JB2aOObrGXDPncty7Eh85z1oTESIxwSjNhA6SDNHATLd\n8Ta1GcBaMZFhgfsMDqv7TEcfpAYje6yaK5X1Zjoqudy6uIxjQ8xA4ko2smOJ\njCBd2X22S1l36pLc5eHoqhGgGZTYBccnJFcUyLUAJ0aiMaRfDeuiSOnwx0AU\n8UH+Lmc2mBbE/f0hxPRD9uMqrvBG5Q5kRaUAEVwBf8moBrMi3N3FGQE22I2m\nx/MJ3ptCw4jvk2ZC0WzpL0KfBnq3WJk9vCSpRBc0YX97/T/YH6SHq9qHn5yo\nvt9OjtmPNptoC4NiwBzXgo5Sh8+V+WQqejjk8OAQx7H99tdfn3v4kTFFbVq2\nx4mvwMEBDDXnM0B30KxJEn0hjyXvzG3zMhd3rVTz9a105ZOA9l7a1JtRKjgQ\nD7dqyUwdK6idnZdYllXSb8yojpzU87fw8ifQOzQGrsCMFjBvS2cdjnLGzqoB\nBtlJs9GJcb4rHzPEpo13OTRQvO7LLNYBhACi0gZgqb3+cu6o3H5KWgOTE4t7\n+zO2XAvwcUwISmlJ+FhpDqfMDCG0t3KzuGxMffbMj4oQ02hqtVdVfjJ3RChG\nwrNLoQei7yexPg/bF1pWTNo/fMjtlgYnfhvzLFc3nR7G6q+kFA1Q+cvtJ38P\nZrCQ\r\n=xueq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDO5P1b8/U9lEvDjgCyhYZkkXC8bxdEYIwmLru9YAhN6wIhAJESCkmixnR7Pz0qUeKV4B354UY3CxMN0euoYNhAMM2g"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.48-beta.12_1615003318384_0.7251935505713742"},"_hasShrinkwrap":false},"1.2.48-beta.13":{"name":"@midwayjs/command-core","version":"1.2.48-beta.13","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"5674a5005bbba879e736ea9931ff2aa4b48ee580","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.48-beta.13","_nodeVersion":"15.11.0","_npmVersion":"lerna/3.22.1/node@v15.11.0+x64 (darwin)","dist":{"integrity":"sha512-FSbGfYhUW85RNe9MnmEPzNmx9w0hbRWrCeudPOno1Tcz32NNoLlw1gUOwEg0jodwj5ybMcmzE1iGWUWdlk8i1Q==","shasum":"a6a51b1f68270fd3a54ceb6812306c0620eac70c","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.48-beta.13.tgz","fileCount":64,"unpackedSize":185115,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQwISCRA9TVsSAnZWagAAPW0P/0XGn0KgBeYA/qMuZDAB\n71ab9PigKhYslqi1lF5mx4+LjzDo+MGsQ/YoZm0au2G9D6x6JIdvmRRf/+mc\nCUc1yEmfp8TxOFDX0bo/wN9ubVP2ISlRUCJgn2OGsxxultej2LTjkeHV3tq3\nIuTlae5LCrHKfRSRZ3KSbg2csT6DKzF3jLa0NxyMqL7FoEM4XNfaQD3YKVhk\nf1D1y5KcGOLAor/4xvtay2ATHxgbB1CFFJm4j2Mjsb3AONCgPXafdsOTT1Jl\nd+N/rn+Cmupe+X/2TKQQjeEoCh8VapiltsczDi+KXrTAOjmYddwS8pWFp8OJ\nsfKzyGZASJOiThuHL96ufFtFFuimXu91J5CPsT43jUjvHwoHgTeDzg6/6KvA\nWu2NkaOJ0kvDaxleOhK2Sv9PPgvYbl/46TMWMIWj3+TWJ3nCPYKgSSiyex7v\nSsh6hzEx2R0/3L/b3jWhdANCzk/7Ky5wv6gaKazSDacgbxkiLdsV8NEpPSNP\nBSDa1DQ6GG48DEo/RcyjhPbhJmcVdCK1xpBRTkXTC5/ycRsFrc38Q/UWXSx2\nqclfZkZxhiDyX+F7xA/g+UKGzfBYkYW01r2T7a40iA2ffGCoJch70/hIzSDT\n/2l8qOZyXWu6X/1fDgNbnSteFNBFJYX/V9/hK3uU6w6Ny9JKJ548/39+syhz\nOyj0\r\n=uFum\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICDJNPbYbfG8F+Z95QyuqxHsfaJsk9EjA4zyWQUvTAqoAiBBtrH8QKxXen5k0E/2wrQ1Ft7OSGMqfAHWG5aMBdduBg=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.48-beta.13_1615004178002_0.11666459992649925"},"_hasShrinkwrap":false},"1.2.48":{"name":"@midwayjs/command-core","version":"1.2.48","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"272fe819f1fea81949b9a65746ec47f781e85c27","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.48","_nodeVersion":"15.11.0","_npmVersion":"lerna/3.22.1/node@v15.11.0+x64 (darwin)","dist":{"integrity":"sha512-xioR3nHGP02redTc0ilan0H6oZmVXhkPs97zjB41lnvId+aEFLjFlnuud1l+OnSMERQuWWegm1BPlDcd2HC3XQ==","shasum":"ccf8c0d3422187ad25f534c21ab4a57eb6dcb118","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.48.tgz","fileCount":64,"unpackedSize":185368,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQxDuCRA9TVsSAnZWagAAul8P/jNbF3DrHqQAUMgxemmI\nIX5x4Res5DUO5vBrhc+MJxzhwE1TVwuRxkdXcWL2V8CylEIoAGYmk/ysCqbQ\nLIrhTdkgBcRhI3QJ+CG4t3w13eOzewwoTUrgBlvFg/fs24Ikaj7ehsVz/Ltp\n01BEzn4Gm4ON17T3xrFLLyrPE37Ctp6fWPO6IzaIsoYF3aSHTNJchGzvNe5s\nKMps88eCOgjuw1hb57NWAQ4Ikg+B/Nto/FrhIpYgPv/CQOCHe1hu60YCOoHJ\n0NQYxkF89ThIJn5oLeStqIomZ1lZZKzYm5i3rS0+0ExAVguo8Ofp9UyYGMkj\nNR+LhlWY7f178op5+1K0TvJd4RaW5OkaPcvCHl5x3pjQ5sOF73g9Wwrj9fRt\nPNY6wlGpFFmbz3PYJFJu2uNtTqRNp4D4Mfc/Qh/tf8r08Fl9OwO/bqTWmxNR\nno7EwOPEAc+0dFga41Fr0YA7B/eEZ12KNx1jT1f6eZ+SetANAJcVr0aVNAUU\nIfJBRqrS4sVMRk0VbcqPg9PWmJzYr8A19rNtQWuOHL+vslVfck3Roc/Uwod5\nrPAb8A53c8excLNe2gahjxY9ilJVFC9f3//v2h67S0orUVyTjiKnHyF1wHcP\nCJrTQqRi+Q8dznVqN1kJgWWGb/ElNn66x6Ed/ZkuJ/Gk4QSy7OSwpX0x1dEv\nrDnv\r\n=8bo0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHyWPLgOnKZfEesjPTyaKwk6CsqOxMcQN9ds9TuiRnrAAiEAzQ1C9UUoEUQ6fVAwJ52YE8A/z9jZzUn4y5VuNRH5/tM="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.48_1615007982282_0.5013831950156082"},"_hasShrinkwrap":false},"1.2.49":{"name":"@midwayjs/command-core","version":"1.2.49","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"61cc1796b177a161ec38422b8ed9894ec388b8e5","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.49","_nodeVersion":"15.11.0","_npmVersion":"lerna/3.22.1/node@v15.11.0+x64 (darwin)","dist":{"integrity":"sha512-C62hnwyvsnNM4VB9ZvX3uC1aIRO+AepLqYDL8YDHTkGE+lRHTD4WittbNCVyJGsMuxxNA+LPVfdRzS9oM/odhQ==","shasum":"80a6034c4f73c6111ecc2bf1f126c1b2bddaf8c1","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.49.tgz","fileCount":64,"unpackedSize":185661,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQxZTCRA9TVsSAnZWagAAMxoP/0TyBF5dfu57VLtK8/Ew\nMPSuVnujMaaSrAbTP9Gv+YpiWF8vMuULVwLtYqCLClv+6bCq6p0EYP5Xy65Y\n5rKdpJ3d3Ie7sw6xICxXLk+QsZNxAV+lBu9DHmHzZZP0OwrU++3u+vgeRZBF\nlXnuUs6zb/hoNJXtBmuqAemKbib+WJ/khB9kHLyT32uvoBFIilVw05DB+S3s\nYY1Ny4bc0YWnwJS5cVNt4j/eLXDY0llOcWeU2dxgMFyQT7AZQ+tugFkf3j5J\nZ2ESmz67oQ5il6ZaPJnbr6vqAIiA6RvPCE7j8WIRtlr/M398PgNZX2fhzx+k\n0e8Kb1KnpZi2Ao86JKi+dUmXka0GFnvdPCzN9xViWlCO68O5YRrbj6ZaiwE8\nRzVG4Kh2XrYVFSqcvGB/9gou7X39jo9yBZi0vAhBsNL72aNnWkcA5UiyIMdq\nbIon9lhsxdj/himYhBPHOIeqrID7dUrXLkDitCvY0GZqhfZXTNSmj9sdZYrH\natVtVo6FarC0CMbhqL9nk9ZNcW701y3FdQ9GamMiOQjkP5Z8uiv56zReUJXL\n07gHH9CU7SJa/xUVFm5k4vApfEQO2sZ5zWGTqzjW6XUTywo4Gv9H+DPz6sBE\nIVxHvRPqTdKIo4rtTIffOId6ZzRK/eQcxZqss9LJIXplTY/4FxR4sePmfVH6\n3fkl\r\n=FfWE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBKN+Jb19sAt+yfJqN2ZpBn3I2yo/QvPfztDFOKfwjocAiEA7WYlvbI+j1cJWLES01YJMiIEmwFkEbD94HYDay2hb10="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.49_1615009362823_0.18098461020572643"},"_hasShrinkwrap":false},"1.2.50-beta.1":{"name":"@midwayjs/command-core","version":"1.2.50-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"cc6a55bac8453d39fd98565d7972e7d7b69188f3","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.50-beta.1","_nodeVersion":"15.11.0","_npmVersion":"lerna/3.22.1/node@v15.11.0+x64 (darwin)","dist":{"integrity":"sha512-0O3Uk8ia/g3WgsTAQBEBa/NjZdJyM66raaIX3A8Uz6/Nd9SN4EJ8I7NL5UqPoWSoJKkzLwrb3WwtK1uIbDrWnw==","shasum":"8321c3ad95918bb2cd3bb235590560b2dfb66f3a","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.50-beta.1.tgz","fileCount":64,"unpackedSize":185668,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgRe8WCRA9TVsSAnZWagAA2O8P/ihLYk9p2xW9XYlMFp4v\nm00xyCwSIouWEw3mK1QYV5dMaz8/PY8zinHmXXKmEXZd3QhTbk2D4ir2atbM\nmsMCWMqNoRVi3tNro46cUN3Lt91iHc4egRpE18oYNmsroRqACJI10Yde24nF\nqjR0zI7WNvk/gQb3cipPUi3i9N0zHq5NnC4r42fmw7fvknEpjKY0dPq8Z9Mk\nYbFIFSxgBUmPJb8O6O5UAjv0j1kfha+mLOWqqXafjcqA3k/Iyk41m15san6O\nEqUWPbEwWONj6OweejQO774zFXlL2mcfazaRwKDAatf01VaPKNe4pMNeEClx\nuUEeGWvfF4JwTTgyNDBS/FTyq36/FbLDNPfPCnv5bhEFpsdvdMmvTvxfd9Wq\nk89oyhA4dRjNtcwLVlv3JcGbVF73tyE7I+0JomIhcR4vRp/X8Hhoe542v6lp\ntD9NwEIXb8XZc02IUw6xJo6Si4vpfD1ldts+JSugdpQJIV68dGOaJKQKXGiH\npCAB0tZSdWBEsQk/JCHuCHHUI3zK/Pc8yO2v7EGPQ9I9LDFBuVsUuR+FW86g\nPOwBKjfiyOqf6JpBybxvF/Q11WcpMBhWIM/teczJqvd0o7lS9XXXZbS/I18B\nx0IAqwnLPBH5+egpR/OZyxFsuW/20rysTm3b44yIIB44KFREPcJI3aUvf30g\nDO3z\r\n=FpNl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDY/+hUSEpYx2HpZqZINmULUsMYgzA+x+ucWqyvStr4DAiBqMIcuK+u86Op00jOTK2Ls98xmJ67owYXAnZVQ/tYRow=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.50-beta.1_1615195925579_0.324898111364039"},"_hasShrinkwrap":false},"1.2.50-beta.2":{"name":"@midwayjs/command-core","version":"1.2.50-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"f0204dbfd0a53d3893e087be925e399657cfa308","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.50-beta.2","_nodeVersion":"15.11.0","_npmVersion":"lerna/3.22.1/node@v15.11.0+x64 (darwin)","dist":{"integrity":"sha512-4PyT8hgyG4eOAzNSxt5A1HeRXPQKZtI+6DqyMF5JgOqRE+aeA7H1FsQEy5K4WaIFw95MsjpGUDWlZGauUY5PbA==","shasum":"db7d28bae82af99ad9587966cb118b2ff87cc52c","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.50-beta.2.tgz","fileCount":64,"unpackedSize":185668,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgRgjnCRA9TVsSAnZWagAAbfAP/RkTxeMJG1OF4kc9ynrf\nKXZyix0ujQ+5TxoDQXy/CHx3tNlrj8Mvhj/lX8W7uqG/bOHJm2Oh9Z1M/Vzy\n/UqEFEsHoA6qIktkoith+vYRjo1tpx/GvO/+Plu8ZJW2M6eLj8INtlMYOYuS\nQj6agcmuZ+nkcQnlk+C2RcyHlL7cjJ66EU/DgcmxIBCEkTVSBk+Cw3taKxeL\npaoPY2BrPLyn4/udKgg4YWKlpeoIJi3BfATHIaF3YwzUXR6Tj3ZmAcfYGqCQ\nCabn4Vn1gNQBuUhvlMrttTFh2NzIQ+zOJRpan4RfatJCQHFrND4pLcGytXko\n2wp2XnfYPjQcFlcNtFhuqLFj1CUSoEe0rZ82wVeMqtBtEDtCtmIvvgCfAVGl\nPy6luYsBWzz4w5Dvk0DCGJfeaBmYymS1CUF63QVtWkC+c1NQh+3TCBrNAzYh\nemdTyXFK79+4cf7okTBzIciA42mnEoy4mmBkdrKzXgntfaqx9AJwQ00yI/4k\njiEsgSLnD8LpTHBWfybBMxNsg4S5UL3wA7TFNKJ4vW/49nSd01N5mBMkUv1b\nVyfPrDPTv7hA/1mWsMP0mw0leAMEy8JeudH9GqAxZufBWahh3hzM3heRtIMW\nNWf1IYSURoV9bSuQeIiGpUhL69mIZ30slree+bOcsfpOl4qwDx+fNyFu/+T8\n/NGm\r\n=f8+L\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEvdTVjgH2LSdROSxQcAc3Z762BPaGd5eFoMLn/Z7HLcAiEA8jGDOYiYXXWOkgtsqGmAEfpmnFaTqCfj9AhrSBVKtC8="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.50-beta.2_1615202535476_0.8435482501410745"},"_hasShrinkwrap":false},"1.2.50-beta.3":{"name":"@midwayjs/command-core","version":"1.2.50-beta.3","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"8c41522906a5cdb742633da308d3d77ad859d4df","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.50-beta.3","_nodeVersion":"15.11.0","_npmVersion":"lerna/3.22.1/node@v15.11.0+x64 (darwin)","dist":{"integrity":"sha512-PzZMRViFt2wBCRo81vJ24V48crG+uJ6Jd9oFMvSHW5T9lfipe7twlmwEujhjo77rwdK07ehUsfEtGdpBcfgGzg==","shasum":"79131ad189e26883eceeba34063b5465bdea9411","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.50-beta.3.tgz","fileCount":64,"unpackedSize":191824,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgRvESCRA9TVsSAnZWagAAMQsP/i1JMnkQCJ7yYZZ1DJC5\njGuKTNnyetzQIKmmQ4TkpNUjl+IqSeIrj+3VY5LiQM19Uv2Law/7ftXL18RT\nV0qEyX99tz9b8jnOXLerDy+GcI3C2K3641jrI0YGrtJdvB7jBtohPK+Qh5LS\nVS5/Xi8x5TTWf3mmbi6tji6OLLKAkxOTnqp1hcAkFSG4QboGK3KN6QHxlgpw\nUONzCeWzJtnY13iNMGJ8CtKyxkTh8Ja7fT2Ds6K1VKPLc/aMxeEi7y+9mUHU\nwLdstqeqhUF3F+vTjBw3Z4Uxj+Z6oOlP/b2f5/8yeQpTfGKRXPHCSYLUtAuv\nQvtAK+Uot0x0meckGCPNJ1ZH/KlLjv8Ds9lJDsyZzL6RldU9q13PBejzlW9D\nwfoxtWRQzhPrxF+gLGp8HvMLIG0jKbvanmO0iSs/owGsEDOuc4QQ+j16VBFF\nl0Ipo+OBzQ1F1CJ/XoL9x7opzQ9mE/KUA6Gmp2hyvcHiXvRR78y3rFfTpXjI\nDmhEUlkWNJWmo1Eoo0tiAA9UXQVzT5O4pAt1qQg7ZASC5J/jpZvbnA44vL59\nHAl7p4eKBmEuISXBoTH/FyoTuDoKSmGJrr5ksGZvx2gM77yQXwm97BJNJQK8\nnjcCL7ktOJzHNFQV4FkxSpLjPcUUvLPD3zEdZRGnZVUILiB7W0EM0oCenXi/\n3Gzg\r\n=UKiR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDIutwRT2dHd0wgPbq5TK296a1Nxt56nyrGrG/yrLlseAiEAq+32ji/x0dI5m+BiFxGPNYDSIVyts4J7pDny8BWnQK8="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.50-beta.3_1615261969650_0.013434710710396258"},"_hasShrinkwrap":false},"1.2.50-beta.4":{"name":"@midwayjs/command-core","version":"1.2.50-beta.4","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"81cb74bf5303f698856f7b68c9f78307e3cc326a","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.50-beta.4","_nodeVersion":"15.11.0","_npmVersion":"lerna/3.22.1/node@v15.11.0+x64 (darwin)","dist":{"integrity":"sha512-iZmrYqJK5u3cRSsDIDu3K7mMr9fvTZvPrhMi1Eqh0PcFvMVOB1tMl26qsNvPZd5Y0YzLXRYXNE+Yi6PHYWOhXg==","shasum":"5dd216e97ad528718f1d671401af6f1056f83078","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.50-beta.4.tgz","fileCount":64,"unpackedSize":191824,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgRvQfCRA9TVsSAnZWagAAy1YP+wdhAbgQU2+K5+XGJlK9\n1kc0nxgS1JZYamSMVZxBtCSRqzOE8M37LOCbzgT0e0mNv9i3HVciyvl1Zg85\nPhqzhcf4wMGtvv07v4urJS+FNW/atQROg3zue9oH0x38Qm2ilGV35w3Zq0A0\nMU6eLQQCpxIiQjKek2WATKTfnPUzOSQ9UdbjohnXtz06kH7rCgDve/8f8uQc\nCLvQDes5o+SteyUUM8BgR2BTeqY7EZ/j9bMHVOqF8CjKBvFGGnqOPDZvhF9t\nLYfCGZzVHK9VjwD1fgUWNcfbSJxhpvHWknhdbh/rtpwJctFvAGSK5E+4bHnm\nbWfBsJ4Zo/1Xs3xSzZRbmpA9aYfRVI8iCAzRLEfEbAE3gcryw0GjTN8ufjIA\nOrHwJDr2ocXOUstTDyoWYaO2MBfGtDB/m7/2g/0Rmsh9wLHlXlHtqU92Cp7A\nyn67TP6xkU/aWj8ZxGJbH6t8kXYrV7q1mWJBX0o4dMeaPcE0Fd0QczuXRh9i\ngG0OTFOJnwA65NRgb+MfTgD2Jl09TZVHFsABoDD63BUnZnYShmPEo67XJThh\nxUpScQDBX18Pv2L2VJLRliApTbRPHiS6nRE2xwmaV0R8uIOEWvrqIlX1iWGO\n93Snxib4ah3qXP+l2u2CqsLvomVifkTIl37x07FeF/PlOCmN8yMX1UCxpc6b\nDSyR\r\n=TYmU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBOA9po3QtfIxX7Vj/zQQkPqWVaQWJlOyvoMU2CPmuHnAiEAw0GCP5cJmraYNlzn+9aSic5ns+tIJ4J7kNH5sVHB9Bw="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.50-beta.4_1615262750900_0.08538592600905281"},"_hasShrinkwrap":false},"1.2.50-beta.5":{"name":"@midwayjs/command-core","version":"1.2.50-beta.5","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"80b6f74b1b59d2f25cddb25c84993ae6ede344c7","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.50-beta.5","_nodeVersion":"15.11.0","_npmVersion":"lerna/3.22.1/node@v15.11.0+x64 (darwin)","dist":{"integrity":"sha512-MVd0iqoax6VdguRg1cTFZ1vsRRzdCqv4jc5zOigccXDppZZv4L3jnhWq6IAny3GoXdxBUGO4fKzQGFIGR3zANw==","shasum":"6ceb4c01c21fadc730115240f5c73a170d4b5bcc","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.50-beta.5.tgz","fileCount":64,"unpackedSize":191824,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgRxEcCRA9TVsSAnZWagAAPZQQAKGwyuxkoQuojd0O13xI\nGHLmuVrElRqgf1bJKGB/gPuDYaWqhWGphK+6OcpJqlyleF36xFjFa9lagNdR\nDzEU8N8FxtZrY1f4poh6eCWlvYiel/u8N7T73xseticJMLosCS/dKJYX9mVc\nuWDjjAmxeD7xbbdSKzdoXaK8XjS9zgdUl8qub0afhK6EMgRUoZoyhQSnMf5v\nGLvWszXb4ITtRFJR3nFds5N5FV69zwm7TG4oLIRaDPWba0itc5vDhtscdORP\nu5tbcPAuL5bfp3bf96KYjtIB6zfjhIsFkEIF1p5zhxQapWey7ELfqh40fYJs\nmO6TmBPsEIReJ+XnTTofc9BFZ0L8eRtNDmNUbWzp5QQq5idA3bXutIi5fAXU\n0J0ALoBasy0ArCVQ7KuZzNGVnMui5Z4niJHSwjxwAiEKoyCICqJwOIQRwMkY\nOP9nl90c6mCX88hWGBovxfUrjJtfY2saFf3CjUUE3SBvmd8hIiQm8FXD3SlR\ncXm5vbiACzd5fzZsTwlM6bjxuwruWgl8sq+RckY/araU3thTpSxK+tqJe57y\n96zmf1VeIsSfmEa9b0BynVT9zkHwkmo8RLQqUnwWBR07mSTv3kf0E9UZzNcp\nvdMl5r0JihWTqLEGAe0nMAsZosFWKPSdyyAWiJHGfQE6edw7ZuarH/0TkFfl\nNlKp\r\n=vPug\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEZ0SZ8c+MS+SoaaYNOzfu33IQISASQPyTxLrKOtqZCXAiAsZssfbZtjbvmfFI80YcWnhpLSmGC4ZSKcHsnGXcf5rw=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.50-beta.5_1615270172172_0.6844086102512368"},"_hasShrinkwrap":false},"1.2.50":{"name":"@midwayjs/command-core","version":"1.2.50","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"b31a318019ba8313b7e690e8858f3fbabb92686b","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.50","_nodeVersion":"15.11.0","_npmVersion":"lerna/3.22.1/node@v15.11.0+x64 (darwin)","dist":{"integrity":"sha512-2+mCDWv+g/ODzyMdv9DrY/bMpNquRtjWYKdg+1P2BukxTSVC1ZyQkItpf6xxe1pjeeHBIHp5ewHOQTJ16K4aDw==","shasum":"3ab9cdbab1d70313abe64701137816d1e26d9b4f","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.50.tgz","fileCount":64,"unpackedSize":192252,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgRx21CRA9TVsSAnZWagAAuJkP/1McLyEhdWui3SvcW0jN\nfKxJUVWnY8jPirey4bonmoU/Ccd2zPRP/r+wk2vkYHQiy65R26AW8MZEt1PM\njphC0Mzo5m3TejdkZZry+qGcf1BXCJ99Nx5wuiG1QIfhOG9X1PQdja1Y+yHq\nQPh8OP4fmoZHCX9H9n4669smIpOCsOuTaGtTm42VH3UVTza5nQRGpZM3Nnlv\nv9IFLNA5nYRI01l3KDIo6fNpGzXpPQTeYyFUY5LkdZqwCQPusHmZRgHxmoIY\nCXT93ob75mCy6VUI0lDHHrInA0gIp6ov08SCOd+pYGQbq3jRmRZpn5roIEJ9\nRyD7IMOFKPLPmGuZzMGWff+nEH2lSP3OlIo/aFGf9p3fw4ajW6k0yEeqRbsh\nB9RPlwE/5Eoy5y9SrEP2ZXqDfSdmyvUHg2C1bxbuRSasa0OQA0HSJnj3TYVi\n+oD9mGL64ieaA1RauqOsyLR32GDtxxaGLx9uBtGEgf6jGdbSpxrMfnfE/Emu\nuWEmb7cg3wYR/TQgh9vQcygKAQqSXd/yyb1DsOabxgb18LMWjhnwJPseaNHN\nxKMsOTfAINAsVLOAFXeJ51Eui4Y60KpLL/IGJJWDDb4UhJyIqCFJcrX489ez\niplfXjGI/sjYSZKSNmG9vQX7OzXhhsJEXfQo1GT/EZqKYkC4E6+hS7k6EK2Q\nVYsl\r\n=iu1A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDgT7F+qg/edzw2SyVoVgldmqyD79xVVVi0HnyAQUz7hAiEAhmM+gRnE194cy/tdBL7nHcfChdGnjHXzQHubtTwcpIk="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.50_1615273396694_0.0066369252441713655"},"_hasShrinkwrap":false},"1.2.51-beta.1":{"name":"@midwayjs/command-core","version":"1.2.51-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"cfca82e68ab71d178273970643583a0dcdb64712","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.51-beta.1","_nodeVersion":"15.11.0","_npmVersion":"lerna/3.22.1/node@v15.11.0+x64 (darwin)","dist":{"integrity":"sha512-B/yqgmsZbU0TXbX2SslytNYI7l1NOPAc/fjGmKkiK+eEE+b42cbXfxgxp4uMLZCqc00ng2hdFd7a3rkk+LK67Q==","shasum":"d11fbfa80787879e0ee888b67ffd4b466118b6f9","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.51-beta.1.tgz","fileCount":64,"unpackedSize":192259,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSJudCRA9TVsSAnZWagAA3JoP/0I0MjL/JV4NijJLsWYW\nOwZSFQWevRL5/JqAMi97yjjmP6uvNG4EcGMo4X48tOw6hw2bU6ohkpKUgeHG\nEgqFkbArhJzA9ClSPz/tCBY9aTLekK1KWrHHl6T65pyDc72xjS3aDZhTX5g3\nulpklijXf1gYkU+QBwdWmAFLld4Lr1zZbh2Jt8wkMSEWvArzJDiDE6LX6MTZ\nTNN9qDgho+htgqwOx4h+RuD86Sk/oA8Uw1rp4/c0fKQUWcKpFn/jJRuOaoCr\naTgSjJWIjh1AidhcZx3nNEYOhL+v5Qk4e+BycrKkkS5HkHJLUs8fgjdnekuX\nrEVHr93JpT7B2gtOIG6sPvmrbwyPsZN1OQnSkG71WthFDdBdYHHoTbzPUEWI\nw2zd/7B/JMHpoBAhnCK9B567EOIQaa7Sv8/Nn8KuIHtkcTYJF9BGjHQPY8lZ\nyCgGXRow5E1Z6i9aNDF3PvKdOuVRr5vY9OuSajlQWGSQ9HOAUbMiPcycwNuh\n2MV51GxannmzDguLlxyoCYQEYQvJXiOWfCi5i2vPz5A9TC+0ZWk1ERYQ9oDC\nUbAxzi7VgYb9m02RBapWnyIRpOu1GYRv+pZGCfDxW9MocKAFue8wgoN9Z+r4\nMFzkKgygAYkvQneWPccismowQWSBfaN/QMwJWpphrP6yZCHnTHPyuwkjM1el\n3MRt\r\n=fZc2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCmKAiGQ5JWEndbL2kVB9qSYxVIy3TNhYC0MbH6jeTjcgIhANBMIHpCsIVDli982b0HNOAywDnMX+A+6uOgVdgCAS91"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.51-beta.1_1615371164894_0.9527506456742829"},"_hasShrinkwrap":false},"1.2.51-beta.2":{"name":"@midwayjs/command-core","version":"1.2.51-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"501717765d45df0057f166e40789c332edfc35a7","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.51-beta.2","_nodeVersion":"15.11.0","_npmVersion":"lerna/3.22.1/node@v15.11.0+x64 (darwin)","dist":{"integrity":"sha512-uUbW+XbJXJDqP3xbuYhDPik+WAP60ioaeGoC79e3xgIoD11Nv/bJ/+SjLfLq7zmrqAlGRWId5Wrkd3Zp0gFedA==","shasum":"b2e025a4b64584d2f8bca6ca238b179d02538380","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.51-beta.2.tgz","fileCount":64,"unpackedSize":192259,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgShi4CRA9TVsSAnZWagAALKYP/RDk6tZy417R61TqbW0x\nKcYGZKH37qqBsV5e+KWXKhvipOPNDeSY5ighAOm//L/W1KW5N1B1iDt/vyIz\nckx12Pol5T3iYob08OGsKb5480gZE+/z2eRqWRhSFMfzrirn1lp7/5FMXEqp\n5Hc9CrmrISARXs6SJ+J/oAkoG9f7reBgZvXvqPBSeA0h3/FshJ7YyfMdisir\nafoCsK3ihZMNZTzZ3qE/RzLz9pFBXvQ5YI0byCVQCb+3SpJeIVj8pOUjtlOp\nE4zt1qUMm7GDMWOnfVBPv4MQ6DxU5uFgEx+d7kcQgdhP2Ux18fTTN7TJev6w\nrha1jNQEqZ77tSFrv/bSW3lkCTiIJbUifLa8sYtE4L4V0lndQ35bHJJdHB1J\na+tBrhh7Cq8Y1paiiZEFrfE4Q8lS+IxUpZ7NwdNFANY3F1y6YaPM4iAdMHzl\nZdQwIscXTh/aKMZ+Dlg46cwt4B/7PB/sclCFnCQi5OGNYcPyHHRgoPPuIuOs\ndKcDlk97dpjfGa5vVXqm2QTLMuQIJkXzrh0hcMbhrr2XVR13QkHDE57weX+b\nuAVISvMQzNh7G7N4pSlyh+ESjgMQdNpWENb3LeX/eExdpFIFTfbEaak1KRwm\n7stkMg7CKPVva/ku97tmYKkxFHUfhSPIux16+WAkoOaH+ONssHUPC69GKTIo\nvWrA\r\n=KBIl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpG2j5ZR9pWfz1EiqdpuMwBXheo2AGGLGAwmBYMiyZ+QIhAMbhR3BP2C+orszJDs6446VAW5iKi3cet7emoCGdE5Bz"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.51-beta.2_1615468727812_0.21199105787757566"},"_hasShrinkwrap":false},"1.2.51":{"name":"@midwayjs/command-core","version":"1.2.51","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"0321d279003ef6a23a9480b1d4a772fe045e84ff","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.51","_nodeVersion":"15.11.0","_npmVersion":"lerna/3.22.1/node@v15.11.0+x64 (darwin)","dist":{"integrity":"sha512-4FsfYUjP7XKjXT5LGnSjMq1qy6CaW9h5/E4B5CQcXVUs61LI7gS2wZF7hnDDx3Nm779bKyeaqW5P6QdMctipFQ==","shasum":"ddc346c00ece12a4a37be773361ab6bbf44aeb82","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.51.tgz","fileCount":64,"unpackedSize":192540,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSuIoCRA9TVsSAnZWagAApOIP/RWWI3Gcm+gvqbEmktEH\nFPx//9G5yAuv4eMBzRoiUyCKygBQaUjpaxCmp5quDXJ/sdaY/4NYvdQd2cew\nnBX5ybNJGBfQ16RKs+4YHO6cfW87epRqOA66GHebbmjN9j+VU0EaBOk6QgSk\nYRnj5y7duDhOOtNhXQKoKPPtyslrQjg1OosM4QuyyXB7CmM5fF63HTiRuuQJ\nwKCgD9HIBe5RmcxxpCK7BQzLcBMjsAzcQLPPC6u2SsBNiiOYWwT/gXIDfNUJ\nc47CYx9L+nWtXMqWPFH832LVC6C2t8FnDNeTGCrXDK0/EAnVTxfNi6bw95kk\nGtNNuQt14uoMU4q846wMKouSBfSOWVl7mYg/YnMmK/sNYk/tUeR7ebQ2qft4\nPLZ8qO+EO/DUenVSr34phV30WsMfAKT/Ta1bbnJIu9T9SgttoRFoCrDHVTHy\n/sSmqw0k0HZ4Jd5XoLFjmOFmsrd9XDPdkbXHlRhDv2cCFGw2YuL4otw9ifea\n0Xpt8lCEkvJiYf+VhdiOSn3Pz50MQhmPH3loTb6p+NF7jwLtMaa33yu8/NC5\nLDcfdsJcUxkDDqW1Y0us512Q1LJauLFCOnuhPasYrBvNvVtnzvf3HmA5Po6s\n5chsEP3h6FaWx3dqZ6e1ehKYNLs+9IZIXMRQPQxnxXIm+iKiumR/PxhRs8O/\n1Grr\r\n=nS46\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkCb0wdcAhyL/5HemFDIynzM/PDKowN8Hp2XHClfFUTAIhAOCWaPL+Djt7t/fyU9SxM3DD8kyuVlhd7i4av4Rfzj7m"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.51_1615520296269_0.2306850560572835"},"_hasShrinkwrap":false},"1.2.54":{"name":"@midwayjs/command-core","version":"1.2.54","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"9b45c3d91ea6e80f0a65b89aadd85a324726a61f","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.54","_nodeVersion":"15.11.0","_npmVersion":"lerna/3.22.1/node@v15.11.0+x64 (darwin)","dist":{"integrity":"sha512-tq8BF5KfBxXjRbmPTJaMcs1hGe8261aDc9BpRRhyG2ywFrER4JXeqsQlMfR6RkXxKVHnJQM1xYMJWli9RGm29Q==","shasum":"a97268011d3b44ae7b1c2aa975cfc44c37418258","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.54.tgz","fileCount":64,"unpackedSize":192870,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWIunCRA9TVsSAnZWagAAE58P/i3xJW6neaOMklzz5SHc\nw4X6IFrdDumala6aKIJSc/K2ASIopp3CUqKssQuRmlk282qYiLd6/ahNX2rz\nqk8lNn6d3BvQmRFCWlROnjNCn1qEK9wDdUmMJXsVF7N+MkdcEdraDuTa9BxE\npSooPWtQ/TZNps6PeizEuA/c7eS9VoCtt3njgst++cjeEyDH4dl/+WZ0ZZph\ns6xiRf8MfSfcSMLxENhri+A4EtQPoI6aMFhRdOFQl6tlgwWVylLlKODX6YYK\n+GAYX0FBi44ZkPX1eCUxH5uSHxmJZCACi6sY4SD4SFlhaHPSDToGiRJfb3TV\nwrdKwMs1J3ghJybyrtxUHcMybpbcS+bjoe/SXte+ZP7EhMmim6AKYFanmSzM\n/ly7SQpihr5LuHdGstXX8pD6SsTK6gTS1GMcIcvn6K4hwf0D1PWXYlRKF3yv\n7OOCDawiflyOPnpjeZg5sE22jqBUGTA1LN2Rm+BRswBXbVTHdDigBdHKSq22\nwdROtUBj2VuEdvn/3PcioeTaXNJXj3QDh0Hv5VIvW479vkTsa59oWpdWrS3t\npFA4cefmZDoudHqoTxuJE6fPaRLMmRC95wl+uzhlI1g9L0y/Ujoz97dWX3UQ\nuzVtIZfylSrLYTQGYFqsvVZBc2RJO0ON0mt2pRBhNOHTvsR7VsEHm1kV+qnt\nQwRa\r\n=ZC52\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEf+Wf/6CVbWvplc54nhzurBt8ZThK/UJvbMtWWvuaXsAiAuncktoWYHpSIxv2PfXJ1tL1n4+/nRMm+4sor0VQEDUw=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.54_1616415655014_0.6553481363999174"},"_hasShrinkwrap":false},"1.2.65":{"name":"@midwayjs/command-core","version":"1.2.65","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"6eb893af4f0469a852bd60a8e3dd8d12016d8698","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.65","_nodeVersion":"15.11.0","_npmVersion":"lerna/3.22.1/node@v15.11.0+x64 (darwin)","dist":{"integrity":"sha512-Qvu4AY5N6QS5nDYGiE8UUaGb4u0fw/XSecblRzBqpIw7sbJ2NC6KMlHqv3178U2vk3KjdnVWnouC3euwOO9W1Q==","shasum":"2750f01dc30118d7acf4dce54cde709459a1835f","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.65.tgz","fileCount":64,"unpackedSize":193166,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggnCiCRA9TVsSAnZWagAAWNoP/1a4RX3oTGEgp79ICgEd\nQS21LmswTI7egWJC2Uh0HtILfpyarCxHsuZMSVOtmKQsnVO3Gbgk/5Jm53WJ\ndQ+56aYqXDpWcmc0uWAxTXiGlZHGamfjRJDt5fHW3esvtZtc63JpHP+FXijE\nOo3sJn5Lufh8lCznazkhl0ixVztcA6hO//7E29yJSoQH9txtLHBndodEnPq4\nfYMMuAgW5kfWKru/fiRMNlP6fzdig8+CD4hGxbrSu5OoqHcktN+1XucneP0t\nL17YX53lvuN5fLA+mnL7ED73yTSpHJhm1A8RNDG4ZWcBXGA06caK4hU1ZTh8\nafWapB/SCXPenckrqm4wVEmknn4NK/LaQxGQTkXD4gsWJrlEuHXnEhbVY8zT\nqO6RtMCdIleeFHaVt5g+FefW+OXA8g5bAASOUlsXa8/AZNqU0k6zFmXXbCjV\noExWqS5hxDran+Ysvh9vx6Hj2eoQcGw/ihWrdSFmeugdRccqAt27kivkPN/h\nXiaiUM0eSQAq2gO0HeMzzMkb+a6KVd9BDnuEIDahhgtqVv3jItby4d3fh1nX\no3fpPnscc94Pk0eColMyA2poPug+OV3lUGLttL8oNEkLhRl1mgocABV2xCS/\nriSff//jF1jDHSjoXvPS4YfHdwW94Umu9k+BhsihJhFt0vAYHleSq8LlznVy\nBpaE\r\n=3L0R\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCuq0HwdJiV4yFJ8JlzvxLqvKu3AUdb3/iTRnn5bG4kTgIhAMltaNlXXga70oWSyAn8+ECfa35gd7+i5qgyfQeOhp6y"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.65_1619161249484_0.07073251402019642"},"_hasShrinkwrap":false},"1.2.68-beta.1":{"name":"@midwayjs/command-core","version":"1.2.68-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"5af2b0207a6adcfdda85d85be1e89d822e8cc0f3","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.68-beta.1","_nodeVersion":"15.11.0","_npmVersion":"lerna/3.22.1/node@v15.11.0+x64 (darwin)","dist":{"integrity":"sha512-G7mQfdg5bvWUuufxlNYQ9kleK6YGjooicFASDYlHFfOgokicrbXdY4cm3q169frqM7+HGuoMDxHN925DOq7Kxw==","shasum":"66ecb051075b86bc1ff5a0fd9f013dd3e7525433","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.68-beta.1.tgz","fileCount":64,"unpackedSize":193195,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgnSQmCRA9TVsSAnZWagAAQwAP/RMxp1dfpIFgvnWVvlw5\n5Th2rbtAEnuwrsKcWkgdTYGOAH2BdBzN3WZQTagh8m+rAR2eEjgfzgAoktzO\nDUHmtGKWm1PfQiFyl4KvJJYHvK1SvSyzUrwJ7ol0l9+LwMMPdD6M/dRT3nV2\nxHhbIBsA8EBmmNTQFdjOrK/QRjoKuD580ku60XmXPhLIU550GYfNCXQgsakY\nAuy7ZVro21MsK5GcOqnLnY9Np6gnQUA+0MARF1zD3wlmQIjbPMahYv8BGDQ5\n1+8a0X5Iumo9yl5GUXkFw4SWyTEtpLQ8SNJV+D3Wky4Knv2wiyqq89LgIPeM\nDuAzHGvhflERE/mU6/JWNn5+VQ2U2AboXixZ5o1SP5bf7cKtcBVxTg3Yiy2g\nBtMmVYZwXasA+Vk35Iqto6e/gUda21gFej5XDROpnmFH779Qb/Zj4EqiQ6SX\nftQBQyf3ZRBq0ylD23ryodt0nCH3yVJsQtngY/O6ZHjiXkOzAlspTyz2m+dJ\nqnisEeZFMo7AF3hgd7AowEXVjSZRS2lipaydqNa8xuRo/lW4EzYdBiO8sr3A\nvSzLaUs9IkOZOBZRVK7jcQIdMFe7bSOCDmTQC2UoXLgWOeeQhfTVUZM5K2MB\nrwybKlNBQP3jIhY7vAtrcx9Jdh/6zP3ae3CUZy3S1gZW+FW4AmOke7UfRcGa\nklvw\r\n=4Ug4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAv89Kc75n/77M5tJMGVF9tXmgfDMLrT+JPE/wsMzC+SAiEAzlaxoN9HSelrlILDo8wR/F4PCLhc0attvG1CWOd/Cig="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"stone-jin","email":"1520006273@qq.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.68-beta.1_1620911142108_0.36321987441595005"},"_hasShrinkwrap":false},"1.2.68":{"name":"@midwayjs/command-core","version":"1.2.68","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"c97e5cdfae2da1e3c3eaee39947e8cb61ee02803","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.68","_nodeVersion":"15.11.0","_npmVersion":"lerna/3.22.1/node@v15.11.0+x64 (darwin)","dist":{"integrity":"sha512-+8nTvlYIgQD6OuuzZqwK71ODz7BsQx3SO6w3SMFvv+XNK2jgFG70G9wZTQJZ3uRkdwcWHUkHmioX/RepYXppKQ==","shasum":"34a2595be97e1a890fb1f0df35c9d4ccef673094","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.68.tgz","fileCount":64,"unpackedSize":193407,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgnTaXCRA9TVsSAnZWagAArNQP/AtpCVQgKeLvP8OvpeRK\nKG0gaIyyVVOwBV7A44VDHaydtjA3sfLFExqVyJLccqws+Ce0gd5bgDVj09tN\nsc9KsOmZJXJbZ9Hm76bng5RzzHu3J+cTexOjVUMCXn63+21o2n9DJ9ajXPG5\ni4mSAAq6nD/W4CAQ5ycBM6uo5y1cEIXtU4awYhF7tU/KMGRXSiLqaNNHMo/3\nH6EPvEZqPMrRnKX+5LXPA354Ax9FRAs6InSosebNsXRAQe5YNp4wtw5KucpP\nG87SB33HJ/l2Pe+9iQfTpoHuFLUoUhQpME2y1/hghSK1zpSR/whu1FYSXe3H\nUN0O7N+ZLaJ+N/DYPz2U+sNzd0tOwwhjY0shpiu9aYJyk1Co2vVU/Umn0GAn\nqPEX5KOIv4Me4lFTolz2pxL1e9/mm0PHWRtJMQ7h9oGu2WbsFt3NkvKNVebR\ns962JEW7QeiSmvyT9tetscim2hx9txYLWLf7P+9LWQLKIsrQHYak8Rsw7Vo8\nzWqY77H+MsdnrMxWWg0SnGI7OfO5C5JtcXbEO3vS8LNoCQX/VxT83kHlJljJ\n3aw9683jh7zXxe7W2emdXObafQLbsebX/jNYy40vfTxKVnE/bExkhqoGOaDB\nR+wqsK/tUtrSZz+uW0dpAcZBoU4LcnnhozKCYMDDpTBZKv6j+Bg/DEa4r+g/\nL1l9\r\n=quFn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID+d4E00FyDiH1pNHnjE5aB/5UVcdlOT0U1bfRZviM5YAiBa6H0/fr/lB8rns+4TjIhxfZTCkM7qb2lhKOzGCEw7Mw=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"stone-jin","email":"1520006273@qq.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.68_1620915863428_0.9422844135610948"},"_hasShrinkwrap":false},"1.2.69-beta.1":{"name":"@midwayjs/command-core","version":"1.2.69-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"14b2db5688213f0c41ae05ef392cc47f63e77f08","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.69-beta.1","_nodeVersion":"15.11.0","_npmVersion":"lerna/3.22.1/node@v15.11.0+x64 (darwin)","dist":{"integrity":"sha512-qULpgztI287nWs1iDdGrGp8SgPH5GUyVXOzQo6sjNUPyfm+VQz8pbxMuVm66Te2efzf4aY08j0wBiRqFv0dfGA==","shasum":"df749fc515bb21cd52cbd02227851c9c14642fac","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.69-beta.1.tgz","fileCount":64,"unpackedSize":193414,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgq3ICCRA9TVsSAnZWagAA0PMP/3bz9JVIQ1Cp+cMrVPiM\ntGOFYEedxrK9ELFtC9h641/vpIEvBajOnYwLZ5Oh6K8w/44YxIfcOli1Fvap\nlhm8cUZcN1V7PEY7lhDFuO8YIxr37JUVskjtbmXtFZUKbMuOa8N1RNcA4Gio\n4VqxyvcryHnGOlq2l6mj/zEee7oOArfeRynnq008eJmdj/4wYiROTYvLO6RK\nmBV81Bm8qztoQghC63FI2cyC3hm+uI6o2CUjdeRyHoPKkEVzQfodkCLtvmOj\nYqXnK8XRASvejmJSjd0B8EpILFAe+g8tUeJvfbAxPFU4ZDMM6j8NQ3bRW8GI\nDljB5AeE8+CCq3PdUytIU4zszYomS9TIBl5gysDAQg8XifAEkuHBLxgTjtyT\nbzObBIU+0GWkCrMiXQU7v5HQnrMUJEXopzVL04diUafchR5ymT6e86cAzEHl\nfC0vO2nMaqPkSAQw5EA75NM4gVfTcIvq49DmAucc8v59d8LZUj/SOr6olKGS\nXQT24YS+anD3XuY86b1UcJQfBat7krq8solFs2pGL5UvUmQUn/4OSReGuWcg\n+/B4PRi09pbL0tU4u8y8I+DZRd6FfWGc/hWIfCrvTdz1/HDVtDR9A9dv/79C\nkMWqegDvHTkGKj7e7GQ66PSOAdwva5qlj7UBd7F4esFc2qjNd7ribg62VzrQ\n6bGX\r\n=B3sQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCB6OR+xMdx/zkRqiBntO+LJ4XteycVjCSVY3uO5y80ugIhAJHng0dJEYm12MjrUjU4YTsAmJB55dDhcI01vRlq103N"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"stone-jin","email":"1520006273@qq.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.69-beta.1_1621848578558_0.9432039963564554"},"_hasShrinkwrap":false},"1.2.69":{"name":"@midwayjs/command-core","version":"1.2.69","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"f11da04e7443b9309efc0eac9262caeff7c8ef33","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.69","_nodeVersion":"15.11.0","_npmVersion":"lerna/3.22.1/node@v15.11.0+x64 (darwin)","dist":{"integrity":"sha512-QnWj9hTCR+dv4FUvsf46hMVzM48tn4bnXNa9UK5fZ5OhNxxazAjG4lwKkaA7XogGN+fmAR+8+HawXWB2VLqu9Q==","shasum":"453f716783b2b1951132098051d7757921f61051","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.69.tgz","fileCount":64,"unpackedSize":194556,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgtggBCRA9TVsSAnZWagAAy7kP/0elQcT+5iNikSHCA1Ko\nT2OL8Ux4M35oS4yhu//ke9BE/f7YoRcJP4oi5JUAt+WTep2YUW/K3X1Z8UPd\nyZ1pNh6kEF0vdUnnmDyv9GkO+UN3uRRdKTck21NFwfVyFdI37XWQWqLovXYs\n04g91FHEiV0JbtEQdOEgY4GQKwmeQWIvkyJRKiOfDXKGwSrYxPiO8EPX+wdP\n+cRxButd/8NCiS+c4aCaBsbEQ2I23FrjWyyKRhPC4IK+5SjZou3vq/51BTqK\noqQasiXVtsELE/VvUhKP44ekol95J+z0x/RGwKnbZPS8pfbaHSUQtnZwhh0O\nGVgjRuojW/DfIQOd4CF+syHUV4rhJzijbWYTTRsRD6iTcvraqjJ344fOX1Ng\nOU1D3MPGD8Z/DveQd4/UTRUyHXhh9QVTVSuU6YxnevCpTmu+OT56EGF6xUYO\nHv0TMT9f91ZU7Ze3Q2kIK39/GY3Q6Y7tV1Jd3Dh8kkWBDZkoBBNFOXH5BTRJ\nUoMP5Zz1hSNQL9k8KuoFC9VGMbZkhgEYSZSVvYPmc7b3sFRCdZUSqAc2gxUL\nZ8fOzdu/fqExBn4UiIuBE4U+hwy0auWDbQaT26yKs4kXtdXltvctUznwILwC\nny1VEYmONp/LZW0wkXVxjlpoU8pKjfcjVPNznYBNlNPOCRVkXtbY1KUqk72t\nmDU/\r\n=Jx8D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDavcLAcujDeBWwDzuYfk7gIPo6od+WF47+ZnmGJs1YngIhAKAsp62w2+tWzfHZtWR6EIrqx/GGcEL/lqtd92OSAAYy"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"stone-jin","email":"1520006273@qq.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.69_1622542337088_0.05654335218459128"},"_hasShrinkwrap":false},"1.2.72":{"name":"@midwayjs/command-core","version":"1.2.72","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"3b3c7453e54731b4612ee51bfb6c3a53f0ce600e","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.72","_nodeVersion":"12.22.1","_npmVersion":"lerna/3.22.1/node@v12.22.1+x64 (darwin)","dist":{"integrity":"sha512-D8FhCrnu5YhVs0kMElSKA5o2JaEgMI5Ct2VaulGHS/SwY7ZHq51ZVXK9BLl1EUKOFHZmXLL0C4Xwagybqgzkhg==","shasum":"d6c31e6b51fcc95689b0aba9fd4ccfb3589226ee","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.72.tgz","fileCount":64,"unpackedSize":195218,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgzFB6CRA9TVsSAnZWagAAD1kP/1h4jhwa381VZkgZVcej\n+CxQF1eafPEM3sSlfrjfJUfM+tTQ81nmGLXKW2Rvz8V+Ukk3bI5erQC/izuF\nW5nX+/CTkYn8vjbfKJ7CbnTt8jpFxmzHYqRzgRnHnkedhk3KLFlWpzwvkk6w\nky9mKlgAmtlP2kbhUbOuZdD/edNLwfZpvgNL1sxpSAlbZ3sUvsu1CBFRPAzZ\n/+RRkouEhK4/Bfxyr1aFLQHpmFhq77h3GlV45mqGfvPxZMVyMdV35/qS1Fec\nB1BL+YndfwovUjo6cM4GaRx1WXCqII8Ng3HueQqVSbQuLEkQZn1hLhZ9Y6OW\naqUlzWg3BpyLA/eCU7roPNtXR5MYbxrtQj7cKL075CZUfVVtbdD5rdpHn5C4\npw5apVpgWVe37Ed2qn9h8bkG7dRCa0BgYWlPdcXY1qam9/fcuWiNz+pBQ8N1\n6AJTMrVixAXObwRBzj3SaRuVd9e3lNEC/m2ie6UBY3X61RWEYYV9erhYt6a1\nGcJhp35jBU0kPFfQHql4OhgmUeaMt9UXz7pqVP+B9lTndw2AHsaNjsTWquWX\ng3mHwnoZlh4E8bcuxHauXhQ3r7OQi/w7qVGQnoraBLmk4mf8+M5ycGe7FL2u\nusfpXNIGXSb26hs7U3BVRgktn0q1PdWAvXMVmIlw1hZ7xBE6f37G+H10zmJm\nPiTz\r\n=uM54\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIQCb6pDJ3ZpiTiwzKHJzirCI8CTnk3YvQicuZ2M1b8CfbgIfEQkLVScubZORBLyRz6bK1IR/RLciFGOJ1G9UodrN7A=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"stone-jin","email":"1520006273@qq.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.72_1624002681537_0.923239328146469"},"_hasShrinkwrap":false},"1.2.73":{"name":"@midwayjs/command-core","version":"1.2.73","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"a9e78f53cf6f0bf3ee09f08de125e0f1e14b5d1e","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.73","_nodeVersion":"16.3.0","_npmVersion":"lerna/3.22.1/node@v16.3.0+arm64 (darwin)","dist":{"integrity":"sha512-RQonCLXhGHTz44xxZSaCNmauklZ4EBWBsGwzdvppGvkBxKmQtoc4cIRS2qiEIs2P0tn3iNj+1KJHnT/sMKmEbQ==","shasum":"e6d77c3b75aeab34e8576c60d96a617de2d9ba60","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.73.tgz","fileCount":64,"unpackedSize":195378,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg1U4/CRA9TVsSAnZWagAAm1sP/2Md/BXEQOyDAwAtkfOx\nIp4HcenkrwCmfFbNP/kMQ1RXK7Hse8R5gZ4H7bX3Q5PC9sx0JdC7xtkv5oYu\naTJGso2acf+fnjxAvlMXC9JoZqjqiMlre5PNOpJxuj74ETUIoNyuU07YwgHo\nKPfsNpIq5b4UKdNawjDSmGUShvzW4JtA0655C2raL1FZ3NeuZbR+mD7WhIDa\nGID3T+nTo7FowICPoXXZO0G5waB4BW4HadO/uQHdYC/ILoq3zJMcJZPsEFJ6\nq/NtlwATD3MvIwtLULSl1m/N2/AjVLUoqjmrqkSHdw4xfhlcbW5EAEa+YOvw\nSPSNkHA9YvBGlsyAhsIY18rYm14GYQaeh70e8GTMUMqyv81in0QHqlHdwfkD\ntHXp9rl0tTNqqOmGAM4/eIxMfMAcyhKNglbx22UbbmaeR/HBwfdAR4VnefeM\nZNOqj/VwrV82BiHnHme8vyi0KPAL/M8V+nTDHOpd7RSxEE190f5cEMKQvZoQ\n5XYcMtxVRLdNqpC/tyTAjYytD08D1oRBlIWukGLC7HJTzoydA0GlL/aY3d1/\nCGsKZMgveE9VUCZxUvDR7Ya2JUDWkHp2x+2MAv9KrxjAW3alFG2tqCUL9f/E\nqdZbTyWPISRMuFjV0mRtMAx9JfwBIIYTSRzFgeJ7cN9KkoYUJ0QGK2DnoFJN\nUl2s\r\n=zUCh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDv8D+pFcyLWWvJEg8mYo9F2660JIFNczS23GvnY0c1JgIgbtMTZSk+88tgHmizatpdCWxJx0MNmv2vscwVMp6Ugfg="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"stone-jin","email":"1520006273@qq.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.73_1624591935083_0.6232849119279018"},"_hasShrinkwrap":false},"1.2.76-beta.2":{"name":"@midwayjs/command-core","version":"1.2.76-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"48d3c706485940fdf1c20788fc00204a17124091","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.76-beta.2","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-DnrgXyYHe2hB+mjcQQ7/eDHIImXSr5qYXet5DvEqkAeHL4y7VNKwsQlBY2fFM7qYqJ0vWsAqVm7wUCNPI6N3Yw==","shasum":"6938b8d95c36fc8318c088e46a5e95985ad1503c","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.76-beta.2.tgz","fileCount":64,"unpackedSize":195385,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg79WICRA9TVsSAnZWagAAwLsQAI9v7dlLQD+1DBDHLArY\nhdNBthEqFc5JsMvYEFEyZRzr2CRovJdV72z2f5ECzt/Ik4TI0wB8oAys+qJ/\n2t+NoLf169kILsLo9n69zaCt5cJFDfdtrCcBoOtlZiWuiiRQMQzD1gTTabVV\n1eLr7GDtTugqCMAnji0vct3V6ZEgK1m71eq6hhfP8jp+kSz1QwFb74s4XWHT\n9P6OFnk/o4athcJXgMZx2yC+atWYz5qunUlKtDkVPBStLvtnQuZsrAiW+nLI\nrIqTZpkXZtNxDvSsokpyVted4q2JKpHCKTycO0r6oBMP/EfcN/mw+UAOaueR\ntoJ8JoYFaeGJKdY8GbVlL+zVF00LDGpJjQ5HU9gXTsioCHEWFkUTUCwH6bfr\nR+W8yDNZLeVRn8zEp4Vg2oT1957ngqfz0IY+aVsd5Zx8AOX9cyAoMA83uOtL\nfYznnzUiMkVFxGnbYvfQmA/IQI+Xk277TtBvfjZtKnz8r6wKDgUlfsZQcnfN\nvu3jDpxJO/XRJX6VHe+Mqd7udnHzFNydh9PCNygzVJe0XUAgLe3EzBg9tl8+\nYWOEYFtuumUTh3fTRWTr/cX+U3s/7VdQlhm+ugjpuCHIkuWDr0xYUBawz7WD\nqiGZjo1FxxqBQRVZh6aRKdBWDOYjh6Cdy/BMbEb9XB0bMUQAAo6ZobCVLgQo\nsnM1\r\n=2Jy3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDnDmmnOkvSng2gsfWtOoNDeKmlIosbUf/w4wQApRHQQAIgdbo/MHsabEKn6eR4Q1BMnbWqGqzLQFAim+wnm4UXwwY="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"stone-jin","email":"1520006273@qq.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.76-beta.2_1626330504430_0.3744121866992509"},"_hasShrinkwrap":false},"1.2.76-beta.3":{"name":"@midwayjs/command-core","version":"1.2.76-beta.3","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"db5aea31d858ea26345433e11eb7ece05d810f81","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.76-beta.3","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-qKPtYdDLu6SZCXF4AhI+o0iDayTudtacT/I4rGY0gM8O1VrSnm06ahYB8GuGefzdVaJLDz9YlXfkVjV+rCBnCg==","shasum":"a39a3cf4eeeede1ea2c8a598391df49cd7518412","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.76-beta.3.tgz","fileCount":64,"unpackedSize":195385,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg8P5SCRA9TVsSAnZWagAApAEP/1Y3JQgVZVf7qr4wRYSQ\nluGdMhgbvLKhnBuwxJZUB5+dhRcDpgwclX1NtUrBgJXrMl63Eo36FyUl1dxd\nlcftjLXivDE2TRlIgRe4RPrOeN2wBf7D40naPOL8P9okrOlBa8P8uyEWXxRJ\n9bRvubU+VvGIku0orCdPxYueJ3TQIV7X/j1qVHnYKxXrP61tl+b5oG4zEUZF\n8n6KOQkmjKmwHbmay744g13CMuX1Rj3xXWnogzABTWBDhj67sYh/mBAblQX3\nGWTjiF4LjkCLahmB8tAsvOQvVvREkSBCOkP79oLW2EFFWQk1Qr4EoL+BMgXe\n+oS7qBkhEZh2qQmLHxoculdWwvThKf8x7NS+ZiW6NnW39Wlpd+PqX4S7osxa\nKGDJJakpej0XLO2KBGkWzLi67beAmQmZbAPz1DsHZk1Iyp7INiidgJYs2VTG\n5FQ8E6EN4gItqbOqE6xRtuP5p93gg7EH+qJY52sxZk1yJbDOqGRGpI8hJiMW\nIt8SHaKzXfhO8GwWBNHo608RiF9LP2/22p8rv613IsC6rk+4tPmb4x08p0v5\n8UlcQPg/bcAWfYSVZnwvgB1bbM31sQ/4wgeLma0qT63APAnLckEXB6ZdZrcz\nkbY7U0in36fWg6zROo24NZK4B4uWOckwYd3K+ZxQ+AYgF5/mUAZ6GElopOnk\nuOAL\r\n=cwqg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDsP3q2venL/v78xkZDP4ev/yv2ka8QlVLkWyW8JySMQAiBQac1U+GcOL4+r5QWI6krBBaPJGZw1mLbxyLn1TiNoEw=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"stone-jin","email":"1520006273@qq.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.76-beta.3_1626406482482_0.9922636255602881"},"_hasShrinkwrap":false},"1.2.76-beta.4":{"name":"@midwayjs/command-core","version":"1.2.76-beta.4","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"621b0df2367f40d0a2ab8ba7eb4746aabd8ebd59","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.76-beta.4","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-+0iHUiRVHykLJoXPmHu+++GVx6vQHh5aK/wPnAiX5uQUi5av1vR9BaSETUrqF4us7+OuyW6w8+SAN+ifE6LBuw==","shasum":"e80048998aad3328854e0b1c17b70e180e4426f1","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.76-beta.4.tgz","fileCount":64,"unpackedSize":195385,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg9nJ6CRA9TVsSAnZWagAAPBIQAJZeosBvORg3x9TEzpC3\nNwOEUHVUkss41Y/OetDjkxiA84lgveiemELEj8v0b4HI0jMB4SDg70cKq4OF\nGoUe4RAxdV8HtRycYqsVEuHgQeCSJRqg3/Ipa63EKmlSIMLQNuPJHxobhoxt\nqo1pSFsbcc4xLYyPFFtGiVB3tqmvVgZR+u2jRwxBhbqoldhoRcmVs6kovWO1\n4hXMHLEt+NI+4Y5fbFy1QJ0cD5MQ6jYi8J02yzgJIDpIv3FFMyLAbyNuICd2\n682VmeV/4st924mFReP6Y1Ve0j8peTjYyUhOj+b7Yhctf+W1FSslQiofjcao\nS9irgj4lC7moqpiLKva/6LraE/qtZ6Zq0aB6wQSVoJnX6DGJKSdZ+3Hl78vC\ntGlip9GK0khpmnFJf7LobAkV24C5G92usL8EM3tVpBwKRMYO7Ugl50DYrrSY\n//yYFpG3sypN0rmEhi5Q54bV5uFS156sG1Hlhda84SV3585Db0xSrblkmpAG\n2Cs1YC0/cc4IP8aOFnNgGtYA1jvk3auKK/UMaxXXbMrDOgoYUcl+uumXHksB\nl3WBmdc9NtKwwtlIQXttR71wVWkquIrfGSGct6NcROoUVYxkCTx8xyj9o3FB\niMcmeoS+oLtvdRcQb2764KfNh4VMOCNRuK5hOaSd+UxBHAXgl0KHUULKwCyx\nvoFx\r\n=JuPv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDb4jnUbBKcOtDsPejNH95ukORrsGof1KXGlJB5DzLSCAIhAMY/gpWN8s6db3iyNhUkeOkMwpPnYpKYZau68rdf6WXm"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"stone-jin","email":"1520006273@qq.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.76-beta.4_1626763898316_0.6316045196225955"},"_hasShrinkwrap":false},"1.2.76-beta.5":{"name":"@midwayjs/command-core","version":"1.2.76-beta.5","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"fb65013337418fab120bc8d9abb86c6c28e213d2","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.76-beta.5","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-w8yLrDDPfRp+V6Uee4h/e9jMwV1JxPRwzjZHs5Ou9iZtNDAjK+L8jJKMs3/2jbzzX/zXgHG7KVCnCOZJUTddGg==","shasum":"b41e0c20e610b55f50e096ba8cdf69352210b272","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.76-beta.5.tgz","fileCount":64,"unpackedSize":195385,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg9ojfCRA9TVsSAnZWagAARdwQAJyBiMrgX33x1qjhgOz4\nTFEVYf0/C8xxyuqxdWwDW/NDC8L7GbPJiw/tZDp5fM5KII7l/OvZm17YSGRG\n1fy0mKZnmeJQB4Q0NkDdZZQ/gsgscrvETQYtfIwd9zDF0zmz2thDEaqY59cx\nbTzEavWWCj2J4gmWVXTinXg96UWstaaes6sq2+hbElGct8p4pZtHOUq3JvQd\nTh3wmxSEm2s+CV2CvjgHzZl7w6/LgMsMjz43uA/OBF2O9FWEY1sWeehC5/Pv\n/ZN8IeOJB8YmMUF+ErVpbtqbh7q02WAqIF5deS4JIgqRLvFrBqv00hR4ddfx\n7gKAyw91V0J4RWIv2PcOjCYZc6pDoqSm9qRP082E+wIlPwINMfmagri8yq9c\nYJkkWbzueY92rdfHNl45E2XEc+PRMAFZWfQhW8J7o5tgV3nRGjxzoHh9C6Sq\nDUX2uWQU3FvUO9vF3OcpaIrNGloxSW17fJ+OSdeLR68A7ciWErpiowoNaJFa\nMdr2U5WbKClfk4PFm1YS+EozDiqGYdCI4lYs4D6i2gQsU5Te+HAtor78bLbz\nlJ/heIZSythXSPHJgCW1clUkyWs1ycJ0oDM2cLSjPXi+grzSQPBYO/Df3FDl\nGavFuXluAufdZjH/csAb7zbwNf1Y4GydyRfb8bzJOMTxRYlTjGAVeKcz9oRJ\nWs92\r\n=iUJK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDtMVVOlxTUQj2z5fLeGGu63JZFefM6YGPXP94D5cGm7wIgHoHK+TNFIMKoPhX6uU7bB+HQoMSFfMTzsW+maTdI4cE="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.76-beta.5_1626769630973_0.7264458960074096"},"_hasShrinkwrap":false},"1.2.76-beta.6":{"name":"@midwayjs/command-core","version":"1.2.76-beta.6","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"bb71dbdb7bd3cfeb9a24153c6ae4a146eae5d6a6","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.76-beta.6","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-qSEf51/M1wIQF5/SuPHR1DNFHqHuWv1EwhGJUNKTgEyTKXMy5eXxWz3FqRajgr8GoaJrzi3KAWONAAyhcFpL4A==","shasum":"bd3d4fd4cc1aa852b3d1d76ec4e456c954bfe7d6","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.76-beta.6.tgz","fileCount":64,"unpackedSize":195385,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg99CvCRA9TVsSAnZWagAAGV0P/0rjkZFTzVAWo8KS45Ui\nQ4OZ7b6WuwQNaGn7fYEdB9Set2JFUw6TEIsQXXs4vuBpfbW35FOZPVlDeL0+\nE5UWk5Hsr7C7Ewm9KJpAwX1Vu43uWxNbMIjs4zu9WjJYti+htIOeIu1IphWJ\nk9Xam8r1l1fHpBw0Tyi3IPVhK+Y/kTXspWncSVyv4mRjRy/S9BUnO9v2spyj\nsxhR9ilnWtEbwgqT65kiSo39str4yW22Mw7JFLJmpUiriYvBGigRCmVofrt4\nk1S+taVIpfRi0nDZ9KgQu14VH7Lb6bipaLI42piJ47LnSPCyRhP+hYqFTQr6\nrgW9zX3rtmwr5+9hGTJW9b6Z5zBo/ye56le0nV/xDJzTiiRnWANeqS56XN8h\nZb7Actucyn6cfvrd4HKqx6wRlWaiPl4NmbmN5Wos0o3Ad6IajyYcVmWUkzpM\nUD9rz7bB9S9mM5p/eP+n/xWDfkda0ZyY7CvywM95NQbZcqbZnyCYEqRtdDjZ\nQ/N3f8QX8WSIRZzpKSKmAXzbMVgpC67gp4DYBc4XBE0FzKGHQwyINlo75MHQ\ndF6Vieht7U3l/3w4hoZ1tGQNN3P1CIRRnjFW1v/qrI1pSXer7VZ2M5VVmxSM\nHe6lun8kO9Vk+KZPwypQwoOF4/hlrMKq5AzoLS0RRKyRfMAeEW9D0xK0Mo9n\nU/fn\r\n=tGMS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBbwsNpYgodYa9IkNC0he41slLTZVwC0niLOR6SFSTfgIhAJbh0Bs9oounBGN6tXD9dts1p/V83FUtkpJmaS/RgcrU"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.76-beta.6_1626853551283_0.9994623664641382"},"_hasShrinkwrap":false},"1.2.76":{"name":"@midwayjs/command-core","version":"1.2.76","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"dd5334c54ff017e9fbe8482a8075064750ba369d","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.76","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-9eB5PMDupwwEcCuDlL7y2zYdhJeVv1dI3zXWL1pQeUkcMCkpj/Cq4mILbyYpTpex1xtxaZUwJNLCbXXn7Lbs0Q==","shasum":"8ecd22ca8ebd78bcb61348f860efd8167435588e","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.76.tgz","fileCount":64,"unpackedSize":195981,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg+OAtCRA9TVsSAnZWagAAZIUP/3fhQXUOWmTDpU3CksYV\nnFSY/PBbSNNaHMKsRSeM+fBSdkQw9TrBeIDv8geEe27sP1JIiREjFQSjj+g3\nNYJCkJ6KURikFTloeiVWhilAWHZIDACFa/oVsjn3JUeLPSTg1BcOOKn4Ccn2\nKgVbA0PRfqUT4Dh/5KsbcH16lNxvaJJfHKwb9xafcRLwYj0bq+0lMC8HjsRx\nIRJXj3Ii4b1DB2lTeFahqTP+5FHiLm9gZP74Z5af6lebZakPd1g4fUK9SmhK\nyLomd1CKWam2MdB3xLuJo9DBQUnjR7xXGSub9/mN9LQFb74AZR1WgrXWyTun\nbJEc7OQR+Mjf1icJMFpL0u6lt10P0wwLrSGPzGKwTAKtqfDEe9hesRp8tYBC\ntnF1/ra0bi3vmYEsnT8H5YvmsMJzUWE/BxdNTetMSfRdxQJLZrwCjjQh2OT4\nVI+7O2dXxzru6LCmuWt3GEQzWpB3cQB2sm6taEmzWvS8t6nG4znzo9ennTAb\nl7Vh3AqqnRc2vaFm8EkhcuLHeBvsC4dvV+Oy7Lk4Yx5XeFuNf7uLFIIsn111\nGn28DA8FzaHrdOqB/2es4Zmv0dLQQ1Qs+E92VrHtSCc7yS5qT3pLLpDICvws\nNT5C1CtM7Z3B7v+r458Z7tuGD56Dx7QoHNSz3ZH27KM3k9kv0HuTK4WSUumG\nKPq5\r\n=Nuax\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHtsIatrkQnscpNWhez+pWUhVnUhGfhNV68pYwouEVS3AiB/hTqYqmiDcmRcTk7ynIGF8958eiW5dYz+4F1fdAk/OA=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.76_1626923053069_0.10250713497153852"},"_hasShrinkwrap":false},"1.2.77-beta.1":{"name":"@midwayjs/command-core","version":"1.2.77-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"1c7332eff8cf256bdef7db6d741ec80373a5f586","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.77-beta.1","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-QBtSxtGQwvYhVQ8snrukSL/0MnulXbxtxRL/NdcfSSsrozK1OhOzVCFXdUSDi4rAtAq0btXGp2nUVAHAFMYSSQ==","shasum":"4a661fc4c7abd6c89c3569fa0eff771f743fc4e1","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.77-beta.1.tgz","fileCount":64,"unpackedSize":195988,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhARlLCRA9TVsSAnZWagAAiVUP/jH+ABlF1GYBziqU1/sC\nO4AaiFeXJ0MCOlA4OIo4LDE4DnQtoJzwHaBJfP0edlXVKD6a+tJ4vuYnzrcN\n2zNrYE1BjgTI/ekp/H30AnOMctj8id82vV8J3U9DpVCchZ326mxcHVxz+9Zy\n93QMux5Dmi9exDRcVRy/Mcc3EQ5k5YE0YN2qKAcldBHlOGILsIYBFmol9RS5\nq5zKVl1U9XhYMYG8RF6Ujgp4daBa4C7rX993sRutsvzIZ1Dfk/ZtPWGfMbWj\nxPfhiigBpNjyZOuhZuu6CuMd/AKBQvtIzzlsfE31z/E9dsV7yGQ+cYfwlP1k\npa1sZXShlW0fruv78el09BytXOXBcry9iy5xa1i1Bv0unBhzMT0hddaV/jvj\nfxWGybozDK7VHdhnmvWpZ4q1/Da2HcOUSP00iI8cvBmohWb+/meZmobiRRkp\nNttfx3LIBMWwFTOsCGfzNXg+ynTT0mOmTCMuxS/lS+a0yJNj+BmR+Bpa7Ee/\nVoLQ28zmBRs8M5d2ZQNVj9n/gP6SzuZlnkOSpQrHmdaMFXep4E4UnHeD6Q04\nJukVc4bYgg8WW45dDSqXkwK6L4efNr4HZSG5rJ2EWFRwBaPGw71sSpkUBjCf\nZS5x2nl2efnp/5lceQIs5WbbiuIKzRa1Lvet38b/1lY3CAp2cnUeN8boNWa1\ncK4y\r\n=P8jf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG8cr0G889IZZulY6Pymjc+oj0IHW7hHcx4QCtb1pJ0RAiEAwiZLjxjR2Y1cT6n+5JbCu/Htyf6Arj8Zc4k8SICkbwc="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.77-beta.1_1627461963689_0.10175286491275459"},"_hasShrinkwrap":false},"1.2.79-beta.3":{"name":"@midwayjs/command-core","version":"1.2.79-beta.3","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"58706de896b8e3b50605bb29f40ff29abe43924d","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.79-beta.3","_nodeVersion":"14.17.1","_npmVersion":"6.14.13","dist":{"integrity":"sha512-/EUAw4KfQGPH4BDfzvcSAYVhHWwClOxgEd5RQ2U4iF6Q3KX8hSfQ8C3Wm26gXwR9hIMzYKLjRrlILnBeenAAow==","shasum":"3f449049e7bc682821a1a3a89db3198e4cc038dd","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.79-beta.3.tgz","fileCount":63,"unpackedSize":200040,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhEqruCRA9TVsSAnZWagAAencQAJu1EGltee1ac/5vZlSy\nWvUXcGONjj9wRRuL95fRu+WBy9np2MXQN13GGRqH6FR00hhm60XceSRKsnR7\nprKIeQA3uJ3fN+vwEqrgghTkjWVY+3YBzHV7BOM6viI9MPPCJw41fVuwaMP4\n9Pn6bbNB6jOt+Uqi1uBvK5RJHDfNzGvZYBdeaKY+75YQjAj7MkIcwcp1mZZO\nR5zfvCDmBE9vgnnNIOjkaikPMLhbfAfDmfInyPnT3QT//AjZuL6BhnFYa5t3\nEOiilsGe07YGCaPuxlJBAy3/lUixWW9FMeIRYJyLKZzbhKFhfKyD0vDsbYbE\n1uRwsQ1uODh2p1tbKL9i2c5BAgtC9k6prjmTnUDlMupuVk+Gi8EDr7rM9S2O\nV2EzEJMFwckvaAea8PCyvkr6ZjDhGn3qGfftmZBoYXA9GzeSyxO3YSsAeXpc\nTVscNMBciW574i3UWiy0O2stQOJMLPZxb/BgDwp+AFJYVkmfXs5FefVMdpDw\no6UMxMJqSas0xq4rgmXTtsmIGGnF1WSQ5h1qKwzVZXUogwX79oQ/Vknpwj+g\nj0XB6M1x1CKiq3ukCqJVsDBStzN1SAmjzaEJdRDFp8/aDn5ZK9xRA/XUibts\nUZ59y6ssybgYLLISrZYEwBR0LS5pxG3B/kaBGXan+7sKvGZKBTL0npX4+0Wa\nl9Vz\r\n=mQ6I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/mNSAcdcp7ad7RmcFnspoAOhGPYHu2wHp5q5qI0kHYQIgcNmcRiZFEs774MrbPBS9s6tkfwt6TGUXZhT71icwl5s="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.79-beta.3_1628613358719_0.9626499700454947"},"_hasShrinkwrap":false},"1.2.79-beta.5":{"name":"@midwayjs/command-core","version":"1.2.79-beta.5","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"3dab5181af320c465bcda288e35782ad63ff6d13","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.79-beta.5","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-geRa8X083Ly4WNmby2Ff2V6W6UnP9iKRFWTGFSzSm26so2QQfkEEiwnuR21IYwXVWM3a7QaOvqwMK90yqC6YIw==","shasum":"0013862ad57cfb2ee97f51e2eb4dd7f1847576b4","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.79-beta.5.tgz","fileCount":64,"unpackedSize":201547,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhErKKCRA9TVsSAnZWagAAyH0P/2557Uk+g3bI0DGYOATJ\noabh7GMihE/kmBXN+6WiGhbYX45A3ZP7GUnXR4N+MQBbe2Sl9ZQr4twoNkJI\n9wHkK91HiffOqmBaWp0gBYw80U5U9CYA2itGgIxhn6jmxzggxo3BNSlkAz3P\nosFNX3ffNgBpcJIiG/VaLkAXBiUuMjfAPKsoQmKFxUtgJaCVDLW6jVAdxhdw\nMJEZ9PXMM8M5jfN6RfRSLpR+zAkTIzhLJyyaD9sO33Ak9yWE8ltO8Nfd0V10\nDcv3+PQYAoRRbsXN9l6mFDhLJkLIfohX3cYM4xmGKN9/lPj/WVBjjP7qXK+0\nDTJKiynOBzwiKow9kdJ6WtX7COuc4M+1gH5vYf/mmXmh8A+cmQ0/hDSKBnsq\nGQ8FZBaSwCu+htwcpd/f6q+Cjhi7JulcfeyNYes4DpRlL0fJLfX8sjIY0xuP\nBW6WMWrCzhvHVCa9jrb5LnzSX91a+O8kwpjd03cVcohWOc0d8gXsjLIkursB\nr7grLIDjo9/RE5uXnnFPI+vbh3Dx8MCQ542knIiGE0l3o7nrzFBfW7z7Ah5f\nQnNEjA5HdwGIwaYoriKZLTavm3Wn8JRov6OwSe+qKFSBrMp8vsFq5er2N03F\nvsVucIUUEVlJJGYDli6/6Q0TKZpYAWhJlb5cOLzweGCP/Z7aoD61pTlEVm7x\n7Gvl\r\n=2eKU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEqG4v5FZ22R7vfp0g8tsoQQf3Tm3MBVL+KlroRAUADDAiEAgrHF7HbpaDBB8iYt8Gd5zTGVd7sZrpAUQIiPQy3jV9I="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.79-beta.5_1628615305953_0.5637543476186675"},"_hasShrinkwrap":false},"1.2.79":{"name":"@midwayjs/command-core","version":"1.2.79","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"cc8224d7b0540711c860571434b1ecbafc241392","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.79","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-DsAatrtsx+OeFPN2s1uAUX+Zt1xMj72eqJ7ykZyzrY7uAiA2fm5qg4KZvM/G3V/IZAyR16GHYBm4Ywqq6Z7Uhw==","shasum":"da0d23838dce24b4466a6d11a7af93b5b07b99cd","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.79.tgz","fileCount":64,"unpackedSize":201823,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhE2jNCRA9TVsSAnZWagAAAq4QAIC7uQ1+w77xuE9Ioo6V\nJsD43Vaeu6/PcveDXmflW7QbNFzR0uZJjJCn47es5xugr9p2rmyYxdYRCLti\nJ5D/CkCQvJtRVJolOY3vk/FY9J41w6njGgW4z22Rs5+kJAX4zsaw3xHZxab8\nS6Fo6VGQOLzN/DGwVife+Eg+vL6DmkchUiH4IsuSQFVFarS81PrJON++ZRAG\nGRb0r/Xeeo1rUEyokcFPMpOADTnWwIdRvNwB/22xHnMfnb1PxMJRO0VeaYGA\nqN0AL3POeVfHE3UB3rQGTjApwmWkHb29K9usriuDcM/+LIcmoDqvavCPiZK9\nLEYdDeeJaF7SvQKGFvDRoHM/6y9Os7sEzvtPzAdV94LxQuebLlNzTGhwJgx7\neBbaio0eGc/FvUKFWnLSa6ChOrId98aIxN8/ORM3KbOSmLzKJUxrzCEyJp+n\nP2gRIgUqE4dZR+s4+udXdNpNtfhmCAIcvPTqqW7hGVFuTJS/9dy0kXPaUqav\nDU1CbfYxtN3eCv1x3qknA24WqOxgIgwiXbEjXp2wQv8TDr1b7TIsv+ZACo5a\n38cyfXU0zw3vrJa7rU0PvQr6tQXI5F7N6Uq3PINoP1KIeMkS50+AGW6c0lnw\nOVVXogdwRN8kSPG7y5cbHGXo8wQc2XV8fvC86EXMRDkcY+S8zYJx52Z+hWjG\n3Xj+\r\n=xdY/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC7ySFiBJ/CfBq/qgUd82GB+TNXRn6RfDVC1ohhfaFp/AiAPNVzcy51OJ0jyCh6bwXRZMGokeNe/QMsDM8D7BNEGZQ=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.79_1628661965430_0.7575119739851475"},"_hasShrinkwrap":false},"1.2.82-beta.1":{"name":"@midwayjs/command-core","version":"1.2.82-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"283a3105e3be13b5c7075a95b982e5caf8267bd7","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.82-beta.1","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-WVG+GGA8174RIe0gRgc6rFITs/XVs1u0rAJT5mo9kK3IIk/aWKT1ZbC5UV8wMXTFGoWcsbEVEkBWhKJjLX+KpA==","shasum":"a42a25a3be49f3e8e7b25d495feb0f89717caaf2","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.82-beta.1.tgz","fileCount":64,"unpackedSize":201830,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhLdPUCRA9TVsSAnZWagAAleAP+QBgb4DBcGcsGO/BXWfJ\nOWHGjP++KBzidOtDobYT+gTVccZ5un16NiCthsnFOlbXXkDtDbE2FdXkwEph\nbSVHkeidYHkapZZm0+Fau2IsHCUa6Vux9A9VltAFi61yN2d10Y7u9CvAefZQ\n7cx5J3A87mU4DsbUKLiMWAMPT90MG1icTlbIBZqk7UknMp3U8SfcOdgvlIK+\nB0AjvD3hAHE8BOfVZf7WQa1bYdXjNKpw9ofXuDHmf+1zH+0+6bu4ncSQ4G3w\nIijSFx1e0YAGmel6RbwPtMpawkLIF0rGiXqMorXCNLo56hXakSyfXcugmkOX\n4XirbuKDm/meSfxU8bPz5EnAy1Z/KaA04EJ+wQTCjEqmFc8bOtTc1Y+Ib2Nr\nsibeHa6/PlQLWerwYgR2FAWZRVrqt5Es8Iw1L39V3pnmrJAy8+Oo3Go7PpQ2\nTzMr/STUW3X27CV+tLmOafWIcfAYu9IIGvBNNnpg/4M7yIIEHwHlqNydS8gW\n4JpAv/VZerYnCjbA9Zt/Y92oYzdnzwKSHBpZVtYZYS3/CelNCCg2DEWCT7Kr\npLCy+HHnJNErJqAYFZ30EHyEBP5Gytd8wchqdRviQKhO731gwK8ZSVJ0rUhA\nc7Y4Ajpy+gmS0hG3Qa8O85Gr2WTWKYF56uoTQ6xfVkHlY/Refc1TWPcv9R2y\nNSw/\r\n=7MH5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhM4KFRLCH8Ms6YVJR7RbrYnVUlBIKae8OKl5e+dAaxgIgL4Y6X5GV3XINcxlkGqKiQBVztCpLsIhLz5jQ1GhFxUM="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.82-beta.1_1630393299939_0.5037714768350066"},"_hasShrinkwrap":false},"1.2.82-beta.2":{"name":"@midwayjs/command-core","version":"1.2.82-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"b0784c9bff8fcd0ea95d487aa483a2a07f07ef67","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.82-beta.2","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-TNl2GSVf7HMFBzHwjDELLOkXfpUAXR1J/FW1J2/iWYAjt6pZp7BKzIqU88kSAL8Q5PI3F08IhbPsfxVG9ktgcA==","shasum":"3ac3e57bf81fce6788d40d838ee27f5413232434","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.82-beta.2.tgz","fileCount":64,"unpackedSize":201830,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhLetpCRA9TVsSAnZWagAAX5IQAIOhg2jwqnGupYquFjpF\nGWsB5olDVxyRXluYQx5iujtstl7fS/SupOn9UWj2d7Rdv8EH3M8E9C/4IQ21\nqR9QKtiydTy9KQQ6mGddPXgB2hPzv7iypT38cQmzpMMnWpyo2gtU5el3/Lmn\nDEetzvID/MDCaoHA1NT594pSKHgQkjzyizfd7SXUov6CpbdK1d1EK7jdxpWY\nWHdr7lFN++76gMv/UAjIQj84VBLMitIwuyXcDE3/qq2cB9D9x3nE/wexYY0d\nrDpUutNMqEoi4jcERkbTrlGPJM4Y1O45o0kvnhTer3tObJkC811NUpm72Ajq\nOaB/i9epaeGBpenmApgD4/Nq5hXJktTACVA+meJgHWSVOiZCG1QqooKWrDDy\nZIeiLLxPCt+PwBJAQW1CcaBQ9SCBWfpKhMsbx80wOPfrfIgwW6yc+imJJW7f\nEnHoBGuY9m387mFy5Setxtg3I7ktrro6k7RhWGji1FpeUM8VHAmOuvPiIQCW\nQGY44GTuGhG7E6j9qzA720OBrBheAZ3hRK/9/5DQ455gv1hRCpW+XhLmqwsq\ngIEsfZeZPHVOakrPFYAYcfIOQDK6YB3KU4DMJL1sYzJioOlX0XYJLELCIMN5\nAGfLRjA7OZ6C7LezU6ITuG4jmosD4adIglKbRqXGjLZ0n8xOPOaPc5rdCGfc\n81EG\r\n=2SOI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEnWKwMZYZiryZPD6Q8D+XDOFJglidbuXWqrbt6QH4NqAiEAx0cy4FEeHRaE0DBA/H2X9d+febzNCMZBwcDrFFwSPTA="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.82-beta.2_1630399337508_0.11239536113826909"},"_hasShrinkwrap":false},"1.2.82":{"name":"@midwayjs/command-core","version":"1.2.82","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"644e333c2744972924d3d1577365e56b062cd898","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.82","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-+EE+i1/eYqvjcjH0d0YHjO4Chr6QCchIGpdeNK+7cwlS+GzgRzA/Dymfz+o9d6cG6VE/GjOSXJiOsCar2VGOLQ==","shasum":"7dae509e653c8b515324266e6e260c81d0fe1c7e","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.82.tgz","fileCount":64,"unpackedSize":202092,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhLfUHCRA9TVsSAnZWagAAjlkP/0mRW01aCvjwkk51cmWS\nwhMsAY80ccdKt3YmZksc3BFKGcDabRKVn7D0zXY9qIqKhGvGFSssMgEDOi4o\noqlub0qfFK/797rKnhTZZDJBAOcUn+49kL2+EeEzoSRPlns7j0Ocys2ccVZz\nwykgDnLpwclclOtPCrRHIuVVlm/WV7mar+cXG9XRxq8WGH9uWU36K1Q8Czgk\nMoWJH3ovP34uleIzuKToU7BVXjUhqc5C9P6ddz7X8nLBvrPMNJnjrnGJlc8Q\nACnmXUr3BOo5x50UQkwkzGJGO3eQnIOvfbExiVd0gJhkDAlag26QpSDFLsWX\nIcohnBxvQq/L0zGBa9Gq/lLbt7WuPst7QCGv7iG6b1FGQ9Jg08GfK6jQ4S6m\nt9OdhPxy92tLBmDtya3APqwFGlLGAlop+LfSpEILJh0+W7TLk4F8i7FumeG9\nAOYDzpcHGe9pWXtEvfapDB2w52L6Dwn81Od3OU/pmK9zW56hUf3bEZqykXPG\n5erMUbWsI7L9cbMhUodByRpePJqfFECJa7OSO2gtNHRydH5yQLGTieGEkWLP\ngo+FryX+0440CJeTuRioWEWqk2/yW/MH9YBO/KPLModg0coEwW4E4B88DIpR\nL1VYf7V8FMnlub9sXduKrSvoQVzLShvwOsIRU6bAtUZfJmFnDv8KCTv4FUWm\nM5pE\r\n=quk1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIED7izlTvQ8t6idsTTRrWrDp3+Zs3uAIwugLqshbh3gXAiEAkRDkqtn8ydWtJR37vPKlfTSTShjCkHQKyByf2j1dfJU="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.82_1630401799065_0.303816410252959"},"_hasShrinkwrap":false},"1.2.84":{"name":"@midwayjs/command-core","version":"1.2.84","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"97778af6194dae45c1c98b7463b8d6346722c893","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.84","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-YEghJVXFIk7KOw37N7Bj4cV0UxJtnXWK/OA7H2oQCX5Xn4ugIWIlLn4A507PvF70vmbYGJ8CnLf//oM2PECldA==","shasum":"4f5c506ca1a734fa7a910054b3cfbf2dd7775beb","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.84.tgz","fileCount":64,"unpackedSize":202377,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBLoJciRJGaXCzuKvHDBVDKtX00wA2uWvGb6ZI/pcjL4AiBUBI9hv1Ki25xUehDUunRAqjPAd3MYtPvGrvKmDY8fLg=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.84_1632731240474_0.7117255349228089"},"_hasShrinkwrap":false},"1.2.85":{"name":"@midwayjs/command-core","version":"1.2.85","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"263a5f22fc8f33c49176a1e86f6e2f487c40f437","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.85","_nodeVersion":"14.18.1","_npmVersion":"lerna/3.22.1/node@v14.18.1+x64 (darwin)","dist":{"integrity":"sha512-HGQdfQOW6/kFY6kfv2A2YgMlZdlwGFGJqQXwz2/TUvj/lJUrkzuELpcuskCA+x3spePS7kJJJcfaJ5YdJ2pxgg==","shasum":"ba47f97f70be2c860a00634971de49da77699e24","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.85.tgz","fileCount":64,"unpackedSize":204677,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEeFwBCzsjt80soeupxARG+i/vjGoQO4XAyAfr1ww8KwAiEAh9x9jaNDe3qQLJzxREBDld8R9iOrQ1iDkppVayL0H3Q="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.85_1634811009172_0.2236622094355869"},"_hasShrinkwrap":false},"1.2.86-beta.1":{"name":"@midwayjs/command-core","version":"1.2.86-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"a26bb91c4da07584e3933a96f1b5c0f70711c8aa","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.86-beta.1","_nodeVersion":"14.18.1","_npmVersion":"lerna/3.22.1/node@v14.18.1+x64 (darwin)","dist":{"integrity":"sha512-yesniOujlqviN2ImkrEigLj1QMnTU72NN+oui3HRU6RmjvtMNGPiB/tcV7mg00b0RjCG0NMMma06DNJeb2JK2w==","shasum":"c708b88667faaaea80bef16e28e2ac6e73e55c89","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.86-beta.1.tgz","fileCount":64,"unpackedSize":205091,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD1CeW87vsmL0eHxAn5kOHsrfM72eUNv0cJBUyxMIKPegIhANY5ZJU6/yg0ZJqTj/iCGnyGzhiVqBhmXPCFVbzNCwoC"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.86-beta.1_1635750783074_0.08741700826868248"},"_hasShrinkwrap":false},"1.2.86-beta.2":{"name":"@midwayjs/command-core","version":"1.2.86-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"345658cc9f32f384676e433bcc3ea9656e02b749","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.86-beta.2","_nodeVersion":"14.18.1","_npmVersion":"lerna/3.22.1/node@v14.18.1+x64 (darwin)","dist":{"integrity":"sha512-ItW7KAZDUKkmHxSVpnQAgMecghJ5WovNRBp8XowJgmZnTqTTNf5VELVOSykrr5Xp7sQn+oFxCysTPKieN8omYA==","shasum":"aaffa36210f7fac33e51e6ab63862fe5cbb7a24a","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.86-beta.2.tgz","fileCount":64,"unpackedSize":205091,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCMdUteW45J+AhMUU8APSz7YE9UCVjwSDCaEW2aF4aDOwIgeCaZosrdpjZYKTvRLKa1LFxmUVRXlHgyxK959Y2exgc="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.86-beta.2_1635947883122_0.9303734836610065"},"_hasShrinkwrap":false},"1.2.86-beta.3":{"name":"@midwayjs/command-core","version":"1.2.86-beta.3","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"0f35d76783e29cbbb56169d5079442497fb8145e","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.86-beta.3","_nodeVersion":"14.18.1","_npmVersion":"lerna/3.22.1/node@v14.18.1+x64 (darwin)","dist":{"integrity":"sha512-7wW2Sj4kw4RzuVxXuZd2lc3286mSZnm6U1cw1CRENNJQvXTipdq4rjKyGHG5vQOLIsxzQ4Jc2dehbz7xUYkT/A==","shasum":"3449b37b9c3b52cc8b341e4baa12af40c1a9ed33","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.86-beta.3.tgz","fileCount":64,"unpackedSize":205091,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIASbsFn1ZsJ6Mc2re/n7Eg3wAFuegEJbRre95hlAU6qZAiEAjh4l8Gsc8hqWjel6dYdeQw2ZQ/nD+oWNfB4Cud6VfXE="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.86-beta.3_1635950619608_0.35572268974035226"},"_hasShrinkwrap":false},"1.2.86":{"name":"@midwayjs/command-core","version":"1.2.86","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"7c18472f44126d641201f1adfb95cb1a94071ddf","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.86","_nodeVersion":"14.18.1","_npmVersion":"lerna/3.22.1/node@v14.18.1+x64 (darwin)","dist":{"integrity":"sha512-plCuuP9tVQ1FoErCttABfzTjRPstPdb5Sx0gMflG70iDgLWmQsZJrjmTPPkbrny2YzfRt14xeam0s0311nVOsQ==","shasum":"110db6935532e455f2662db24baaff53a7b62380","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.86.tgz","fileCount":64,"unpackedSize":205237,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBO7J7CBF0+CcRmuZOBsz2P55wATUKX9+BbIvzcXSKapAiEAwqMwdCpPk+TbnceyINbwEnu09pZRAvAldrayUbfDBSg="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.86_1635994796179_0.9222304250564184"},"_hasShrinkwrap":false},"1.2.91-beta.2":{"name":"@midwayjs/command-core","version":"1.2.91-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"88a014d4c6e0cbb03d8dccfdde725837dbcd4912","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.91-beta.2","_nodeVersion":"14.18.1","_npmVersion":"lerna/3.22.1/node@v14.18.1+x64 (darwin)","dist":{"integrity":"sha512-Snib+DyBza/YCy9fwygFAnAenXrAPzu0MHYbKeZJng4LFPrNAiwSU7Ju2g13l2YMUsOwuURRNO2G8DvyqsPG7Q==","shasum":"3b9a51c396c2dcb184137cceac894c95e684efd5","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.91-beta.2.tgz","fileCount":69,"unpackedSize":208799,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhoI+rCRA9TVsSAnZWagAAEugP/0bMrfsZLUPfUXhO4kQp\nKc+qyGBzzOuAB6XccqcPcoki5/dlm4MfxXdHgcbzEbG7Gq9Uv1TiedalyLE/\nxYTiHXZPDppNcKdrK3A7o+KqEGswcmQ+hlRsbAtoVMvkOXXrTvjIOePg9bIb\nmT5v2Jdnu3XY4tvhwxSlNXi0LOzE+GaYR6FjN/xYBswPMcoGHTZJRjM3zBbB\nBZbsZZV5uhLYW+pppNkua1K3ZqXPw6La1/+KxhXoRL8aE6B/OSzGQV8r0uyG\nP+1sgo4zDG4eykKQy0bFjfKIvTJEfIG/JhdX0e4kO9Mb05Gpe44av9mW0W73\nhe0Bk5fPwkY6OahuLhP1b1kZByPL3IfiX57BzTzMz0pE5zCdEsV/U7ekpzjg\nhn+IA73bSa+eVyH2PebuDT0lJ698RFmroK3z7FqGpoSG6hw1CIc2f6LbFeFT\nQko5gvvHNOkjtd+Pu1YAgRYETuZaW24jU8Q8j+S/EBGVdPVDSkQBxO0QE9P6\nf3CV4lfGr77s3yGyspU0u8z2R0sPJKphnxRa4mvgw5xo8mjAABL6t5qPBnTr\nMpn62HBXqOq/xSmyzz2v+Hwa//6OinEstY3y93s7ZNlP7Q8Ilj5hHxlaiwsE\no2kLiNxH8PyhXZs7KiIgZWvYjF9bYDNmv9FRg7z/UHIPVPWwgoyj5bvAzmhE\nMD9r\r\n=JBYs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBf1a9D5S7w3NARd7gzwcCC/qh/9ijS4Kas4uk2ZhXFiAiEA9nOw1YN2BKM21JRjtZWw/6wKuo/4VJH75Y0JGkvZnV8="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.91-beta.2_1637912491170_0.9123072824871228"},"_hasShrinkwrap":false},"1.2.91-beta.3":{"name":"@midwayjs/command-core","version":"1.2.91-beta.3","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"fccc7b27b9e315b5c2fba044a66c513ed9a6288c","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.91-beta.3","_nodeVersion":"14.18.1","_npmVersion":"lerna/3.22.1/node@v14.18.1+x64 (darwin)","dist":{"integrity":"sha512-0Pvpl4+yj7J2HagJ0djD5CjkljiZ+SXlBfiNRW9SE47t4TfPj9JN0XSOCVCa6pm8/SDTOTnPt8xujTDZU89IZw==","shasum":"79c4a57a32bbfc28f2fdce7c4a947df418a658cc","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.91-beta.3.tgz","fileCount":69,"unpackedSize":208799,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhoJYECRA9TVsSAnZWagAAIeQP/iMabeg52s0LxYYzqqxH\nsRU2A0+6BKaKqg8ukZrGRgulRV7e2JQbqQMLORdKGrgIRzccaNh7EOUqDVHO\nyquQip7EHuq3n0j+QkwHbDVu7/9Z/OawLekXEQZ8Jqnsg7tWyOMBLkV00FFS\nunBt7EI3pHDf3GZIZOJFb2nTtGbN9QkODNZtUODWxf6i4ar1hGo+j9pxeWDh\nRn5KVdDP6OOQFDxqvT41BBK6waoevgFHb+K2C1Y13xCQk5cliXobPE5PV1+x\nTjvlzM646ZmKtV7BtR5fXwMBhwnin4Bxd302fF3s76ViU2vRcfFhGiPZWar3\neKUpUge7yNZYb5NT1P3PMyPhKpb7oR3DjLUg1g/topRfNGIFioeQxD+bLIJF\nkngEcGlFQiPLK6e0eaO6cBB8bbZDVVGV/k389sABJS7Z8XTT4qyt+ZLyCxoA\nxWPTTCQ2CkjFLROJwYdcgfp4cxIpzXoVgcc/C18HkF93Y8ooyZQ+zhAblr62\nV9Z3m6mF2AYZ+FyPKSFKCN/rRM1IwibN1xIdni03wPttrfTuDg9PeIPZi7SO\nUXLaBvBsumNAQqbW0yCT05AV8WtjnJ6YG1j3ApSIljTd9PZhKre8StvKRt/k\n59FS8Gz8Wmv/+co3n3UXZbtUTG9kwCe3sB1ig0Ewyl0V1I69xEvsCUjCj5Gh\n985k\r\n=egB7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG9t/jUutOraHmKqboAEAcn5mRQrbPSWMOM2wjywQIRPAiBXTY/MrRCSZS0kbX9uyOLP2euo7HM61O8NKwubLab2IQ=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.91-beta.3_1637914116070_0.5724692719224267"},"_hasShrinkwrap":false},"1.2.91":{"name":"@midwayjs/command-core","version":"1.2.91","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"57dd71d2564864a14f7be8ff089428dfb8d5f89f","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.91","_nodeVersion":"14.18.1","_npmVersion":"lerna/3.22.1/node@v14.18.1+x64 (darwin)","dist":{"integrity":"sha512-KQ2fSVjFWY84dJedEHUNHmgEttQNaoDGiE3LU6um9hCF6vWiyKmRr3ihu6kPg6B5Wxh0p2kTUWthIwr4JpdsrA==","shasum":"5362b93487e54ab7725d736bfc53f47f66268d76","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.91.tgz","fileCount":69,"unpackedSize":209061,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhoJ2uCRA9TVsSAnZWagAAaZcP/RQUDouUy78YaGUVCOWA\n8F21YWfGitziC1CVY7fJAgUd1pBe7NkBpzZGDQKwYxloYl+80zX4egYapSAe\nWrK0gixY3rEXhK6PUTUBrAbblcfLhavFlQtxBFtrbuCT5Pr3d2+P+dGg22W+\nMuFUVRafLrrtT5rPdaTIwNth9/F4G1o9GlJYyeTUOWQRitGILABNsF997Xv8\nFVej+s9DOLjZ1gtiyL9s2PwU3XDkJqNuq/wTiZnPUvsRfHpHh4yEPvguvD54\nQrVGXCpdDVuv3lxj0trwChhYKqkyegs1sE03NfSuNnMavK/0GvuP0OYB7jw9\n3148/JXgu0cZl4qynTMSuREnxdpZwguPfTxuGZhzuQgHNAS9HpUUZtcPSBuF\ngd5LDYAHVJOPRRlPmi0L7YHQc3yml8Suj8+tf/xnjWmw7UEbi8V7nRO7sfw+\n8CvUG27FWHTxc0zGB8OdYVeRhroTYIwEQpDYglVcIw9yUJHDMU72arNwkr43\n0n1Z6nDCwZZLFYgaTWKwQq+2vV3TCIBI5K3YqnpmlJST8yIg+x9NdQVbuAn4\na/qDrBohiyjpwLCs6L7PfoOIBp8GBBT0h/2fgnPyCiRfRHWNFi4x7VUdmf3n\niwgFzpa8NJd+x1na8PG/Y7W2cex37uZwPIBOsUnegTpJjO7jYRkg/8wwWkV/\ntWPd\r\n=nKRQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDfZ7uaLqJ02q0AoNJoB7UVwv2468QLYVbb5OcyXKSsWQIgeeNPvd40fboYsqKALa4I/0CDSlRmU/La+K21ZX/35UI="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.91_1637916078236_0.34919905874602586"},"_hasShrinkwrap":false},"1.2.92":{"name":"@midwayjs/command-core","version":"1.2.92","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"90c933cce23c05512e91db93308172770f8d94c4","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.92","_nodeVersion":"14.18.1","_npmVersion":"lerna/3.22.1/node@v14.18.1+x64 (darwin)","dist":{"integrity":"sha512-zBoKjl8yy85bvV2z75G5CBSV1CgLQleQF7OEw3be8j/q1lge7vl8rsd7cbHZAbEifrmQxJI9jlwSqj4onP6CcA==","shasum":"12901a6787b211821b8c82701c3f1024a81bb508","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.92.tgz","fileCount":69,"unpackedSize":209878,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhqc7XCRA9TVsSAnZWagAAy10QAIa75GnEyCoe98G7QmB2\n9DC8wdmvUDLYPokCRxCGXozZlGfKfudd8On47NjdY4oJZFE/AiYOywO184lX\nlX1I1G5Dh3wSJ09A92AJIBRZCfB0NWevJY+KjPgzaRYfCtY8wAPto//L7vTF\nEiI9QJ7dpZwlJG6S9Uai/gBWa3bYeeMQqF+6ImwHIw96iMFbc3mscIFcGa3P\nc7A8ArDqqBbCqmX0IXZU6nqbAMmr27vJHArdoDpk8pLVK1a+dRe3eWAhnkQv\nLPEOmDwB/oXI0yfHW6bOQ3jOnFJ+Sy4gAsCmHvytnKZ7HafdAPTnStlcFAAx\nZOWWEF88iIqN6vQ69cQ8qPmnCGh/UW9F+Q0Lr3JnhRvVRu8sa6E8gxrOi1iU\ngT5Njh/1aTpTaqeCdzSfvXFZIkzlx6fksHO5+cnn1G6AuInP8Ugea6UaMz28\n9AabJ+9KAZE+5i2c9Q/ITKg9KmplApKeCA6yXdTsCIKObDxHtOjdyxatNvO1\n4okvN11mPhgwbJkPqBHZ0W4YXAsk1ILTRjqTlAtjoZe+NvnKdkF8CmCI2qk7\naKhLBpc2VxPkWs9iLDNbK9fkMuIspSjxariRPlIE5sX1M+XUHrFg46noHICy\nXTKfoUgz0E8mQQw2b9Ma6y0GXAFU/0erwN9qsly7p0XGeWNTNdaoOnlWhQ+F\n9qMs\r\n=e8yg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICIwFVNmRPJ6pR+yEkHGp5dzaalVhjuwpp4q+7JA1RncAiBOxDvWIJd5eodBTjmgrDAuLR3WJjAoKz0EZ8QH7n6gXw=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.92_1638518487398_0.10274584681597898"},"_hasShrinkwrap":false},"1.2.93":{"name":"@midwayjs/command-core","version":"1.2.93","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"7ff9d10e20075f1eb184e02fbb459f9600bcbfd5","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.93","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-DlYkFPn1hUbOFDwuDLugTJQ9DMOy9ZmwenI3lpjhPeqVlk3tjkDaGne7WDLhcXopg5gi5NTFAo0SIeMODm4uRg==","shasum":"e1913a82a6a7db1131e2e205cee11d41c6c9b5a6","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.93.tgz","fileCount":69,"unpackedSize":210823,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhy9eGCRA9TVsSAnZWagAA56gP/RDyXvQmKWL5lhKrsJeI\nRqUBVkDo1ObM75BDTP3swJQ0KCaPG6teYE25/+wZxAVYMod2qSPSmRyzL0Ae\n24acZkTpSZJzqXyAVhUVRdh5OC8dJRcxwfL1Ew1bIJ+L+L0LfC5/D5UITsO/\nO7Jc9/kw/QJPn+baMcDX9D2h2Fz0Ci3FewLmsA/4q4m4iDe+lQkx5RBMnbBU\ngKDhXa7B+jNZqKHey72MaA+ZyNT+zNWv23QQgKNA9N23r5NMQp4S/ecBrxP0\n26wTwVcnjA+ztHxvF1DMa6EXrQXiDhgGaR1N+pCd1zahD3vUE7RS4aFjdJKG\ndp/JDo5/AsKioYb4QUwMq03hk4C0b0Oe+DtcoPjZiQytpGztcErsOChn44HY\nWwZ84sBxcteILkgZiH6WtHhX0oO62NOm7U7adTsN2urP9YBxe0w2Za4PdAjG\nlodEhYzRq1EgeZObSdco+PRDXaW2ehrgcYPCy9rhN5xn+hn6p1yNNLUgIcjl\nOvGy1eRDxOD036G0cy3bC6kzcbk5D6NNqGv/C26c3DzTL8J8qBk2npFJV4xs\nB63osgpmhTChLuBf1qeqCotdml6/0E1ynMZSPCWTH9DMv7TV4OrhmhJ1bK0N\nMMdH4NRylHGDQ9ZR9oRlVLhZTPT0xVh/yXbezWOi3YnQfcYYm7Zk5Xg3hbOn\n9GxA\r\n=ZuKD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEJCsAMLl+EffVsM0x9E5mBfbpOeD8n1msY0Sw/Iij6hAiEApQ94cqgBnd8wjq4SJyLmA9kQJ94pbiuL9LoUpcmbmGA="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.93_1640748934649_0.8578949257352044"},"_hasShrinkwrap":false},"1.2.94-beta.2":{"name":"@midwayjs/command-core","version":"1.2.94-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"7449c2acd262f73e4305954646a66f7ff2f8beb0","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.94-beta.2","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-w73Scmy0AfbCZ4hIiQ6PBHN1lV9aLzrkzO9nJN1OlWhCx4QETw9AIUOwCKLKX4LrrbVD1PGmDeTxmBgaIeQwuw==","shasum":"9d519fba376025aa60612071b7b65ad0bb84d7f4","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.94-beta.2.tgz","fileCount":69,"unpackedSize":210936,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh295uCRA9TVsSAnZWagAAW6IP/jHnET03K+UrGycNCi8M\n+DaUjV4rGfm2z7h31dJ6Y42Jew3MVfvl89DUqEy8QIE1Rd+irfTzF+ZZUFZ9\nhUKkMGNuzc9PoYFgirL3AQX2Li6VEy3f6F8QnLE8iw8QcaHazV0HnPiBnZjA\ngMBesPxTb8DSv1DCoM8H5jXqZMky9bIZmh1gYIJCqDRotRJWxesYeuggEr6E\nQlDbT0V8OtKNPir7JErGKQWXHDMcNTEmT/RbtqZH0bPj+dRvvyotCATIa2bS\n7lq1E6baYnQQthtjfgrK8xzZFIMUnY67TMO0k9PYXgML2s8D8MWYJiRvjt/a\ngp9eJLuup/Zs1PjGHiDThRh3lcrwr+l8BKvWVp/4/78lhuMXHbkXsdtO38dI\n5H1sL+p5q9pQXfjDxxDVl8z+qQVMqaQXSNPW9rcGaDmgkcowFZmgj3jNGuQO\nfBTwUJZJnCTCMxeSh8NAzgFkqf+D/7Wu7sLbHQEgixmEvPfvSqy00uk1HOYy\nCz47BPhghPQF6VJUU0AB7RTP/WjWDnCeLDM/RCqxaz66DVlEZh8adrZKzz2r\nhzVfboAAz6uLPKvNGweQXlqUPfpguvwXdNrZb5YZT/fvntjtk+v7CFIUwwwI\nXfbEeHZWq6DPm7Zh4rGv8bvPDojELOXc5Wx77MTAJy66uAfJAdgUS2TQ+AV0\nqoIN\r\n=ePuk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFWTTmCA/rm8ix+3jxoqd5wiXOVpDh/cM0hxt7vxCm4+AiEA5fm3F7JV3dJ9cyI4MoCIWfamgLWn/tFgJMsz0QU+OnM="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.94-beta.2_1641799278127_0.9137203406176782"},"_hasShrinkwrap":false},"1.2.94":{"name":"@midwayjs/command-core","version":"1.2.94","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"752a456c606a23b6392dbd27181552b405849512","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.94","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-YtX92FjCO5ZFdZirilmndsK60IreAneI6yumI/1bt3MYYy+R/aFNInvE3KwfPPGA2ogdl01H1xBycJEDX5MucQ==","shasum":"e1e5317f620fe26912727b18ef99f5a1ed4cf9f9","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.94.tgz","fileCount":69,"unpackedSize":211199,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh3TikCRA9TVsSAnZWagAA1ZMP/ig/7yCRtgVsUxfDYYzX\nKAZMPjJ5FT5jccA9X9YPKYd73SCvrx7awi7J6+o3+ynTQnhdxGJF5CFy6Jwa\n8dgscSMhK6mz64JXinWJITtkmcPQTVW5ji+q/evlt73/DtQuuwLF3K0qi1RM\nK1rNQMxFmjjA24VpIhKyqBiGfWm6dGMn6Z90i642c/BOscM87kBZ2rkzt8pP\nnjmTR5piLvRcIZDBnTq+gp1s/lYBDl8RBpby7uDN6S0Y2Dj7vvgsOkbQ+MDl\nIcJ3P1ITdo69/I9Ba2vi53cQCXujVoGMt9/ew+vwwO6KSgsvUuMqeNIYyjxE\nBtQ6xawH45bcA9ftCkATN0P0xUga1mij3RV41WwfITWdorM2la3Ujd7AArh1\nhtBudJBiHmEZ4YnJcvBrdn1tQpE1Plm6z3sI+VVWam16+i6gn/o2K7dJ/8Kg\nAndm11IHYncIFdkHuWsMy7t3cH90519xoy6sZZ5BwAD4b6ATvUDozjGbT+5u\n6dfwoAs/9kRkaD3d1sojf9TOBn1vUs1ITv28QUypBJDK3+xmoSoTinuWIvK1\nFBniLYzXl9i2y0NBQxMdB4dmQSLU3Mxr5MZGAA4igKgtXSEr53d1ZXvXI4UH\nCVBGQOX2Aq47/VyJM1Oc9Hr5fIiM26JHuFmbPW43X1Cbkb+0xLpz+j/jciCh\nVdMu\r\n=N83q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGgusXzjdq7tboLjCx2vTv0YXTsrpR9i4YPSk0F8xb4kAiAjf94n73EJ2/6lQQeu8Bjg07E7mf7UjvFz8VvZjR4Hfg=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.94_1641887908533_0.22585639290806747"},"_hasShrinkwrap":false},"1.2.95-beta.2":{"name":"@midwayjs/command-core","version":"1.2.95-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"21b9c0ba3270a8f7b12c6cf8d44ce38362f04c65","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.95-beta.2","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-2RltZ5g5NW/nDw4bJWXI+BTaTlMcYct70zH+hXrsiLAWuHZBGWSwZCQqeezBa98F2IzCInR/FmEYrsUxMQ+FuQ==","shasum":"d4a1f17b9a4cc48779d9d26c4db6d35282210d09","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.95-beta.2.tgz","fileCount":69,"unpackedSize":211278,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6NLICRA9TVsSAnZWagAA/QcP/ifro33vGJd1OFja38D9\n2+e/VfSbPLY8B4xobW12bKBYFsspQno2cDMm6gaWl+shdqprBzwZzgBvdV8a\n1dGAVNjAgoxmdhVAW+BB2hrBBq4ki+euyYERr2qD4diskZKWlnCs8safSd6S\ngYJBmCvW1G15ZyP6UWlAIZeKLYPk0gdkErlILZR0Fn+BWKnSlaG5+38QPH0y\n1gKqhxJy1U0QLT8UUEoGwNf//mGvbVNh2xcb0Xy6TZt1bAvSPB9I43G7pJ1q\nk+pSm2BR/UXVi0BXHK1PRhowkNxthnPy+12rav+yS6oRGU6bG85dUNT7ddMT\npU14wxGyV6XTJIxK81c4Df2h2bB5rPV7YO5xfnxwIYkgcEABLSseDqouJt0v\nx11vQALw6g1SFCqpkeRfABxENYINmZwGVvUCtELiNd6qO0MUdI4VzZmbhYBV\nuX9rLATs5ZZBbBpiEjF5l6REdzHCg10mSDOx9UH92DOojdcrvjphRvF8AZmr\ngEMYs3ZKl2KfrwPauKJHfAnpgl15pggXzN7ptcYoFSq1MvmYK0q9noUdkNkF\njxadH4lBEJBEfT1SgG4dfdt1hhdbL3Ja+wvJY/VfEWWGsqkj7Ja1BzOC22qj\nVV0cMMxKBWza/B316if0xrfr2xdlHjdKR5jOYOBmJStPq0fc0vlSlF60OPyd\nsL2a\r\n=h8yi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF7AaXVQCCh7e77PKi/Y1sAuK1yKiO8lynLJseOXdba9AiBJCXb+oMvzLGrYnJNDfSSlU9aoOOG+OkUKGw/8sWG3Uw=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.95-beta.2_1642648263830_0.24587642862699566"},"_hasShrinkwrap":false},"1.2.95-beta.3":{"name":"@midwayjs/command-core","version":"1.2.95-beta.3","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"c320364053cf50fc87c831b85d6d7551189ff997","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.95-beta.3","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-24ch39O/28nDrMmBzmjAIR+4UmgrotXS+bp4cU1YiFRYEQJmklxGexRFT3L9UfsQjP7P08WSSciIj2m9jzGV0Q==","shasum":"82b677996c23b2b5fec46878336b355351ac7329","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.95-beta.3.tgz","fileCount":74,"unpackedSize":218330,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6P/hCRA9TVsSAnZWagAA3jcP/3XQldsJZ6UN4oVFnyiH\nnlgAtHA9pIQyyBKBEotNz+eeA4CzT1k8fganWAK7p1yuh/2tg+6RN4XR9pl4\nKi2W6Yj6kS8wCagzX9L8wiJfJJNyGZIPf6b47R0rsJLvftYTS+Hw9qAReqha\ndMOnpKrvU7Kijk96xI4F5OEaAlqcMCUm9QuwQe3WPQKJMxv1/oh1FsMOfo15\ngcSdXJppoznKqA4lsBhAjrDgAPRizOdey3NeXc2EaXDkhKBopbuE5vt/Fta6\n3x5wFm5fVWiCzTHpvw1MgsESOnP0i9diVs0SuKOlZpyccxI32kf9RFs00Fb4\nDySIJ0NAUAiNSnjOMNuLt5TbHqU2c0JIBkZyrkObCkyOfX8abh+FxRHkcCoO\nE/nr0nE+Ma1vQw6llDym/fUR6S3Z49ozTogjmSMM09O3azOmiQoQ9W0JB4yt\n67HweVwvqFJN8s7LQkRD8OXtSQ9XrVd3+Qlu7S8qVBfMtezUNihJPpkfpecD\ndQcF3wYSY4epiE54jWVjeZEnkXU7UjQVpAe95H/XnnuA3GuGsyqKn28Jm6PL\n/Mj3tm3tMxsb8+yhfsTVSGUpOEC2ZkvqtVvIK3cnbh5LrL9V0+ZlClVfyGK5\n5vdQxhXCDLr9vrdlDalhqdogJx+iTKuwJLI21Kr/t+5FAfp6rXtZdB3oJAsZ\nuBMM\r\n=DzyG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDxXoJz4clsaG28ZR7ZFvWqLu287heIdt+UlzO6v1iw7AiBJeedofRooAERGrVzuv/nlwhP2f6bSeyb5SyzBkT3hOw=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.95-beta.3_1642659809618_0.6531419581404803"},"_hasShrinkwrap":false},"1.2.95-beta.4":{"name":"@midwayjs/command-core","version":"1.2.95-beta.4","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"61e1928171b9ad9375fc0448cba975c30af81b13","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.95-beta.4","_nodeVersion":"14.17.1","_npmVersion":"8.1.0","dist":{"integrity":"sha512-ng3i30lVhTC9bAiUpMYGWOMSyp6znKWwyNd7Ikmwxm9LS9HxjO1u8dclOdwbxNuViVjQJ6L9HXm1vPu6V8nR2Q==","shasum":"c6af10e8a47d838b737ba8a076abf5b42694d616","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.95-beta.4.tgz","fileCount":72,"unpackedSize":157088,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6QOnCRA9TVsSAnZWagAAqzEP/A7SB3Ea1LCXPsioV51T\n7Rf7IDsXh44FLTfMwesUf2Z+ZXGYFz/K5y6T1Yt96nwKhn8tau6iw4OtO+Px\n01vhHAmtK9GOemv1e2C6cGvR6dz2A9r8MN1MDuVKuMxAt/kM2G3/OJ/KDa22\n3afayBVrbt83JU+o5egOiZlQeBb3bt1wLCMIPf6Zedsp4Eikj+ThyKPBli9h\ntw1XM2HMttDMVWhHt9BNHf2LZ3xZaAKlaR7Bv8m7qlZsPzfLAjVaY4H9T5bO\nN/q36IrFtyLXeMdythawAFWzjr3OscgVY10kFZ0vGdAdLgY4s7OXmB65PUfB\npZCJQuJ2aAU+AZvBcZxegcMIDTZWh9w7iYS6QWEwdXTD35f64utE0NKJR8XN\n6Rrhnt+Z+MRrMMSXX6FOhR7+4H5jC4NAd1bEL0UgNklRcWK949Q6RsBO3dVU\nvE4CZMxk5BDZ2w0/P2d+qPtwkmqMBRwpvH9SmD6z/r0yIFX4FLJHFl1n192H\nDLqRRc4eoRslh7+9UOQ8eGmyAL+YFDHRNuOJidk2tBXYVNqz5ZIYIA1OkMHJ\n3CWrvFPPq7c4bxr7kILC1rL0WKbxvGGs8jiKadGRJnJu2jNp6yNes1LS8H0O\n9cmMQezF6NDVeQtxA8lCngSgR190cUX+gCo1UMFo7/dc+HUZVZW+kA/W4gEu\nb+7C\r\n=auYp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEceoqvvwhyNjz2IE4BY4oiVwbWLgZGmxC/O9Lh0t4UjAiBJ00LyJMlKwGWdVvwAg1b1sX5WMxeJYUf1JQKAqEPIOg=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.95-beta.4_1642660775790_0.16772779300633212"},"_hasShrinkwrap":false},"1.2.95-beta.5":{"name":"@midwayjs/command-core","version":"1.2.95-beta.5","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"61e1928171b9ad9375fc0448cba975c30af81b13","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.95-beta.5","_nodeVersion":"14.17.1","_npmVersion":"8.1.0","dist":{"integrity":"sha512-eR3D/OuLsEejDmWK669ZHo4uwCTHIK1+fwNDBx7rG41kmUi1D8kHiif8yLm8rVf81NzBaSNWWm/942jPg0RyfQ==","shasum":"4f005b86c9813927140c87cddaa19cc11e5c2318","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.95-beta.5.tgz","fileCount":72,"unpackedSize":157093,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6Qc6CRA9TVsSAnZWagAAqyQP/30w/Qm/0uUOPkEwNX6e\nypVJ8C3VlNK3Uv9mhCxn9tnsH3qJXcwPVvjaIch+oqJCbzhxWe/nwzn6lEg3\nvuvb1MlDGlGICmOI4hnnXJGGQXy1s+PAOg0I4OKkoNSNrbq0remNYpzRBSnn\n6RHTEBGLR5F4HZ1C2J42euZveEzdI834LXUgnoX2I+UX6pEyFB2W1Tud3rIZ\n/AaMoRRK9KPyfPW3ux0N4Xj4u372DUQf2YcX8Na0XwLF52W/dfSGt02NaH9Q\naFPacTuEHVieezd4ZbCyZeIRPK07TWTpjL97srh/FordOIX1ADuOj+epUoq8\nFzuv9poONype+/3gXRu4fgWJdlf0CcxkafdVvZquwp/+RAX0pg+yw5UAMMih\nDd3C20uNifNa+HN1foPH7hUgJlTbupxeVLZTCsoI27QfPYpfqLeu/FThOJE1\nxalgAEFw6qv3DptgvzoSxgkltFsICinXFfuYfDZzO6uxJ7xocu5IMiZA2mvc\nI7MBuuQAumSyyWJf/pl4+cbpcUEcs2Ro5yvDfUR6JTd44YpIfeOGNEhmRFO4\n5E0dN732TU0zBi8+ro+z8ATtjGOxv2XGOWZaAqvRX8/oiF7SrRiUb6dxXur4\nvemVutSNv5hG7waVOlA4o0+D5M9+1CE/ONTXSHR8GW/aP+Lvm6g7yNoXPH9C\ntDSX\r\n=YFw4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+rSXSCPwdDGx2CAHW9y81y7Xtz41wZgoQ59w9MvNEfgIgO6FYAiYPIoooZNUAJbqlFK06X3tvReB0MlgJYh7w5SE="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.95-beta.5_1642661689920_0.4696601383794712"},"_hasShrinkwrap":false},"1.2.95-beta.6":{"name":"@midwayjs/command-core","version":"1.2.95-beta.6","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"61e1928171b9ad9375fc0448cba975c30af81b13","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.95-beta.6","_nodeVersion":"14.17.1","_npmVersion":"8.1.0","dist":{"integrity":"sha512-oAu5sfqfsfVBrRDQVBpNquiyTnv6aanHTnQRawXbPmvLT6UoKspteIOFbn0eaUtqJSsO3hx01SETnkS3LE/vYA==","shasum":"210e31f1681947552af1b4591f16280d2120b4e3","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.95-beta.6.tgz","fileCount":72,"unpackedSize":157697,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6QpVCRA9TVsSAnZWagAA6AwP/2z5xKBx6SqiNakUjK1F\nBRY7cG4eMjhJ5ae7LpayxXYvBZ5EuzlKjwPlfxwsPh/4qEunVNouhxHF/NYi\ngP8wY2PDPeAfzqYHSB3qU3hpSA1Y10M/l8sgdhhCqhGTZZP3JSs77SHvlUNh\nbY1Ea7mv3yakwyOwy5/oU/wij7eqrsp+H5/vtheBbRDtbtYx/D47MjE+Gc6m\n4L3dgDAZolrdrlOcKWPtRDkb14LAAUUhPC7u8gHxV2NS+QGqrr57xc8s7vm7\nYWEIl5ycIRdjP1HakPQ/LV8rBYVjwEfSTKx/WpPHYrEOJxwZMr8S1QiJg/tp\nzaCG4ASfmIWfWHeOGGdwKpoUAq1WHGCN+Vl+QMYUWN2eS0YDTVG03qjVBy1f\nCVvLDmheGiS1aILk/ZxQ7J/vzsojeD5eUm+Qr1aSofoWnyVSyzqtG3oQPpAi\n8el9xJj1989NBBRW+2t2C4T2Sm8ZUlSMHN9B/OIjuqmuwtuitNfuMLPz91y9\nueNF/b1yVHbjLyvVurMtYGeLsCHrUbA3R7RHDSHSWAf8u1zfJsvRkliBoimM\nmjw6p060avK1Xa/m6vyVr6e7bqaqoJvD0DgdgzTNeMOfdm8NdPIvzYACrngB\nfnFzAkqxsO1zjb2qSNZ1PerX/ZiAxQcUMAQQO7SY8rv8gRcv05S+Lx64fzj1\n72Kb\r\n=5W4M\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICPt/Maclq6IxA/Vey1W0G1zTLhybNGUtBbBidS5WbLTAiEAsxYok4vPsZduOhqF3yXHgh1lFxUIcVfB4FKALQiiGaA="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.95-beta.6_1642662484869_0.17093105225414607"},"_hasShrinkwrap":false},"1.2.95-beta.7":{"name":"@midwayjs/command-core","version":"1.2.95-beta.7","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"61e1928171b9ad9375fc0448cba975c30af81b13","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.95-beta.7","_nodeVersion":"14.17.1","_npmVersion":"8.1.0","dist":{"integrity":"sha512-2WcTqYPutE3GnJKbdVOBbzCp2jwl7y5PcOhW2yiyPnSIQa4CJqiYxG78r+KuHpfSo+H5uHzu0dIZnoPSYUAizA==","shasum":"f5206cc6e0420f77b60f3c6fe03aaa4a3f8dae50","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.95-beta.7.tgz","fileCount":72,"unpackedSize":156685,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6RADCRA9TVsSAnZWagAAlsoP/1zPlbsRkOTo8DpZLjRn\nz6ed+ywAeyH2RGPzwPNtfep8QJwG+LjX8m05BbMBwH+hL6Gppg5HmYTDGlb9\n0z4PGtAEAY2Cs6U0BVqu6WJrxXmR+BWaaRABdE5zHQ26PaucHxme9+Ym4jUc\n4E4vFGqq+54vg+VKUC5CekzP5ZbvQS+UKGPHf1lg5/YXnKCn08GI5tR6hlxV\nCbDQVTl/gQ6CLHIp+0ATqxNXQnkJs/pnkxLFU0EzGEMCqyqQMpH4xiNStFGg\nikED7L4+BCNKlwzXZF8b3rvgNRxdA1AhasI3XlpD9PeB3x6kJH8tllZqy5E7\nx8AwAtlS/yL4ngDY4a+EEFyEAa1633kXyokcwNhVj+ber5EBpsjPNuiHY5Qs\nBgTMh6RYazhEWEDWizuWKeo7lctKWlCIe8Gn7QmcbB7YC0UPKhAAcUesKmCt\n4F2GbDjpCbKQaQmJ5+hxz/UAmI1tRg6SD1EI/hBn+jIoo10DtJB4wbJSQC+a\nQtajXFdgDv9gM8NI9DQu+dhdq4MfRCpsjX25imlPdiHAI2c6rK6xsFXWqTs0\nTChSgLEHxZQ+DSkR53+JIZAlVe2KCoFhzJApM67qkE8y1tbbFi7lLaQE3CW+\nA027bsu79C4MSEq2LNe8+roo3+PKzWFyRfGRW06Zr0A7HEXDKVt+UO66+9UM\nKqGK\r\n=7DVU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDlgNPPr7Mi0WuKuvANy05kFlk7RXXOStUgdXmWxHu+LwIgVw4SnE3B7Sc4IK3sT1hufgpXg9i2KITObODpPfQWHCE="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.95-beta.7_1642663939183_0.8692060072330356"},"_hasShrinkwrap":false},"1.2.95-beta.8":{"name":"@midwayjs/command-core","version":"1.2.95-beta.8","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"61e1928171b9ad9375fc0448cba975c30af81b13","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.95-beta.8","_nodeVersion":"14.17.1","_npmVersion":"8.1.0","dist":{"integrity":"sha512-z74dBAQmorghzjbSqsxc989go6Kt0Ri2dyFew8quC5ItrHFua5AHcrXgYKm0HSjuE5n++wW+3reQf6KAZlttWg==","shasum":"25429788ac6ffc2abd9c11ea95b52fe4c507ab9c","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.95-beta.8.tgz","fileCount":72,"unpackedSize":157006,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6RINCRA9TVsSAnZWagAA6dEQAJhST0DKXzUaN4+P6UQQ\nWZ50DxzuByA/niewvy57bDblgS+t9KvfMu15KBfZfsyulv34Gv3TZEjcopem\nLM7hdm9U6zsT+h/RUSSV31tSjon/D/ujeYp7Rgu2npPRdOwv+ZEcyn/ZeCr6\nVnmZiJOqo6/f2fZEXIEImCPFp2hpkxbboyeXve7jTLvLdLOQ63SStpXCY4CN\nr4MoC5LdLZd1l1U2oqRPDs1PpCKi7PJt27FL0MuRS0QryJQsRGx1wAY+CImi\nuJKJXcMrpMal6WchjDvXrPfTWYinVS3NOWxTHMwEAWhFFGzrYZ5u+zFe67E1\n/yKNG54h/kHZS5/g8RrfyhKEGPp8YJTkLCvTv4FNIvOyCFviFKtQ0coBlXIy\nlip/sGzBF6avhNQhcJ3e/Gytiwcl4y3n1Tkrt4fjF2E08LWtZ3EKt97oh8Hd\nLl6Ii67Bb0VEW+UQnYFDEqfXt9pUqp7QN1Cwygg4QafF2E6nCTLOwPYvA5M6\nz0qREIyLfUPN2Nni3IBRFdaNJEfcoeeZJqhPRt6MeRilcb07KFQ0IzM8ULGm\n2tH2+B/exUXksTXlliaTD4D9YFEG0dF/jbUoD8FTyJE/Pwd07kZas44cke0Y\nSnZmV4zuuQgN05YPKvprSgHses3IFmSd9JCMml/nq/9VsM5HyIFPMmIMhuLC\n24sS\r\n=gLUS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQChE4puKckgdPRWG6om6BKNQRgbhm8nsOWkBB7k7PdUKQIhAJOpDH9UvEVcGyzUWXe7WMT+CafmakW4vOElPlxRkrN6"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.95-beta.8_1642664461713_0.9319974320307813"},"_hasShrinkwrap":false},"1.2.95-beta.9":{"name":"@midwayjs/command-core","version":"1.2.95-beta.9","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"29294060abad75514d0019b374be2cee5ee34f68","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.95-beta.9","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-a4rpRRsAufG1xBugecF6jLd274b1uBwpZPc4uzGlDCQv12HFcVGxO55XkL53tILDc/rVK6Qj7qY+LndcVndWpA==","shasum":"04f07511994f2640dd633a287d1688eefe875e99","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.95-beta.9.tgz","fileCount":74,"unpackedSize":218834,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6SS6CRA9TVsSAnZWagAALzkP/RmGtKFE39EUoxr8UHGa\n1KDoIcHw6Cd5Wq9DI5kmFwTkuMzCQfGeLUIS4tYfqtXHl8N+vQbUkwlAfNI9\nO5piXg2fgNw5dp0gMt9siZB2KTeZN8zilKiBz/YPHtBuBmLq9HI/A0GxCAAN\nZV3qlgSSaqr1+nSoikEc68tp+me8uWQaidonn1GyoaSNZXSJjk4r9p4pJJDP\nSSZQch24Kbg/UePagQTWhaDXHh6lw5G7/cwTTFkBX1LqJmijnLFxz+uvgf60\n5h9+ow+vSWietY1iJvN6spSb1tOAzC8vrnyCthwO4JJWviweZXZddXvmW7WN\nIHtzQNI4QUksu2Rx9yVGSEHDxhmHGRv5CqvYqI3X56JslqCYZmFpARuNV6w+\njMj6fkFZ2eGTCDyOKLNp7dAzwZW0zppD7CKML2PIu3UvYWrnS3cwhbkLIqJG\nMMe55Unf9Ps68EbZdxYQ7Kkbqe/OzeJEER0er6l+yHsVJ4k/aOWpUZ4KBCp7\nRA0ispexEbENBUbfb4jLxgY7ElGMy3UTKTrS8x/29HG/E/u9zc4APPVAgqh3\nW3rmyKAzqwSGjaUMK13RVyPs7RdTN/Bt+/mi9o7lT7K+UfDOgWYTKpTCA4HV\nT3U/SHP5WoYg8GkoaEJulY+WnpzmH48K2vpwB1ldXUSRgWy2gwkU9cNyGCpl\nimjl\r\n=rncg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDN/OWVrkRU98EgnHsFKS0b5h+0UllQRho3d0oGNfk/AAiEAh81/V29iGaFoeHdtJa2UH6uPCRw/b3uwuDhe/EIY874="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.95-beta.9_1642669242679_0.8344184594321549"},"_hasShrinkwrap":false},"1.2.95-beta.10":{"name":"@midwayjs/command-core","version":"1.2.95-beta.10","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"a0a0e9fbe14b91de539590cd4e64d0ccaa0c66d6","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.95-beta.10","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-suCu/8asrJsE6P5vpIEcvS4X22+htJfccgJryeNdx3jxSzSDZKrTLns6j3giMfzpbYUoJsa4XaZU8ncGHS0CvQ==","shasum":"84c0604bb04396e62b9ebd6599e13c4243653cf8","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.95-beta.10.tgz","fileCount":74,"unpackedSize":218835,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6S9eCRA9TVsSAnZWagAA6eAP/i8lTdoWzJis02O9429E\n0Rcidiw4p0NGGRE8UtsXkw/A0D5kPpnYY448T9EbeWWDxD+UzEJa2GJzfYt7\nfdwUuA0GJIY/0febqQZGznuo6LQUIHZPn2XjI6uvAAG9V/MeqILGcALmbe28\ng3H83lg9ObsbFVLY3W34zBGQfscxxFbrmnxpS+xZjagcRBbhxRmeR0X112AC\nLMEm7ERLqQzTMTruyhEremFXjpuPyu3VOE+B5TzoIkySHmYV9/M0mAE9iAAH\nAwqAw5BVplLh8wS//1mkXSYYWj1U5DFu80GRZ9qi2kJBwx1EqIkkN66gbBlN\nOM/6fwKfGzsjyeaizmoprdpIGFwvx1ua5CboKvzZYwsrunnyBRPaMEu+zhIW\nDJlOiudmW1Z3i0Ovk0u1kALytt7pEu32qO0CBW2EwZSNubx2SSQWAg4pedYv\n0V5v0eaP+lqIKQ4XaMHeFO49EbUOnMjpkPZBXQlX3dynM0wUM6ThXnG1ymQq\nXew6Ket2eo2x3QtC4N/D9kFpSoVYY/tgkZDd0OKe00HNDz5rupYf1pXPOU+N\nsxqEibEUkCnW22X8vr07gGjsHgoVKFukAXBcguYvg15DfvduDPTTztl8vDzA\nYfzKMcaOpmRFkxNfHPI2B0RG7kyvy8oL36V+ROOOplPOvJ4hNRQT0iaxmvp+\nZ5+c\r\n=HU2S\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG8LPXbc55tSBhKgmN4ZOSnVo/v3XOb+GBcOk/8/8AoDAiEAxrdruIvOkTiMCssPOrd+e+TaEHUqAzmPwoSmYavZ2io="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.95-beta.10_1642671966313_0.49257030041356775"},"_hasShrinkwrap":false},"1.2.95-beta.11":{"name":"@midwayjs/command-core","version":"1.2.95-beta.11","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"9d1a992b239fd60fe50c78eb0fc5a8cc2cd1f2c9","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.95-beta.11","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-n0NanhYbWpBqATzJVKIp8hKl1x+NwMlj0Ks3S0Cb/HY8xo4Nwj+nILVtMz4hMFmfvBQDjUlO3/PvhoDeUyPZ6A==","shasum":"65a74c9403aca185c963ae716fbc4dfc04060f58","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.95-beta.11.tgz","fileCount":74,"unpackedSize":220975,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6UjFCRA9TVsSAnZWagAAZHwP/1JmW3X1ewi/F4d0ysf/\nD81B2D+rRxNRWzkcHSzvYSlGtKmIkPHbUFi+PhmEfxOyC0rK1W5Uaf22N8Vq\n9Y5ZA2mR7iyvOadPWcYKuzqFz7JfiNXF1ggApeq3AR9GbMDAyRjGnCb3jjwb\nGcP5s27SZlqp+8Pdvd6DRbt7yNJgnwvA6ZsClGgVdRWllrYGj71edy+mtElQ\njITOnIazB07gRfajVUE+Y17oQoZcrN1TgMoAFJJSLzoZWLG7Sk0b5C+1jJd8\n1dNqhZyRQqN4yR9NwvacdNICefX9/yDCDxanekgZbej+6pQnoeTZ/mWy76At\nRGN5quOtV1aYIlGKQJNslVHlGT8OoIMYpJ7YOeYncx9kXAf41+/ovPVICO2c\nGKskN2dQPJTwcqg0rTYUfRkpE5IzjFBvryOyJiK5LWfpfMUtGVR16stqq70b\nxsOH5TzI6ABzvxKMeXQqVmbh4uYRRx4nKwLyicJDiOiw9rRZ63cmu2cNIXPe\nE9qECyL54yfhHe6cUGvBzOBuJYnvfJRR5dUhYcUISsKoQyTaV6vhaRKBgyzr\nf1dVz9QZCLJaS5HEPqWlMG7X733hXjzKGkWlAroUaKBYMqnOFg86kNEzXPNa\n/Lic+4A8Mz+uIPPDg7FTwYA7v/gFmB1b1/bZckFiUCVZU/OGQx3+qzMEaVv0\nToUi\r\n=/4x+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTf+hK+0Xc0EjN1IeaczM0Y833n8jiDkJQD9weU9WrsgIhALp44jToREV7rOy4PINGI6A0Nig1edvCe4jzsfdTkN7J"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.95-beta.11_1642678468825_0.16006987007635876"},"_hasShrinkwrap":false},"1.2.95-beta.12":{"name":"@midwayjs/command-core","version":"1.2.95-beta.12","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"c77f56cd86e7ba74bdda72e4c154ea31cdec3182","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.95-beta.12","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-eECjXbdLzbYezbvUwSpMFpDzBnY/huQdIrsgJVOmbUv6ncqCnVIxurmVW86tooylM1GIFwa2Jwz7Y3FHan3jnA==","shasum":"c3f0e8ef8e66ec8106f38ef0533b3c35bd6ff1dd","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.95-beta.12.tgz","fileCount":74,"unpackedSize":221002,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6U8FCRA9TVsSAnZWagAAFikP+QGOCd6rMNdugbKbMU7C\nF9Fm760HzdEvt22UrerzeNgIdtIwxEJKr2Pe7ZLRvBp98mBUrvUH0M1L5NBl\nK9OejCcTO2svscK0cmT/ScJQ0uPVqtX1VjlqTaBgg5ZcSTnEvYAPHm0hJ7iI\nNQow+ZRglB0/v5BgZzjvPmYytQnIHE4dYKcNAXimrDbWFj+1Qlr+gPejH1DC\n/DqR3dxlFUmZjlj64lzcAfIEXr2Yisgu1CsECP4aClx9dtJWilMOawBIb5z0\nPy3tLAI3Qzo9981Akl6VR+m2BmfpOG/4kAEJGmxMiuiAOTKv925kswcMnSWC\ndGsVYg6BOvK2TY4B7yt+TRCDX3pb/hF41Rd1LBShayKejGbV0+Z4fFVUOlWS\n2Y3/GAxpE/33w7HbcJBmOl8RkuOyXcPZYBT+reBON8GqQFyv8+kpWvpylTS1\nSrijJ0z7vmQa3Pjj6fOau6ENqmivLZ8Iirw0BvrCT3BxsawbJsxS92QD2ACP\ndiYYKFHksHtxQc1ro/T/MAcz5E5Ub6/NkkIq8uc2dOSZLk9tq4tao+YHVZsH\nV1b9ulvM4D/H58s/olqXcs/gXTo6KEJgzx1wFobIqcEdxl+6AFCw9jZ//oIT\nfMLdJ9M/OB3FrUP569DmwK8D0ZF89+hQw0cil/9pgan19G8P1DbrBhuryfoJ\nFbhv\r\n=kXWN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA4cBqbxQZUvO+qdnqMIWlzdNKlDYjmZNVklf+cns9UPAiEA7KsZxCyyodci+MJ8L9b1M4jaeh463ExwBbRtDUji4jU="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.95-beta.12_1642680069150_0.5817030551924955"},"_hasShrinkwrap":false},"1.2.95-beta.13":{"name":"@midwayjs/command-core","version":"1.2.95-beta.13","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"33da033e68358b03f1a77d25318078d78a37e99e","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.95-beta.13","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-XBUe9yQE5mWsqcSM/6rBU1aU3BeJtGTGLbiz7LJscpYSC3JyIqvnQmpxTSploR+TZG5zimrpIl4w4WRvDKmUQA==","shasum":"0983b04d73f824bbd603a6c2d1bde5549c194fb9","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.95-beta.13.tgz","fileCount":74,"unpackedSize":221002,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6Xr6CRA9TVsSAnZWagAAUC4P/Awbh9JqudUPrvDdZ93Q\njyvXu+gphzLEqzHi0LSOg+USqHH+4G8UgqIMqS2VuUTzLZi6O+X8onJHZxNk\nDFBRuQl0vfdeKM8JHFUSTI10m+AN8Re4tQJo1d0+a9kL9YUnqFcQTEAgMwDo\nwgRlfysmnkpAzPoHQgQou9X4A9GbzCusinkp3FVdsRQMFdDsG6EkhutRiAjf\nvuPCKSzhZae/OvL+KJnaSTnR4iBh4Y7Bz998whpK+PEsPv2k6TYALGNEosKO\njakn0VE08uRprkU8LWbR00iveO5CsosvSpy/Q93g9b3sjuymRe+HJcli21EA\nasdz/cwepJOwPjnqawTdetPkKU4NafPWeq9B8ySxY2ludxno0DAfHDfO3gXW\nnvlQDLFYaEc4Cf0S8D4IlxdAOePT8XSSPLqk1MqDnN9Y5I/oD/RJl0Zbcy6J\nny4wf9K95sa9KF3NfmVDeQn/tUxDsqCEHFbtu2vw9jsC6DX8K3SIp18qRKMQ\nBFfEEZ6z0hoHZoRKSZVp/5rr7zNAgiy0Zj1gzy1YIA/c3CmFhVqLP3ic1tJK\nd6grreT683tYIlrBij5rQPfEKH3RgnV5ChCnBKLmx4crCi1ABQ8U/jKA9iZu\n0bI9PxrErgD71iprO/0JuPP6m8Hpa9zb9DprjZf7mX/Noa0Xn0mSw1jpxk5u\nPBvU\r\n=U+dZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDZs7E0MfM9dljHXpbKvSKhCWVGMWVU9saiP4PuQgUELAiAHspPuJhKklXtIdwFC8C4mB3Qt8c66ECvA78MCRtXy7w=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.95-beta.13_1642691322322_0.24559039779376923"},"_hasShrinkwrap":false},"1.2.95":{"name":"@midwayjs/command-core","version":"1.2.95","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"83612356c419e534bb43e3871e75fdac45b31a46","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.95","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-3PJz1bYytxZ8fy7A+6RDLJ3sP5jBjEKfSpEaiYUuKe8So+GK2Ud1QgSe8oM7x22zq78oDvDCEa9PElEXWKYhGw==","shasum":"f38fb55ce947a53d232eaa3e9edde8b49cdb83d1","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.95.tgz","fileCount":74,"unpackedSize":221269,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6YAmCRA9TVsSAnZWagAAKkIQAJYHg6c3foIWx1FwcZXa\nLVE1IGwmaBAjCj1LkMdBmeWXzvIUYxPH9uAVeoyCEQ4lDPSsGioXe0mD/sTf\nJGxJ+tVIcxJ+TP3trRdDENMqhRjOTV+bti3hMg9Wv9E6qoPNhxJ1nzpbBjKC\nGx9+na/C1AfOnZetirV9KJjURXWOIoDiiIzUydxzptq73P+ycIpi/yJGNA83\nJ4GVWmQxzmhm/sWU9U4eCzcQ4Msefjob0yAZDZi+uk69TmXMn4/Kv0t84yVl\ndWnG/mVBPK3tA34w4kNb1Kc8seMutOmO/nWZK6KXi2vDqQiz8wuaMMABFSjf\ncP7sJo4Z+XcFeAGbt4HLiTbPVFmcZ2qjyAgxgnBk8uwkmZyoYefXzzHBMewT\nFOFvX7LETu7t2WjW6EVVyPXh7NhfuNk1cVaRjHuOLp2+vNit8uiZLC9kr2IX\nG8+so0NyLY5prin6iuPFE/7X75LLOBDCg4EydVaDLR2tqgiAQl6Xllupre9H\nhSveLXQpOvmwDblG7FMGBWDycOhOIxuCy3WJi2FQAG2jSAidfDnUHvYZL70q\nSQi43sZn6hNAslpgkboqaNGtJZH9JsEmZi3tQbfBm+MLyNlTwGH8xAIiL09a\n99yjqPYI+w16NhvOG0iPkvw5NFutnNnt8xq1+q/ePAduGQKzXSR+KBd+8YYq\n6n8x\r\n=L9Aw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCKy8aaoqzzU2MjG7GIJ0W41sYkMp4MhsRWYC0i6FOMYQIgaHUmZJcSlPysv26PntTIj+q9TcvFnUPt+z0tu/uRtlA="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.95_1642692646517_0.82520614486121"},"_hasShrinkwrap":false},"1.2.96-beta.1":{"name":"@midwayjs/command-core","version":"1.2.96-beta.1","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"61e1928171b9ad9375fc0448cba975c30af81b13","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.96-beta.1","_nodeVersion":"14.17.1","_npmVersion":"8.1.0","dist":{"integrity":"sha512-DM3ZUPFKYkZJMYVqjdErbqhhU/oa3TrYUc7XRnjE1QtDHyOalJneVIymAtNBa7X0T5NSgu5+cHF6pZZFDhF2RQ==","shasum":"fc7d10e9c034f1d0087626d99dbdce5863844c3c","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.96-beta.1.tgz","fileCount":72,"unpackedSize":159664,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6jEyCRA9TVsSAnZWagAAdiwP/0aWu6m+HtRWlHLn2gBf\nqn4XAN57ss5CtfZICtkX8XTtz+MwcXHvL5D+ZqXyQ/oY6WDrVv6IULwZchgd\n6Hpbhmgoryqu+i5v8LqkksxhK6M6vlUNNP/4r0MJIvfpttHkVzlaJBHVVjk+\nJMKSibDka/2vtzjLIU2wzK/q5wKimiVlv1IO8FioABUwHGfQtGzujgJavR/z\npc/GfNhG3TDYcfSQrK8wgPXe+wCaWy/g0Dho539b85k4QHIWCLrScmFMOg5C\nYl0XZkZ6GoUXS0UGqktDpmRx9+kBpd8szfGpMgCXrc1g+7N4+549xCBSce7/\n9pQipV4noilD2XudHrFVIDB1/5kMmUr/byzzCvyGEgxVadC/eN/I5yfE4USF\nG/C2yKprosV0DSVag1pBqJOIUsoLufCSVlM26m4CLdqWSU1etcrJBO0Zfob9\n2B2/XcgqRBTrbIXedLEUMKY1NjreJhytmbSvm4VayojwufFfxIJXPhuJdu5q\nFgCXmkQDiImJePboPgG30jFUkS5AHYtozBv9cT36ovD24HitiAjyntzNdich\nWWYixlGAcQBWGTz0qlVgVuhL/lZByehY537FGEiF4oa2DUWtbN/qgPAJQUlv\nqkYt6I9QU1JstkhmBoJzH5Cby4wdczbGGtO5e3Lh7juYzOJhkb44WmZR3fKM\noHWQ\r\n=m1D1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4XPAtKtWg8Za5lwKLWO8iXpEZtYbiBvlLuHM+843LqQIgSS95KEnruygaIvDHWWS8MQZz2nF/hy8xVgyrIhgHoEE="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.96-beta.1_1642737970745_0.18061843900525787"},"_hasShrinkwrap":false},"1.2.96-beta.2":{"name":"@midwayjs/command-core","version":"1.2.96-beta.2","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"9b16dd91decf04872c61a5a58fe1b5722d0a98d8","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.96-beta.2","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-GaoQ53ClBb+ekAkhR3vTbqUj4F7jzgUF/zU87whjCsdLVcpTnPQoS0ahtUX8EcpWgor/wYrG1tfgPY+Yt2Gf3g==","shasum":"13fcde4b09945df074429e3fbd8ffd1983687c72","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.96-beta.2.tgz","fileCount":74,"unpackedSize":221774,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6mQhCRA9TVsSAnZWagAAyCkQAICjDGdRpF/vylq8f6Jr\nlar46UYRwQgB+JEvDhUu03TTHEpTGIgIkTcWJlTgF0OF7L2dFuFUrAr1ysMc\nYc3rH/KWNI7p8JFdFCiVS30TpYcCspHvhIEJAT+41VMHYyTK1jM302TVX5D5\nsMdI/hg0RVaSH127htwtQ6AmWKcy9AsvHq78s/atSZWAI+WaE5rGOG0kMG+6\nwnJk1POpTnGEK8HNoH3R+GcauMNRY/Ls8R+QW4ocHltXIllkF8opuBPUXv00\nOujNn38c0ZSE7/md5iBEu7bHnCQoRTeNAHdyeV4WxLMRI54iNKZbWqZ+DhHO\nhWw5Fs8tSLejO2diuSfeENFaVTLmVgR/xkRIohl5PpH9UzSJsrlXoKs2W3v/\nhw9JVTf8Z6pFdgXFj46lD4hVZ7r+u2wfmpxnGOrm/zIewskGhPZ+2leytCY2\nNMSXpdF2xRbGdJhvaF7Z0suh6z6xXSX/pnO18IGwUqtpeXaD5HgVEvBJTfw2\nDnJzdG/1og8Ww26Gwm7Oa7yTBQ0MimH49UBiftfSke1bPj2OIibdsRFOTsHn\n0dyJUXzEzFN3+RM21qqGatQ+yO5qu1jq/AcYCATYm9TPwZIEccLonuo+l8QB\n//VlNci3d70ENuUbJLx1+6FU5RlbVtfNvugKnuiRi/6n7xLTiWJoek9S3bZA\naXvR\r\n=SCmP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDxlVBHcir7bD8gCKI3ixkM8imcZGT7jP3fNPykKLM0GQIhAOcYo0X3/qRy0KYHEBj4N1dGsM7hY2bKNnFuZZvVYRIE"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.96-beta.2_1642751009274_0.22368837239557138"},"_hasShrinkwrap":false},"1.2.96":{"name":"@midwayjs/command-core","version":"1.2.96","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"0f0e84916378715f979319f98d8e23dfc771f1b9","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.96","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-2l9pdzcO6JjUVoPZ0fMqX20lpGUubglo9Y2kqB4v/iUQ4Qsmnutxv+3uAFML7O/YaahORqNSrGvAN480cWVNyA==","shasum":"a1053ab244a023c11a2e50ae3b99b2f53fc65058","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.96.tgz","fileCount":74,"unpackedSize":223161,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6mf/CRA9TVsSAnZWagAAkj4P/2WIKA++B7b8xDRs2ZlJ\nhzxo3XciJYSPeN8sLL71VyRA/MVpPqIIjSGtukw0LT3d5thWTYtm7I1e1w2j\nMLZgW+Jr6rWhQGESTHttvSTZirAWgDXJZYaOsPo/Ct4zMlunLjjKZscIA8h9\nt27FdCa9pNXCPyIp4o6dfckppdQTF1iHNpwv51VAohgTWFS1h6KiYNR/XiH4\nO1AxO6OlysJeAvVEyEmErZW2nETaD08SdeeGMlgHKrAPqzn3g5KufDZbTkLU\noX45VXwMwbGpmLm9O7ItL4848qVSGySE5vY7TU3pPsUWBVoEpAJamkFsOrgU\n4LTPMiQ5brFORg8i0UbtaEst0eRJCXvACYP2VWEich+2zLMw5Zw1MKznG//6\nNQhwzXg6R2KEsFZYTI3SCU/IK9j/FTcaWCF0GIUpnd07eEyUiAd4lqDEszyj\nVgun4UYohHrdCajSw0hvCniS3lB0vbjIUWBC0qtvn/IIUDFSuJHjBg4YK2oC\nN70TM5JcN05M0tC5DGmTqDj8llP7/Ns8O6L77hFvruhAAVT/K3dbeYQgUpDR\nfdZifFQXSDIqqs++LbIcXRzKxuzJexJGVUDIl5+whAwDqz2oM0ZKnW54XR1V\nU2xZMBO0m99cn2nr5tZZa1VjTWztW3prk1BkaVrtNc7HuCw6bl0FYsWiOVio\nHoIo\r\n=dMyp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDcISIeiSIHQ17nzuheRT+GzMbq89DfQ+Kam/n4XFSKwQIhANzJoIi9ma4rlUNQhTwuUdA5xaADRXuUCngj0qbC18Du"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.96_1642751999027_0.9258316658463821"},"_hasShrinkwrap":false},"1.2.96-beta.3":{"name":"@midwayjs/command-core","version":"1.2.96-beta.3","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"c573c418b38846be8f64138df6390c6fff56d3df","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.96-beta.3","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-VujMTVDyP9Zbc19VXCtTD5xyXl1oIVNzvmqHxJkzN8UWVsEnK8mpNfU0teJuPvS/BTpl3q/BBKBLaQ/vSPKWMA==","shasum":"f68706d4342e1227daac7d7268e64992151cbbeb","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.96-beta.3.tgz","fileCount":74,"unpackedSize":223634,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh7k6JCRA9TVsSAnZWagAAc9AP/i3W1qHqUTscg106AdMk\nmQC0JfQwvRM/fUTWKM+y3/bsOim09Sh5uBroX95SdK2iHBkJ5PphPEfvUK1i\nTzmG7x4RGluOymkCOv71Uc2I1q1LNu24qlqignVcPv/fqShLi5g/trPJXg6X\nk0ggcQ2uR5jpPw91i/XApKLRucAX8BA2NQZNxAGNGp01WKVJA+Dj8/3hYog2\n8FyQPwz3OxumLCD7ORFAP875ccA0yKKyHRNezzZSFxH7WofC0+nTv+E11RCF\n7ZhUqRdBcHgDJWz6EuJnQJ1fQYaR0xi8KmCHuSqSQVG9LM5ivML8OQkizNpt\nO2au4McnPjaLKvaDuP2vxGPighBZw81bPL77KeYp7as2NRn4vUBGSz22EaQt\n6udPVLeoEK+a0UvbOCTBk3z7rc3vZYa4hnbWYKmW4ehJh8hjWsbWaZIx+65R\nCDh4gJ0t9uiITZSooV7kPQBR6y+BKAbhI9g4uIxkPGzcK4w9RCUiqMXRDHET\nhYTIZgJAaksZb5cQFpry0XDMJra5GB1sJ1vJ9x3lhjJeABTZP98l/QHl88Sa\nyFcXHKoQg7P8XiAB3gb4qItEqNRrmv8WBG/W7VHP+8wAeHOVJXXHQaC/mMbT\nO/4XVC+XyZ2448lA+XSkTeUCz30pH8hhqofmeuTBzp6oYzakYZ4muMNCm0mT\n8x77\r\n=o1Dx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDkyWB7SwpagzRffiASr4lpohLHM/Iw4MMPe8UsXDfFdAIgOw4JLqVPyJAyzh2TmD5xCtFd4bPOqGqIzzXdTxxjrak="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.96-beta.3_1643007625163_0.5040967652661932"},"_hasShrinkwrap":false},"1.2.96-beta.4":{"name":"@midwayjs/command-core","version":"1.2.96-beta.4","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"61e1928171b9ad9375fc0448cba975c30af81b13","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.96-beta.4","_nodeVersion":"14.17.1","_npmVersion":"8.1.0","dist":{"integrity":"sha512-uBibDtgkWEmdMypYr2gmOaq9aLaZ8QIZPCJ/8VQjt/dxxlVX+/hWMRjt2enqyTvbkblgdCJibUPM9xWU/ZPtuQ==","shasum":"388ea20f7974d7e6f4f0e67812837966af72a74e","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.96-beta.4.tgz","fileCount":72,"unpackedSize":161599,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh7mL3CRA9TVsSAnZWagAA03cP/i+DBpYCRiSsUt0QUP2R\nyv598QELJ2lMs3udRd7KX++jaqSt2Q7+Jfy4Lbg9zCIrdOTLPsZJVR89ANxK\nJdf15IRM6DeWwgfOFvoJwYlymVm/X82EL1V00gtXYYsl9hCc869USrqi/BkC\n+jm8i0PYQ8A3AE2gpEU2N0JD6piR4hRY+SEFG+E6b3oPVdF9k2NtfljZDLu4\nHAM8zuHETluRr2CIrHJCUh0axCLCxJ7znezZ6qxlY2QQdOOXV4uoF2HkXCcs\nOWjsNR7icYjI1p9DztaWAXga7qCFqLFMugCZAnq9FD5MbuZt8lPJlZe4YttN\nUL27I5zN3TYU0GvuCFE9cZZ/FTLO//bqUCXAqlck3IAH1pf+pQD54kMwaixE\nHIE4PPZB1H7sxp9LcjbRTgfZbIvuPVzqOQs4kAwn6I9VSaeFFbjV02kq5OsP\ntPGdHLAEl3dhEFFpuBHWYNB+ZFmtqs0dd0XFDB5YdvlpiW4pPcQaiO8UCsef\nIRsqICtL9WCh4mflzg1LvzJ18qXWYG42H9h3L/FbNZ+cyUPD+DvMqA8zDKuL\nBfsZ4TnjnfkP6xAOQytub31xdjtikm2yJZHi9cYag1yY7Bgdheiwy775exm2\ntxKkay6LgIWcPR1DmLackSb1smLWcPVXbALDMdWdjPuorsHHdJNfBR9opVTE\nqW3I\r\n=TKuQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCEd36djiFAP6NFmJeonavHDS8GzlcBv5c1mNSRUPNbJwIgKmKzGW13A2K0mwtUkyOpM+bhR/1ELqegba7r7n+L4MY="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.96-beta.4_1643012855257_0.7344894141079752"},"_hasShrinkwrap":false},"1.2.96-beta.5":{"name":"@midwayjs/command-core","version":"1.2.96-beta.5","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"b15a2939924ff6a448a0685e6e1d981d4fd68885","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.96-beta.5","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-4XGdjzdwxeajflKHgXE3B/4gpBKMW2KdcG9UKOL2T+RvWiAHqUvobeDp+BpkdoQrtvyQhOvCU0I9YW0h4JYgAw==","shasum":"dd3d5130bb7f57bc03696852f96d3bdb0d60fda1","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.96-beta.5.tgz","fileCount":74,"unpackedSize":223701,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh7mgnCRA9TVsSAnZWagAACVAP/jj7W8YmF8KrEtCBGrF4\nGeS3ar6A8VYQh5KI9fLozBTBzPmAsTDA1OMeH1WYmc8jqmShdpG9GvK3k/pd\n1i7iGnxGfH8+pg2pHrxTkIFElUUzVSKdltoKxdhp2iN6ublE+jSu2mDTtoW3\nf3AqpgoqMDwCoX5nqnPGzBZQX/BaGvssIyH/n42cDTjreNOXXay+GkipKdhJ\nX+8wCPYrnyOMY9YGokqezZZMpM4Ek6hSpNbVmApaU6viDpF2UpdMLI2QR79p\n59Q7nhrPretSLjWun/t2d5EjrpVLtf1MpBYHPov6fmeBuWCrMBBKz864DTx0\nv3KA3XwCKSc/y7+Hn3YCGYwQZ7ldxj85wHzpCCfoDPSWtuBLYLbbg72m5wgZ\n5AKhc5fY6BgRFWsmh4AMqU7pOAs8vCj07RfCo0AmTkFTx+uj5h+rkwpD9149\nu0gsbW8mPTRaZsDQtLfwQqqvhpzBojgcrZHnhbdz4kALP8TLGbbxExcIV7r8\nfj8kuI6UqhImSTfF7Ab07H1CNF+n+9K6uBOsV8PcmfVTeKcJGcKq46LJNu1i\nPFUghyKYKpFvHc6b9kyXyz1qRjgSbajBeD4F/XnZaCDQBOluifBPDydr9Rj1\nGweWDGJyx3sJltFdYzsts0y1M+qo619bWZyMeuNQw7lLskkIenztTPqWuBZy\n9FsT\r\n=64RS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDps3BPuwxJhMV1AJZBJ+cqYC+PDP0TNdubl+0FT0qb7QIgDyi/m5kKf5GrDdnqZXspvXRgbC/A4GsrhgGPBcNGnoc="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.96-beta.5_1643014183623_0.8905185140951619"},"_hasShrinkwrap":false},"1.2.96-beta.6":{"name":"@midwayjs/command-core","version":"1.2.96-beta.6","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"61e1928171b9ad9375fc0448cba975c30af81b13","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.96-beta.6","_nodeVersion":"14.17.1","_npmVersion":"8.1.0","dist":{"integrity":"sha512-NQ4WfHRVHAvG14aIfkfmWDC8xp1qJC2GGpMFBxnUoiuANvtwKn5niZIT8fcUvbdUueVWJbO9z1hP9D0DbWD3Ug==","shasum":"a26b79ed457dc78ca9ba5c02a424687685b20220","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.96-beta.6.tgz","fileCount":72,"unpackedSize":161777,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh7mv8CRA9TVsSAnZWagAAJxwP/iE6TxowZIPtFvC7OCQq\nJ/3DBKpIFQdl/SPxrLKLIYuX4738hKhEMWJzZXo9k3YTH4Q3kSUxNMyZaIO1\nsuFfslP8xavDYdWnMdEaPRik0tR04fqXplOthg9jxLKpKEo3gKFj9cgrs+Uk\ngGtRHGMvGs0NCZzqXBUAJjQjascKZoedwZnSIk5hpv8yk5iTXXHTW6yMIB9w\n4VtPzhD2g/MkvGQo9J7H8wW+SyB8wsXhNWaNRsXUSKw4xRaJFL3XaTjw7pyH\nq9azXBddj206CEaIhB2E5EMq5Ymj6wqJwj5yppguWJ234YY37hD287t0idmi\nSgFWxMySJgrDqC/hvxCODtFT1qlsYdYoApMWvbJNaJKSkRQm+imbi/yaDFKe\noWWO7416pOwkg9PulrSEYdoMngfg+oLBmjRicEuOTJMgd772uU7qC79gDTTl\nAreNnLXKUWZHuO2sleYR92gPSpQ2OTWunauBtHJNrReTRKOhcAZESYT2QZnW\nGYoLOP0SIfMiZEy2a/0OTpGPoPJwnvhmJ2n8WJp5yc0A8NDbZsHIlgIrWQ/Y\nwaROpmrUNHD7yqYL5Z/F8RvcKfrcWcldizlqTGccj9CaGEbzWw/6TovKFIsr\nYOPnp273hre9u0zfHmoUoVvuIAvWdlv7Zm7b0IqL14DN717Mapphk4grXDS3\n4sCL\r\n=yDT7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDeUShUqYKTjpeYDIoNnZxJ3SrCygSEVUFOhOJL500fvgIhAPrymWepFom/Vzm3zR1IwpHUntmIwdVvcRNyT2QZ9ImJ"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.96-beta.6_1643015164538_0.5951409514536534"},"_hasShrinkwrap":false},"1.2.96-beta.7":{"name":"@midwayjs/command-core","version":"1.2.96-beta.7","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"61e1928171b9ad9375fc0448cba975c30af81b13","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.96-beta.7","_nodeVersion":"14.17.1","_npmVersion":"8.1.0","dist":{"integrity":"sha512-tSzW7l50o15/7j/1vFFIASCuiYFhFobzPW2bt8WeLWSD00dzM4dgUWXuaFZmPXyt/vKtA2WiFDH3+fqZi9z+/A==","shasum":"1c5c261911c10d9ae89da39813d70fd886957341","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.96-beta.7.tgz","fileCount":72,"unpackedSize":161777,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh7m3MCRA9TVsSAnZWagAADrAP/i910r5mIvokvzG0fAsW\nywnFX2rM8o2+UXw8rxYjjPGSECI3TuugFrDqJR26jrQHbnPtYPg11jT+PcUB\nbk0sLJX5fIph5EqsN3dm8Jcjvc6YrL1LM8cu4/+vuMCPUCjovVUlHYnl7SJf\nUqxg2m+2Fx58mSG3ZgLf5t6rIxtv/64F/tWc9FWI8nj0VHBeY/MNj9e/XscT\nGHbWW28qbQhChKNygG62yis+5vDTIyr3mg+/h8k8GddGXwy+PvgBYl129jGB\nOamDJDq2Uampp2IwAcAQczo+X6tBe+1TUNJMf/ftcuZIuDvbwd9rMT/ubvZs\ndFte5xazXatwv7uNZxRHGzxLfQ6mwOlVtItCLhOYuint5ktFDJvUnToFXn++\nNaGGQLxl3KtCNEHRYp1m4qfj7o9CqMikcEMqu/EgRjR+dO/0p5p0p/YAfpBc\nPdQPBbFk3c8n4lkEMngA1aqSWcgoDDn2J+YunlisKTtz4SHb6ILS2lXZ4rVm\nTFGddLt1iecc+V35Zw7WQaRhX3Fss4La0QymU0tA+0MTxgOyvdMYGqIWcYuu\nOnlIUkFb2f98ZKYlO7kANFXS9w0CtX08V4HDN7DhaMGH4+LLwz6f+YaCYTQ1\ncFZjTPW21i9OefoAn6ipfSwNapVq8LXiqx1hIphkR+ihwtC3ofyNoRYcjqn2\nZlG7\r\n=LZcE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAokcDqI6E/Uh8I7zonCkd42P6N5+Qr0xpQ/Q+/1Bn7nAiEAhBr/LS55Z5BcuzhpiLEiHAepElsUh9NwiVKyhcgq1+4="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.96-beta.7_1643015628492_0.3857918458064187"},"_hasShrinkwrap":false},"1.2.96-beta.8":{"name":"@midwayjs/command-core","version":"1.2.96-beta.8","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"61e1928171b9ad9375fc0448cba975c30af81b13","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.96-beta.8","_nodeVersion":"14.17.1","_npmVersion":"8.1.0","dist":{"integrity":"sha512-b5oUqbwy5J2VPWpGV+JJcbHh7oYG/Hj2N5jLRvAgdzm+rsBwkQjYVWPu3cimfwKqFCWjZaL5esdDtk3liWVICw==","shasum":"3e580131c90cf268cff6ab1f620c7c86be96bf59","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.96-beta.8.tgz","fileCount":72,"unpackedSize":162015,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh7m91CRA9TVsSAnZWagAApdsP/2KbgFcqCJqBE1RNdUTU\ne0G9OCv70bSx97ongiK121YB8wJSPDjyl82NSg/IaYRrdo6fokFNLbgfLPMe\nG5oU0bJrGtjWPyPTl+hm6Mol22RwCzFueNtasJYq6c07xEtadpD5eK+JF+T/\nfrMgF1r5fuyTVue6DN4IJrGlF769doJ446BuXBrLD6vKL17CYtDMQmstEy6C\nYJYCjazKfGHOhl+8q8y3vDqlOCMl4/pkQyOrYG8e6i9E18R31SfrYx8SM4YM\n31XBjoWYwJU/DrETL1jn3nBsuBrqc5uOPeKRwlGIAG21uEtrGKgR1fXEXXVX\n/XTzJMKtjKLBok5tKkwXuR1Wb7/LG1I4v2ju3Y1PIYSjCIXF8XsXlLbuClh1\nAZeccWceE5rYCUvtAVMyHdrE52wEzU2nf3K8rpoVM/Rd2z6z0At2fMoc6MHU\nNl5qvq/vvKgFWQmVkQbONPfvsSM+Mj5TyV/trFZQk6mJ6EqA+kJwMGXWfvGD\n/pKJfXoOgAwZAud8PAiqlM9V9KOVwOtJASh/s5JMGtOGqX73PHA7ZkRT8RiL\nauR+K0pFlaXvsIr6jxZCyu1j9Cyb1q4E1kqMxXk+tC2Q4kLcS6mYs1BtBmSq\nIYlSXJsw+ZLIgXE5PoJ/18Ej9wRweSzJFB60jCybzeZhMJ+5ZAqu1fbEb/9Q\nTuBY\r\n=XZL0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD24lS8FwTA+JLTcx2OnF6pdLc36LpzqGNpiJOlOFeQkAIgUC8pfV4kvqNwmra1jof9wqPCwbecViU7mdAafSdT8D8="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.96-beta.8_1643016053070_0.3786945527391177"},"_hasShrinkwrap":false},"1.2.96-beta.9":{"name":"@midwayjs/command-core","version":"1.2.96-beta.9","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"61e1928171b9ad9375fc0448cba975c30af81b13","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.96-beta.9","_nodeVersion":"14.17.1","_npmVersion":"8.1.0","dist":{"integrity":"sha512-mItlLIeGhnnqr+OV+FWalbHWE2sGi+nhrjov6UTVQzBq6rUm6EjYk0Sp7n3xvYOHpZT1pPVxk9PLE6RU1aVVAQ==","shasum":"025afdb110ecb4fc0f591105fdb6390eb188dd83","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.96-beta.9.tgz","fileCount":72,"unpackedSize":163054,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh7nGtCRA9TVsSAnZWagAAA/4P+QGV21u2+FDpiwUserS4\nXR6v+jpHLscGvAafKk/9hZXrz24MWp2fWCoUynu7Y7gvXmnPjsbCgU0kOdG2\n/JRY1NYrObr9JbhegLIS90DZFJcnvI5CqC/9rN90F3HZYUyR+U412YQ5nacb\naHPxBmwbT2hKm/V7ohd2ZqXbJta36DSPAzXDfAyXxfwcm0z5ESJsWOwcWjRF\nMKP4kWj+P3NrgwvHAn7UZO3YShNc9vw+f78bdRwOCm7fRew25TPcRyaK7m/F\nW/Rh+5MNBIedq/mjPmwoweGd/2X/wQE0T9GEhd8ws8COi094qRpP19WIszXW\nwnT8JfYAWyhHFPh9i0EM0ZuiVrlCqRBE5yPeyFSPnivu/o1Vq/c2g8EUx5Hw\nxn8EA1HjIOFljFKgAUvPPmY5JSYUFWAqJzKDWSiwRXD1361Fanq1QIG39DXs\nrz2/xJIbkS1Sqypq7+8FXEgNpoi5Od2rkXrCy8l64QrmVv9pBk2O382b8nZn\nkhzxtE/nZEVREEDB6Kqby45C2DsH64IWbL2tIBibZr/6VZ9WLsWFO6aXVhFK\n3CGCvqK33uG4XsEvKHpRvvKIVotQmwyhPq3/ABM2/DowohnYlIOxAro1mEzL\nIIZfO6dI5D4wX1/lG/xjdXJF/DnOTmTZcRgjGMMa1eFkB0gqXcEE1NQTeNS+\nT8Xs\r\n=VxBu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfS5/634AZ3t8B8cIg8HzmMkYvLGy4zkfA7HaPFUHLywIhANUlQbWXD7dSXyPtWdifWDiYh4sd21w1O/oJFIfKPzSq"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.96-beta.9_1643016620885_0.21007860302944503"},"_hasShrinkwrap":false},"1.2.96-beta.10":{"name":"@midwayjs/command-core","version":"1.2.96-beta.10","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"61e1928171b9ad9375fc0448cba975c30af81b13","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.96-beta.10","_nodeVersion":"14.17.1","_npmVersion":"8.1.0","dist":{"integrity":"sha512-7LaNKgKxTkR0x1drXkjEynBpdGX/lYShPokLyDjSq5a4AUPCB/g9Q9RrJTENriJDqVl63DfxMIRwyzCJAppJhg==","shasum":"8e0300e3cdbcd19ec11ac9cecb93f3bfa84bb416","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.96-beta.10.tgz","fileCount":72,"unpackedSize":163369,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh7nKTCRA9TVsSAnZWagAAzVUP/2dav0fKObFCYd/qmKQi\noy7hGwPOrdIfkP8knN8Uq2gy7NTbcPWTVm1B+vHlnf0Q1qk1nichVKcmEFJN\n4ThNHJqbF8gTuB/M1b+Plf4K5hh+5Qc+ieBBR0131x1AOXfyAL9M4vPYSXCv\naN02cje7GaN41JccSQc7A89Vrl+Z4KleCU/r3K+XLvKtNFjl6uBMCc1agEEl\nv9a9BWLQupkptx5tUGcSjUkw5W3aF382YMj0/N9SM93qyKRALyt/j1uiVZyO\nihWmtwJ5zVUqZw1jA+8DpPQNJvD+o7EjolXEEbojy2nISebipJlDtry5MzMA\nlKTpxmw6Ae+Lrd3efF7EjVNGNkDiBiDNrego8mGCpICcUBXRn4gcXBc8y1dV\nDc2NdmR1XOBCcHvMa89Ej7r2w3WgDFY6wdRjJd9aVImg4GL+vOfd+0NGcit4\nSsL4A/UOeZXmG/0NKKKWEUrIyJ1EZvlmJd4jb/ska3YbDAoq57wgXwhTJgIc\nlu5D83e81TBs6tQ/Y9hTQGYxKo4xKC61vzDmA4iApjXtmoWJVn7N6NNLUeDT\nWPv/GT2QRTczIQZ95tI/a06vR0y/A/Ee+XW5wvM0tVSd735Gh1Cse3ZVkpzh\nFhiAS1FW8w8+i8O0a1nr2h1Ugu8qVzM4Tgs1gbja1edMneXKJBqb5tU4btTo\nVSi4\r\n=Z4z3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEtpdULTLK2PsTDu28/SBo22x2TlSaKOWLeRii7qDEJVAiA0aRxtU65ex99SZfjNhOadmWq86jzL+7V5xx9ydNZbMw=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.96-beta.10_1643016851062_0.8656673074202088"},"_hasShrinkwrap":false},"1.2.96-beta.11":{"name":"@midwayjs/command-core","version":"1.2.96-beta.11","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"61e1928171b9ad9375fc0448cba975c30af81b13","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.96-beta.11","_nodeVersion":"14.17.1","_npmVersion":"8.1.0","dist":{"integrity":"sha512-dgxfdjYIf+E/tmdReA+sAy6Lm+KZnkdhzFktQLGfo6TsGcTW1xyZnE9xfix+jwWd2Uu9mOwDTHVbNpXfn39sKQ==","shasum":"6905226f8a68bb1cfb38af55e2128e8613ef769c","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.96-beta.11.tgz","fileCount":72,"unpackedSize":163346,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh7nTwCRA9TVsSAnZWagAAC0wP/0NLmb2KyCJ4UU0HlXeB\n7S/513YNvM3jmtZl3R/GV37H4f+bi8NG+0+PwWlV2jfHj4tUtFygjM2s0vis\n1akuXzFLQx4Yoev3wD0tRT5CyUTX5AgIlctFIFskyFXLDi1o72ouZEet6FCA\nSjMGMCdJcPhWk70VFEnribsuAgMAXyooshnpZkzAB/05Wiz2ZJF57wGNjkFS\nvw1iCrCu5jJqvAUX9HqY8C+wQq4GgShqvBvSnjZlloKPv4ESeQ1J1wQOKl/Q\nfYwaZrnbOGaro+Q82Tjp6zzJ/cI+mZvAIUQo0psCeAkk4DYRz5ZayWy89IK7\n6nQZJIslQNFSwLpbyVOcQN/LAGOCYliioVTa38HFGHYkxtowT7j07XbCOa0D\nJ3659zMnV/q6CrCYIbfwrU5TLmv4znx+FkEOnR715Q1/rHahdFPnjlp6Fy8f\nNOb3rNIneaeFTLenkKqVPhoFzii0nQI3rsW7N7S3AejLXHc/GOehWQKf1uve\nG3ZpEieUuhB/pAPVvMyNSbVq2uukr4ivNmzaaKIndorZKN5AIWbwkL9BWqOX\ni/VeitU+20Nzr4faVQu/YdWazu8+9D3jFblRpZd1H3h7KcwUTgKF4uEyujGO\nFbfHP9D7PQURbuK/CQVcxtpQIMhSzzdjext0nAVKTy2i7fXxS+IwJE0xtxva\ndj/l\r\n=tQxo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAIAhtCrZoFokWwTOVYHSCkYTMiltCIfG1CbLBjHJeshAiEAhEvh2O6VekosGIryCWhP6nxOHmY4y/scw8Zz1lc70yI="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.96-beta.11_1643017456723_0.7147945668138946"},"_hasShrinkwrap":false},"1.2.96-beta.12":{"name":"@midwayjs/command-core","version":"1.2.96-beta.12","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"61e1928171b9ad9375fc0448cba975c30af81b13","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.96-beta.12","_nodeVersion":"14.17.1","_npmVersion":"8.1.0","dist":{"integrity":"sha512-8MvqXuQTw0Q/BCV6PGybL9vavkaoWDJ+hojBSn7Z7cAkEFs6QGEYOja+5KGCsp4XujDozIxuETL5ZzcEB07sqQ==","shasum":"33ba90271f189e5c926f33a24135c0f92d860345","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.96-beta.12.tgz","fileCount":72,"unpackedSize":163372,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh7nbtCRA9TVsSAnZWagAABS8P+gNJIWCn7LmUKzIQsoJI\nYJcTIcg9nHVm29owm+acSRpQE8wCHHZq666MNmyuyvXltCiKUx13EuITRx9e\nTBt82rJozqRqB6IC0pqBuX+fmj7j8TpEgkWuQIE4CrNbAmS2RwkF3cR0lhPX\nPQG7qTFp/1MKE6JMlzP7y8SLxTk9Ryzjd0b2LrsbHPZRsmRZlpmijpD+h0JN\nXJmsXQdw2JgeIWGrdKKPIfJ+KTYyLDE1GdPvVH+tWDbhixyacreFjtZd+hBf\nlPzPYbf8t0bPyyz+xFdOSor0MmUTondBOtAK+I/Q5PIcaOwLrCj6e6rCH+af\n1jfQRwTnu5z6M5UQmqFk0TfKTuwcFembvLba9JH+WjJ+9AX2gT0pfyRLI0lF\nXDgUmxpPMASmKqBdgC7V0p0W8O/ZVkTGaCP/lxMKzSqeuF0Uo+7DlccduoZe\nXCxmuLdxrHKurdhm/KScQrrvO3wScTPBmdFGY/r83UnZ+/W/nTEs2vU31SDu\ndws7vUfVFW01YX8pXH8ugHyCQm655NzbOvCKtuDjg252VWUBDTebh8g3iplp\nRpg6vLoIB/029qC0EIa0YeWYs/PqIaeoFMwtYKHbuG7+KDs9OWIWy2VOSkqO\nW3XkRZf0af4kxEKcRQhS71sJDqpGjhUs9sxI/J1L+x72A48kmhG3cKHWSJBH\nNTnE\r\n=hokb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB9ZiiYYOla9U9Tcj1d1HiSadG1hmAQKPoKEtBEAPdX3AiEAlt34SDJuaykAbMfVNS0UmCIb+qaDtM7/TvnHJSCp6co="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.96-beta.12_1643017964836_0.8757457089457004"},"_hasShrinkwrap":false},"1.2.96-beta.13":{"name":"@midwayjs/command-core","version":"1.2.96-beta.13","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"61e1928171b9ad9375fc0448cba975c30af81b13","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.96-beta.13","_nodeVersion":"14.17.1","_npmVersion":"8.1.0","dist":{"integrity":"sha512-2es0mxoAZvmkZoOyhw6eoNYzGqzyq2wzK1FtMIuSkMH78mlFo9PFwjAD5HinrP1u9b6xYuVKkX2elj5PFrdsQA==","shasum":"1ea100ddf53b49084174e857a8fb40228998293f","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.96-beta.13.tgz","fileCount":72,"unpackedSize":163346,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh7npKCRA9TVsSAnZWagAAOlIP/0745YA+217kc1Q+Ulc+\nWV3GaD6GW2sBbVwmcTZr7ClhVxbXnugQnDoOj3e/7NuIDV2btUDKKvAwIXUy\nQe3E79ddDWTsaZXEEnGWljypgvYsTHnMG+pjT8DHOLgQu9uP6eS1lFzeC2nt\nMJhqgPxSb+wI8TUJw1YkaFTfZrQwAU2qwjuTWFiInx+vIE+gaH17qTRYULR2\n4QQNshfVhWXnqjet258aHq/9MGDbomU7Rh0u4L7xS4DTaB9fWCDqA8vIP0ir\nu2c8aNHBHpDko+2i2HR2CYIqBVgzbFqir5y2wyYfJ+B7D3Jw2GG6TbKquowh\ngbKfKVKOcU3SYfw/DipFGyAXPH5GDODu1GdNgGLhfBa6eedYs2jdtC7mIhsO\ne0s0l/KL3E+8i3ukYbIv4rqVIN88IbeS2T7+g5N0Z94eduHFk+gO55f5IgEb\nnEdcvTtHtWsuMjsGi9nGGYRKn/URRgFyJAAmK8nW+RLMM4rGoXqdEwXcPHRF\nQJ9Pvf5Dz1nKKk0WGg+ypWwIF49zP9x3O66FWoBZXfUtLGsBsucTnGv9uJih\n5FhkKJBdx0TVS8tLFWRqsNu8yjjEZEmYP99xr8IW/xqGV3Aqm8RQiQkp/pn3\n3VNViNJ8Jw4/vw1CON6/8kEgvG+TLw8hfHVuqedinOHOhnhTYGe1el6dfhep\ndCJA\r\n=O1rM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBkyXL3mulIrhQzCvHi2OA+d3T6D3D6BNMzVsaVSwjwUAiEAr7Lgq6ZLqyJkndmWuJsBabQwS6ZqKU3tj9yMTRNclAA="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.96-beta.13_1643018825900_0.15957215395541047"},"_hasShrinkwrap":false},"1.2.96-beta.14":{"name":"@midwayjs/command-core","version":"1.2.96-beta.14","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"61e1928171b9ad9375fc0448cba975c30af81b13","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.96-beta.14","_nodeVersion":"14.17.1","_npmVersion":"8.1.0","dist":{"integrity":"sha512-BeZeKWhdFWvfZ9UtJqKJWYLoEWnUVxoc3YpV8uk+lq4yocdZmFv/FZH1R8LW7Q94U1Bycxph7UpFvjRAgvlYbw==","shasum":"0966beda5c3ad5b407318f4881ec896b78fc411e","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.96-beta.14.tgz","fileCount":72,"unpackedSize":163733,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh7nsLCRA9TVsSAnZWagAA3RgP/0FODEAUx7dWiQEZPtnX\nTCuMRj5/KHB97CV6AnXT0gdq3itFNgpGgPp2cQq5z5OqQxRxlBMn+QehJzWz\nkK0sqquXWt8g792yiYAdZ/349eJGVV0j+1r22n6yFccUpL7ky3WkrAmrIe8X\nAgvGMJXHXeFBXtfl7uHO11N6PqJCUpCJSTOpRpt0lmV6w1BMfyc61RUFn330\nfhXaW7f05Et0soqvT8KH8S+Ywou97jweYKkRb2SkKZy67B0qp5JAd3YeHr0s\n84NyY26imw9gYDzJgl+Z5hw6PS6lRKcQGMS41ddd50Hfyb8UDhtglTzTKeM+\nAe+pE4qW0udOtoxZtvyEFijThQIli1wkVeBtycIxfuSe6IVfSyLSUvvhdWm3\nnFJxmEORusBZF4XdkAWK6eOid7o2nQV0k7Aum0c6BQiIv3nYHpBoiIs0ExAI\nJZ2lLuBQe561EoIaEA1HbQTb7MF6SYO0o0JohSBiwA/NclXd4c8FF5RS6eIT\nMsNz92FO0snIwT1vzSkSbKAA/7+83yIm+jjnb0nmao2M0J8Bfqt+UJCs43bu\nAVgAKuh1lu18smkMd4o+aCDGdfCg85sDx2qt0D4wsX6gQAPe1f1EC4WUyFWP\ng994ZZOtmXgxwTPuJMzxnmBNhHjKFT2qEnuAkzDW5V+0R9GWjC7OB9SD2pLv\nnHiJ\r\n=1Pe9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDWLWpe0QVm/mx+MeLQgrJba2flgq33U7R1SmfamAEX6AiEA8yEAsQr7Tz1yvcXeT7Qw84w5c3NqVSIDeFckBR0z67I="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.96-beta.14_1643019019301_0.25051938297075815"},"_hasShrinkwrap":false},"1.2.96-beta.15":{"name":"@midwayjs/command-core","version":"1.2.96-beta.15","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"61e1928171b9ad9375fc0448cba975c30af81b13","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.96-beta.15","_nodeVersion":"14.17.1","_npmVersion":"8.1.0","dist":{"integrity":"sha512-X8H+H/SfHEE9sOHyY1DqGVXryzc4zXv36F6uFCOvfBXawrx6aQbgGMzUpkGGfaT62RKZ4bk5U48cLeDQdcJEkw==","shasum":"c343e24fffa5d0b465b4de9a93f2c27572c842f5","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.96-beta.15.tgz","fileCount":72,"unpackedSize":164395,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh7nwTCRA9TVsSAnZWagAAYpwP/3gDsMMsczl86LfBcFNs\nO/req5i7jxcmT2RzuRMCK6wU7Oorvy7PlLKt7PJ9N/mzXn4+spaSOj9Uvo8W\npEJGy5mw/6o6yKExfaRm0sgxjkOW63acLS3/2L4ygsHwrZshMefg9bDhooM0\nYPAazAt4bijnX4Qj2xxPs/7cHIpjZ3eEhDI5hH+XBoBmutFnggjHUSkyJy+D\nv/0rsd4X6mm/aK54xODHO7DdeLf+RfvQDUymGRBx5sYL5npT+S0r/xIl/r/w\n4g1nzulRF+x0DMVwpKs7GjZoIvHxBayzF9RJk01v8V+GtyWxAD2l2g28FrVi\nvpuCsFwnnz3/YA2EjULpntL/JKFmA6WCM/zLoEuQfmFrBcHdniazZ54aPoIc\nD7KvYA6McHJmd/KCivuuHH5MHC0MsJLvUfHJabojOtVkzk6e0n1Wa82fpyi/\nPOChmf4Pr2JeSm+JK5KaRSxQRRgMlQUTTqG/ouEgjSyTu9/y0cGmcs91Mf3t\nqvYXwTU6U9qyCzYMiirlWsnhtWH4OVkopbrIynnXxvEPBaN1hpO2b+L6ie7X\niTU4jQq2ywwZbQFi/oOa06qiZS0cNiJ3xM250+OKzv4VskqYToxxS7XBz1yM\n7jsTwA9RL3hapQXBHPH3FwgYeU3jFJIkQEnWHd70vHSSAK9w7qMdp1KBSj1O\nLvsf\r\n=Omq/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHMblBeYuSuTW4BVDz0idCl5jjdeKDj43E6d27SE80QKAiAskNx3jwdh0PJethBfIaTo6MrZtE3sOcUkD1J191lUKA=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.96-beta.15_1643019283155_0.6561475452394043"},"_hasShrinkwrap":false},"1.2.96-beta.16":{"name":"@midwayjs/command-core","version":"1.2.96-beta.16","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"bcf935e4105138e4e14e2d3311829e667df94d9a","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.96-beta.16","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-KDPLpwXrT5hCM+Xu8sCYS0OAfGFzAArdU4yfSodCr6ancZN/UVbygMtgK9wuCXoQ9s8IEQLQLcdduUmJqPdbXg==","shasum":"873c7385159e904cf366ad2a6c5f0cb289855d5e","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.96-beta.16.tgz","fileCount":74,"unpackedSize":225319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh7n74CRA9TVsSAnZWagAAcWwQAJLqmJ9UvQtjLgNLDUIp\nzmkitFs1chZ96I3zcVrLTat6o9zgaLY0Rt9YtLEB6ZbMVDYz25l9xQ94sBeK\nHZeN7c1A9nfk77963+w4rCgCnuGr/q3ZrZ73a21ssmbBd/GBR4CgBeNS8l9F\nlYG0qz3Dx+stHNKcap9Oz4PW3yiipWE4TPDWvtx5BlGacx6bDL4TCT6k7I2N\nl7v6pkhcARB61hwLlGjZYsxNNkRIPBd/3DhIihaVQrHg0s74YA3kwQLj3343\nLXUP7o9F5VWeEMRF33M+2BK6iZ3+ljDnzCN6HL1NA0AGt/bHoAfSe+cM2t4H\nWiwMGjqvP2m9HnE8kyvnYtriMN9O21y1oh84VFGN5UIgJ1IqA+93tZ8E1P20\n5RKsR+1swjOOwqEdjWHeGNvX9JNUrmzUnVegQ1e9rBFmf6rPPkaGoldEAdHu\n0Ypqc12wBT/zES6j7I085iAOuiObI0VFWZwTesKTbT1AaU/vFrTdccouC0Op\n2ovTEchDh5lU4xPe0ef8tmfq302gTWmeJV0yfYAU6EAILdb2Shg7MMoxWBWS\n6SdYaAb7eiDgCnkOEjj2eOWqIn1oaJCyvykehWJCnR+W1CMxGRVi2LgUwngm\nvoyJ9ZjMlXziN8sXi9BZJpWXjlYcnhngDRqObAnLIyOvoWEg823OpBEeWplE\nopik\r\n=PS10\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAGFZLVy9qMr8ZOLaXyM79Zopzp/0tdao2elIidgqrthAiEA/CXbm7w3DbiQXzOfM9KJhJ1Z5LBDAZXQxghUaSLczuQ="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.96-beta.16_1643020024249_0.9402396482304152"},"_hasShrinkwrap":false},"1.2.96-beta.17":{"name":"@midwayjs/command-core","version":"1.2.96-beta.17","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"382cd382bc6e79853019eecf442ead207a7d31af","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.96-beta.17","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-6U8cWbDJBHh4G1VOez42ezjvOb5u8spb6XJTDLiAiERZ2FxgD3iMGqqH/ru59tzbMjh2OWLgE+ouNPDKPdWaAQ==","shasum":"213bad26ed49d6af73ec20840ccfed0239d3495d","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.96-beta.17.tgz","fileCount":74,"unpackedSize":225319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh7od+CRA9TVsSAnZWagAAPksP/jW2um/iBYmD+LMj1W7+\ns+tZARrtCbMzvIhWEDzP3k25n9/6fB2MO0Xb7+72xBbBDCmS3k3WYXYTBYgN\ndjVlKgVbvHSCCIRZpJAFi4IRATRvTw4GsB9f83Yn2hxFeajcLn5NHYtbxNyP\nZQG9875Ll//BqsV+RsW8qETdMOvfDtXA9uVIz1Rc+Rfc7jPlaG2KKTU3G4pG\nhHYIZEsU9/YjtUxr9u/V9Zzn3dhSnc4D6JPDGlzcUmpqY7MUAxAjXcg/ycJG\nkfBqsIb0hZbMu2mJqju2rYY1riibNPbYGeanU6csnF0Dpoxqux3D95kdT4X+\n5fitAsCf6drfRUIcK1gULJqHk1UenhhrBomE5F0rH0q6fAjjHnFASuNKdnCT\nhduAe9FrGY7s4UtbbHdudqrT+X4Lsj2PPgTOhcytx5GNzHAC2nipXFeSXQa+\nVk0dMBid9RLztv61UuUytd2xSKwUwEznuyzmBOY9EiIKxfeVqJCD/t20mFpo\nNTz6fcMX5ijaL0gAhXmygRHmOCTh/JSJqM9QGpQhgeAlh+BjfzHuvlSdeFwI\nrJD29WjA572NSwj3GeUud6/KjDO8UDkiYl9cUNPggHi8OwFaPSX3MR76TaUQ\nuoOwPUKKG4A54BibTuVMCnu65j0YMup/wYwCxOsbv8VUjTguF7NGIE/FdrGE\nbENL\r\n=z7tJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCxwOQLdb2q6qkpmIHctstpgKk8t3RvFhy01NQkh/EcQgIhAOoW4KYkgaUWX1jrExe6CxnsEek/cvQoKJzKQA0PC6I1"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.96-beta.17_1643022206593_0.04167152552698572"},"_hasShrinkwrap":false},"1.2.97":{"name":"@midwayjs/command-core","version":"1.2.97","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"1499c3184a10905560a5863a4fec677dd50785c2","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.2.97","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-KUU8uF9VWyWULWfNg7sLEyRX9x8UsbQrBErenPIv83qh4LH2C6bIiYJ9qbUc/yzcItJvwUZW8e8OaYmb5VVFPw==","shasum":"236e2fa5b9dfcb3cbab63b811efd6c0253463fa9","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.2.97.tgz","fileCount":74,"unpackedSize":225581,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh7r1+CRA9TVsSAnZWagAA6U4P/2bg+wMjQBq6PRs5/G3s\niyZJZwqq+PvatOauwjnONXmGELVabo39JiZWQ9szBNyI27ATL8jjxUUnNfZT\nQPZkG9iIRzBryy6x+ILOS4KF9RZ492cuTeO6M3j8aGKR/UD8l2cwbVK/BOl3\nBiA8Is2XOeywjLum3Wx+MNXfJIx2pc56bjTsa+sn8HzJdMywnUcwjjSU+sIw\npxAMOYVewtFmCbKct4h/C5WZM4jhBbkJR2UCY4AZFGrD5EH5NFE5Y4hJXHXj\nVPy5ED5e1PLJk00brXcTEdMVPAKcRPPns3/NiAX7PpEev2j7oiTc13spiNPp\n7gD9C6xyJYiHSTN45f7Z6pM3joBZQigL+2nag5tKss4x3I4OlDhN3FkoflAo\nq+zO7FkLFU0WTuH8wEmMJf2MZeMJ71wvyDROtpM8mlRixiweceRZNev/7Ewv\n3CS9SdqNgdc+n3umQijGmlI2XnwtKUJaeKwitzP/VJPuX4WmlQKPygcRk3eK\n3jStyKtu129ikf0oVxlGC8975iRg9gIBlaHDocvTe92DHa3ECJOKNWAVklWp\n0majG8oIx3SYQbJ3xyMxtGbnDG1vFJvFHGEg1/ltjQ/YWBgg0hp1twqIkiGa\np8pC+7kXSd089gnYAMv6UtV3r/XE6mAV8JpVWaCTEv3LXPDVhtwSp1iOy50q\n2zrd\r\n=JPG/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBFQ0Ksl4o8lRhsKkouuUKY3vcg3kbImushcZGZ9QAu8AiEAqg0FAvB/xSaMsKBH7LGZpVnJ2SNfEK8FkF170XYt/FQ="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.2.97_1643036030266_0.760081901478894"},"_hasShrinkwrap":false},"1.3.1-beta.1":{"name":"@midwayjs/command-core","version":"1.3.1-beta.1","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"fad65b5add24c0dc8941265327ab0dadd7948509","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.1-beta.1","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-j+s0nGFxjoMieGXzVNZuGEcBq1+5wkewU8mmrh+dUnNrSj/Usw605Xc++x6mjbeQxll8px5VtJ5kD6yptt7I9Q==","shasum":"ddf5f39def2efafbe56fc6870881411bee0f61fd","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.1-beta.1.tgz","fileCount":74,"unpackedSize":228017,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiKazRACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqY8xAAk/mub46sXOLG8tZ8dsrUWcuqar9Y0eVdGR94snQDHaa/vxdP\r\nLtKumbACXJFQdsn+R4RsICATGvLxOwDRoW3fkXH9Sm8TjHuQhXSLGRSNE+to\r\nbe8pavnJsWAJYhJ5RHIaAp+sq5Z8C8ZE8rhegqHt05r+up34L6FbKpVttLos\r\nPYxRj6/xxO3MA7JSNpJTCbaDHbWefA0T48dYywvpanheZ4mbyNOJY01UCu9y\r\nN4RrDBasX9XiVXGC3yBYpA5gQlTY3ntYEeRBkp6l373TjR5GD4fKSS7/JIj7\r\n9vEHE7MipcDmKuVYlRQwE4Y1owDmKsCGm9TEj4zm+h08/2CbhN4JmdrGROEq\r\nflXMMNYAZ5E9tYFVgcceXTSxaluRMPO6EtGqEhHTd8B9qAp2k/K8O/AFJq+T\r\nSFMyOiMd61zaOCBnim1bPq8zXkh9p9W6o9znJHB8r4WrcfOEsQ2yfJKyLSW5\r\niXn/kPAZaJwbxnvMBSempLN7HW7nh18+GU7zm+zqQC5ERs4NFOwgGuzxPYCv\r\n0W2Lg9P0GfWICq1wHgyJhrP0N9S1gYF32uKROhWSYzGkOquNXZGfBWTJtE+M\r\nNksdfQR+L/rtkBdpQTMyZQKkI1L/wNLJZKHompRCDcPjZkluH3Y2x3MIEB5w\r\nmMbu8/Hldg7xOJHR9RA0Jnze2JIovnpYlRY=\r\n=XcdZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIMhKcCZ4COnzM1yj0BArxgqGXUULMPwNsdxVhm/4ezAIhAINY5EoiYnubAwinWL/d2i0xOAQhaH5vxaFukagOPUV+"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.1-beta.1_1646898385393_0.5932896979130664"},"_hasShrinkwrap":false},"1.3.1":{"name":"@midwayjs/command-core","version":"1.3.1","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"4ec53aba0c3fc5f6d3a2c609a6e00ae7b71901f3","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.1","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-lRBJU4V8hP1eOdRLh1fsj0LnBtIYZu8k3yi7hhrihwtLK+ritOQKHTFhP0okiTaN3+ur+0K19wuk8qolhnnS9A==","shasum":"a8d0cc8261fd07e306ba378ac9c2e41a2a44dcdb","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.1.tgz","fileCount":74,"unpackedSize":228167,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiKbDbACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrbug//bJOBjtepA/TLtgpQk1UojoYF+6BLZGDHX4VZd8B7wSW9Zx0+\r\nY5QdJd93HlFDRvj4lwnG+RUBkIa+luSQbrdmC7GECEqkwy/2hYqq+eMfLaCu\r\nqgfaO3nglcfJRwjuptlqB5vUhQf+THhgXftU2Mj7Li5Qf5InzKsTZvljQDCk\r\nJP/fWHc9XJxRf/vYrH+fwH9BXXfR9o2OXtABdZHZvHAIREl2M59sAa+b6jSg\r\n/QKqJjgTKJpbaRYHFGQNjGf2F0gWV9RcI8kyb5+yhAOebcp/hCW2r7l8o7HK\r\nZctQQdh9AzFu8bi2dCxjbWxzI/viae9orB6yKYHizF154vQ/XhzwnRsoKO0P\r\nAXdAkFSQkgLWt3LmdIo1MbSf+g8roPESIMp1tMdbIt3duxxnNtKtTxBMW1a5\r\nKj5zk2MFCU3++I4yT+OyCvkP6OyLp5/Wlhm5Ftwqxx5EaaKfkz9Vlz9QjZph\r\nwgyTVcGiYoCB3tpDbpo3ARJegOhGUP8ojVak87SdNiZ39LvMpM6zx58he8LM\r\nfwxAfzVyZhNfm17NkTjfMFJr9uoV1t5kFPhdziTvLX61PYlCNQvHp208VwnK\r\nvSJkm48PIEq4g4D8GK5SA1BBaLFB16bOjG2oqubiduolu0yHOVNebSfoZWto\r\nN7SWCL76CoOBKCMimqVWOfE+5H/fxi5KzT0=\r\n=VvNJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICtEQH5o+4/FRcM8qoda+JDRsBbIDkQjw9Zz0b9e/hSPAiEAzta92bZMngoFG6q9Ya0jjZ19Mbr36dTpRc6ov7Vq4ts="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.1_1646899419729_0.2215659903784568"},"_hasShrinkwrap":false},"1.3.3":{"name":"@midwayjs/command-core","version":"1.3.3","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"eabcb6b8bbd9c0c7263c8c5551230598bd1b3e56","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.3","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-5qgFs9tg6mEuIzvyN0wjJgeAd0Wb3frFSRo1cf8zsO4+3JuVuipy5IGlFtWmfrClrsGdffvGqmbqIzGFhfyhow==","shasum":"a50e2ef122c49a44dede365a61fd82eede765c49","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.3.tgz","fileCount":74,"unpackedSize":230590,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQkX6DZefdDlVRYXQLCB5o/jKQDIPZWAHauakNObu9awIgSiDMSrQpdIVIYT7QDSwy83JuvFCovXvUl2R0+1qKHWg="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiX2t8ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqQdg/+L0vNgGjSfYMc/X44a3NdVCPef7xByBC04/wz216W/cMGwG1Q\r\nObFPnvTtukBeZmj1s/VVgbQ/cGR0Jsdq6y1wKzEBifCybpPBrNMbEMbArnMB\r\n2kn0UJsRcAVjeT/L5JIt/T3KwEw7mRKaOoYdTSXE3LAGMLCVM6UTVv+cGyHx\r\n5GK6SZqqUEw/j8xPY2t1ElGdgQ6/fzp1jJ6bbi5sUzkHsO6/wkqtiOus32AT\r\n6l56Jy0pr9rDt5s41idxLQT/3MzgeE8hQemSfj0dE1b/4MgHVb5I2ZDm2WnF\r\nZIM85KzVK1lRly0hKtRtmcOWEPvs7ds7qfKQWTKX0jpR6NcCI1GQntJl6W31\r\nA9X4GgW7g3q19WgaoQOuYct1/2A9CU4Y/4EinG8Y36gF5gIeMzW5FPSHlGyz\r\nqETMLOPWw1kKFnDrrzLO8S6zlyYu+M7W8vOSw92eUqOC9jQROXhefcw887hK\r\nUuN/fwOJyVeJO/qVGbn1Upwhi68ITPaNgmCZQlR8muu7XCMmcOJWMdQfC+vT\r\nOB2GIMImID5mdTkkdJc7q9WPz5lo8QegsldL1+YbTGI5CW31yUPARmtcYy3l\r\nZq/Qi9RLImVVdap4zrFkyLW+4k6HBUyW68nE/dKUxuR0V/JTA3yXRKFcTzwA\r\nPoLAmvv+P9TIxK/6chlDK/eRdO76KDkgzZ4=\r\n=5cHk\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.3_1650420603875_0.6802669651160265"},"_hasShrinkwrap":false},"1.3.4-beta.1":{"name":"@midwayjs/command-core","version":"1.3.4-beta.1","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"af10112a6eeb4de7801a10010031e66782861210","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.4-beta.1","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-1MsgZYDn8fxUXne+Z+TBNgG1qkN0KnbBL+z0nknLm9PzjUOVtizqGsrksE2/uPiIN8kyTlaZZqNAKNwsmCty6w==","shasum":"998adbb565a9ca749bd712a1aaf1d97f2a71572f","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.4-beta.1.tgz","fileCount":74,"unpackedSize":231319,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEWrEqpzEyem46TJhbOrntsP3dGqHZxKK9Er2tQkGyywIhANlF96Eh7ah820MwFXXc0I98x6BzI/8xq2Idr+tZYTN2"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiYPRLACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrYNw//W1a+zTlDsLDAi0r1iTjlXItaHzY9xchviIta1rQXMhV7cF20\r\njK6H4X42P5C6+5yUgqfnw+a4kcsvIQc+KQjA+TasCEcyYE1fHZIj4laSoUsi\r\n/ZcpL9LUo+R2KmRHO0mQZq3TX2jFKtE5qQDWrh23jgCapsOS9YhKkCEb1QOL\r\nNPUtL5Jl0u30XvEvxZVvtiVuZAdNxmK9O157JU9iAhPnZOOt4GUAlqLD5BZ4\r\nRr3Fd5B1VBF9l39Nu8fpgP8HngVkDw3Pwn0VUXrzbuvKMADP2KG1cVIwMaQX\r\nkZp0PxyO575CiDCMs8mCQDCQb0HoVk2KFOsr352dI3kwHGQ5DE3bsOTDI0nl\r\njZyptHK8GpZGIeuCdQkA0WnSWcfo5v7uY3r2inmYxn7iGD7OVIpZlPayDEc2\r\nVvO/aaDGRvh4bFPbOWYFACPTjub6083aOngEnESek1Iq9yrxw5uhrUU2yjEa\r\n1wWuSs/7zpKHpIZivYStsNJ82FOzQzdO1J9LJsj0EKTMFiMffQOCFjOelo7d\r\njnscoiIMPRf+IPtv9K/pYPf/JVOlFU4ovdnPu5AfL5fzRMqn17d7Gjm4e262\r\nVBuTEZVU1OCCAMFRdt2KyAsLmLEvxKrAZttYogrZW+y7+RsrV7BVmNXjkvvf\r\n2UvIBeK3OvzijYmfaCvZ0+NjQ5MVbKn5klA=\r\n=RCUw\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.4-beta.1_1650521163672_0.23391534038979578"},"_hasShrinkwrap":false},"1.3.4-beta.2":{"name":"@midwayjs/command-core","version":"1.3.4-beta.2","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"26cc507cf8bb702363c14735a7a523197c2d4d3b","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.4-beta.2","_nodeVersion":"16.14.2","_npmVersion":"lerna/3.22.1/node@v16.14.2+arm64 (darwin)","dist":{"integrity":"sha512-WCk1ZzVyIIqbbPnrM7o72/8Xk97/4TAhF5DWR8UcZua9Qn9DJh729izJon/KIvlAst05QdBaXiUV9ZYXsZxrNw==","shasum":"3c64a32a97ec7d5f50bfbe5a4dfb53bceebb5f8f","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.4-beta.2.tgz","fileCount":74,"unpackedSize":232030,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDiOaSgq8hpzOEkqtx3XjrHAfUg0JVWMBFEk5JYMLNExwIgRZd3nS3boydW6FYawEhmessu9bTnE2eWo2H/e45BsMM="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJie1heACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmphgQ/9H8GC3fcBT6Vv2cyeexzLVPEMocF8HvH+Ie/fDS1tbBLkIzHD\r\nAQcQWOc31vEi9FNgDomWq6S/f7b2uixNb7+fm1M6ymaPYVHwB4q/CS4u6nt1\r\nSCXTtetnF6jRP2gizFgqRMxzwVzMpk7qFbtcN55J0V9CVu7/uq9bwiMHyDho\r\nz45vb3s+aaqs7foIeKFiwMvY6FX3ADkcP8DpBNMR20fXSZvu1UyKwW8uyQdU\r\n0bHXdXdVRkO8sXseB3/PU/2oPCMpjfYp/3zUOu96dgpUpRa36XXhIgX/R7Vj\r\nDEltMMkTp8O0Y4tvQfCeAY82Nd8TnbeaY9T8MZblqU5Jrpn8gRzn/YHX5MF7\r\n608x96MlhiiDq+ZcYojqIgl1IWtrgw4RDAPkIGkDw8HrIPg/z9umv4K0gyUB\r\nXxl4YeYIqqvHLXz7oo2uzXKvG78jFq9oSsY1JR3ti6Bu6GQiVCfyXe0De/vg\r\nn9o7kp78x/uTMD8ARIiEJMWfcBwawqigumRsG3Vsqlp+zPQt1herW2M6Ikwh\r\nOYfH54BKoyycbGjeYC/4/CZM8IEn1s2xGhoRoHHjbbkbakC/nAEDw6VjjC2F\r\nD91eYgq4US+NwA1hEkHWk+ru5WH04A+kqFxxQJuRjIJLA/XC32L7hV5y+UO4\r\ndxBjCO5vRY3rq67lpKGbjbcBU/FY+Z1rqYU=\r\n=73KS\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.4-beta.2_1652250718679_0.14390638565092218"},"_hasShrinkwrap":false},"1.3.4":{"name":"@midwayjs/command-core","version":"1.3.4","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"c155e5fc5dddf6b71d07530115a0b194f73da262","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.4","_nodeVersion":"16.14.2","_npmVersion":"lerna/3.22.1/node@v16.14.2+arm64 (darwin)","dist":{"integrity":"sha512-6ftB4eHAbAwiqod4irDCLhcMVYxAlfRKsPzv0BVScoREE2UmcYPdTWH+mFQ5clS/u5itrr7D7w29rLTQ0CYyCA==","shasum":"2ec86af005fe988a718c148c20089dd2f33e4555","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.4.tgz","fileCount":74,"unpackedSize":232009,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCyC34iW6wPRJxqkG+WIk7UQR/vL+iT1M034jUH4yAJdgIgLsGp9MSVAFOflCzlI7nRb0YPrUN10FijsCs5XqS1MbI="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJie15XACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqNig/8CRym6IZgwvOLnKFlDZ70QqFwbGi9/31+9iFyeIZjm0Ea/4ct\r\n8ezQk2X++En1sKaqaNMEEtPztp4verM1lT6zRCUBpBJtU6iPr9ewA3IjrlNG\r\ne63gkwdvRDCU/700tXPvt03t4s6m9FqMF2Kyee4h2jduUFqMaGH4XR6UIElz\r\n4oHJJknKxYU/hBIbglbaCQyo0O47s8uxgHNBs5nxff9wFvtKyMuQMDrGDPSp\r\ntVD2hps85LkzfyWO1FiqDaKqQXuRPDahs4HLv5PBQzjstssXFzgfRhFLIsEz\r\nAsxl2mYE2apitHC33dFERJGIGRtIgTTTzqnIJsZnAkM47cbP7djnPqIVAPfD\r\ng4DEDDaeLoqWFAPUDySKdhSpJsKtirhjH4WeN7HcCn0Vy6djoMFPL2WSKQCH\r\ntAuhiJ0SNImz0+JKvhhGDoEZpLJfejR+0HpOObwMuA4U/qgI0NTcNiDBGVuw\r\nLMziVt1R0JOrnQomT4a1avDrueAmftlSTzAzHanKc+KLGgd4aPf0y/OOrH73\r\na+iFtWrwkHg67tfXVx4RNUK1gX+JyYn/0lBPxJHLv/SqyAucfS8cCt6uscEf\r\nTNhkrfv4ZPBlyn1TmRPCWZLtmxe4XZj27Cd6PJsdTJYcWkWYo1rjG1P1upcQ\r\n7grrafDdwhBb06MsPDLPWd8zpYiyacSZrAA=\r\n=zfGb\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.4_1652252247767_0.9781242429644463"},"_hasShrinkwrap":false},"1.3.5-beta.2":{"name":"@midwayjs/command-core","version":"1.3.5-beta.2","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"98b1732d131d0d8826092fb28ebd60d0fc3b9948","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.5-beta.2","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-Za/6Am0bLXpzYC0KYl2lUz+ifJhLdQ7xW8CEoTHlTRvaPzVplwj3fHztAGnvgCioIstAuXDkv4zchV92BQLI0A==","shasum":"ebd07b16736cdf8a547fac2e2251409b4ee6e991","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.5-beta.2.tgz","fileCount":82,"unpackedSize":244831,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3ou4xPJq2tFHoVLaji5Yi1Zbvhxd7Is1gx8dHO1iXAAIgEWEEHNvV/A6oaa2EffPgwy6iK6f6jT3AFBdHxIwPgCM="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJijImGACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrvSA//SBRTqDv59uDjCnjfcXxzr8IyCmeUeSdmne0ECLXnNVv5zyt9\r\nbdFfZXRrI630AJrvJo1cTeq8rkJcJfzTMN1543Sj1c9ePMCTMwKatDEfotIu\r\n/+SURzvIE0P9Bs6TAQ858hJ0KbMQ+QDmBHQysujZq1G8aRR5FzWLbTkAVIlh\r\nKT64KcS7NKdBE6oqE83nLB6M9PTV0mv73xZDERAJDXcqbiZbUU0g0II1owBl\r\nE8fSH83QCUaZso1+yGryBP+aDs1CWFcrGmZyCWZRFnPDYEtFgTczKgP0QmPt\r\napTDOg0nGuljpDdBIfpjZ4bYhX2dw/elidj9dd7u6Rg4UGDarJ+aE5orL2uV\r\nN6QnKP1xrkUciykn2LPgycRSzxK72mZxM5feyb4cj7wuRoVFzYRtX7KZlORn\r\nM7Z2+2hC15rQhN+mrwWImJcap01KApH4hGItgt0kDfdWCiZWosuFqKnr/asw\r\ngowbXhBIJZU8F3ELvc+dvX6lVj8Y0Xo5TIYij37duRNwV8DK/8h5jZ2i0L6x\r\ntu1yNUDbc3qpeIJILFprx87oPG03Ttksv5hlAQczuvw0FIEVO+Bkd8HuzVWL\r\nAaSIVQ/fFsYQCGzF8PLps02IwUDnWYcah519RvklPQyMhfHVja+pM7dGgIx5\r\n1BjkJSZMTm2r2dvokTgmBgfPzyQGSYQpJOo=\r\n=KYN0\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.5-beta.2_1653377414768_0.5297198860420855"},"_hasShrinkwrap":false},"1.3.5-beta.3":{"name":"@midwayjs/command-core","version":"1.3.5-beta.3","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"09d75fd3ddd795c3259c6c9f6add0ee7ce509f6e","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.5-beta.3","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-fHur7DoSllNTikYKjKC3GHvrV9qREry6ejDwV9VrwnobqZkt3w2hZPgnZSqLpISPdGv6qW71CquqXPp1CRkXVw==","shasum":"b2f6ecfa2ba60c1148eff3326a132f06c4a995bc","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.5-beta.3.tgz","fileCount":82,"unpackedSize":245129,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAiJdmBdcpK64kFUCyx9oQ4gLNV8tYohKgKkAMr1tPRLAiBIGTwrJItjnQ8O08F6Qknv5dHa++igBDrtmUxkanp5zw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJijdk2ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoGKA/+IKkI0kAuuD0J2hjUNivewLIAbrzxpOf4TV60jMy4vN7g0BtK\r\nfiDXVubSXK+frMBjLGvei2Qwzmwh5N2blr6OrHt/t7olcraMPCd4R2pRQ62W\r\npA4HN6qVvWOwYzBMhBMJGrOr5+Y9+2KNSR5C/tL4i1EkasVU649wOPTV+S3Y\r\n2C9fIkTzMJJ6Vsp7UrMRoe17EcXR6MzwD6zTWgzRiKXuqYVRpjv+sHa2rEJX\r\nt+yNt3ZZzwkeoxN8mdDss7LpB5owykudVolSU6p/YovvD2T/9CDxGnLM7m7L\r\nZpIQkdhgRRDoiDuSQwBDdOrvNovD9LvO/CwiweU3LQLdoHReyh2vwZH+TNZ7\r\nitfJBS3whHN7fKHvs7Dc5aMaO0Nt4CztnpBhb/lnRgVO55+pY8WR/xwfj0Vv\r\nJQKWK1BjPcPTAVk2ou1SIdnEnYTWoCn6O0uXJI57FdtVzNGen9MkwE53ZL/q\r\nYxX2IIkTkxVS91RcZlQ4Lv5e8ED1egovzaFcRsgEfNjKasbeEMuateliJgNb\r\nnrb1g/LdVGDelQFFT3w+PHD1cD5tq0AWAd2JPJgKkrb/v/55ip5ipDdvyoEJ\r\nOtHkQ58pw91F7ahRaOAAbBwGrEtvk1LwGkbpS3VgD0J/XlE4+JSPgUxPSLbY\r\nn7pnLeObuk8iEqvYKWSqSmBQK7vM65+mI/U=\r\n=speM\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.5-beta.3_1653463350664_0.6214662475361732"},"_hasShrinkwrap":false},"1.3.5":{"name":"@midwayjs/command-core","version":"1.3.5","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"6ea76a7c528b9828420bb9ac4b061ff9b7f71d2f","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.5","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-0+9g5N1bcrrG7dNYd03qp4BbDBDE/HYhZEWVw3EN4+yV9c2+pugZYsp+GkQmeTwsZuH+3e5z+EGGLPXvs0PoyQ==","shasum":"ef9d66b90aa402652b5e144c28f2643123e1a0e2","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.5.tgz","fileCount":82,"unpackedSize":245279,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCpyLV4kBnsnU1n9CfDvBVWzxn6Dsihhdpeo0IwTso1zgIgZPVGknIoqaHiJDm2tzsuQV8xctq7zQ4Sb5XP092N0sE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJijdvWACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmow3A/+O5KDAmCCLfsWycCi5MeCMdt5TZ3gawL5Vn/9DJyxUtv2nwBa\r\nhDbgJGAdyzVi1gmQ/pKc+KgIfN+qlAKHyTBkjDxqinL/pkcyx/QB026x3vug\r\njVb63KMgpLIvbJx1ui1TYTbx7/fDlFA3apkBlktDlcQi7N59FTTOaIrMHqD/\r\nJ5lbFcpKgFcH2Pyd6vO7iKESVgRvH5E7Xr8OqpUk/PqWv7to0HnHmRJlmL4Q\r\n3n0ICEfL/Fju+p5Pq3uiYevJfbPZon/wkXqRIbf8ZZwD7o/rpFDMLxoeKRlW\r\nqtsRftV4pBenavzHwo8sGFLtxR/iSBclL7E/+IfN4yQI4QVWC585x04q9OsG\r\ncX+cg0S7Kn7WkMJ+eRsWSCfnoKaHG7kGUhRtGQS9sHmhob8EG6q4A6l75YNY\r\nO/B78GTNLj1jIpu7OysJ5ywB4KVAxTP9+uk7mMT0ZBtqzGiEwCMjR8Rr/MNB\r\nlzPik+qAM8k8A46PgQAqPzDRIt+TU87XBzCSUxR2tljvMHHvFJ/ozDeuHLNY\r\nk+cMSORj8V10IANM/6HhZX+KLalyc3aq3af/gVSZijxqQcJMb6c90MfjoHI2\r\nksvqCFSfCB+uKK2pUhbtf8ppspMaEt+nH8Jxq/4+zJDtNbtvS5taeAudvVcJ\r\nnYL0zlxa6kupWRV6Os/+3noU74YLUEYlpVc=\r\n=ti3S\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.5_1653464022309_0.9999538794496945"},"_hasShrinkwrap":false},"1.3.10-beta.1":{"name":"@midwayjs/command-core","version":"1.3.10-beta.1","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"globby":"^10.0.1","light-spinner":"^1.0.0","minimist":"^1.2.5","p-limit":"^3.1.0"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"~4.6.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"222c8f8cbf09da7f6a43a36a29fd32d7634e8760","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.10-beta.1","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-BwYd5s34/K000v1VLC58qGBJEiglaj7VnVHsvKsVPdxMuFVCdlDz/+cinnK7Y/kAb7DGZ/AdyjlPQe6RH/nOmg==","shasum":"13ddb85f12614815e31b31d238c901cb6bde0fcb","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.10-beta.1.tgz","fileCount":84,"unpackedSize":249796,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBwoYXy3mu9jkjiIjuYifvK5JB19fXMs9pw6o7MzBDHrAiA+JovJWoHbrzNh1pmg+9OfwuM/WwEaT9MIdS/iupQO4Q=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi6jupACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqJSA/8CTq9cV3naWiR4HB1gZptiP2Ffxnwoe4pRXfFjsa+/rYa29dH\r\ndm7q4ePBQP6qiWBiFk6WxEl+Lesvvq0H1ILSeQsE/tYJyGrEIIa+rzPLu5IE\r\n1w6DH1zvGDkR1H7fM2X/q1WoU7shuVVwl2cafQKCmnYcGjVi5rHOpoOcTGjG\r\nAWneE0QAirlz13Es90chjfRYfFdy+x1/BfUZDlRCyyg6U4YfbsEUtwggHUHc\r\ngYIIPsl++M661Wf9HM4p/tfwF9amvC1qUa4Ms9wa9op4WpF5jJgElOaP2yrc\r\nJHr5PrEMtydPG3GpMJ0fej6h4oajUNL39WJAAqAdvuskoofNTNQHu0TTYaYm\r\n2Xg4ZgEzt3RA0S+5HeeKIJz1rmuN8/q9Uv3yXVSDaJlj7naYbcNJsHRHQiQL\r\nW0xxoY+/fafIaAxCFBqSCzY0cycVrXkRgZtWk9cMRe7GEGeZxJIlp2jl20sk\r\nqQ7wSTF9IzrE2vOV/bE4xjVX9jtFYe+dpgpJZ1p0Z9zNy3w5BksG2ab5LVDG\r\n562+AftWDU9EOwW2rp8z4VzGYrX0wnP4YiGrCpCC49U4bMitqzoHAn8GHpYL\r\ncXJiZa+DA/YeczilRZPClKbwhWBkfq1YUeVKWvUDI9IwbUEanNhUcfhO49ai\r\nzTh2UW2NoTd0jF72OC2jobpEiR1CWG4XZ7o=\r\n=i7DU\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.10-beta.1_1659517865678_0.4848958842808746"},"_hasShrinkwrap":false},"1.3.10":{"name":"@midwayjs/command-core","version":"1.3.10","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"globby":"^10.0.1","light-spinner":"^1.0.0","minimist":"^1.2.5","p-limit":"^3.1.0"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"~4.6.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"d1efbbc188da05a027086264b7f624675601b6e9","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.10","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-2qY2iUSg5mJmUHoNX/XHmyhHIdfLkJp0LqvyZLs5rHOqMPi/Zu+fxxZs3RvcqhdvDOBZyAnjVBMRNE6uZuCWPQ==","shasum":"0f63b258a83b6691a46b8ed7f7e574f32c8ec732","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.10.tgz","fileCount":84,"unpackedSize":249973,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCLqhkko6t+j5hihnvviHDdnaUwh32pOqH4oIph9te/rAIhAOYG1Oq+xf5IErXe6mS2/PPP4ytpkF9hBWxmTMyunWKi"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi6zhyACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoG5A//bVQYWwy7yGIe8kl8LKWZ7VfKi/H30xrtapza80vKGQYhGTuj\r\nbSpkSZISkxEd7YGjYyVd8GrFpqn4XNIKiaaTcoP72AgKegV/1BTlp9/Dx3Rj\r\n+ZUc6ZfKZIvUYLcVQcl9dt8kZHq7Besnnn6QFVg6frFBLyuZBKjIUZmSTmjW\r\naZN5ni5PJbBPS2kxriuHuoGa8oRa0CzvHdM6bMlnr1P3CEqwKEm39feeAIKM\r\nEczb6L0CLpwdwYq0+0IzFlyi2UWwG1VBtzgA0bVC2wKls3ooKYKXqN3ANZuq\r\nQRlZdoSQR09hO0sRQF9JVqF1I2Uj661Jos99jdMcxBDeFUk6N6bUe+jUWmM6\r\npsb/HBgF9ZggYH2VD0XdanCpM34sv4MSHK4eMsoE+aQ2JwNa/UJCmtXs4DqA\r\ns97ipwUuDlHvXB2+wd6XxzZyUfNx/OtIe/rTH4QQOTAinFvzXWY1AQNTu/XZ\r\nfvkqtjumjVe6UDvjf9EWRk1VAUoUaKkQ/N3pvGpDwyGRrzME81+kn7iq0+oz\r\nh6Vpb3/mzrtYIgNYQ0Na7J7TXGs8uPcgQNO9VTYlRlohHVDTb8KnhYuJwlXs\r\nqcOB2aIHMtrh6TNjqgR0ZtlA26X0dcogQAuCBSEdkNALAl9f1sup0rj3KEh+\r\n16cs66uKBZSOOTLVFN5Fjtr0BC+QAXKA5V4=\r\n=gsxS\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.10_1659582578388_0.8095399963626806"},"_hasShrinkwrap":false},"1.3.12":{"name":"@midwayjs/command-core","version":"1.3.12","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"3ed09206a2cedd363ba707a5f6ac0160540737db","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.12","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-/mxa77Kci/0ee0f8x3v6qNoYGeyr6k43uXdBLFM9+2l30/s3awIbga+tj72neAfgkCormE9CMapQV3Ts/UB9XQ==","shasum":"4597032762486b7bbcb6495968584140cfbaa2ca","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.12.tgz","fileCount":74,"unpackedSize":232968,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAcaXHzoh1pUpecp9uma7jfePuzJir6g/Fh55DtSuXF/AiBGvnsQ9PmN5glv39s+Idyr7BNJp7X3ZQ/j5OuiMdXvCw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjBzcBACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrtng//VwBbJk74yCO0efGit7hbwU7yzx5H+elqdG96wmyDY2cvv6Hd\r\nBKtTpx3Nv2OFN9/3W5LfU8GazTLWyjgnzNRZGnIfB4g/oCSfMLax1159xhoq\r\nDeuH2p1Nh+I5gu8P8ryIEE1B5Q7gm+Xkaux+cxqOPTo2dBrBiJO3tlGaew+8\r\nE2gc41oVAgwipP976BXKfn+6SNK6gSb3+zCMLDZnAcYOSx3v1aJuDhZ04d+q\r\npv+in6GVx03f5cF9GfoERRrECcVBNATUV6FSwq0zzqNJ7iLUvjznocisFSZU\r\n2gy2OSXRZzwlCHr+TX44k3CHXc8LEdlJzZDqzDZ9ZDuT4pO9rDaEnDDUQrG9\r\ntwF20q0LgwqSUEacTSuCsTG/oblS7D2578shG2Eor1IhEXHNio2/3b1dYrJ+\r\n/M5FZiGmBzWXa7Ewr2nwz8un0r2mJXqYyxKbMo3ome3DqDLyyanskd+UUsyE\r\nJGUNpshh48nbAcGj1kE4iY5gXI68R/PX7m0Lm+vJaetDT4eiCz0ChZtW0/TE\r\nkPvtBXuTy5pTGmPAmu2GOFVv77L0FZeOZm9uCeI0iwdmrvLvzTxoioIvKbny\r\nYbxrUyZl0nNSh/x1gQhOSG44iL8CCfJuqIRsrsP3PmijypHVH4gmvFpWxneQ\r\nfV4XU2rU+Gad81y1ugb323mgYQAYUSwEn8U=\r\n=D+fW\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.12_1661417217259_0.18360318635169537"},"_hasShrinkwrap":false},"1.3.13-beta.1":{"name":"@midwayjs/command-core","version":"1.3.13-beta.1","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"94231cd48c74050a35e6f5d8e6403a41d1d8dbd7","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.13-beta.1","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-wDbdlFLuVd+LJwaI3hXsqMXJInV1rtcrZeMAPJTtBf+pa9J2XV4TdPJ0kAnZVWfAigBuhNuhHuQZNlpGer+UHg==","shasum":"d2043ed5d7f0fb3523efcfcc1f8bf6e0d7ca0c18","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.13-beta.1.tgz","fileCount":74,"unpackedSize":233142,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD++0PvcrhkvKy6zeUai7cwX7QfWLYp7YQbxpFNwJ3xlwIgT9g1OV0xPxIhJbywOCV6rYhRofiFgMcKrccpmr8yhtg="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjDDqIACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqXSg//ecAzX3T3ycvN4g0FiW/+wFVurvJVQodE0H6hEGjc6OqwoHjb\r\nDkYvWtzNM9/Cpm2byti6Pj9XbQ/gZuGBIBX/9BJ/UdacavvOWZ2mB9XFdgy6\r\nMts4fkEwcZZG11da28dygPyThFIPJnHEkIoKV4UsDsWVarRmc/MZQmKdutdc\r\n8VSoefieFqS/AN61JAjzmPln037KXyI053goKb642frVj94/FouRL9CGc84w\r\nsDSg04HCnGeee626iNo5UZcaAUHC0aNuSzvpMuTYFERnbUcFTt9Zk9RTcW/E\r\nLaS0lKVAoCty1gf6txbWGvaqeU09J/aT6fYF7/7Wc/cquXqTBrXVAGWcMbSa\r\nNsHlJy+U5QhLmbVAz3GzIcY7eayCMY+fP4ohN5rf2N4xQcnoBUTAXVOvzrjz\r\nJLoWQJ5zt1PVi8c2Mw2pUwp/9nygrO5aGRCXalq75AE5BoKGSqtSER30qnR0\r\n3nIYiCrB3tUxOH2s0uwtosJ89adOYPKameqqV+ptNbdVclZ5QWGdhSSjkexs\r\npf2I504ko4WlnqT3H6YlsEVduY+aa6bIzoeaqCHAbhLlWWYRb5mP2N9sc5ou\r\nX3trG/1zKOEzDR+CjEN9exPUKOlPQpUEaCoixgXtc92mtDNXWtHMySj+81/G\r\nlR5TpDR82YNvnJ23Asz2EHLEy+/nEq3evOI=\r\n=SUJj\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.13-beta.1_1661745800667_0.7331759437702186"},"_hasShrinkwrap":false},"1.3.13-beta.2":{"name":"@midwayjs/command-core","version":"1.3.13-beta.2","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"d1f2ec84c5eb2063728b16b69887b2b68b7664a6","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.13-beta.2","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-hYmj2xZCAyvW+IRcfiM6lik9zrl6Kns7C7z+bAZF8GC4diWmnMah2Vu6GZktiLX61vAOPe4XRpL51gGBDhMtcg==","shasum":"a863e97cb20226cf95f301a19bc58668666da95b","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.13-beta.2.tgz","fileCount":74,"unpackedSize":233316,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+HMnS0V6h8gGhzLhe9LdeBfsLUVLnP3YR/6+1KObiOQIhAOW8dE/OJdzQndfrd0fwoyY1Cly/4X1k43JUJ+1Ly5t+"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjFwYmACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpznxAAjsdXAzRHj8ainsY3S+LOBbGbFLSEFnqDQ8S9jDaD4Azmpq9F\r\nAg2DQgxzhywnX1XAaD3kIw4Tr56AcLiIHa3jtnSeTKfukePUBzvOc16Vt1sx\r\nt9xk/H97kb89aukgDxIpjZlAm8DCNh7KNx5nC3Mq4zUqdBwDKznfhNQ1NUR0\r\nsqDVS5UM0r6UjNHDenBpPj9CinLK+ptOIIi10D34ZeC4EKx8aZuLb0oP2o8s\r\nGrTba/uYeczwRpbVuxzJtdkKrSEP329IyYE7cA3DPnIdg3CEiCh4lzYyWnmD\r\nqX/Oye9LfNCj6G+llERFec7TSYnCtfQ7MjLY3LuEvJxaYZ64UoDRuwa/l1g2\r\nAHeeBWtQwLhxNbZc3MD0ota71Ac/mxxCKGUpyiquHoc8fnugIhGkMgThTYam\r\nGjbJRIDj06nP8t940dM0SMhDC6GWs2V4tvfegwUjUIRLfJ25SgFfw2HNPxxo\r\nLbDDIflZJLLNsqg1B9QV2C+xPqEjogiiA0Flpdt/SCR/1N3ysBD1TIDzKLYL\r\n7pY4xK8p0fMxaxqBG98iIyie3TkTMSQAIthafY06cEaZoKyUCX0HGt2M1PUp\r\nFELCkf3yf0DVSkb8kMM/ZBQtvn0QoIRE/jh7ScGXoNY1FoJXcNt6GUtXdG7p\r\neCcv6QPeMeE+uoUSkcHRSj12N6vhqCLpXOM=\r\n=DyV0\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.13-beta.2_1662453286255_0.34672191810128616"},"_hasShrinkwrap":false},"1.3.13-beta.3":{"name":"@midwayjs/command-core","version":"1.3.13-beta.3","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"feb6e6db71be1c9eb45ab51cd047ddd68c650261","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.13-beta.3","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-PhRBg+gSmWXCxHjP4nQbnjGqi3XYblRD2yOr3cB1Dc2MVbsx7Zyb91N1P6k57SKeGxkJWjvKkcdVIKin2Hs7dw==","shasum":"37470de91d0a4b3dcc1f4da21413d058d5919ff6","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.13-beta.3.tgz","fileCount":74,"unpackedSize":233636,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCbLw3oCLChXfGhK34/0MyYVW8dnI/oaxA+4Tue3A07yAIhANy4vu+RNXF95nvWO3Lcw5ScEAARXzREkIhco8/7iwXG"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjGBRGACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq9YA/+MzZfu3j6HSPbfn8RrMfQAEQLfD1TyyD2SLuJ7BSJZsvS9AV9\r\n/2UpVDEUIu4Tn57yNu1oSSKIZORgSLZxjeZ11TK7NoUy/e1UXDOc7MmRcKBA\r\n2yo3ccEBRFHWcYhaHMB4OTCFGfyUXFiluz7RCHbVjZ1/ItikASCLlcoQsXOU\r\n3pDYfxFHgtiSO0ugkY7RzNS2YaQwapcyM8EB2+jZAjsg+F3XWNn762jSkPLH\r\nlC92zKzhxSZjr4wXYPbVl3mq+0DEjc93/1xdTfd7qhS6mfd0mejcZyajMDiB\r\nsBDrPCeeol6Zc4n1ipnXFU1oiNCeFmv8ksge2aDLpRB71QScSkoDnh8Wl7R3\r\nN7BQhqpLGn+tSwRVjce7V8GX9+2v1zQbOW9B4+U4PRX7ostrF7LYWbxIv6sO\r\natGCH0dPtBZRdW+l062tz+KYFULGyVzhVieZX8LmQ3s8YqsK5MR4bwVhOXVm\r\nBm4yi9mcPXSiaqvEy0M0GQo+gmfGxip1q3axO3F7cA/+ndd89mM3NFmf1aEJ\r\nJppJVM9APIemkjRZAP2PSqKuZZQWMitFxzUqdnSB5xPS12i1thzd6cVZSYcL\r\nRRQr+74MoGFpK8fhYjHEmINyTHJWvk05MCgG5Ck9Bs3z0Q5WBkxVWccuRm/t\r\nxlqjdHfn8tFRGtlGeqrUfyVl7EUars//IDA=\r\n=fJnA\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.13-beta.3_1662522438552_0.05524246013505185"},"_hasShrinkwrap":false},"1.3.13-beta.4":{"name":"@midwayjs/command-core","version":"1.3.13-beta.4","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"96873feda038ef462ccbdc2122043d98fdbf73c7","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.13-beta.4","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-I0nEj6ZC7+x4SRTdxaWYUkXOlJJYkuoz17GlTPLdwFpcfFUoA7mf7BUb9RzZ/dHtAgGjh1NmbpzhoSnG7f/uaw==","shasum":"ab749a6906654a6c85943772fea8022fbd2a0791","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.13-beta.4.tgz","fileCount":74,"unpackedSize":233810,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCMW9xkf45r66MAk1fotRoin4ZU2D1G1YUTezCGwvsZVwIhALCG2Mv5xtYgd4D6HWEx0Dtp+/7g80bIH06j4UiocfmD"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjGBg8ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpqfg//Zr1z36g3LhhwUZ550a2kj60c0NqGc+R+se0HB/s03KlKgUjJ\r\nPkcENzIrkTXZ2C9qnlc1P2C+Vo6Wx5bJ8u+aRKRT5JYW+9+gA/2Sbn5Z6RaB\r\nqrVjMHXvN8/MM49YnE5muqPbMwPO4ceGoyZ92F1YarqpkRx5MJCrOpuNUtpW\r\n3ttjEvQVIQJeUGaUuXmEKGrwSjNoYgWfFv+gzXyFGtrFhC9Y9qLSdL6BukuS\r\nTq7p4FKBnvpArtgoG8GExuHoj0bMSLmMW9PUQOPF3Ry5xh2Bm+/uscn1OIPJ\r\n256rlo8qA8YYOhSIjgPg9ZNRaRddXCUgMkdlfXlHhDqHST8wiaxKceGagST0\r\nYmVeknMGV6lcy0Pq5NeqzgpkidCioCYkdKcQgTe4XnLJIg8r2QjF7YyZexWn\r\n2pwdFWWNFQZ4EzUt/PtefbEYaX1QGw4IGEUfvlo36APvZyFSVLzXIEVbCtYJ\r\nJAo3WSEidJYxczeAxwntLFTSvP0L2hAk86IBtrbZcDWQF/u1sxuxxBWDySgt\r\nG5UoMjTjSWtKVYbCOhLVft6nvC8LO3tPkmIv+eVPsX8PvCku/BefFGdJjnBC\r\nkIruovcxfD4e22aiRS6FJar1RSs1Rh8aY+/u5TN4aXxx0+VRr86tob9Bl8gZ\r\n4J7dyEpuBIQUkeLbfJfmZn/g/Nl3ubmYdnQ=\r\n=TnyK\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.13-beta.4_1662523452196_0.7088031186489128"},"_hasShrinkwrap":false},"1.3.13":{"name":"@midwayjs/command-core","version":"1.3.13","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"2387cc23a730b7a3e37e9e66084b7907c382fbf1","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.13","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-jdHwT5QB7QHbxF8Tcyo1gND85+bngYkck7biLBdul4VgGHTpvn5l0nxj5L8vhu0bCCRQK7YF6pvwGc6bmKCrGA==","shasum":"53adfcee6946edcd557873f7f44ae65a6e806e55","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.13.tgz","fileCount":74,"unpackedSize":234999,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH3cmTZblM+1R0cstO87FQhJy9O5zmq0+WfCIAYEr42vAiEAiIoyIblZPgQkbtZ8fwSJcFYZSN7BcQcrpP2YvRFXn7A="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjGDbbACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr6XQ/8ChtmO+RpyJPGpSR7AH/pVrGubBoS4nJrC5uZX/b5syq2x55q\r\ndj4w/l1PzTl6Dy5lo98NJjbJlWnqWcxkRVQ2KSroRJcbzlq1XZSVRzPik9UB\r\nELHNoHNw3APJhaENWb3iRiDWADMdxwkSOjxiHLsyqUFNvuPjAqtFT+zfkyW9\r\nB904WwYn3p+osIfvaOlMOyalhFFy+Zgs0WksawQe/cBAQDNpBavaix+rCBVy\r\nHbK2yKl45A5ii0igXOmgOGRkeMY4/TFGrQhkWDm4dQpGq4O0Yz1NHvFyGt9t\r\nMamUSarilN14XGrvQqdUyn6T0gb3XVHe77LZJKBsV9Imh0Akhmr/utoIt1UM\r\nSFwxUCCrI6cmiyklCktaM0qmt++PQgfrTMhkfju/gPVaOEBacOqy9JUTUN/S\r\n6HcwUTlEE8nBka32foezBLX9TKKZfLSAV/tnWqbZGjZyhMjYE6z1JzrRx9Xo\r\ntCAGzda/bFDsCAksRcGozjRSz6qfsdubiqjXKBoJRejzDceSfCbtx6irJfCT\r\ntx+Owkvt39CeMSqSIkKOzcY/BXmQTYbtMWW5JuzOqVUugTQ6gw85zJ767Q42\r\nvu78ZLI64JcriQQT4XJaMY3C9EkAbNpVZ31qFayunTRo0kvt/1VMipoc4FXe\r\nFqSWW7GUETlaas+HFBdsF4+K+dOYumu2YIA=\r\n=CKv/\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.13_1662531291692_0.08821875936019352"},"_hasShrinkwrap":false},"1.3.14-beta.6":{"name":"@midwayjs/command-core","version":"1.3.14-beta.6","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"0a9cbecd54819544181f5a0b2d8daaf56ea14ae3","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.14-beta.6","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-X0Fkbk3jZXJNcvyPkClSUf3yawb1SfRBjaF1rnwsq5iqL6rsprAZRaEXt3VHiuoGxtBan2PO/QarU2wxuy3MZQ==","shasum":"61be8b025e50958fbebd8d02fa946200a56a17a1","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.14-beta.6.tgz","fileCount":74,"unpackedSize":235180,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD5LtqXLB//TRScAutL0Z97U3gIAHnQKcJ3AP/NRHE2ZAIhAK+W0xo4y8Xu0NueTAPdO9aw/4qkEQWgvo0rwf591d3R"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjMVZ/ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqmkQ//WWccH1DluM14iUEyzUFGY/qfz7jl6aLBo4/u7Zwf4sCp8hdf\r\nTYI/i5SuNAdygjCZHScrNrdlwfdGh1yeykjj/eOvNFyU0uwbK2XpZ+RRxcfq\r\nX0q1PMV+O3hkMlJpq1KM5tsGeiZt5YmsddRrQPEsM7q/X9QF6kTby4+A5xn2\r\n/R+GZtIwQzcEEyKh5IbU3KblqDs1mOz6MrvlUDRk3kmO6bXYeCH6YMrZv7wP\r\nz+RtybaJDIr67K6I9F99H505ycyKTUteKr3S0IA+yVCgONfgIxj+TyV5vm+Q\r\n67fGaUNwBxt4zpS8lNErXMkAC78WrFdNeTtVMQYMMUdoDcOuI5jMulwt2ik1\r\n+xhL7m2rDgtDC87kmWgQ8ggzqUsBE5f895egYpIzxxhlH8Rk05NwaGWLD1/e\r\nDrIUZCho/O/OfuVINStVOXC0wqF5BbgE7UCuFT9pd8WH0Qo7CxUOIqw1CBlD\r\nkztQgBWAQabVuSbOLo5NqASNu75czwLX2dsfjnHslwiDu6YR4eTc9Zk1Dlv1\r\nDU/tL1c9GkiX+dT4RTB9q45pvxZdlWCI+S9H5eYTAo7uIafqXQiLQZR1+yBu\r\n1NS5BYQK8WRa+bkjKtoV9m7flTl733gvwK33ugqCTxhWhos0PI2hM0Oi1Eyt\r\n3b/ILI+VKNqPv8bR4P3PnN8xC4MPmj5nZOo=\r\n=iNPq\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.14-beta.6_1664177791294_0.6528782556948876"},"_hasShrinkwrap":false},"1.3.14-beta.7":{"name":"@midwayjs/command-core","version":"1.3.14-beta.7","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"079ea11cfbeaabb4d2ed693cb7069f7b2be19446","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.14-beta.7","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-ZS609GOhmCR+AFedLhIUNeoY7MOm2GzjU5NUOzl5YiYJyxqlU7W8TBD33gPEEuhhPRZSXBMavcEkRunTdeZeUw==","shasum":"0a98c11fdfa81698c20b504b7f9d8e605c231e07","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.14-beta.7.tgz","fileCount":74,"unpackedSize":235354,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCfFcTym+EdFj97pHgIa7CXk/LJPqenbKlwpbThM38/oQIhAO0P5iSCxfJwizNQtw2o10PZpTgpOoFZ/iJ3ynHb2sR7"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjMluoACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpyuQ/+L5a4J9Aa+JrNGx1OB5tu31BgwSuTzR2eFUozT0bAS9iZv5T9\r\nHrkgG+AjWTmlhelSIA6nJ2jiZJkjiSShH+4RTXZ3Q1tmHsO1D9yMOMH3dkxS\r\nwM6muFgGGqFf3tX8uuw0ntoNSfzc9FZfsvfWUA5N/ne7ICRntXafHVNpgCrL\r\nsqZfzqSHxiTpuE+9KUc2okxCtyojg2RHDzleN1KZpfsbt4jImdJt3u8FBKLk\r\naQx024brBPZlY9w7cCPw/tGrvvxBQFjQR1ePh4U7m7UpT+qLMIwmblBaJHaw\r\nikBfXfVN+BcNulPRYfxHfVvYIzRixIPWuQgTegi0Ikas+Qhj6aX1e5V9TLaV\r\nwPwMYTX5nUEwoH3MV0/cfR6sHI1pNJlkTzBZp4dQnDk4oeOQgcVXiF+ibppO\r\naizRUm0GTyCZHnRp7wXBIcoH/0xoE8ha9Ss2Ygk+gAH7TJ1DNvskFmB73EN7\r\nzPW2YC5Bl1n2Ekd/oHc+ZwUeveIO/5D57IvthPUVWVxkX6f4zXgO1emNo5tf\r\nRD96XUaP+ei5tVpKVtPoi8baCshJTLehDC8Mh+Vi1M6MxlJEb8bciZTbBta2\r\nuagyWMr0WWj8GsiKTCKniPZFSnGrPJYSYIp0yKBlryMrGoZwNdslapE1Q5zN\r\nFliJt9IPnrKKkOJXOqX2CTLB1A4NdBlSlb8=\r\n=po7S\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.14-beta.7_1664244647963_0.27422070383781616"},"_hasShrinkwrap":false},"1.3.14-beta.8":{"name":"@midwayjs/command-core","version":"1.3.14-beta.8","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"048751fac25edbacd5184df4ce0b8f92eb59d223","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.14-beta.8","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-qVUcZeBlF7Bl9pLX3BgoUJaEPhASI/wwiTmw1I6sUA0gsUN5mY3FzcVVCAci/HfG8efy3A3eXCrtAKAjnVym3Q==","shasum":"8b946fa6d465c156988df3a972b4833cf5be2c31","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.14-beta.8.tgz","fileCount":74,"unpackedSize":235528,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICM1BqMVPSGt+atdIpskTo6yR16uEMrPRcZlAbbT8SCvAiBmEEqda0lL8JlWp20VT0CSThiSFFSz9oYfjDAxRITcgg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjMnHfACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoFHQ/+P2GLzAqf0o3Zu3xm1mLfE9/pW4cnOIwuQcFO5CowsKC/k0Ez\r\nxlEqWlHCjadwLU/IOotAR7YQZuRcwpq5vT+H+wmrSbRUgSmoEeqU3VU02gtT\r\n7Fj70SH6y5wKTG8r+cynFbO//MAizXhriv4e+mn5UeSCK/gXl0BKDwvz0Kjw\r\nBzwTKhqihemUZceIM39Uqr8zOvvaG/Zvz591bfWgVGXpoYHi9mAicDsONO2w\r\nbT+sUEdxMxu60tjwHkrso1o8h+4atcQ0U6mGF83Gzre5aMQ/xqboiRHlVQhJ\r\nPyT6YDgJEFsh0jLhou+Mrt/NEwrkmL4gt5zz06kFObT9JpAUXq+Sx6ihGQAw\r\nlfUPd31eLBA6BNqOqjcpKXXlP+xgY0HY1wp0dEAH20DeVNKQcRjSir+wPkrZ\r\nB+yDzG3xzMeYko2lr+sFrHqu5PYtNQBeV6jCIoOwZDxOLPNavZ0z3O3FZBRV\r\n8iDHijsJ/cfL4xKAPjDO/yCoki/p3JCAZyULbw+o8O2oa3T242oAPyi+I054\r\nHd4niJykvEP1IGGDMdZMdhsqkFiu0q9AEWRyu9rgg2e9XZFc5a6x2+gui6PK\r\nvRAZ22GcXCrZ0jYZzcd2rJEjZQmeQI89PlbWIzuGxxVlxdMlMXZ+PvSXnBvU\r\nZ0JP2HhOYJO0ChsiW3WSvcpBOWXupAm//lE=\r\n=NYEI\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.14-beta.8_1664250335475_0.2102200286177387"},"_hasShrinkwrap":false},"1.3.14-beta.9":{"name":"@midwayjs/command-core","version":"1.3.14-beta.9","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","fs-extra":"^8.1.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"65c6e332eec78d3b6966d938868e6234766e7f62","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.14-beta.9","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-zNn8id/xIWoRJVoStZcUNq+kSRgrDt2yYfcQ6GxUHMQj2b2zcML/iFWN00hUlphNlHsz5GeoIuUenaCEfbrE2Q==","shasum":"ea15f981ee622796e6f9ccb27ceb5c649ec32040","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.14-beta.9.tgz","fileCount":74,"unpackedSize":235702,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHJLZ5hWQLkrtk2Bpl3SK6KrypRTZCtkcuAYwv9SSOT8AiEAlH0exj9t1Zsn2PPr7N/LTRbdTET9pyW60Uewh6CsCVE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjMplVACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqp3A//XgzUPdJvV8SLYQdT7NiXYaX7l+7Mh3kjHS6/UHJNJrQwHh8g\r\nomkXPexk4GoV4cyPhKrHf5e3iuxcd1qPeQR9wpIrvqwZnie2k3Rnctywxvgk\r\ntm/GlT5aAJUSC8iBiMfoRUZAtG9Vvc5KaaISF1Mm3IA6hPlXUb2OR8Q9hevg\r\neyR3DAfbfWQ14tp4yyjmbmHXm2VAGVZdIvXilWIFE2iBBFX4PjXMG4DPS8un\r\nx991Ma9utmF87LCtpsaqJcrQvd38CUCWglgfuiabnaUtr6yHBeU1kELyrzp9\r\n9bp71aqI4uSadWn2JHlQwoHekhtsN3kTHHVNXWV/V9YoUkbk26OCSwFOojx3\r\nDw/ALIb5GDYy4YPyUk3VDBe/0mmepsfcG/k3vXJ9z6XKObgFXb1eZ/P8c3XD\r\nTi5c6+bqF1/VatmM5kK03O5Em6846JlKzdIe3xS3EFrezEobS4hiAVoczxFh\r\nNGnBvx0sm++GqjMAOUpkh5Mcb/UtbTIT47saq/thWlVSP10SZNVM7FyejN04\r\nfmtDrIYlVAxJCWHuNNi9MCykvCjV1HgsfMlTGLoh2G1KkmK6b1XjeYFl8reT\r\nbgdcLCL/5bmS+VPbZIs/TyuPM38vdxSzab+eoFVzAx6Gbcry1Wbk5mO6GBsG\r\nEHwxPe1VxGXZwLqbMgydxtc3gdEl1V668ns=\r\n=ym/g\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.14-beta.9_1664260437475_0.9385627660840754"},"_hasShrinkwrap":false},"1.3.14-beta.10":{"name":"@midwayjs/command-core","version":"1.3.14-beta.10","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"fs-extra":"^8.1.0","light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"3d7da11053d28cb3d6cbea0616bb0528f9c92bff","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.14-beta.10","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-TDFb85LSnGqgjln/mSv9ymHAfFmIJ0OtZ3DVLLcm/q2m6oXmOggvqTSoZnVgIGYOrpjJ8dob1h3mJl2FUgmJ3w==","shasum":"c26ec3c2ad6eec0ceed112918875c1e5d650c53c","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.14-beta.10.tgz","fileCount":74,"unpackedSize":235945,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICFQmXXOGF9Te/MsWB6GWSNjJooKZ2z+qEbnw3VPGaPtAiEAtQw5zcMp3be1+ZiHQlbZzE0oZDntJv8idoYh2rKiD/s="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjNpftACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoBuQ/8CR6TNIiy7y8oA0DR9K/KNHD5N+TiYrfDAm1lq5rk5gJVp/ct\r\nBPzdmJmNVmiMGQmyISBnJiFqbFZfqGKc/B4C6HLRr8VPoupfAkGw28jvS0qg\r\nHfIOwfkN8Lu5+4Oztvisqu3+0UwnMHflRV6FXjCS439XduabTTlYmKcanRpZ\r\nIft+t2YslM7Y452RB8dhc37Xx/Sw1wLfKW1hGnc2ZvvvQvpF79J7T7khH1ax\r\nApoppL/QLZB3tH/ujZyPlV9kEpl31RtWNZjG7g0c87QrXjssv6Y8RfPGsgr9\r\nsZquIke/6XX1GpL4mtlLwuMyfIN3wA4K2jaMRoMi2nbjRuiodvHGpwl7d/wV\r\n1A5it5v/v4ScM9M3tPTfnQfy8+3HNBRLrk3qNSL/kQfdqpmWs1oOvX7AFNYk\r\ns1C8nRDkSGkAT0jQjO5Iv7CdrjDx9QIP8DaPkxJzva66Nflzxb55eoup8KTf\r\nQyQYuf0Y6SsmD5uCcflTtpTYq/MSREBTypkSGfhtRWKmEXKnRNhGycefFHew\r\nTWlL923+lBhtl2BySZlqV3EFqsGF/MjLOwystleTqcQ6PB129XKDrv7Zfx5E\r\n7lniA94y1wDNF1HNfXN6CdMzv43BjOUC5FjJeVdVJDZ9bYZ9WqWB4pl/3tb0\r\n/wbRQRf0zPLwHFXnUi5wbTqYInMWSx4WFag=\r\n=GZhc\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.14-beta.10_1664522221236_0.5033184324045408"},"_hasShrinkwrap":false},"1.3.14":{"name":"@midwayjs/command-core","version":"1.3.14","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"fs-extra":"^8.1.0","light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"6c4731be972449984148c098cd3399197ab15126","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.14","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-sx582rFL+2X46/mfsUlvWG4EKmLXcTEKsYdNUPENLa64rydEfzY3FSF/qBus8YKG9a4NNOFZBSePbi2MDsTw7Q==","shasum":"65881a73247d9dfe564b025d71ca37568b5b7ba4","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.14.tgz","fileCount":74,"unpackedSize":236090,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGWWzgnpILhwYfX79P4WYiuwzKo4f6OTyObxhzh1ISwzAiEA0aNNEO6jOf9nELd3LzkDqQbgc5lDtlCBi7+Y1jEu71A="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjQ4vOACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmozLQ/7BXU/L9BID+JW/NjtHal56lo4VRRLPBdnkHsmpOEuRu4jwlb2\r\nvkbq6Z71pKzfIfPIwXKiDV8i1sOXM98rBruYGu4hVHXHhl8LfNz0c8Th33SC\r\nLvuCvy8sPRnavS7gKonPVOhalUKC9xd1L35Mnbgmz9+kgB61twIqfZ2NGTI6\r\nEv3TqcODEAOMwvJimJF7bW1NcVfslIIhHgtys1Khz4eoCN17PjYKSFrk3xi4\r\nc0JNaBI8pTvDICss0RoAJl/TqdjqJS94dEPBTRS3oP2AJAXYHNjUREuueYhj\r\nYAdGm4/hF/PtmmKF04siWEhiya6OlGjGQhQ/9CoCUqQ8uQnyG3FMFTKawwt3\r\nxrIbGokgGk25QWnDp/dre6g1hVq4++Q++LTflFhn6Gx8Q5UrIqgTBES4CJ9T\r\nd97oX8p8mqDifJvSZMQCYhR3bQYUnGit8GxF7Zk7N3qmESXWMf/rYB8XJCDX\r\nx8S3ea4xcD58lUVgxC3v3P0lY5LoiR++d71zJh1Dw3chjYXUmT3UIAEYzB3U\r\niwaFq2HxIcBbnSLKPAx8032/8UO6aamS5lCMjE97i2tHroQavhOK8KM3lX/+\r\n/dhr7BBLCHfOgKFlVhF+f9V2X4xR75GaKA6IJk0/V1hm75VECSiCkZ6kGQEE\r\nopcnR2t5/UGosksO6aG3I4TeS0b7Szb6Yno=\r\n=9QTt\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.14_1665371085943_0.8141598117154822"},"_hasShrinkwrap":false},"2.0.0-beta.1":{"name":"@midwayjs/command-core","version":"2.0.0-beta.1","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"fs-extra":"^8.1.0","globby":"^10.0.1","light-spinner":"^1.0.0","minimist":"^1.2.5","p-limit":"^3.1.0"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"9970c6f92afeb789ac645bcbfb2bbb0e771c4bf8","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@2.0.0-beta.1","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-faS5DhCtLR6bUdHIxfiiEHGhXWK5hZdfR+O+cK1On+utGMo+JAMjbJbaN2UeBaafJ1YfLItC6zJ8zU7SrCcPTA==","shasum":"1185b14582f21432a3d2d33153baf94c1a49822f","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-2.0.0-beta.1.tgz","fileCount":84,"unpackedSize":255683,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDqz9/xORbAvJlc7d8p/ULBS5Tij9GrzoITi/hwbU6YJwIgUAQKllesRT86a3hjY3ErV5dppl/3j1Zo0ndFE5uwXXM="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjQ+hvACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrszQ//bIqQFiyCr/uILeQFmQMFtss2GlVGZKEfN1y5vtXikMRDEllz\r\nAmHQFc3dbXwV+qhWSRUEM9PhbTbDiMLIfafAyQSTveF7QEWLbRzwsBzhKL83\r\nTGsRpUtPGiy0fKGd5knA9s5fVOG8MCpZZRxuoSoi0PQJ5giSRftHQl43Fdm+\r\nTl9AXO2EdoLtJ6xIj5oYLZPA4i4ssHv5BLrFJJryzqApPg2ZrCzrmjgLoxTi\r\nEaify+LoAlWoYXHwP3gh1pa3OjWQglOk+wvZD8TmZS802kbVyAvQH3ZBZUIN\r\npYEmpHdTxHBAZpXvkoe5E+XxeiRwPs8LXY/5hAiupon3k0dxfpdgQMBIwuQD\r\nxtDKmD0vY4WfMi0xdDB0GONOBDNKcc7V3CXkD8BY/bhd/ROUaTQM0/A+JlGs\r\nas7ePea48uPgzJbd+WEu1xdbGPulKUONnKKqrmvsZ+HllG5GNoEsckcXd858\r\n6s/o2gbKKOghk0AkTzu4nSLwsuiJ83zvHsb1//xZSNKrjIsaAWS8DGBjrwMW\r\n76QZxh/9pHlPMxqVqMQpjL24E2wIAvpoEC7EdAuw/0x5TwXfdufgdE9LVxWw\r\neVWaUrHuZ1cpi4u0OAwcWCx/iczr18+sC8gmQvhROqpj8F/dJ87eJ9e0+vcC\r\n6Pph6PCN9tCU2I7+z0b0vhRH3yHOc5P6r68=\r\n=j21t\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_2.0.0-beta.1_1665394799404_0.5230269877031288"},"_hasShrinkwrap":false},"2.0.0":{"name":"@midwayjs/command-core","version":"2.0.0","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"fs-extra":"^8.1.0","globby":"^10.0.1","light-spinner":"^1.0.0","minimist":"^1.2.5","p-limit":"^3.1.0"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"1e8de48a027335b39f08d80c5cdb74ae79aee83d","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@2.0.0","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-3L/pX3f7InRoy+QbQzUJr2cVm3b6U9BoVlzDiXa4Z5W//SEkEIewGi4f34cXkrmcUIUlM1vZGnvYij8/NUqkFg==","shasum":"c882eedf12640e0b4f14dca8a57512119cf91dcb","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-2.0.0.tgz","fileCount":84,"unpackedSize":256514,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGAxnNYHFmJKUX2JzlyXhQYnbwfCqJVIDdEzXMzBYHLSAiEA1xamn17WXNTQMAy6yIDvJi8wThmFzHuCPm/SyFPdZSk="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjR4n8ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo7Vw/9H09yUeSATWHChid8hJXnCeQw/pvPZ/NAdZBPNdt4FzvW6MiR\r\n1CHOFvjJuwiHVDekdo4d4lbPNkxX8SHLtqgfWpik5+n0HpKh2feVRSyrIfMK\r\ne7adCY4EIhNX/0kBj7BtUMcqkUUuZF457j4HGdLQeGlnnNnUd34OsAfiWwIy\r\nKcLUBCWitDoZhZBkwRsNn/svvEaBtIjP6AWSJuo7WcfJK5dmwL80hoRXXoIe\r\n0M85xofLqlJomqHT4RrJrbp4I62uuWlP6KFRXqfZ4j/rTC386L1QwVLrx3xX\r\n+Rvbx8fi2XKY7OBgdkf6Rn/rChCZYptbmY1n66t5az7Ub06DYrdn8ztxB+th\r\nqNy12cnX3gqQ+JSWhfz+lKZ73wcbFoQyu8mJaBCU14F2ZQxhTQWgQ2wXi4BG\r\n1vZZNnVZvFD3pSzMxKRgs/+H5ZeyNvXSBS2lNKkfY22aHaFq4cv5hpv0EEW7\r\nlDjqrxbvMmV4Kw2H5Sv7dSG6aE6HvmK6cSz4MZ+hteiyjBT1mU4z27jy1Zkd\r\nA/r1XYtNtjQemQ1Gl6r7ES4lVepNfx45Y6e9vrzBEJxnj4zCA2vqK1tFNCk1\r\nw1lLgd/0IPs4Xg1WUHzBsDjHJa1AsjMFvyZ9PsWuJd56BgkwiA9eumqaoM92\r\nutmrJA5xfZ5sM9W8f5EPcA19IyirPOVk8X8=\r\n=8Cco\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_2.0.0_1665632763836_0.35826456119479144"},"_hasShrinkwrap":false},"2.0.1":{"name":"@midwayjs/command-core","version":"2.0.1","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"fs-extra":"^8.1.0","globby":"^10.0.1","light-spinner":"^1.0.0","minimist":"^1.2.5","p-limit":"^3.1.0"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"bb8c768b47b96c13d53f461043d902be5fa09a2c","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@2.0.1","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-wfgJOiGw0voQG1QtMOmHAPUR7OUb3s+Ppa5EdiaLH4zk6wF34VZ5UcPPETcfrtmZJrVRFqUxBl3/0TY99R1tHQ==","shasum":"2006ec35dc962e94b2beacf7ba4ff7e6d5dc257c","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-2.0.1.tgz","fileCount":84,"unpackedSize":257352,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEU2unQncJETPouTSS3IAJ9d60spZ0xOuFUPKyrZBkOuAiAm2U0vdYwe76CHWg0zXj0NSUpHy7zzzGpX3tvd/BUyqg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjW3T/ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrufQ/7Bq3tNVfExtRPT5ey/JeQL+EvLSuB0eqiuL+/Hujrck0TPb2C\r\n78jbpwOjmAenL8q+cwOUtByhb9CQztpsvO0VxDpaLv2Qh2l9LN8tg9RSNZri\r\nOMM7zkFoFC95GJFNlq+5KPgqwYeNW6dOuJGuZdQUmh76gsLZJLdl99VqGSi1\r\n+JkSWiqQ7xFEgPLiRHnNhjqLdLiw5f1UFfrL5hB7FsZFd/tv19fz9dtPV3YI\r\nDYSmHy3m8+tcBVS/WQPVU+vvwuD/wMduNJmM7Nt2tNWGSnCCYKB8zxuxcE5G\r\nyTdx/ynzNBfriwDUi8IueH9uRNDGkvY/cEwN6B4lsCY6cKEkms2qchd2gZ+8\r\nHQI00j7PtR/YtSp2vMpmid1uLdoGXc/FJcVaBuiaCXRFZYgWA1rrkqF4/eRL\r\n/Xax3z/HZMp+PCpmjflH+rhH8Jj/NgnSXss6fHr2OPLITanRLVHL24KeXGFi\r\nt2AJlH8VYoErIKoekxRWjbiO9VT9nCyT96HKNEXcIvyoHGunKdlnkiAo9e4s\r\nHDPWrP/E4f5M9H5+bDlmImUC6i1Ur/a0f2+bBuCoSkYrMeR8MZEthywmoyAf\r\nLKcY2c8VVoE/PJTL/DY9EM6QGNdNRh00LsV1xJbGMr1J6oG0v2T3J3asgrG3\r\nLXLd/XFZwwLdBrz201FfweBLE91iie0KNeE=\r\n=ybU2\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_2.0.1_1666938111715_0.9696527978328462"},"_hasShrinkwrap":false},"1.3.16":{"name":"@midwayjs/command-core","version":"1.3.16","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"fs-extra":"^8.1.0","light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"c3b279b6a53eb25008bb25bdcacb354aa4e7c68a","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.16","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-pet67718Z7//PW8Ui3F9e3W8iSIVXFeJM2KONnizsjEmv98SqXLjLpgkFw2KID9p4Czwh4L5by/AefLwRxL91Q==","shasum":"89deacd1a9bcda173d49ff632635678033e855d4","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.16.tgz","fileCount":82,"unpackedSize":250016,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCArYNfToZ6Ez5rudE57rEC86ujQrAgaYq05/l3a3WHOAIhAJv56eq6X8WaM5kL4W5najK1wAC00bgzJsaLt6kLbyNk"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjW5nbACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqoHxAAlsUv1hiTxbhz8qikfynk2D5zJ6qGSxD0GBNNLO8IhtunICQg\r\nUfU6BeB9N+ErRxpdEV/A8yDJHh2uDDhxYnwuM1mDY7zIdQkCPArbx6F4eRnB\r\n9/GAzcAlUDoJEBGHtsaQE8oBXibXg9r1Fhzw6m0D+PCoc3GB/+J3wvtZSXxo\r\nXdIwUl75GQtpWgzbGWADavL1Udm67w7lk3i9/CO0uu3mM4ugwapP9QZSESfN\r\nR7o/xL1u4Mqchxo0CV2KkgCZ7XKGvaXHZmPhqgpRwgLJ2NFcPOoXGUbeEXS+\r\nLhY9kcWZMYrv1CsqVnVCZ6p1d4QMulU9HsOya0v88P+Q0vXcCIaSAQ56+rjk\r\nwbcIEyhdDtfju/tvaLMOXbqeI+d9UK3AcPkNFyo1z+Td9IeLVmAWw96a03lT\r\nZz0RGKicBqNoCo1pofvOJo9HW2V5O5l5lKG6qO2F6yj0P+rsKgVFb2AaumSo\r\ny8v7PYhn+g//6uf4hsKAHGjXPBPAovA8uKFVLVSEP9q17AnBqb+KsJHGQ1AK\r\nkvx+85zNnU2e/q69pv24ZaERKap8nPaeQc2HtGwtWUIi7xJNhppPIrIsb+jc\r\nwhjuRPVMBx3jMFqqe6AMDWhZdFPf/Cg2/FZ3nyhBFmJzDGyxbdeFp5Qbgow/\r\nzJY1SJJXfEZaTOR2XJIsDtFW+K6R+J4XY3Q=\r\n=NuLz\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.16_1666947546977_0.8468052364688177"},"_hasShrinkwrap":false},"2.0.2":{"name":"@midwayjs/command-core","version":"2.0.2","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"fs-extra":"^8.1.0","globby":"^10.0.1","light-spinner":"^1.0.0","minimist":"^1.2.5","p-limit":"^3.1.0"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"db2bce6c2f1665698255a20c1d33de261723dc12","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@2.0.2","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-W1mgR5C6SxPVJjy06zcFSRqvXdDvVEtX61vSw7pDz7MXrtSACJeMtOkJ2PRRlYl3M0R18c3CTZi6Kc+QZ1t/jA==","shasum":"1b68fb67ce806077248d3def1e0c344cf8decee7","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-2.0.2.tgz","fileCount":84,"unpackedSize":258123,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD+zaCSO3+xUJJ3ct5KyAOvUi7PiRwsIDYB3FeHxbmk5AIgAeMLa3QP/GDmyIbNR65oVLuhy1i3tAZbLSrTwHp3U0Y="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjddF7ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo+Eg/+Iinhq3hl6wpp+V6RZcc40LW4ytHucOXzPCkwogTZPq+dQQM0\r\n9f3ayp0VrOSXHGpkjRSly+/9LSVhOcyHKuNRXKKA8Md7AAqtM1eB6wNe3Luy\r\nMa2kZK9HZgLXUmvz/wVK3rDggAZs62SBiNUTRhAJBMrj8hXEjwavriXBBPKX\r\n8w+QfkK5Z5O9faDDcTcz5I3XOvLETwzAIn5cMD7K8+m4LgRSdA5/20Utp0gE\r\n0ItE0ihnW358txx7PnCOy2FWXJOjIHN+SFDoL3iQccKBnwmArVbUXS6B2AFs\r\ni67voXtADaYkPR6WJ/Jo8ln9DLzXk8wHpz1oDUDtI9U/M1ybKpLYEEQ0QGN/\r\n2ISja8Iqkeq+aHNiAOc/CFBx8ioH++iwD04l8TikHpfJ6ZXOut41AxC4bdwt\r\nZFWlLwt9AZn0lFJriuywsZpWlwsJKOW5DzJSJxx0RI6EVNPOC4umWoWyzdvE\r\nv8p+iuy4Nzow4lpWQyw54qkrDVh1nQjLh040f35rwjQr2w7M0XuuirrpGR4x\r\nURj6yLyvvPjA3uePlOz9R/qDHvN9FC0PF+dAwA+sqTEa+N+fVEIqDQ7MPqNO\r\nueOtBcP0oHHTjfCBHfbEgdqIZYgg1LWd0SQfHVvVbB5LBZaqNG3aG/+JVFtg\r\nlknJWAi1+4Sozz1EtgEU5WTs2qxw9+1OwCk=\r\n=jCM1\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_2.0.2_1668665723574_0.6278537676101188"},"_hasShrinkwrap":false},"1.3.17":{"name":"@midwayjs/command-core","version":"1.3.17","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"fs-extra":"^8.1.0","light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"27387193483f399d1bc0ac66beff8556210557d0","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.17","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-LqwdFHiyruCFp/wgP4LbejbZ1Qm6uIl2kTPDiPdiBZ3JL01hszN8TU0pBYxouHm9yjIgvcJS+nbRLhzs++YeCw==","shasum":"a51426ec14d4533e9b80e123bb7bd3f0b471c8e9","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.17.tgz","fileCount":82,"unpackedSize":250790,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHRhEoElGPTGwtjBVlo2g9hKLD4IXgPa9NzdBtquWxo4AiEAzZB0FBqa4Y7KBQhANN3hL2GKLGNJjQfl6Wd+/q8pVJ8="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjdv/EACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrQxA/9HdGOgnK8IUNlqWTE8e9P6bw1qND+AByLo7vPR+VdhyeSeQtM\r\n0GgMnv5kzXmKAG3dxZRPNLjuSNvy5zP73gRYEEIzIeIu7ta05xGOWckdZVXr\r\nPr/atiPiBxzV87/Jj8J0uTNIqrR1XBByeaVDj/TIrCJY0+HldcUw7T1ZEcRR\r\niHxyAkCeSwSaV8BCVHeCDqFWLU24Q2iL7M+k15JjNtsOXD1zdPPUAWNWEOx3\r\nQMCuJuUEJhOk0U9jw8Q9zyFpxNpbd1d3+rbZWXRl8bCC/CjL+KQGDhlDfE8v\r\n4qWs+pZaLdIiSHiKUxML5XXqssUCJvMcBmIvkZgGMAWquuARpKcOa8lBDwsQ\r\nDzuIzwqtwpeccCCd9hKVjeBkS89TnFf51y2ebdQJbfBG2Nm3tlqd9TEjK64o\r\nn52WPNGz5G8aEZV+vcg9jkAseJdnwz0xrzdSBCNYx1y6XSxps76r+5Ia64aS\r\ncLwveyBWpVwctGf++ySz8a27wLQRR6mEf/oabqLo0+Rm6WV7w7X7Co4rzC1q\r\nmMfJFMhokKtUo142LqEBu7VICgZXjdwUlnXDZUN8CS7vmXIfFY+UaoxAu+uV\r\nGZQWquMTWP0W9nFgI9lniQbENIRuynF5wmZXPMpsCa/l+IoHhMT0g1hbNHL9\r\nc0Hgio3Rl3zUqv5JppLasZaVy4q4mmd68u4=\r\n=+tG1\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.17_1668743107870_0.17030304092226256"},"_hasShrinkwrap":false},"1.3.17-beta.1":{"name":"@midwayjs/command-core","version":"1.3.17-beta.1","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"fs-extra":"^8.1.0","light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"f29e8c13b6cb6cfced349bb2ad9b6fd14c9ff8bb","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.17-beta.1","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-CLrdebuzY40i6i2/N/LXBogWMaA9B8LiWVnmf+DjI0BFVEWlkGMFigQnZ/tYeaK/8+bgTwX4zyICiXOoyPftCQ==","shasum":"956590dc60fd81c8fbc20bda31e2778bf30876d6","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.17-beta.1.tgz","fileCount":82,"unpackedSize":251108,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDMVDSUxBx0CDjvy8lLPcJTs9p44cPveeLmUFBheTkphQIgE6O6j89B+j5Z8mI/LVnw/L0lQvL7Vkjt0/lsBUMfmj8="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjexkXACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoN7g//ZKLoNmSrHLPkEo9wvnxs0a7UjKD+0B9Fy8EkYcoXPpo1JOcG\r\nbiaG6+nn80h6ivVB4Q3f7ug1S/rlklw/MoPDM8DoTSY7Yka/zz0CIBv5WRtG\r\ntcJeimkhBCVYPTDVzYwQ7cWqbzggFdyTaxanwiSbKuBZmM/Nop9cdGb9f3bF\r\nqfimRIkdOZ49tnXKjnhkxRr6vgs5m08JWwGvWl0/7dURvB8thwjaS8Dzyzjv\r\nIc8ZZKKbG1wqB2JZ6OnQaDVevscEbtYyAKTzm1DS5fjKg337YBRuLBjbSZ4l\r\ngPXOB+SHj68kmhETfhI8Se4+CHKmKHuS8O6/L1gvOVU+mwDSEZMqOYcjE3se\r\nAIKyjKgjYAemcXgF6DHIWsSb/3F6Wc0Qywij2OnFybijfPfpGQRn3ULemPN6\r\nwZqVWFUn8Rt/MqEerAAzT90pWASDhhpiTpCnG/cNS9dBn4pJosaeYlDAeY5R\r\n0ENp5TqqfxJfHojtb6YWjCMkhgnMEOTdPit7icRwsV0EKp0MZkYiSn/BmG8H\r\nfYnXShrmS3pWOKDG0rhGq2UXzrngPmOTS9cwxqtFoay5OX+pxbswdYCmNv3y\r\nDodawMin70NjV8sqHtKWXZqjb/g13apJ0Nv4PjwP1yrg23o0s5prven1pUfR\r\nn3G7bzGIm+yJBQ1IiWCb/1acXEVEVAmMcfQ=\r\n=2OYM\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.17-beta.1_1669011734880_0.7151329069711632"},"_hasShrinkwrap":false},"1.3.18":{"name":"@midwayjs/command-core","version":"1.3.18","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"fs-extra":"^8.1.0","light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"56702d53a0ace02869887d2226148d35dc1b67ea","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.18","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-E8g1/MI3r5gKT7VhchKhGe7lKhjiG516s3LfACWWvWhV43ls5+GWj77XycYvs7SX0VVAgdDGLoDfLuvRJ1YJeA==","shasum":"68e62be4f006841e356acdb9558250fc74fb5956","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.18.tgz","fileCount":82,"unpackedSize":251443,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDo88AftRWD5C9589UaTJ/7mbf5cXe7s0xYoGraMpj+kgIgG5fn3/SnS4JG0m5T+q30Wlyt/T9elSJveiXHEjtXyOo="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJje2DKACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpUOQ/+NJPDUETp/IvXT7eg7GPGobEDIv5eoVEoQxl09kEAh1LENjqr\r\n1Ry16tspMVD1/2N1sWyHkz70hBZGTj5b3yQUUqPpg1cE1u/J31T4r9kJ47Kx\r\nviwsx5brjDW+rOPtslm9WvljUUdkxoj3bdKkaIo3/fES2l2MSnO64dO1Qi9S\r\n25vyRa5Z+amoAoO46Q+ygrbwUpDwiHl4WvGvB14tSqNHez8jFud6Dz1ACRps\r\npAraJAl3Df7xiNjfmd/aftmaNKM54xN7TaISFvLDs38NU+0Ga3W/MeAXsl+J\r\n42cuSE1CBlvoN/M6BAwoVa4lntJi2u4YbS/p6Sa1UOzwZEmA4uuv8DxZVAxf\r\nslELX00pxl6SvdHhzvDo1RFpaQQ7HZHBQesWwUat2ci/My2SoheS/I+RrqgA\r\nGLt6u3hFzViJouRvpszsIFWZdsw1uuTmJxGBceuOOpbylRANimBbezwl33MK\r\nt4WanWcnL+vZnLfl07pn/bmyMaoq2MT5emuy3mLkr080e9oRWKE5g8bS79EY\r\nWJzGeMRtKDUaaS9pTCBfO74xBWLTyUYhewYjxIO0cO3DCXjQ5qkFcnGj9KiI\r\n9hn+jWk/kX0BIq9TM+5MvGCkAdXXPVODbM0KT+tsD+zgwfyYAX9mPtr66Jqe\r\niOxfUpAnG3HS6iCFzccpimLYHaywyjcG2Ys=\r\n=CbJS\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.18_1669030090109_0.9309112849869128"},"_hasShrinkwrap":false},"2.0.3":{"name":"@midwayjs/command-core","version":"2.0.3","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"fs-extra":"^8.1.0","globby":"^10.0.1","light-spinner":"^1.0.0","minimist":"^1.2.5","p-limit":"^3.1.0"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"f6c605754f0e118c4d083450a7f1d16567faa89c","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@2.0.3","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-Gnt3xhYuuoEYVR5oDPXR6vJ/lHn4Wn5Q2S08tmD7QEXIPaVJcboNy1G+nV9/lblqSqfhdKGXN+HBv8SmTfj2jQ==","shasum":"f2e481054186e0aba08f1422ab1c831668e2279a","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-2.0.3.tgz","fileCount":84,"unpackedSize":258421,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDa7qdv8rpxLAFwD3cjtoUFbFpDNYvTZ/1j5wlRtiNYIgIgaTDSpix8qVGJeOV12fmtSL0AqzhrdVvOXitkLV1H29M="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJje2ZbACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoMsg//ZPnrd8TPZ980hE3AduYlYUlWPoFW7tpydUMiOcLMohqdUCZE\r\nb3eaIw06t6v3BUPbBAcmwD5CJXpWiGF+X6gTaXNwGLYsuzwZZ4ygOlQYUWqM\r\nDoQbgXvgS8jx2X1ZrBqC/Hr/zR1UFh+p9HgnmETLvwBNirrcLFqiyQCBKaan\r\nOFe0/QE4Den3Upw0d/DtMPN5zxiX9OM0Ck02Y6R6LN7oF6eepH0JvgN2CFLA\r\nTSii0QHfe9KL4uulK1EbbVlAPUVaHV77BJULXLWLD9H/0p2VCNXxBExPI374\r\nvK7FDVO+GDORN5f4M5bxcKe/yjwlVkrBe9C7HQnub4Rs9ohKdVnjAsx4J1+i\r\ntkO1MZvzutNPVcwagBBxi62UAAPeKZRr58oUESmTAzBUDZ54s1tLOf+EU3J0\r\nTaguDjLAJWrbtrykCIzj01KSAxT2Gn/qEG2pqHYOT1qMweHUu/IM1hqg50eh\r\nKd9jU43qD2pEQFkcOILm9jiKVZ83XWn20h80JVPYgMCXmx7ZXwWy5Yutkcwm\r\nkl11EPrTnbakA7wL7lb/b3dbhg/GskRe/EE0NMRFq96g3ZlVgrbN3gVae8e1\r\n45fSe3yr5rIELKfrx7AAxDFYPmXWhJWaVsNM0P5EXM85k4q+BeBnD6MogMYH\r\nJfAyvfM2C+X0c6TnD1QyPYDCbNiJDaRogb4=\r\n=4Ali\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_2.0.3_1669031515282_0.20596023050962708"},"_hasShrinkwrap":false},"1.3.19-beta.1":{"name":"@midwayjs/command-core","version":"1.3.19-beta.1","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"fs-extra":"^8.1.0","light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"478abff79e4d3abbf2e65de67626681ea009a5a7","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.19-beta.1","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-2LmSwYQBTha5dwUcPVPT08+CiM1vnfnZ3wFVmanSWbcVGxPUGzNk1XO9JO9gPFntKL3lKNFN+B6ZoBpYEJ6mBQ==","shasum":"d55817c9df83849afb8f06629e76d9d54963f849","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.19-beta.1.tgz","fileCount":82,"unpackedSize":252002,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQClQYjHQ/0diFE33//VjfVPo+ExKSCKInLXVsZX8U0WMwIhAMV5GIqE0VrER+ct+Cos7ty2Tslq+P7QG2IcanzOwKIJ"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjfYseACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpvog/9FSp25LjswkiTAB7Hr3X/0qCz+edFX387LcmQsXzKcgd9ZG4v\r\nuLC27Fwtirx+83Y+GrtDDZT/Igk2ZWX57a0iP7QbngETbREwdmeNstV7HB2J\r\nSIlleGJKW2DmdR7rnSxbuQT5sw1nQ1Jx0aZAWzleSXtzVYqZeshUbu7aBi4h\r\n6Jn5JcHVFWMg9UliaoHutSRgehU+qwJBevdM3rTinFV+dQptl/dtpOu98wSu\r\nCjQR+h4C+ZM7txv89p7JQUpHR6ZOXaj2wjk8uhKsCqWiNnsRSFcxlDlQxFUE\r\n4KnhtFf6zyWMkUOEdbENLnHEJ1ZMLMKwkJK5Qh1zWYV+y00+q5rnFBtBJNX6\r\nr1wU9egTkKEIJUY4QfC/X5sEAbcUPVMhPmPz5ES4vonJsfBxG15kB1CfmFhk\r\njtDXBeAa40ZB1EzoceCu7zfyHe+TAcb3SjR35TkGAeNpIOnjRmSAlg4g8nl+\r\nKB7uWwbheZDp9y5QAdeqOIWhMraC9jQWiozS+oq4rzCLVWfotDsxJcd90kRW\r\nY8xekpIFi0UKXG5Iys8zse+uiCakzlxYuxv0UId1VeOtWzXPBeuH2VqSZnrR\r\nMZ7ylKtJVkUq+xMu00eoGIveX2wHMOJPBMo4l3x7t/5oeCrurbVE3VqeZ6Nl\r\nJeMYK+RbalsHFe+ssvXdmF7SZWbRPsfpueg=\r\n=KS0H\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.19-beta.1_1669171998439_0.9538564394400073"},"_hasShrinkwrap":false},"1.3.19-beta.2":{"name":"@midwayjs/command-core","version":"1.3.19-beta.2","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"fs-extra":"^8.1.0","light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"a5513cd4cf9d644841cda45b07a58e02bcc7341a","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.19-beta.2","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-RXtr3hhuJDsiK0o2/BycVAUacQ2aLHriveBGiPAuu0KvfaL6N0UCWL6tTEc2q56PeS9t2MjvnU47SeKIjayU8g==","shasum":"06be00766d4bcd3a8751ec13d4d02d1891f47c12","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.19-beta.2.tgz","fileCount":82,"unpackedSize":251999,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID3m39FDXWnZ8itR9+7TdLpNBO6pMJz07yyBoao7ceoeAiEA26/btT3Xwn+NYQU6+WytoOU1wITPa+5gczp/fGnZVYo="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjfY5/ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmohAQ//Uwg8rGG7ilG3aKOJnuM76YXgHE5+Uficvg9DCoGTcixoQCbm\r\n1Fw/V65CahLqsWCKjYoUMahZtrvY7i9jGVpiBG2vIRz9wJsMCgwkEAmGqYBC\r\nUQnGs3mkf8HLMcbUexNx0FJUzA7DMPj/tKfmOgdL/UjWeSL5yvHKhOLgxu93\r\nDXE/J7tYmjekF/I+yFrE5xyHE1TvK3qm8GxBASTmHglrIFhrMRa+hyFZ4kL/\r\nLGkpFDh0vbj9Jft6sADUKr5+HtMZRmki9PaqOwiujzqrmgz54LNIKTm78lcQ\r\ndDg6Zs1W/vsaPKCMwlgX2SIcXjnLBJ2UMQEPLVnklu3pieMRWFn+HPy2pEQe\r\naEzAELMJetC9wQxSzU4bZ/qbOoJBELRqYmzBJO5HhA6cPtroci1NXzUsmHAr\r\n682jA49BCXssUG+Y9CH7u35WcrT4giVptDoXJbuWTh7DuGY/9oSe7guXp/ZJ\r\n3S4+MFjo2kZ21ZKsElBL0b9+sEIAdskYYkylQtgmclbQ2vKI+kSkkFbhTJ9B\r\nLn30TDCBgtvJHPtGmLePmvEdrmZBkCGKfDkP4WjV7LvWtC6Ld0gMqaN0scDz\r\n3xVsyqCRW9FD5Cy+kuyLYShexTjMndxn9sn+HG25lcq1IKQP9XPBBaJR8/sb\r\nqJIlfDxCfSVWUO1QKGYQy08rVcw1KujLiQ4=\r\n=gH80\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.19-beta.2_1669172863242_0.2923044081163655"},"_hasShrinkwrap":false},"1.3.19":{"name":"@midwayjs/command-core","version":"1.3.19","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"fs-extra":"^8.1.0","light-spinner":"^1.0.0","minimist":"^1.2.5"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"c39955741c5c95735587db4aafcce6c79b99e6ee","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@1.3.19","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-hPfbZJuBJpgBzn+1hc/v5W+Sh3Gj5sNK0nK8uxkBiJidXjBWZYj7RN4eXYQoHz6KwBFvRmp9psLImKouqae+HQ==","shasum":"bfd1dbbe7755e7e4f791a9bdae2ddff26d2f9b4a","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-1.3.19.tgz","fileCount":82,"unpackedSize":252259,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDSGzRm1g1hJkPX/Td0E9xjto5+B2QNF+BW5DZa/0K1MAIhALMi8kWDO28iP0g2o7tOctmRWOL4Ets8K9QjXzA/uKzp"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjfZHIACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrT7hAAnhhdHdyWo1zOjA6VmG+IEzBXUSkMl2H/cLxS7nKn3s/7Uwu2\r\nnvP86wklRP9BhntXEgfLxP4pRrKXydBDBg7xDM2CWgT+WEGbAl/Pb82EgYuX\r\n3T4iYlOKYCmh2R8LlqzOM2QlcsMcLRApw3jpY94mU1WFz3Pbw0FRH4kCohXQ\r\nPELyBngIcmtBumcJ4o6WMNbLO1nGmRb0isirxqu/Abct5+t8cldM2AdR6Fcx\r\nfafkGhB5kVlhFXZlG60pN8oc9LjVaFnS5HnxVQaq7zkJji8PvyPkb9kE7+yO\r\njghRqtNSz79A0bxjforK8U6Nsu4r47CFltdwiUxA3sSCBq0nD6s9T41rCm9f\r\n42ouGrp3stK0tIYIrodrXFw5Y2jiDgArfw88Poinjcsm0oBuPoecSHlOVPld\r\nVESNPX7SkC6MnfR9eOhs7FS0DTd8sipW6uceHSBvaDLSoOZNsLyld/n7drda\r\nIxHwYn4riJzvlKTGrbDJILBDpFtK6Rz+Na3m1u4ry9zMCAvchbtRL6vWZbfA\r\nbYBNXAccUPtGacS1YeHG4BoDiknUybfH2zamBBYN/cAnrj6M6pn5k/gCz+Gq\r\nvGfc0gofSaJxdfSHCZpI1kQ6utKpPSU6infCIw+L3WJYQ7jL2so0J0U4mY0f\r\nyB2eMyhWNKFx2tjkLEAvUObNjnH+KKjFQAU=\r\n=iXyi\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_1.3.19_1669173704134_0.2253337540233813"},"_hasShrinkwrap":false},"2.0.4":{"name":"@midwayjs/command-core","version":"2.0.4","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"fs-extra":"^8.1.0","globby":"^10.0.1","light-spinner":"^1.0.0","minimist":"^1.2.5","p-limit":"^3.1.0"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"6103f52b3642acf0bf12b59de40a6a693c36c2de","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@2.0.4","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-3P9likx0E0Xn/u7HYoA0gPLo9/ldOJVagOsVB4e6GoNElke6JhJpOiqmHhVMpmTDlprSuLTDHPH7tn1/g+4FIg==","shasum":"f6cedcc1203dd0ac2d63d89bbc7adf64a65388d3","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-2.0.4.tgz","fileCount":84,"unpackedSize":258779,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCghLOi2GeJeqgVSB7cl5y/+f9NelLqjAMip6+E3FHIjAIgHVq5bVTtpMZKAM2YA47ti8KXAOPc4UvgMAyqY4SOaRQ="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjfZKBACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqKSw//S0CItTYwjvzVF5LbgmK1yczM/fJPEw/ZdcScUTLMw+rlJUZv\r\nt8HuRCHsuFepq2imn20TakQPfajB1DdL4x+6MHSP8BRNKH/8WqPb+cJ/4EDA\r\nHzjLimqnNBGR4Vh3GSLyVH+oGNmtnngwJLcX92c8itELdXLtYkoiTr75IjRc\r\n9vsIVHjJ72zSvo+LOE6nhswYpEbvTyqgc+0AQg97BtwMZJK3kml2AuTiXr00\r\n4f1nzwcqXLapjmTRER0ojRm7wBOf+y0nHe3kkYF8KY1BXPDb1+wfY0wI+/h8\r\nwjLLNn1cRo4w7j3dlgQkIR74OlL4kQYgG++uFJDgyuW7TrI6Y6LBEO0nRYkf\r\nBGcMYf7D4rjz9cjMYNI4fiE16vq71I03pA6GgnrYZgL1WeE/pUniJjNueXE8\r\nCjQZ6+PKM0XHmmOU8QQi1+LfO4K83CE/aMfa62V6ucARZp1YW+x0aBlFqKHE\r\nxvGItnSZbY1315/oqu486bqt1AellFtLSJIPEYva64EbeLRD/aDNwPHwb50E\r\n9rAbgVjShrn5/2cX/KS5ois7S5UhF1O7tnBNAjlXnFbMuZMyzA+2LEKUN7mk\r\ncnyau8pKN1lRRjxTLh3jwxZueqiDGodb6Z1wkJf7shSPxjRzQIvhXTYCQM0A\r\nDcgJtmWaove1t3StxuYGkYyWmM3grExXRp4=\r\n=5qks\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_2.0.4_1669173889397_0.047003458505819884"},"_hasShrinkwrap":false},"2.0.5":{"name":"@midwayjs/command-core","version":"2.0.5","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"fs-extra":"^8.1.0","globby":"^10.0.1","light-spinner":"^1.0.0","minimist":"^1.2.5","p-limit":"^3.1.0"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"a8d3b91a63a57b6b2cca3ecc7689bfabff16a656","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@2.0.5","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-iyGAF64hzvxlJqjXZd9ZBgc2WpW+CuYsStl1Twf1MccnC6dx0JsJI4W8q07FntHC56StaF7lpIF5myEICqxomQ==","shasum":"534dd0094a0cbd30521998fc7574b3d0bac8ed5d","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-2.0.5.tgz","fileCount":84,"unpackedSize":259163,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0zUwIAc/fr1V2j8FtmP+S5YX+FMFHGDMKeWWYIKR+qwIgYylZDlaLFblz0neFCRpzIzKSlCc/n9GFtQFNKmn4HLk="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjiHxdACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrGZQ/6A3D37kuA4X3KHp/d+lCbQf8BsUQ2t7DVWiybTMdTIRePLZ5c\r\nqB0BE5bYDEruZt1Dx+cjIlGiRMLkxL+yUk76KfjarKufjJa0VmDHExeWHT/W\r\nbRjuwoQ6Cux1eXXoPhU4S3lOSLZyi0VcPQnD4QS1Do7f6jLKpGIaqV/px1jz\r\nEcg4eYRxEYiVvX1gLUKKWREotDdhvhpDI2YDxywks81dB9Ml0n5lF/eyPCrO\r\nP4XgmHKKYLKCNMLZNTbMniLD63xD0HOyTJxBol1/qeQXg55gNrBvg5RNdpbt\r\nBSEl+ZrfKj4pJXdWFTY2bnEVDkKT9U/KYPefqYOf04s2k1Ba0gGMwZJFFkbw\r\nSRHZ+Zp1DfRXmY0Y1vpB5/uH44dRMjfKol9RJSK7PJtUlPq2C9bN70GhJQiK\r\nKuzNkw//OlVDj3FNyDWDK315apFZlfL2ZF3+vDq2M5t/oWkXHj7VChIn+QGE\r\nLbeWVHtrH705Z1/jfHWBsBwHRzz2oU6jC3v8rx9HMhkia03abvdD2rpNj3Dl\r\nEJFMAp7RdAAE3CNReXxsea8HkbNzZLkgdpGkdXcnEpzAOlAvFXKo9ybxSJf1\r\nDg8Qofjlo+H6IMvDNC/ZZUY42IoeXFdh6i0rlX0c8AxKSxQXWnj3L1nMcAB8\r\n0tu2wTLEqQ5ITGnq9AxMg1bs+MF0GtV0hDM=\r\n=z2MN\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_2.0.5_1669889116977_0.8366280763004026"},"_hasShrinkwrap":false},"2.0.6":{"name":"@midwayjs/command-core","version":"2.0.6","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"fs-extra":"^8.1.0","globby":"^10.0.1","light-spinner":"^1.0.0","minimist":"^1.2.5","p-limit":"^3.1.0"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"7c4481b8ed7e8aa5b651f0abe64c702a815a5e36","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@2.0.6","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-TiRPLvSRTTgRrgCdPjSudiFCj0wsZ/IKUZ3BH18ucBnqc1SM8Ze3Z4fUowbdpBr3qKyxWwAmZ3SV+HbE1Y4P5A==","shasum":"8bb83b65714c602eb416f026571ad2e6a23db0cb","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-2.0.6.tgz","fileCount":84,"unpackedSize":259320,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDbOqubTL7Wkxu6Mj8Cvm+GWR6CM7wJ4CnSMBDXjK4NgwIhAITCoSZ1BnxQcFAvD3t4CENzsTF5WQOGk7GieWkosJ02"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjku+NACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpK1g//e/IScc4QTTPrrOCNT6d2/N4QfNIimeG8UoVqp/KbRhVuMgNs\r\njmQ4RPYmWX/bgrSQt+FuB1jI56f7KxJPQMOTHWzL3Kz2PD/Mi/JYo3E2l1M3\r\nW2RjWm2jYJB7wGpVtGHdGC/QIFoo9mKFRdHg44hAv1G5FHZppJKi0XzUBxVb\r\n9QR5ixObeR7CYQnpmTqnCcnN+tK/GBq0w3RHSnBfboo0DL5VtJZGqLGm0mM4\r\nuUWy0HwXTGaZr1mXEaKmbj7CrNSJBm8AxG1vE7um6fT8Kkvs6gsTcjQ8sYg1\r\n4ijfqGvOW48TyyEWWoP63z4mNTxJWWwbDMuddqMSX9VmGk9bNgp6ngrDCNFQ\r\n9ApyUamhybpR4/LxPFtZMhIws/2lxo0T2QD9tRxiUKlNxn6PQZzAnumPgiHr\r\nVIlP1hQX8UKwSXzXmQVdFtsNSUMQW6KJzLcGsowmWuKhRrpbn/BV1M5pku6i\r\nbAfmG70d+c3lru5LMfMdCZAr/KGaL+TbLHgn/E+CFwdedWdUSFdTlchqx2hG\r\nOMKYF0OU1UnCyNNBwQPEqKek4K2eRYQSwOnDkxUtj/jY58PLlZ4WF///ulPd\r\n/sj1MBYNIh+08Y5lwqKzhkYvlv3ftiX1BLpg145cshsEPmlbxZxb/hikUR5F\r\nGZuKn2+VcIAf6FqPOR3czD3wi6vT2rIjqvA=\r\n=mk9P\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_2.0.6_1670573965198_0.276370944861954"},"_hasShrinkwrap":false},"2.0.14-beta.2":{"name":"@midwayjs/command-core","version":"2.0.14-beta.2","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"fs-extra":"^8.1.0","globby":"^10.0.1","light-spinner":"^1.0.0","minimist":"^1.2.5","p-limit":"^3.1.0"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"36dec453856ed3c3d3c79e8cf92c53a7c9dcf3b0","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@2.0.14-beta.2","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-PzK4FGu+Gm9WzeJQ92+8usa7TrTWBuKJqcDi/15depp5kTJ8XKojrcN+ORiLXlDLau5Jgb+kId8xmj8GuXxSsw==","shasum":"39d46ba91cd5eb7e53740fb66a1e9e0f025b99fb","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-2.0.14-beta.2.tgz","fileCount":84,"unpackedSize":263304,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBzMl1/MihN/KLfShJiXECPrbjPXj6zpaJxGg9HrzLcsAiB4j5Zn+oPmT+88M9unMlGLYiC34wjOcqYfXBPt2O6glg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj6ztQACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmphuBAAnW0LCjjjBgk17R+meX5hv0CogEg5c4y5yU3EArKhPTWzQ+X1\r\ndvQXIqTnv7IUq/2uH4npdfFOkOBYN7qzqT1TXwczAEfUTp+x45+cMEHEIs+T\r\nFtbb8l9KyX7Pcbk9RQW6bMPFXlSrcv8TOvgll723SN6HWH5OwCSyPw44CZd8\r\nqoY57CVi31705wuYXqhNezKNXm4gdLCnbfhszhNQLtBzptV6ECWuJ11lLKLR\r\nnFikk92eH2C8j/hCi3OKJmnJRSYxZKrKwDJWHB8/lxqfE5K5d4sZbg1886hE\r\n20M4tuNCfOx2nnIghqm3h/T2iLn66GMJLxIjsl38SWHJSPCci91ZRyv6kmId\r\nx1PieD1ftgf0Vsm9teazrc59KEXpx1kdsr6ARkTxEfcxwNRW+3dmfzCAXP9D\r\nA+pDuvoYGvvFF0v0BbfwVmAxxwW+zIZtF/Lz6nEDm9nw6miJxZFWSXn1x/za\r\nm05xfJZVwBjeFkoOWkxUlRSiAGmv885pzOqfOhHyz5dGJ89vrgGeNMlNSnL9\r\nc1DSxmU6u4Fx4ybWOioOcfSW071IitgXUIPES5DK6UrPpX9BpHlSM9z4WQc0\r\nZCR7y1dDfaIgcKoz4B4oJMZMboa3NnFIasKlLHq8Fe/qiTmcgAeErBvDZt6/\r\n3Y62qTeGcd5St5MAEaW+bofyIwipWBoaKik=\r\n=jf42\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_2.0.14-beta.2_1676360528497_0.9662081879019593"},"_hasShrinkwrap":false},"2.0.14-beta.3":{"name":"@midwayjs/command-core","version":"2.0.14-beta.3","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"fs-extra":"^8.1.0","globby":"^10.0.1","light-spinner":"^1.0.0","minimist":"^1.2.5","p-limit":"^3.1.0"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest ./test/cli.test.ts","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"840436309a3937876ebbff9c3e2bf41b05cd1fe4","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@2.0.14-beta.3","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-Xv76wDO/l0UJR+49h9zo1Ifc0v2mXXRlr02KsWCo8N9JGfNJlQt89NUm6WkaHwIVhXPfLjiL4VzsGOLmQnzt/g==","shasum":"b6595cd1076bec8898e0537c553c4230d953ad11","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-2.0.14-beta.3.tgz","fileCount":84,"unpackedSize":263792,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAqGdFNaceRO668d/ryPjYK5Npyk1QWeS27f9QQCzUxSAiEA5p7i9MSkAjryiR9YD1Uo7wIlrdr+MRLhsrFqpnFgNYg="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj7JuLACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmriRA/8CoX8v6DdY+hHOgTEVi2pprhcUVCChtZx/P5+N6xVzU9AglIC\r\nnVyVZ50rF+kwGDuRrH272bz4P98K0sMieO4+Z9PtJgv2pBxlqWCy0x2Cw9nQ\r\npojCXavB92aaYLmZz7RGqtrklCVRdck787g6cIckVl6hetpjttpCCU0EB62E\r\n6BwU09c/VdGoB1qyqcFFcckBQ5fJ0q7QVeLQcZL7B2oAueoH78okGP02pPw3\r\nVf65VldOksBtT6VoYVd7jGkUi9lf/3c5nHVs37VbQk0YaBNNTGkvDKIk4mHD\r\nRMvThqrOi5fwWf7wO4RTsCLfEbNMVOrgTJHv6G3aQIWmzJd86fQbXYaIvFsn\r\np6NDbGB68fTV071sJ1jcrahty483NEi2s5K0g7HTfgNpDRrEoF764tnrdNx9\r\nEWuMenMwLDdTvxjURFhdKu9/dfDCg3gApQqSeY9O0Khro6TgQzH83ubRuOwz\r\nFGF+09+lmv2ow+diHdX4MHA9IgEBGLCzMlGuzuK+S3FPnYBd2pWr70Cr1D12\r\n1r1Jx0YlYLDDRolXGqSa5yOJE/J4LP4o2oXenMe4SMHnBrV+4N1C/lkdl9Va\r\nDGJYz++Ip74w/88+413BkSCXRUno89wOVmBMlT/Kg/M905ULuMkrHUwc7G0h\r\n1U8aFkI3vFGl1YqqnlUroqQy27FysE83i2M=\r\n=0n6w\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_2.0.14-beta.3_1676450699191_0.9840913782873264"},"_hasShrinkwrap":false},"2.0.14-beta.4":{"name":"@midwayjs/command-core","version":"2.0.14-beta.4","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"fs-extra":"^8.1.0","globby":"^10.0.1","light-spinner":"^1.0.0","minimist":"^1.2.5","p-limit":"^3.1.0"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest ./test/cli.test.ts","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"d969458e79b509ddc56d6b9af9460b80ed7274ea","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@2.0.14-beta.4","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-rWxFZbo4ZWChpNs1xL8RH5yRL7x03DgPT1muw8L5FfBma/pAfiZe4dRiFCNpi8cdxo9Z5wGt5fwV6GnHVrojVg==","shasum":"915f1cba66aedb8fbc4052123312b1f71b48c2c0","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-2.0.14-beta.4.tgz","fileCount":84,"unpackedSize":264495,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBpZx21nkFjBK8g1km4lHviGTG+7UxJYi1ok29l0DfpCAiEAmuWuT9vLKjxFoJSfpujRpeA5UZybZD1blk/dECq2weI="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkAZcMACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq1Dg/+Ou3XyDNsqiclDIzhoUZUhf32EdERvguDlK9yFYyYhZDBA0uw\r\nAzoDcuerSo2xN7w5yBoERjJia/50MOQWk9K2D7cBKCMgA9IBM5To6ZxeghTB\r\nRaB+03XJBap8KDmUityMEznvvPydxw+djfA0e5iacFfSkalJlVNfmj9+jmRP\r\nbARSxSPu3Nd5Ic2ACkMtrRzBZQ7mPjdNSztsBj2MZW4Bp7nH97gJIuzgyUVX\r\nLsy6Q8aoJpsgerFoPovLyE1M/jOkW9twT22Qzsw6DMl/jXJTiz4IWgN7oPxT\r\nZnWLt/l+zBVQmnWfJbjfxyyigfVbmMF/AqlwEbhQtuniVB+VUrhcLdEIdvf7\r\n+9cBj7LwJpWJh65s9s/txLPDcYrhzSXi0X3kn0FDW6nOUnmfWwZUpQxYbbta\r\nyI5fIGtqBhAk3UrKtL0RMpCAeaE4HoGniaJj3rcAowsHkEGdvjEnVdbRZLZh\r\nF9mSUpu5qrLNxKwkgbEvZcPsqYeAGhw39NHTJBKQXFe3DSLsdyNzt+a06iZi\r\ndLAErYCTU6hktY1ig6RZxuAEu1B/0UggODWDoml7o8ZZ8nxNIl+ZltAMZe9R\r\nJWhlgIxw6yHucw6tLrQYGvtryhmZn1JMtk1RKC74EBVBJGJ6i2XSobrIDsfB\r\ncKcARp9wVIQ9uco2kiDbnkJlK6GXkARTJCs=\r\n=XAZN\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_2.0.14-beta.4_1677825804731_0.10052890939035719"},"_hasShrinkwrap":false},"2.0.14":{"name":"@midwayjs/command-core","version":"2.0.14","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"fs-extra":"^8.1.0","globby":"^10.0.1","light-spinner":"^1.0.0","minimist":"^1.2.5","p-limit":"^3.1.0"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest ./test/cli.test.ts","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"dc8399de824a031228c8d4bc72634feab0e4f5dd","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@2.0.14","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-BkZ6ewv++cN5Yc/6HcZgGABIzBX0wdSY/1Mmd/dzzfmsOt1UgrnnA6C7DCoxzwF3WQS0TqXLh9uAaiz3h0v6Hw==","shasum":"dacda841ddcfb23379faa5052d9a4cfede638fe7","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-2.0.14.tgz","fileCount":84,"unpackedSize":264915,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDcENieYmQtwVJ5r2c4l+6B2R28/09QF6Tr94tHNPLhJAIgRPsr+HaUMfv1mn2cWxZWOnn9GbaZ80mdB9ZBZuyFQFI="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkAaoVACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqprg//fnCliQo3kxWorC5xLoRQ+mmxl7qz62AFfrMuf5+fwfIZZI+U\r\nnNZTeYjUYeGHxUyJIuyR7NpCTFJhpGbhbAigHOJwjXi4J4YnuJaP2A7sZy1t\r\nibHy35fXSRc76I6HJhnFYF0JL9deMacdbY/8BqXGLvK04cfHaybkzSCTvzA5\r\ndW1ApT8hlgfMlNDb+1vQHv8TeUizs3LJKM9GPWydQOPe18HPWi0vMQdi5+g1\r\nJ0jIw7bOGL8dPS+bZcUviBxHcjT4yXq8cAqa2kMvCxkBh3LeWZyFdWV6n1QM\r\n8NmF7pGZuJSVhAH4uNRXZTt9DNNji49rsdijE2KAThp+MEdNA6aCKqM67yU4\r\nflWx2zzkSBRLWQQD6N/47hxit7Zh0UxvlK2Yw5DN+3fFI7ZSX69RFg27Xv1e\r\nEvvi7Q7PKDLrbyPHMdi8ZMbz8vVHQjn18mDtyw95llGM5FxnPI1egM0QTFUa\r\nV+WAFms5X35g2UGOgjQufEMp0zqCOD++nlA5itgw/UGvc7ABsA3AGhWw0HKv\r\nICvEs5KGg+MpFnbF4fTXDCJVVTH75euNL8LNmerU65Kn+kKQB8mNei6KHw47\r\nVDDeJJO0lk9zCHOPf45KuD5kjtiaDNd6VmeXixNkN61B2ISwpM0TVwzoV5aZ\r\ntXCq1kU52BN3GknoBXsGFGQXkuSGjfDvCUU=\r\n=piRs\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_2.0.14_1677830677242_0.8611511889374299"},"_hasShrinkwrap":false},"2.1.0":{"name":"@midwayjs/command-core","version":"2.1.0","main":"dist/index.js","typings":"dist/index.d.ts","dependencies":{"fs-extra":"^8.1.0","globby":"^10.0.1","light-spinner":"^1.0.0","minimist":"^1.2.5","p-limit":"^3.1.0"},"devDependencies":{"benchmark":"^2.1.4","cross-env":"^7.0.2","eslint":"^7.9.0","mm":"^3.2.0","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"lint":"../../node_modules/.bin/eslint .","build":"tsc --build","test":"../../node_modules/.bin/jest ./test/cli.test.ts ./test/formatTsError.test.ts","cov":"cross-env ../../node_modules/.bin/jest --coverage","cov-win":"npm run cov","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"8b6ce5b6bebd4d31140af0e9a51871ab12692b14","description":"基于插件生命周期 + hook的内核","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/command-core@2.1.0","_nodeVersion":"18.12.1","_npmVersion":"lerna/3.22.1/node@v18.12.1+arm64 (darwin)","dist":{"integrity":"sha512-N9GxcfDt65FzsmM3aQV3R50tEobqGkfKKrJl6COTrrzHBw1KPQtKQDNICoBAylgvdqofoTW6f/7npMrTXCpMhg==","shasum":"3e3f4b73251fad893bbc286982b2e120447bca5b","tarball":"https://registry.npmjs.org/@midwayjs/command-core/-/command-core-2.1.0.tgz","fileCount":84,"unpackedSize":275300,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG/g/ufSLHp2hYQHQOOch8mJU79JQsJ8pfk2aDEzS0kAAiBwLDwiwSTfpEEuF/PjWJQ8Wviu5dpD2zbL2rwQp4G/sw=="}]},"_npmUser":{"name":"czy88840616","email":"czy88840616@gmail.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/command-core_2.1.0_1685439091088_0.3721387490436101"},"_hasShrinkwrap":false}},"time":{"created":"2019-12-25T04:34:02.107Z","0.1.6":"2019-12-25T04:34:02.435Z","modified":"2023-05-30T09:31:31.389Z","0.1.7":"2019-12-25T09:02:35.808Z","0.1.8":"2019-12-25T12:00:23.165Z","0.1.9":"2019-12-27T10:03:39.637Z","0.1.10":"2019-12-27T14:05:15.636Z","0.1.11":"2019-12-30T06:56:05.749Z","0.1.12":"2020-01-01T08:26:48.306Z","1.0.0":"2020-09-17T03:52:20.983Z","1.0.1":"2020-09-17T06:13:58.817Z","1.0.3":"2020-09-20T08:57:50.397Z","1.0.4":"2020-09-20T14:02:57.552Z","1.2.15":"2020-09-22T07:30:12.998Z","1.2.16":"2020-09-22T10:20:31.607Z","1.2.17":"2020-09-23T05:41:37.314Z","1.2.18":"2020-09-23T09:56:03.572Z","1.2.20-beta.1":"2020-10-19T03:40:38.195Z","1.2.20-beta.2":"2020-10-19T06:59:38.928Z","1.2.20-beta.3":"2020-10-19T08:14:06.305Z","1.2.20-beta.4":"2020-10-19T09:08:52.724Z","1.2.20-beta.5":"2020-10-19T09:28:16.494Z","1.2.20":"2020-10-19T09:43:23.890Z","1.2.21":"2020-10-20T07:22:02.186Z","1.2.22-beta.1":"2020-10-21T08:58:46.445Z","1.2.22":"2020-10-21T09:08:56.675Z","1.2.23-beta.1":"2020-10-26T09:20:15.335Z","1.2.23-beta.2":"2020-10-30T07:41:26.330Z","1.2.23-beta.3":"2020-11-10T03:48:09.456Z","1.2.23":"2020-11-11T07:40:41.580Z","1.2.25-beta.1":"2020-11-12T08:11:08.113Z","1.2.25":"2020-11-12T09:30:12.102Z","1.2.26":"2020-11-17T03:03:12.732Z","1.2.27":"2020-11-17T13:12:03.002Z","1.2.28":"2020-11-18T03:37:58.412Z","1.2.29":"2020-11-18T08:26:11.253Z","1.2.30-beta":"2020-11-30T03:00:05.098Z","1.2.30":"2020-11-30T04:07:33.093Z","1.2.31-beta":"2020-12-02T12:35:59.123Z","1.2.31":"2020-12-03T05:58:34.375Z","1.2.32-beta":"2020-12-08T08:20:18.418Z","1.2.32":"2020-12-08T08:53:32.063Z","1.2.34-beta.1":"2020-12-20T11:57:09.818Z","1.2.34-beta.2":"2020-12-20T12:57:50.998Z","1.2.34":"2020-12-20T13:47:53.420Z","1.2.35":"2020-12-24T03:00:50.304Z","1.2.36-beta.1":"2021-01-04T08:17:45.104Z","1.2.36":"2021-01-04T09:09:53.161Z","1.2.37":"2021-01-08T07:09:13.687Z","1.2.39-beta.1":"2021-01-14T06:17:38.196Z","1.2.39-beta.2":"2021-01-18T07:40:13.480Z","1.2.39-beta.3":"2021-01-18T08:49:50.041Z","1.2.39-beta.4":"2021-01-18T11:00:07.483Z","1.2.39-beta.5":"2021-02-03T08:52:23.183Z","1.2.40":"2021-02-03T09:07:08.887Z","1.2.40-beta.1":"2021-02-07T07:34:28.541Z","1.2.40-beta.2":"2021-02-13T11:36:45.057Z","1.2.41-beta.1":"2021-02-14T02:32:17.700Z","1.2.41-beta.2":"2021-02-14T03:02:12.597Z","1.2.41-beta.3":"2021-02-14T03:23:57.437Z","1.2.41-beta.4":"2021-02-14T03:46:06.102Z","1.2.41-beta.5":"2021-02-14T03:50:27.157Z","1.2.41-beta.6":"2021-02-16T05:19:43.269Z","1.2.41-beta.7":"2021-02-16T06:27:11.235Z","1.2.41":"2021-02-17T06:20:08.912Z","1.2.42-beta.1":"2021-02-18T08:33:29.499Z","1.2.42-beta.2":"2021-02-19T04:00:15.133Z","1.2.42-beta.3":"2021-02-19T07:08:30.366Z","1.2.42-beta.4":"2021-02-23T03:26:16.032Z","1.2.42-beta.5":"2021-02-23T08:43:45.285Z","1.2.43-beta.2":"2021-02-24T08:36:58.493Z","1.2.43-beta.3":"2021-02-25T07:01:46.326Z","1.2.43-beta.4":"2021-02-25T07:07:42.553Z","1.2.43-beta.5":"2021-02-25T07:13:19.355Z","1.2.43-beta.6":"2021-03-01T09:06:30.834Z","1.2.43-beta.7":"2021-03-01T12:32:07.219Z","1.2.43-beta.8":"2021-03-01T13:03:52.142Z","1.2.43-beta.9":"2021-03-02T05:49:04.369Z","1.2.43-beta.10":"2021-03-03T02:52:06.968Z","1.2.43-beta.11":"2021-03-03T04:52:46.467Z","1.2.43-beta.12":"2021-03-03T08:26:51.113Z","1.2.43-beta.14":"2021-03-04T09:08:51.773Z","1.2.43-beta.15":"2021-03-04T09:47:07.841Z","1.2.44":"2021-03-04T11:20:22.257Z","1.2.45-beta.1":"2021-03-04T12:55:48.224Z","1.2.45-beta.2":"2021-03-04T13:09:52.937Z","1.2.45":"2021-03-04T13:26:22.964Z","1.2.46":"2021-03-05T11:08:18.485Z","1.2.47-beta.1":"2021-03-05T16:12:01.119Z","1.2.47-beta.2":"2021-03-05T16:18:35.674Z","1.2.48-beta.2":"2021-03-05T16:39:07.233Z","1.2.48-beta.10":"2021-03-05T16:41:47.718Z","1.2.48-beta.12":"2021-03-06T04:01:58.579Z","1.2.48-beta.13":"2021-03-06T04:16:18.188Z","1.2.48":"2021-03-06T05:19:42.454Z","1.2.49":"2021-03-06T05:42:43.014Z","1.2.50-beta.1":"2021-03-08T09:32:05.781Z","1.2.50-beta.2":"2021-03-08T11:22:15.720Z","1.2.50-beta.3":"2021-03-09T03:52:49.840Z","1.2.50-beta.4":"2021-03-09T04:05:51.041Z","1.2.50-beta.5":"2021-03-09T06:09:32.650Z","1.2.50":"2021-03-09T07:03:16.920Z","1.2.51-beta.1":"2021-03-10T10:12:45.131Z","1.2.51-beta.2":"2021-03-11T13:18:47.990Z","1.2.51":"2021-03-12T03:38:16.422Z","1.2.54":"2021-03-22T12:20:55.222Z","1.2.65":"2021-04-23T07:00:49.667Z","1.2.68-beta.1":"2021-05-13T13:05:42.236Z","1.2.68":"2021-05-13T14:24:23.585Z","1.2.69-beta.1":"2021-05-24T09:29:38.717Z","1.2.69":"2021-06-01T10:12:17.216Z","1.2.72":"2021-06-18T07:51:21.647Z","1.2.73":"2021-06-25T03:32:15.265Z","1.2.76-beta.2":"2021-07-15T06:28:24.611Z","1.2.76-beta.3":"2021-07-16T03:34:42.641Z","1.2.76-beta.4":"2021-07-20T06:51:38.456Z","1.2.76-beta.5":"2021-07-20T08:27:11.137Z","1.2.76-beta.6":"2021-07-21T07:45:51.435Z","1.2.76":"2021-07-22T03:04:13.204Z","1.2.77-beta.1":"2021-07-28T08:46:03.881Z","1.2.79-beta.3":"2021-08-10T16:35:58.860Z","1.2.79-beta.5":"2021-08-10T17:08:26.079Z","1.2.79":"2021-08-11T06:06:05.577Z","1.2.82-beta.1":"2021-08-31T07:01:40.156Z","1.2.82-beta.2":"2021-08-31T08:42:17.704Z","1.2.82":"2021-08-31T09:23:19.221Z","1.2.84":"2021-09-27T08:27:20.647Z","1.2.85":"2021-10-21T10:10:09.377Z","1.2.86-beta.1":"2021-11-01T07:13:03.455Z","1.2.86-beta.2":"2021-11-03T13:58:03.335Z","1.2.86-beta.3":"2021-11-03T14:43:39.785Z","1.2.86":"2021-11-04T02:59:56.342Z","1.2.91-beta.2":"2021-11-26T07:41:31.536Z","1.2.91-beta.3":"2021-11-26T08:08:36.235Z","1.2.91":"2021-11-26T08:41:18.471Z","1.2.92":"2021-12-03T08:01:27.572Z","1.2.93":"2021-12-29T03:35:34.831Z","1.2.94-beta.2":"2022-01-10T07:21:18.258Z","1.2.94":"2022-01-11T07:58:28.693Z","1.2.95-beta.2":"2022-01-20T03:11:04.072Z","1.2.95-beta.3":"2022-01-20T06:23:29.791Z","1.2.95-beta.4":"2022-01-20T06:39:35.997Z","1.2.95-beta.5":"2022-01-20T06:54:50.107Z","1.2.95-beta.6":"2022-01-20T07:08:05.092Z","1.2.95-beta.7":"2022-01-20T07:32:19.449Z","1.2.95-beta.8":"2022-01-20T07:41:01.961Z","1.2.95-beta.9":"2022-01-20T09:00:42.813Z","1.2.95-beta.10":"2022-01-20T09:46:06.528Z","1.2.95-beta.11":"2022-01-20T11:34:29.010Z","1.2.95-beta.12":"2022-01-20T12:01:09.327Z","1.2.95-beta.13":"2022-01-20T15:08:42.511Z","1.2.95":"2022-01-20T15:30:46.734Z","1.2.96-beta.1":"2022-01-21T04:06:10.928Z","1.2.96-beta.2":"2022-01-21T07:43:29.486Z","1.2.96":"2022-01-21T07:59:59.169Z","1.2.96-beta.3":"2022-01-24T07:00:25.312Z","1.2.96-beta.4":"2022-01-24T08:27:35.399Z","1.2.96-beta.5":"2022-01-24T08:49:43.834Z","1.2.96-beta.6":"2022-01-24T09:06:04.713Z","1.2.96-beta.7":"2022-01-24T09:13:48.620Z","1.2.96-beta.8":"2022-01-24T09:20:53.236Z","1.2.96-beta.9":"2022-01-24T09:30:21.105Z","1.2.96-beta.10":"2022-01-24T09:34:11.199Z","1.2.96-beta.11":"2022-01-24T09:44:16.929Z","1.2.96-beta.12":"2022-01-24T09:52:45.002Z","1.2.96-beta.13":"2022-01-24T10:07:06.052Z","1.2.96-beta.14":"2022-01-24T10:10:19.440Z","1.2.96-beta.15":"2022-01-24T10:14:43.298Z","1.2.96-beta.16":"2022-01-24T10:27:04.469Z","1.2.96-beta.17":"2022-01-24T11:03:26.725Z","1.2.97":"2022-01-24T14:53:50.396Z","1.3.1-beta.1":"2022-03-10T07:46:25.551Z","1.3.1":"2022-03-10T08:03:39.935Z","1.3.3":"2022-04-20T02:10:04.104Z","1.3.4-beta.1":"2022-04-21T06:06:03.939Z","1.3.4-beta.2":"2022-05-11T06:31:58.854Z","1.3.4":"2022-05-11T06:57:27.948Z","1.3.5-beta.2":"2022-05-24T07:30:14.959Z","1.3.5-beta.3":"2022-05-25T07:22:30.859Z","1.3.5":"2022-05-25T07:33:42.489Z","1.3.10-beta.1":"2022-08-03T09:11:05.879Z","1.3.10":"2022-08-04T03:09:38.607Z","1.3.12":"2022-08-25T08:46:57.461Z","1.3.13-beta.1":"2022-08-29T04:03:20.832Z","1.3.13-beta.2":"2022-09-06T08:34:46.473Z","1.3.13-beta.3":"2022-09-07T03:47:18.766Z","1.3.13-beta.4":"2022-09-07T04:04:12.437Z","1.3.13":"2022-09-07T06:14:51.905Z","1.3.14-beta.6":"2022-09-26T07:36:31.502Z","1.3.14-beta.7":"2022-09-27T02:10:48.159Z","1.3.14-beta.8":"2022-09-27T03:45:35.621Z","1.3.14-beta.9":"2022-09-27T06:33:57.732Z","1.3.14-beta.10":"2022-09-30T07:17:01.447Z","1.3.14":"2022-10-10T03:04:46.141Z","2.0.0-beta.1":"2022-10-10T09:39:59.615Z","2.0.0":"2022-10-13T03:46:04.138Z","2.0.1":"2022-10-28T06:21:51.852Z","1.3.16":"2022-10-28T08:59:07.167Z","2.0.2":"2022-11-17T06:15:23.726Z","1.3.17":"2022-11-18T03:45:07.999Z","1.3.17-beta.1":"2022-11-21T06:22:15.042Z","1.3.18":"2022-11-21T11:28:10.344Z","2.0.3":"2022-11-21T11:51:55.534Z","1.3.19-beta.1":"2022-11-23T02:53:18.632Z","1.3.19-beta.2":"2022-11-23T03:07:43.407Z","1.3.19":"2022-11-23T03:21:44.326Z","2.0.4":"2022-11-23T03:24:49.634Z","2.0.5":"2022-12-01T10:05:17.126Z","2.0.6":"2022-12-09T08:19:25.356Z","2.0.14-beta.2":"2023-02-14T07:42:08.665Z","2.0.14-beta.3":"2023-02-15T08:44:59.368Z","2.0.14-beta.4":"2023-03-03T06:43:24.941Z","2.0.14":"2023-03-03T08:04:37.431Z","2.1.0":"2023-05-30T09:31:31.232Z"},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"description":"基于插件生命周期 + hook的内核","readme":"# Command Hook Core\n\n基于插件生命周期 + hook的内核\n\n## 内核使用文档\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    config: {                   // 会挂载到 core.coreInstance.config 上\n        servicePath: baseDir,\n    },\n    commands: ['invoke'],       // 默认命令，多级命令依次传入数组\n    service: this.spec,         // 会挂载到 core.coreInstance.service 上\n    provider: 'providerName',   // 会比对与插件中的provider是都一致来决定插件是否加载\n    options: this.argv,         // 参数，会作为第二个参数传递给插件构造函数，例如 { function: 'index' }\n    log: console,               // 输出及错误捕获\n    displayUsage: func          // 自定义如何展示帮助 displayUsage(commandsArray, usage, this)\n});\ncore.addPlugin(Plugin);         // 载入插件，插件支持 class / 'npm:provider:packageName' / 'local:provider:path' 三种形式\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行默认命令\n```\n\n**core.coreInstance** 会作为第一个参数传递给插件的构造函数，上面挂载了各种方法及属性，详见 [./src/interface/commandCore.ts](./src/interface/commandCore.ts#L25) ICoreInstance\n\n**options** 作为第二个参数传递给插件构造函数\n\n\n## 插件开发文档\n\n提供了 `BasePlugin` 插件基类，可以继承此基类编写插件\n\n```js\nimport BasePlugin from 'command-core/lib/plugin';\nclass Plugin extends BasePlugin {\n    provider = 'test'                      // provider，在插件加载时会比对provider，如果存在此属性并且与配置的provider不相同，则不加载\n    commands = {                           // 命令列表\n        invoke: {                          // 命令，例如 f invoke\n            usage: 'test provider invoke', // 使用提示\n            lifecycleEvents: ['one', 'two']// 生命周期，在执行 invoke 命令时 会依次按照 lifecycleEvents 里面声明的hook进行触发\n        }\n    }\n    hooks = { // hook采用 prefix:command:lifesycle 的形式，prefix 包含 before和after，分别代表在之前执行还是之后执行。lifesycle即命令中 lifecycleEvents 指定的，如果hooks中不存在对应的钩子，则会跳过此生命周期\n        'before:invoke:one': () => { this.core.cli.log('before:invoke:one'); }, // 所有的hooks均支持 async\n        'invoke:one': async () => { this.core.cli.log('invoke:one'); },\n        'after:invoke:one': () => { this.core.cli.log('after:invoke:one'); },\n        'before:invoke:two': async () => { this.core.cli.log('before:invoke:two'); },\n        'invoke:two': () => { this.core.cli.log('invoke:two'); },\n        'after:invoke:two': async () => { this.core.cli.log('after:invoke:two'); },\n    }\n\n    async asyncInit() {\n        // 可选择的同步初始化，在插件加载后调用此方法进行初始化\n    }\n}\n\nexport default Plugin;\n```\n\n\n## 插件如何进行测试？\n\n```js\nimport { CommandCore } from '@midwayjs/fcli-command-core';\nconst core = new CommandCore({\n    provider: 'providerName',\n    options: {},\n    commands: ['invoke'],\n    log: console\n});\ncore.addPlugin(Plugin);         // 载入你的插件\nawait core.ready();             // 等待初始化\nawait core.invoke();            // 执行对应的命令\n```\n","readmeFilename":"README.md","homepage":"https://github.com/midwayjs/cli#readme","repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"bugs":{"url":"https://github.com/midwayjs/cli/issues"},"license":"MIT"}