{"_id":"caibird","_rev":"82-4ce25a6f23f345d71ed688806ac1a45d","name":"caibird","dist-tags":{"latest":"4.1.0","rc":"4.0.0-rc.16"},"versions":{"2.3.5":{"name":"caibird","version":"2.3.5","private":false,"scripts":{"prepare":"git config core.ignorecase false && husky install","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.12.10","@babel/types":"^7.12.10","@types/ali-oss":"^6.0.5","@types/babel__core":"^7.1.12","@types/cls-hooked":"^4.3.1","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.7","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/history":"^4.7.8","@types/jaeger-client":"^3.15.4","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.11.6","@types/koa-router":"^7.4.1","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.0","@types/lodash":"^4.14.165","@types/node":"^14.14.12","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.0","@types/react-dom":"^17.0.0","@types/script-ext-html-webpack-plugin":"^2.1.1","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^3.9.0","@types/webpack-dev-server":"^3.11.2","@types/webpack-hot-middleware":"^2.25.3","@types/xml2js":"^0.4.7","@typescript-eslint/eslint-plugin":"^4.16.1","@typescript-eslint/eslint-plugin-tslint":"^4.16.1","@typescript-eslint/parser":"^4.16.1","ali-oss":"^6.12.0","axios":"^0.21.0","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.10","eslint":"^7.21.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.2.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.22.0","eslint-plugin-unicorn":"^28.0.2","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","history":"^4.10.1","html-entities":"^1.3.1","html-webpack-plugin":"^4.5.0","husky":"^5.1.3","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.0","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.0","koa-webpack":"^6.0.0","lodash":"^4.17.20","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.1","react-dom":"^17.0.1","react-jss":"^10.5.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","terser-webpack-plugin":"^4.2.3","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.3.0","tslib":"^2.0.3","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.2.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"1e8da4ff026f51e8d8546929a2fb31d7ff3b3f10","_id":"caibird@2.3.5","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-JKv8YPsnySwVyoqHH97uNWCERsWuzzcYfE+Aj+DvTS1tKZWjj6UW2yxdqSUf8peHbkA99Fi3B3oXjRnSTNwX2g==","shasum":"5eb81d606e3cc4cadecf0e0dc63005f254ce826d","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.3.5.tgz","fileCount":168,"unpackedSize":319003,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVqLxCRA9TVsSAnZWagAARN0P/3LKrOIykrhnfYdw2l7R\n7qEkfXc8MWajl77tEc3tKY9/bSu03sslZ+JkBlfMqMuIv16K9B/ZOjv9uejX\nqFdStyBG+TRlVugIVfnKokn1YkVJ0A99hd+DCD+bbfb6Yshhj3NwoF7HJZLf\n410BI1Z3syFDZm0imiXGKCjNmWAOlSPIFYSsbEHdpWxg2QcU5+NH7XA6jbz0\nfSpN92VA+F8VrYq/eBfKXeGCVXrSy3ZTDHp1YljMHNczr3L7KseBXnYxuWXV\nmwJG3ZA3vdpZdfvCuwreY2BWSEM/WXy1oAB4iBsqFK0Lo/3sjQEeQdqCgMtn\nh0bLrJAeermJ1240er9Th2M5E2BCKdLXwFZnofCkKYa8p3WvOYdy46rvJV/g\nUlFgCtze4V3e/K12r/xyZKZpDYfO5rdyvnu+3Ky/LEnJlfNTWnky2jZpBUGz\n9+CmdoueB+BkMbwQ/isvnpjtcygr8p84PtvRKeaFmY4FYv+MdaVsNUOJH8bt\nyegEEFDDlwGhEaTljLduErvaERi/mJDtEH+Z6jC0YsFxCVUWPc34lTFMqPly\nBrcHN8a6J5DS97JhQcXCm2WsiAqPNWt8iIrW4UNos7i00IhUMHxo4rZsKN2O\nWewNBUMxfkws+/8M0K8OeYZEewuXiUurFiN+h9DIbUgdnjUrDw/xlCzf7AEv\n1w1C\r\n=c4+Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCYa10OXtPRZvmpiRjA58AjxBkXI5/rHw369iHQJ7/gywIgKo1O45qQEeFLW+uPEphQyhuUY/ooHj0MqIOq5q/VZpQ="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.3.5_1616290545059_0.06588438652547302"},"_hasShrinkwrap":false},"2.4.0":{"name":"caibird","version":"2.4.0","private":false,"scripts":{"prepare":"husky install","preinstall":"git config core.ignorecase false && rimraf .eslint/cache","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.10","@babel/types":"^7.13.0","@types/ali-oss":"^6.0.7","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/history":"^4.7.8","@types/jaeger-client":"^3.15.4","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.1","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.2","@types/lodash":"^4.14.168","@types/node":"^14.14.35","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.2","@types/script-ext-html-webpack-plugin":"^2.1.1","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^3.9.1","@types/webpack-dev-server":"^3.11.2","@types/webpack-hot-middleware":"^2.25.3","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.18.0","@typescript-eslint/eslint-plugin-tslint":"^4.18.0","@typescript-eslint/parser":"^4.18.0","ali-oss":"^6.14.0","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.10","eslint":"^7.22.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.22.0","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","history":"^4.10.1","html-entities":"^2.1.1","html-webpack-plugin":"^4.5.2","husky":"^5.2.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.1","react-dom":"^17.0.1","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","terser-webpack-plugin":"^4.2.3","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.1.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"55b0ad921464704627f6460cc76e967d9e2fa531","_id":"caibird@2.4.0","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-BTrMPfgRcRXdFsWb17PIj2V2mXvEoxFodriURltkbv4V/VmCgRqCEkyuQEdJFSiptzydwIzL5Rh0l5CzyYHf0w==","shasum":"7e74a26f4bdda7fdbc3d39da3ecc346bac9a2bef","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.4.0.tgz","fileCount":164,"unpackedSize":318364,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgV8TTCRA9TVsSAnZWagAA9rAP/jmM0XyS9zOCkumPeEiG\ncQPtFencSPmCYqKD82IQPEMctfQmRRIx6tiocD8a68D6UKxCf61w17dorro+\nK4aJRJ5lkw8UYpfuq/+QLb4bn7i8rJyLxdTfjRj2ZX1jTex3ClOjgjzCKW9Y\n4AqRLJNWvSFVoKeZ2Gu9u/xwYchikJENIJkJSLvQFjiUlNO3P2PB0hHEBw0J\nkbfpGKVZa1HWEje/4Lrz0J10wcCPiBl9bK7RCXGcdSHQ6eDKvTOBcRE8vSQT\n1gTsnpeInyE/TDuesQ6RlJ2eanCQE8hjKuhbrp0tw5JY8YVb4yCQ5cr7v7p4\nP7cyi+py031iWVaeGPCXZKy5xU6S14/TKX/PyXpBlpUdcgoe/v7IejbrFoLs\n1w4yGdpxYnpKOMRMjkRfzWtk/6+KRfiS6bAm2Wfk74uOvR/nYDFqvJ5RGAb7\n7pBav7ceMCG0ikuQWdL6340ThQdsAUJJAckG8xmM0jPmSj+6CMxbfwK7uTHs\nMicgy4yL/Xt+QJYy4ipP01SzUJp3bN3gXhFADtoeNxsZ0azLhIdpAxz0nprK\nvaCHH7vM+p+fcdcEsIh1toT52pi9LJ2a5JTiCEElsFJGVccTDktbekiy0MEq\nRY2ibCdRT+irS/IFcETwR9FnhGGxyAPNTAirqL+ABJjTedZHQNVkeRbLWYZx\nEgde\r\n=tYnb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCAQjHL41ErHk7qmH/P26sEJfderzGXgIJR3JfBo5VwSwIhAIEaW6cmt2FSxiKG67bAOyLH6HnGVBYBozvIwyA1wgzD"}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.4.0_1616364755382_0.3742331157357395"},"_hasShrinkwrap":false},"2.4.1":{"name":"caibird","version":"2.4.1","private":false,"scripts":{"prepare":"husky install","preinstall":"git config core.ignorecase false && rimraf .eslint/cache","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.10","@babel/types":"^7.13.0","@types/ali-oss":"^6.0.7","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/history":"^4.7.8","@types/jaeger-client":"^3.15.4","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.1","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.2","@types/lodash":"^4.14.168","@types/node":"^14.14.35","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.2","@types/script-ext-html-webpack-plugin":"^2.1.1","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^3.9.1","@types/webpack-dev-server":"^3.11.2","@types/webpack-hot-middleware":"^2.25.3","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.18.0","@typescript-eslint/eslint-plugin-tslint":"^4.18.0","@typescript-eslint/parser":"^4.18.0","ali-oss":"^6.14.0","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.10","eslint":"^7.22.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.22.0","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","history":"^4.10.1","html-entities":"^2.1.1","html-webpack-plugin":"^4.5.2","husky":"^5.2.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.1","react-dom":"^17.0.1","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","terser-webpack-plugin":"^4.2.3","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.1.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"70a8008dff4b69b2cd77cd0627e359fe48c80a06","_id":"caibird@2.4.1","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-ZfP0LIPQ6hFD4nQBM1O+VqRJYdqZH/wre4VQqWDLNDT+vPVsAeVYfL4AwV9GJexhRlVdM/cEd0vkncejKfybiw==","shasum":"aaa117ebdc859552013a5f00f674e9ea1dddd752","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.4.1.tgz","fileCount":164,"unpackedSize":322221,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWfXsCRA9TVsSAnZWagAAPy8QAIyAvrKSvca+0txWEJVI\nR/2RQ+kDvs2OIwgeS7HKiFl1BgNmJRipcsCufVa5GJt+7hxTWUNi33MoU1rj\nVcGbMcWUmGWySztYwN4ihYf6y0cDIsWgNPVbEZ97BPCe5odlPKMrnrkhfJEK\n5eSfke3pe24RXNNbMTuNqpXgRoW3hOpt0G2ZupBiAhwb5MkWSESOqxzU1gp9\nMsZDhj0XX6Ii4oh15VSwGq/E595XbUxMM9t7p9ujnOLy1UFrzK0O7g8jXOCs\nBCIrYwEFI/vetvssQhaSQUfw38qPOk4MAe3cAhWu8ta0nq2j5rx4mzpHWBYV\nuO+NRZczyxJGOynIaRxMl013oZ/kr1mSWjyVAxVScgPveuOHAfOTtqhWI9oG\nAAPpECrLZIW8823MzDlYnujDx3X5dUBHZtMDeYg0vQMX7cEK24KknQ2oLAQE\nDJwY+zkq33j65vRS/PViJVNhq0lqHzr3S8N+znMH3XG35vhJZYNp9gD7dQzA\nXqpOHZSAwXTkpBPDEtnzuGje3MOjCvkOFbdsUdZ8PDHcokVe3ND45JuEpy/z\nSHLZxPRHZ6VCuQqi090xT+DHs5klQk2qgjf2QvAjwmpfNNaG4914ru9vG59+\nwy02/qVrLuEXJcexJm2fAjUe+PpQfbPYtZarWFE7GUxdY1DnEBEVROmCcTH9\njCpL\r\n=EDhN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFZMQtK9RKLWPrdfa9O3MtREPa1HJYx8Llrp1HVKMi4qAiAu+UVVOlONQ63FZ5x9dQu4MFGZhRf8iBDiEuzCm2g6xg=="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.4.1_1616508396182_0.17046681078547543"},"_hasShrinkwrap":false},"2.4.2":{"name":"caibird","version":"2.4.2","private":false,"scripts":{"prepare":"husky install","preinstall":"git config core.ignorecase false && rimraf .eslint/cache","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.10","@babel/types":"^7.13.0","@types/ali-oss":"^6.0.7","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/history":"^4.7.8","@types/jaeger-client":"^3.15.4","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.1","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.2","@types/lodash":"^4.14.168","@types/node":"^14.14.35","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.2","@types/script-ext-html-webpack-plugin":"^2.1.1","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^3.9.1","@types/webpack-dev-server":"^3.11.2","@types/webpack-hot-middleware":"^2.25.3","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.18.0","@typescript-eslint/eslint-plugin-tslint":"^4.18.0","@typescript-eslint/parser":"^4.18.0","ali-oss":"^6.14.0","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.10","eslint":"^7.22.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.22.0","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","history":"^4.10.1","html-entities":"^2.1.1","html-webpack-plugin":"^4.5.2","husky":"^5.2.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.1","react-dom":"^17.0.1","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","terser-webpack-plugin":"^4.2.3","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.1.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"642b735542aceff42a15e290fdd71b8618d35dcb","_id":"caibird@2.4.2","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-d2dnOJjmOmFxE8Pmcu1edJ80KSeSbv+XW/LhUetVbtVkctqnOgGZmfb6lMsSp4b2tGc7QUByl8oD+bpWkv9Pew==","shasum":"d20c0935c2b2e062c1612da0c3f472a3dd0ed0a9","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.4.2.tgz","fileCount":164,"unpackedSize":321161,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgW35LCRA9TVsSAnZWagAAr90P/2nbPCoGnrhcGQfgVi53\n6NPmJmKA760LEgxSxwBNnqm6LxBHHLJcMnnjeNfM3RHmKunGAJTxYrN72afV\nf2mN8pDAKOxkHxitQsN/zKVpN0WjQGZL8/feSoLMlzxhVnudMZr8VIkzORxb\n6ucE2rBsWyuHsvb3Ylr3wX9iPs263WKUHkhuw8YBhoXr30zOFs2T41FZaBh2\nG6VIbWUIDcvDcQot/NHPs4P3chl0UU+34Z2SmIimr6SnuO3bvc10QXQTtiUp\nirBGj8tEusV7eJzbEZ7/ReRK41F8AnEaSIGeUKweZQ5ejQCCSsV7iW1dXsZW\ngCovyFisMHCHTxtsqIvmpvNFqRE0jzSL+Hd3o66y9K1OSUCcCjvzcYFODz2h\nL3cz+3u2fcweECx5S+EePAoTdY151WbvzI2Lsd27fXWAi57e5Nj6BqsjFdoe\nbOajk4/pzZta/PBPSTKO0tvlJITqXehlf9VXw6rRNgLg9DkmIKg4fqpwEaBQ\nY7h4D26Nhs9mqduF5oj2CkQPYzGgEah/kGUIzSp96tx9LWAjH72PllNpsGOi\n8YUsqdgCe1oaR3EmyUj3oRWUHOv8csv7FTFFXCGnJNwWPtZcHnFhQ2HsqtnG\nsvtCsuQH7W4cYjEpn0iH8zOQn8tGrdYjzxWhQb/BF3nTuVm9k4JCb0iEXMBH\nYLTS\r\n=1gg6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDd6kDV6t/+vNIGRHp8nNYEUHs0VMnTZ0On59Vx3mFejgIgTd8FLsINQGJXYrQnuiwMIqTnmOZZGAAp+xk5463mPoo="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.4.2_1616608842966_0.1064377518527233"},"_hasShrinkwrap":false},"2.4.3":{"name":"caibird","version":"2.4.3","private":false,"scripts":{"prepare":"husky install","preinstall":"git config core.ignorecase false && rimraf .eslint/cache","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.10","@babel/types":"^7.13.0","@types/ali-oss":"^6.0.7","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/history":"^4.7.8","@types/jaeger-client":"^3.15.4","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.1","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.2","@types/lodash":"^4.14.168","@types/node":"^14.14.35","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.2","@types/script-ext-html-webpack-plugin":"^2.1.1","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^3.9.1","@types/webpack-dev-server":"^3.11.2","@types/webpack-hot-middleware":"^2.25.3","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.18.0","@typescript-eslint/eslint-plugin-tslint":"^4.18.0","@typescript-eslint/parser":"^4.18.0","ali-oss":"^6.14.0","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.10","eslint":"^7.22.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.22.0","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","history":"^4.10.1","html-entities":"^2.1.1","html-webpack-plugin":"^4.5.2","husky":"^5.2.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.1","react-dom":"^17.0.1","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","terser-webpack-plugin":"^4.2.3","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.1.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"2c4922e5acccabad84141d99b743d8250900cafa","_id":"caibird@2.4.3","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-aiJtGV+CsR89aIdgWhrfcd1aDOdm+tWsSkznfrKNSwsWhzNI5z96JBhB2hXvh2oLzm4PXxoUF/FCDnblzUZABQ==","shasum":"52f86c769110d0bbdd69803ac35f1d4182737b03","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.4.3.tgz","fileCount":164,"unpackedSize":321693,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgW5z6CRA9TVsSAnZWagAAeoAP/iVjotcc+xwmVkwaAYuc\nOo8Nx/dxSXqlYcxMSzmhwOl/zCJae97jf5Co/0fAHPY9gtzpNHjvpe2wWuP/\nZjdxFU7j/eGGkECrO7zVp5w5UkvxwdhaIu+lqp3giBan9yqOvbxc8Q6NnRau\npuaR8/gamjMVlbbMKgcOWEJXKHSvr7Bdw6TsHzQBP3GQXhDsxdcFFO43A4a7\nXDJWKZIUX0REMpAwoHdswIQ9IR//a+t3DWsv7bgYKXYqsi6RwA+RHShz0XrA\nu5G1gzrA6GWKpXsFlTlWb6qQPaLsTgV7OWdlnvhfkB/6DRngFjZ6xHd42o5M\njmJl9VXUUKX004RF/2FQM+wuOuINUn7dmvo7RYOLq9zvVbgwjAsWxZtXLtDo\n29eSqUNsR/Q/7E5JT6A/GNcLD8QUdwsgGmzIqtw5oUhgxk7Kgz6bO0fhrJEw\nEtjw5lE83XtOrx2qtXrL4ltPtOdu9FbDSUG4iAuJji+x1idV6etKZoCZKykn\n4Huflv/9O3r/6di/pZ6FNrSy8KMGleARPXvz3K5AdVpG52zjawh+N2MmPHOU\nrp/xY74NmVOes5aiZviqu7e6Wef1vKYlt/TbZNZteAK/Tlkb4yQRuygjbrv6\nu9TXUmXfj+b/LwKw99afkd8+sjGia75xxBhAdh3QzUjI2cpJELAOcZpt4e6Q\nPv5u\r\n=PTIY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9LleDZAJl0yzxDHWjcOlPve59+F6re3MWLjbRg3nUWAIgOJiFrMaEDc4Z9e88Us0ev+ZwBS5PA0n1uKV77wcJr4Y="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.4.3_1616616697461_0.1115183365708381"},"_hasShrinkwrap":false},"2.4.4":{"name":"caibird","version":"2.4.4","private":false,"scripts":{"prepare":"husky install","preinstall":"git config core.ignorecase false && rimraf .eslint/cache","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.10","@babel/types":"^7.13.0","@types/ali-oss":"^6.0.7","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/history":"^4.7.8","@types/jaeger-client":"^3.15.4","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.1","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.2","@types/lodash":"^4.14.168","@types/node":"^14.14.35","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.2","@types/script-ext-html-webpack-plugin":"^2.1.1","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^3.9.1","@types/webpack-dev-server":"^3.11.2","@types/webpack-hot-middleware":"^2.25.3","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.18.0","@typescript-eslint/eslint-plugin-tslint":"^4.18.0","@typescript-eslint/parser":"^4.18.0","ali-oss":"^6.14.0","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.10","eslint":"^7.22.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.22.0","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","history":"^4.10.1","html-entities":"^2.1.1","html-webpack-plugin":"^4.5.2","husky":"^5.2.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.1","react-dom":"^17.0.1","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","terser-webpack-plugin":"^4.2.3","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.1.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"6bf89a22fa71f48e2284d2c01776e88be2fa5dc1","_id":"caibird@2.4.4","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-Er2YHGchhxkLpELQge50mXLc8E0fyzH6WkGK7jarVInwAcP1kZTaePOLq9h3whPyrXm0NFrrMz0D8m7gcAjazw==","shasum":"bde43420370b6323bef545fcd1c6a4276e3fed7f","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.4.4.tgz","fileCount":164,"unpackedSize":321697,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgW6GrCRA9TVsSAnZWagAApjMP/1+WyZBH0r+WYMsJJ0kH\nNZpjuJc2si5UoKQfSHgl1GRUN+Y/HfIuPFdxrpltp9MqubF7vQnqtFZZLfQz\n0yazUguxVOWFwhgSDxlB3zKo63E552C+itNAQRCQhBU29xWOXJs/4w63iZIG\n3K3zqtRfIGXt8zLt4IdKMdN1fe4wJ1k3yyy1M3ghvR4KTxGxoGBBS3LUx/uO\no2MEj2EqkevJH1uc5rJ4bTRHbP2ePyKsw3Hs04VgASEFujOvY13JTCflSpQs\nCEVwUGm2wyaoOLReIFqmLJ0VKCCIpZ4po++LXOq130deMu4jnKMOYUwQK/xQ\n9/zmvAO0BR6sXkwGtnw2clUIuxOls7u2bsGewglMBvBpIMCUVFsbAygjztiu\nwe9dCPzIZWTg/v61weT5jyMEECVHQFDmMH0E1OZ1YyoZU6CjDhwrW5maup1n\nTZukgZpcGXe33JD/nnc1aT59AK01O9XOKdhkrjUGEawnVyrxMY57l9k9gj2L\nqW0sWB6ia1JGcwGpQaKzPzx2q1+9nbgBEoXK5uMxemIrWo7H8zad6BviU83E\nJLfnrHigEq4fdvwqEexpwwi/qq5qc696l1BHPKK3/de230KEFmeCRPXjns/R\nCGKJXYfKoN6ltvpZwGau6FQ8nE+ktSuIyPYUqA7x8eZaB4L7zPzxeCvXhHec\ncPTb\r\n=bjgv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDfowUUykbz+nbMevXJF2h8is6/pMps+JSOQomq7cUDOAiBPX9Y29aflLEshJda3XsHSaRqPV/dZkbDQ6JT1i0xTrw=="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.4.4_1616617899097_0.020514586643760824"},"_hasShrinkwrap":false},"2.4.5":{"name":"caibird","version":"2.4.5","private":false,"scripts":{"prepare":"husky install","preinstall":"git config core.ignorecase false && rimraf .eslint/cache","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.10","@babel/types":"^7.13.0","@types/ali-oss":"^6.0.7","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/history":"^4.7.8","@types/jaeger-client":"^3.15.4","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.1","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.2","@types/lodash":"^4.14.168","@types/node":"^14.14.35","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.2","@types/script-ext-html-webpack-plugin":"^2.1.1","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^3.9.1","@types/webpack-dev-server":"^3.11.2","@types/webpack-hot-middleware":"^2.25.3","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.18.0","@typescript-eslint/eslint-plugin-tslint":"^4.18.0","@typescript-eslint/parser":"^4.18.0","ali-oss":"^6.14.0","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.10","eslint":"^7.22.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.22.0","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","history":"^4.10.1","html-entities":"^2.1.1","html-webpack-plugin":"^4.5.2","husky":"^5.2.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.1","react-dom":"^17.0.1","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","terser-webpack-plugin":"^4.2.3","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.1.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"84a92a381e2402ef9d31bed1e169e639514e3f23","_id":"caibird@2.4.5","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-PXg7oUgQJ2C9taKYW0ZhV+Xz1LxpQhonommkt9P/B50nlkw7k8iacGRZ9gGibiD2wjHaKRuIwt4GzLs8YCVo/w==","shasum":"202fbe8b09f93be29788d987f0ddd58c979468b8","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.4.5.tgz","fileCount":164,"unpackedSize":322591,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXFrMCRA9TVsSAnZWagAAE18P/09Xu8qh+H7PhujgKuzo\n49oXMJBCzNPYM5h+H5iOpLNs8anjvi3NIJh3XApHCaSgE2emWutSs8rDhhaE\n+pAYzp2Laa13JL1R3AbRjkxq6DyZ2fvldZmsLO3X+qCYVC+QM4ReXDflPOYl\nGPp5XsnhFHXSH1QRsvGKXFZpLvpjOqOVKKhSD38VIiMPCWbKsL3f5hB+0+x+\na/7o2mz/27yVb0aDTO9LWYXa21OOC5vsPZHAVXXzPit0WaBvBUS5WDFNbTje\n7eX4zbaO0dJGzsrhsbjx3xKuzDBWSSde9jao6o9DOK8iq4SR1EFppID7eQcp\ngG+e/GYfUBo6y8aOUBiAifL1P9M7ZweA4i5kNYtyYYPuJ014ol9y1omuPpyL\nkQsYGjf4NLyWLuoAHlyRk0i09U+OyqCK2NCyLwv4e/Q9/tZYJLpzhgMBh9wf\n5ckwY6u0aTzvJ+9X5BJnAu4UPxLI6ELcVeJ/EvyILrc9C6u26eYBxUeRz48M\n6TZfJWRYlHQUuuylrryNvXyidAGD0bwbvTxWwa5JqIYaExX+cLj+rOoJgxPE\nbX0Srrf8KpN+xNdxhYlj2DaU0S6quJtNMVUi7li5en8S3JAhoJrvwwjpaq0Y\nbDWBV3gnXEmVqr2dIyjAVeQ40IhVrfKXTwZXiN02jBR7RZv9QLszw16j163A\nxpPd\r\n=7imw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDesvrVEB4tplfzpAeG44kDPjYMFKYf9oRAiezJTsTI8AIhAK8C81ux/4qW+NprKj/KX2YPUkdKj3q9pXvDsSzNPgPo"}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.4.5_1616665292045_0.771300288684388"},"_hasShrinkwrap":false},"2.4.6":{"name":"caibird","version":"2.4.6","private":false,"scripts":{"prepare":"husky install","preinstall":"git config core.ignorecase false && rimraf .eslint/cache","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.10","@babel/types":"^7.13.0","@types/ali-oss":"^6.0.7","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/history":"^4.7.8","@types/jaeger-client":"^3.15.4","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.1","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.2","@types/lodash":"^4.14.168","@types/node":"^14.14.35","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.2","@types/script-ext-html-webpack-plugin":"^2.1.1","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^3.9.1","@types/webpack-dev-server":"^3.11.2","@types/webpack-hot-middleware":"^2.25.3","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.18.0","@typescript-eslint/eslint-plugin-tslint":"^4.18.0","@typescript-eslint/parser":"^4.18.0","ali-oss":"^6.14.0","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.10","eslint":"^7.22.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.22.0","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","history":"^4.10.1","html-entities":"^2.1.1","html-webpack-plugin":"^4.5.2","husky":"^5.2.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.1","react-dom":"^17.0.1","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","terser-webpack-plugin":"^4.2.3","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.1.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"46b6c327177153584085945f97ad6d157e70e991","_id":"caibird@2.4.6","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-xPysOTM+CUlNDj4lLX7fqgupZrHLP7XVIIY6nw+CDPqzPm9+fnwfCxJr+gtHHhH06NKwGElu2HSxynefBxPj2A==","shasum":"0ecda400b7a660035727b53e385eafdff1546d9f","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.4.6.tgz","fileCount":164,"unpackedSize":322559,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXZULCRA9TVsSAnZWagAAEG8QAJVRh2Sd9PviP0XgflUJ\n77bKfew/ZMXbCMXZ7Xc42B3yP/UUmUVGginb/zFqVzkKR4JhNQ4yOTBClmxV\nW9RMMIpRrNJ86E1FWiTzB1LfCP+4CPcdxZK2mxCXn7VSSinCie6aZN5MDziR\nWFdhLWGArt14mlDe4u/IwvgaIJK/T9MqHaLA+isNYxUKQzv86Idwpn7iQZTm\nwkUfHhnhLoLNEnTASI6G5z1Q8TlEb5jppTPkuk0bYahM0o+SXEzE5dZrMFzF\nF7Eikwe6kHER5vGCVw+1rL8ArfRoPhJAKFnR/2198m5fqGWyasqP9GAH1bUK\nA9hQGlAxUgGrZAesl5cus2j/TMnX7Rzhh7MStbHxHT/gqqmUfUBxEMKqMY4q\n+uKR6nebm1rC7CVrueylLEIlucbu6T0P9GSzCowkDg1CXx7XKIp6+rouBPP1\nUrkjEatys3iR1tAo4mGls6vZDMqW4Jfe5czmInb0WKhTZvMHpaCbKI49aTOb\n5SKDzGvUBzK2wtKWs5wdPYmTXO2oTt2bVhLlYXgWDxiKxLGWFTdzF5wU2TXh\nRehBUB2GQ7fnBnYA4/qKHfNi/50yvr0KTh3t4d3aoTypyu8UnF2JGhZvbmzD\nGNBf+4R9NRsa65PJQnaR/eVZSqtPbxHopU1intD0QsaKwWpCPqShHU7BgdPS\nxqxW\r\n=ltax\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDNZTgNxR2Exuipu2XiFoZ2neMgRUHkkv9bYdIeTS8q+QIhAIlztZtFHLvX4VenKSRJKKAZEFe+WX6zVNzrCLUKjdCh"}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.4.6_1616745738655_0.21099892133204312"},"_hasShrinkwrap":false},"2.4.7":{"name":"caibird","version":"2.4.7","private":false,"scripts":{"prepare":"husky install","preinstall":"git config core.ignorecase false && rimraf .eslint/cache","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.10","@babel/types":"^7.13.0","@types/ali-oss":"^6.0.7","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/history":"^4.7.8","@types/jaeger-client":"^3.15.4","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.1","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.2","@types/lodash":"^4.14.168","@types/node":"^14.14.35","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.2","@types/script-ext-html-webpack-plugin":"^2.1.1","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^3.9.1","@types/webpack-dev-server":"^3.11.2","@types/webpack-hot-middleware":"^2.25.3","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.18.0","@typescript-eslint/eslint-plugin-tslint":"^4.18.0","@typescript-eslint/parser":"^4.18.0","ali-oss":"^6.14.0","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.10","eslint":"^7.22.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.22.0","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","history":"^4.10.1","html-entities":"^2.1.1","html-webpack-plugin":"^4.5.2","husky":"^5.2.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.1","react-dom":"^17.0.1","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","terser-webpack-plugin":"^4.2.3","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.1.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"7cea24cf494db7ad2bda286a2ca74c96f0424a4a","_id":"caibird@2.4.7","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-1QFi9QvhX5FpKj4lHiIe9kGDgmc9KHBa6Th6zOMieYZkfUYU3Tzh7jLnin6xLoBLUC4hQkVIHIwVtrnqOV0nDQ==","shasum":"47d58ea1ec26a7ae36ad69837f4fa1e0f9439876","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.4.7.tgz","fileCount":166,"unpackedSize":322825,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYJBYCRA9TVsSAnZWagAA0w8P/jGTHV7e3xX8dP+ADoMO\ndQSVJM7COD4GzJ0mfKAB1FaRi/Tw6BQaNiGGec7EQElDgrUPp+mwj7wYjUOe\n/yjgBQyFCbuZrQj2oSn8OMU6i/jrZCMIxO46DHhcyielp7r+4s4X9L9EYNTx\nzVs7zyuack1jyIj+CHCLgSOBRGOkEButaoi2LDucMPNjj3TlRzNEPKv2p9cC\ng6pRQajn80EPYu6IqzN8F+UksP/nyuALtyFg933kErsM5GzP2rDzenBTjhYm\nah3b8JztJGzRoPgj1OUeW+xxvfkK32LfUV46HiwaUnyMGjKFIaI0bu88QFst\no7lRpcUYBRM3dPAuq1flqnqpYCzIK042aQ76Nrj93u6L7JCjOaXDW+gbttfk\ngud2LNftl9EL9NKKSU1oRL4n+GBfrn9s1+j8CNHR7HpAk78oJHUXCVDne+kr\nGVbWiz7kuPNPgEibs4gxfdUUzl0G1xq64edx2YU0uPxJU+92PRo6lzhsMGQb\nSa8xW2AaKT4nGQXkd1pInXp1PXvy5Jcb6VDlxGofW3xTB8DGzAgYhseOYsWf\n7MJJxqUF7JObyPih6HC9WiVizJR1x2zHEhg9j33SuC45DfpNqZDs63xVjikD\nb+ebO7pDd0X9lnBxUKnd76/Bvy6kuXbCtvJWhrmh+VYEpd6c2PSsNyqByvMb\nqq1W\r\n=Ktef\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDvV+1WtclMFDA+KaCatxzq0fJ/ZRYvgmrH6LeuRdsvKwIgK2NdaK0e28stOl3k/tfGWKY0EknE3uRbXgNQ4JdTzfg="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.4.7_1616941143714_0.9353470051166124"},"_hasShrinkwrap":false},"2.4.8":{"name":"caibird","version":"2.4.8","private":false,"scripts":{"prepare":"husky install","preinstall":"git config core.ignorecase false && rimraf .eslint/cache","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.10","@babel/types":"^7.13.0","@types/ali-oss":"^6.0.7","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/history":"^4.7.8","@types/jaeger-client":"^3.15.4","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.1","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.2","@types/lodash":"^4.14.168","@types/node":"^14.14.35","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.2","@types/script-ext-html-webpack-plugin":"^2.1.1","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^3.9.1","@types/webpack-dev-server":"^3.11.2","@types/webpack-hot-middleware":"^2.25.3","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.18.0","@typescript-eslint/eslint-plugin-tslint":"^4.18.0","@typescript-eslint/parser":"^4.18.0","ali-oss":"^6.14.0","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.10","eslint":"^7.22.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.22.0","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","history":"^4.10.1","html-entities":"^2.1.1","html-webpack-plugin":"^4.5.2","husky":"^5.2.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.1","react-dom":"^17.0.1","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","terser-webpack-plugin":"^4.2.3","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.1.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"2a946e189d3a321bf44ceac102969005bf8f6970","_id":"caibird@2.4.8","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-CPlucw3IanmoQ4/clOfiv8+eB7Ysr93WkGOmYz7pk8aZPsjt7Xac94y6Xsi+d15VcF0StLLxZoHnIpSG2lysAQ==","shasum":"3539505cbdf3b0a97f326875de205838db19890d","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.4.8.tgz","fileCount":166,"unpackedSize":322762,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYP79CRA9TVsSAnZWagAALHkP/0paOI/rjbEeMxcoyLbp\nldyRXG+95fw1xMDNdzVkIuZj0nPTS1kXMkA7jy8kQQ9uws//IXx9EPcdI6XM\neuPvSUVplQlRFXC06FGxyYBjiPigs8XX0IR222btkYj6/7wzRzN1ZbERoAtJ\nsVweLhsS/Tp4daT9XjoSYPs3OT5dcw0SCD4RwdqUOyLYdJaw8rO9tFHTBk/3\nNAPw19dh1bf5PAksazGQ2Sr6V73SXndHqlGLKT1pP4LEQZLUrcqogfJtXw7a\nuhnF46Z/28XR8vhVmmfyuo2r9zi4E1W+onItENQq2OA4wXoGnMBTsCbuWyuZ\nd0WWms9rEVB0lZZ4g24ofneDe3osPQKZZG6YyB/CfWeRzFd7phPwLEyXANGW\nERiY+N/GIPKTcl5K9JA0c7HgeqGTXv7g/sp3GRFRCAW5vfiO37aj/BPHWvMh\nECFGZJEsWljjnE7lvGjag4iearmA5VwBsNIvEyj7DVR8kPUkXT7lnmBLrUyN\nWjjTXGrzS2nc9sZxft6qykhs+8GoKhJgrZ12h+/KTPwrBqPXW185BqROvfox\nNIQw8JZGrPoeEpiSassxEoInRY/rWokvuPQBQMN/QBw7SHfL6hp5UKmt/1PB\nw/NpCw8JFF0Sc9CruGQOazmO1qUv+eeJSKnxdDGe0ZyVAkafEXVzJX2lc6QA\nChdX\r\n=Jj96\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBVNl+xH7KidAO+DQ3lJiri+AhSeEYCCX1/r3eFnH6fTAiBb5ULeS5hAwVRO61wIA5hnd8wE91VUcFR6PAltmIfynw=="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.4.8_1616969468689_0.8047404649471563"},"_hasShrinkwrap":false},"2.4.9":{"name":"caibird","version":"2.4.9","private":false,"scripts":{"prepare":"husky install","preinstall":"git config core.ignorecase false && rimraf .eslint/cache","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.10","@babel/types":"^7.13.0","@types/ali-oss":"^6.0.7","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/history":"^4.7.8","@types/jaeger-client":"^3.15.4","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.1","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.2","@types/lodash":"^4.14.168","@types/node":"^14.14.35","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.2","@types/script-ext-html-webpack-plugin":"^2.1.1","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^3.9.1","@types/webpack-dev-server":"^3.11.2","@types/webpack-hot-middleware":"^2.25.3","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.18.0","@typescript-eslint/eslint-plugin-tslint":"^4.18.0","@typescript-eslint/parser":"^4.18.0","ali-oss":"^6.14.0","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.10","eslint":"^7.22.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.22.0","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","history":"^4.10.1","html-entities":"^2.1.1","html-webpack-plugin":"^4.5.2","husky":"^5.2.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.1","react-dom":"^17.0.1","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","terser-webpack-plugin":"^4.2.3","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.1.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"329ca45c90139c7c017326085bc9b8d2423164bf","_id":"caibird@2.4.9","_nodeVersion":"14.8.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-2SQWuSSLjndA4tpNLfRgP6ApqTViaKD5JywC2q/1vIWf3Zbz9ackRQ1q+42NWeNFdwVszCa9V497OIlDaX/ikw==","shasum":"cfcbda9d398edb3e48bacfb05ffe9ced659e68a3","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.4.9.tgz","fileCount":166,"unpackedSize":322758,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYZJHCRA9TVsSAnZWagAAZCMQAI2qDH6fsSMaj7i6gBDC\nKukAo/B2QeVkKHU6a/x4xPidrp0QVw3TYmuFZd/LOtaQWqzRsuor58wTN8o7\nvYcN69NGAUPxIeOy4vfC/ygq4ZdYAHUSgvMXbGA13OTPn7qeq0rkrF12bDSo\nVRSra43HuV19CUNY4ccRtOkRG9+48yaQZbOb/fFGBPzpGNG1bGcDq+yjauFV\noNI6kZm2pd0arQFhD+z0yFsJLzBAkc2dg9KHF15XJC/y2XjOa1jdZxsrZ7Y/\nggae0jrQsLzrS4Hcgu9FHo0ihI5lQ0ZShbmXIZVguTT6ucy01a2cVr0DDx6O\ndjYKRDbZCLBaEmb+Z+0doqhJHRMQcEAih9imF6WXg4J31eUtzcxuEOJQB03L\n/9vFSkJoffZDeak7zc+9yxGYZ3WNOHiWZD8/x/cSzAAryct/UQdvQ/5kTDds\nNgDA29kth120iyLwtPYb3nLXwZPlkGg/WQ9g+AYinCgew/kKS0NmPnTX16ti\n7Hd4QubknMWdaaUOCmpgYKM5FR6kA5Aj+a++dMTPs1A3F8HmximPrNi7kORV\n6KKvJGCI3fPI926NmDX+dwAp9eWX/a4ui7tByg1xFtr/wlRcdUAy6aiqJhme\nE/5J4dDdO1CxniTcYxEntCDlEMtGeui8ODPodx+thmEwAAHL5D8D9IOKzfsM\nuDTF\r\n=qYLU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDW2fP4zn3whzNlX5tEkw9HA3PDNxkcymnD8wfH0p79BAiEA4KtUNkSGbEjLdbG4HCV2wO0CcdT8hk1Y2bnNEbyYIKA="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.4.9_1617007174295_0.2954567390995384"},"_hasShrinkwrap":false},"2.5.0":{"name":"caibird","version":"2.5.0","private":false,"scripts":{"prepare":"husky install","preinstall":"git config core.ignorecase false && rimraf .eslint/cache","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.10","@babel/types":"^7.13.0","@types/ali-oss":"^6.0.7","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/history":"^4.7.8","@types/jaeger-client":"^3.15.4","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.1","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.2","@types/lodash":"^4.14.168","@types/node":"^14.14.35","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.2","@types/script-ext-html-webpack-plugin":"^2.1.1","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^3.9.1","@types/webpack-dev-server":"^3.11.2","@types/webpack-hot-middleware":"^2.25.3","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.18.0","@typescript-eslint/eslint-plugin-tslint":"^4.18.0","@typescript-eslint/parser":"^4.18.0","ali-oss":"^6.14.0","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.10","eslint":"^7.22.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.22.0","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","history":"^4.10.1","html-entities":"^2.1.1","html-webpack-plugin":"^4.5.2","husky":"^5.2.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.1","react-dom":"^17.0.1","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","terser-webpack-plugin":"^4.2.3","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.1.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"ccd1d567ad85f06b293b2e67caf0e1a49f0569a6","_id":"caibird@2.5.0","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-Suis6KOlBBBU7fxSB1z9VgejH2J+j9aE47RJASqtetE9KVuLdLb4YuT8oyKP9pxf3d/HXD+oue0qu54U+iOVhw==","shasum":"1eb84f68f2a33be74f54b45ab5df5f35c5941f75","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.5.0.tgz","fileCount":166,"unpackedSize":322894,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgY0YICRA9TVsSAnZWagAAPFIP/16G+qnCC5iA32OS02HZ\nWMUtstzD/gWp1p2IxkiPs1x/bfaiXyQJMDmNkJoJ3uafH8cKej8K0LAD0lPu\n4+gbmdDjBuKitE/cslpYGcvx23AxFNdq30QaHe6mOgwqMwTtsQposfEmYzmq\nxV+uRKp0fWmGpng0SoL2L3SkNQVatJQEE9b1xmo4B8ceNau+RRSch6UNocY9\nfwocETa2qhWUaX+MZXBjcxlPMVlRtXUgOQaBbAB3jXdO1gIhLfMzf77aoNso\n/9L5Ul+ODt3SmVIhjKbKJROnC0CSzSOxw8SCH3BUe9c6s7bzJwABBdHFD372\nsSc5CcdhBOnY/ibly5gLHq6d8zpFEFBbFU4GDIR4d+8R8c8+1AkBSxq20H6S\nE9IrcCLpQNtDJY4rE5j+b5wj7TivjvyTfqTRBQi+QToUSnrtP/bp0hnlDj5g\nEtP3wRL1C/SaIhYUX18QRAbQn7+D4vKLPSKDnmIRS6mcP0ZD+ls4Fp98eg5A\n/rJ6Hrq6vrO9ihdRScjlzjTOqNSqM2Dx31mkj1hSkCrN6Ib32l9Sk1S0vS7b\nFnhrda/Vi7uDWYkTOeD94KPxA/UxjadWVJulGcTWI65XNjUHucP+P7jxU+3g\nrBiXGE1X1WO6YzweB4kgeAQ3E6/huvA7jGixAahcB3RjZoERLX0Ip8et6qTA\nYuEJ\r\n=rqo+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDv9LAoGbV6fl4K+apGWuMxSucq8t/eH+kNPv7gLkYgJAiEA0xJ9nVr2Wgen3Fxq7SaLr4LdddL1XOGZgZ+7X9I0OiI="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.5.0_1617118728311_0.7349854467661749"},"_hasShrinkwrap":false},"2.5.1":{"name":"caibird","version":"2.5.1","private":false,"scripts":{"prepare":"husky install","preinstall":"git config core.ignorecase false && rimraf .eslint/cache","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.10","@babel/types":"^7.13.0","@types/ali-oss":"^6.0.7","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/history":"^4.7.8","@types/jaeger-client":"^3.15.4","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.1","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.2","@types/lodash":"^4.14.168","@types/node":"^14.14.35","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.2","@types/script-ext-html-webpack-plugin":"^2.1.1","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^3.9.1","@types/webpack-dev-server":"^3.11.2","@types/webpack-hot-middleware":"^2.25.3","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.18.0","@typescript-eslint/eslint-plugin-tslint":"^4.18.0","@typescript-eslint/parser":"^4.18.0","ali-oss":"^6.14.0","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.10","eslint":"^7.22.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.22.0","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","history":"^4.10.1","html-entities":"^2.1.1","html-webpack-plugin":"^4.5.2","husky":"^5.2.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.1","react-dom":"^17.0.1","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","terser-webpack-plugin":"^4.2.3","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.1.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"b24868b553ae69cc330bf10fee4d476882d6e47d","_id":"caibird@2.5.1","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-Us8I4MsFixr2LLfIiH1O+38LnoJhoU+xe6EUguMPzyGcQmAVH2hMO6X0yfSHgDXUDPuaobXc+wUr1oEypKVk5A==","shasum":"dbbca381d672d556a551af5332a7885284e3fc58","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.5.1.tgz","fileCount":166,"unpackedSize":323245,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgY2XACRA9TVsSAnZWagAAcOQP/1/i2uz3hWkgbBCdfrRL\nVCqMGunjLM7t4rmghmN/waJn1KcOzumer7MWy2oFtM/IkN5xnJN0gGD7/BkL\nKudaIMUCaZJxT2V8+5HaVkMXdVeYHrDZMZw3KhDuPEhQ8DzAIr5IKaKvSNNV\n4SSUZveCD/DtM1HKKUD9bem892EZppx2mf9OhPjq9GK7qjhpjpOHym8zwSf1\nghICEFYxp4Dx/JIimzzlI2zUbzbSJb1OF2C19uPlmyRpybTrOaykmSU4Rl6L\nmBcNW56ltYmQKdd52YuH4GsYThRsXGI5itUI9flpkYCi61a0cxl53igmBmP6\nO1uipySO65nqMSpC/MNN+MAT7lpMalquQC0MiheLzd81/FlBvnzflue5rPN3\nw3oIKBHS63282fCIB389SvLDI5YdNcHhD3z4qTaRJ6yBICO08rfunYi+lExX\nsgDsPtnKpscVKaL5F9p0og3AS6FJW1nAvxrFylOGz6ffLM2hqKmJL5mEzIHI\nVxm2DIKbXxpgmavesYGXkp0p8DwZHA1ovtLGG5ZVl6a3w+QYxwkjc13+Zy8W\ndMjpTrgrsmd5cIv49uE7j36vXviowWA2aQ1ypaEelvlk+jmiLwJ6oQhR9J/5\nzi6Gmt1lWMkt0eErmpvOegLkFM0Ub9t9r4BcygVxPXLJVzrKD4enPXUM9s6y\n483V\r\n=G1Bb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHHgXTPdHDVpbr24IgdRiVgujtMDUClSyXClmzGRBaaxAiEAlMgc/AxwFfDBQOo7VVAp40l3hktV0EnjcetXJTpyOiY="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.5.1_1617126848072_0.13273889931274785"},"_hasShrinkwrap":false},"2.5.2":{"name":"caibird","version":"2.5.2","private":false,"scripts":{"prepare":"husky install","preinstall":"git config core.ignorecase false && rimraf .eslint/cache","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.10","@babel/types":"^7.13.0","@types/ali-oss":"^6.0.7","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/history":"^4.7.8","@types/jaeger-client":"^3.15.4","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.1","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.2","@types/lodash":"^4.14.168","@types/node":"^14.14.35","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.2","@types/script-ext-html-webpack-plugin":"^2.1.1","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^3.9.1","@types/webpack-dev-server":"^3.11.2","@types/webpack-hot-middleware":"^2.25.3","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.18.0","@typescript-eslint/eslint-plugin-tslint":"^4.18.0","@typescript-eslint/parser":"^4.18.0","ali-oss":"^6.14.0","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.10","eslint":"^7.22.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.22.0","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","history":"^4.10.1","html-entities":"^2.1.1","html-webpack-plugin":"^4.5.2","husky":"^5.2.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.1","react-dom":"^17.0.1","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","terser-webpack-plugin":"^4.2.3","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.1.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"3dcf44b5d6282df4817acf5136a013f8c72f75ae","_id":"caibird@2.5.2","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-MUJ29Xk9Pnkw7qnOx9iPPMA1FmE0VOIZ60neuTy556oRJ2ZhrpouWLvZNTVDozzHFxdmj+4VajLMzh06YOWwQQ==","shasum":"d43ab843f00660f320d36adc469f72d8e0801cb0","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.5.2.tgz","fileCount":166,"unpackedSize":323219,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgY/FXCRA9TVsSAnZWagAA8CsP/RK+AU3z2ijteKXoinbb\nFm29rJdJmLjX3X6G56L0TyrmBLi9DJF+sNkrzCiMCDc759BiDBWGJ1hDV9nZ\ncr8tYlCqoF2cAnzvkHUfI5OdE0idLPmad+aelAksUBxH82/SZIe/9SDmfaOT\nekDfwzy5DOCuwxZ9JuuNWQjoAnCtO8iTfHUlEbh+Q+KivkH2d40ReQ7JGOHw\nGgvkA1ZbQL3A7FRc/L6rbP7CmlmdJ7LVnY+Ujp3RyUd49iAKGGVwUOyoRlpt\nW6dkL9su1hRF5T1leelyvHvH0sZNR5MeXAhiX/J40AQru5n0M5piSfop0nlD\nzTHWZJ3jdcZUmkAWat1NUWKnHRwH/bEbURrErHzMMSj8bPKdr6MscauHCyL6\n2ut5BTemyQZxN5ELnBBP23T+TniW5i6f+CIDnHNaEomv2azDmLvUT/W58cFW\nJuuxcfl/5AuHz/Fk4Yp8RgUMOGdVArn3IOQTCnO8Rxx/4wLNZwC4G9r3jyxH\neSlZAS/BSEqoZLXcRIc/tW3NyORameaacNDHwFxxqwW/n0OraEg6bqDb97d6\nwWveKAOdKbjv8nSOIiypihoQ+V+GQJg26QGN93+6UF9zjfJ+yXjsxyE8xLo6\nqk4TPG3lZapbwo4tQ5KBqu4rZxB3BLAi+7EYAqsKec/uC3E+hAFKojmbA2sD\nBYlg\r\n=8nxQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC4OKBPMgj2PSusEk8sD6u58VPT04iSLE+XDcBN0GTNbAIhAMh2CZ57fOA1XEVgwauEhtpLaZs48qZklWMSQenmZJKz"}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.5.2_1617162582521_0.0025606417167458595"},"_hasShrinkwrap":false},"2.5.3":{"name":"caibird","version":"2.5.3","private":false,"scripts":{"prepare":"husky install","preinstall":"git config core.ignorecase false && rimraf .eslint/cache","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.10","@babel/types":"^7.13.0","@types/ali-oss":"^6.0.7","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/history":"^4.7.8","@types/jaeger-client":"^3.15.4","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.1","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.2","@types/lodash":"^4.14.168","@types/node":"^14.14.35","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.2","@types/script-ext-html-webpack-plugin":"^2.1.1","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^3.9.1","@types/webpack-dev-server":"^3.11.2","@types/webpack-hot-middleware":"^2.25.3","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.18.0","@typescript-eslint/eslint-plugin-tslint":"^4.18.0","@typescript-eslint/parser":"^4.18.0","ali-oss":"^6.14.0","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.10","eslint":"^7.22.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.22.0","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","history":"^4.10.1","html-entities":"^2.1.1","html-webpack-plugin":"^4.5.2","husky":"^5.2.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.1","react-dom":"^17.0.1","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","terser-webpack-plugin":"^4.2.3","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.1.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"91d88c7cd7f9570bc7223f2b369a3b838c4f03aa","_id":"caibird@2.5.3","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-00qALR6Bit3eoBJr4dNS2UGjJCJabJz3//aaPjD5RWHg04ENGDI/MqB8JJu1COQkbI3pT/p9XLfSHHakargUmw==","shasum":"75301a792a6d52d57b0d83845c12533726b4d048","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.5.3.tgz","fileCount":207,"unpackedSize":330144,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZHOnCRA9TVsSAnZWagAAcn4P/1utBxeKrg4jBxeGJsXQ\n17d59BEaIXWl7odNMoYRyqfWI8yBCWrOsj4giTKps4tukoOCgKjbNj+HNwQj\nwQfFPwi4/SWHa8obcnCme/pbFd3xkm+az8NHYeTAqhrlREfApAatRpfC4GhU\nuecbw5dhHnMmlvPtEG2RrgLpVPe5bVJDoZl8IO0B15annUPkKWBzkxHNT+ek\nAe5hK6fuXMbw5FV2GCAxY7PXlIk89bvf7k4VoNWG7mFQe56MKXIlxkg7s1Ps\nGHihvYOFHKjiklcmL9Gpl18gvf0MnvhR+QMdF5tsW2j9C2cwTThhk1G0vgdR\nob4ESOzT2jP7aXQVulJYNjcKIGVSPTIJs9d+ZI6aFAEG1usxqmntK4M4naPC\nY6YYgH1KWGIAKPC0mhOwgey8HvWXxiI+qlw0+vT8So3iRMdiZnO+xRG8YrZc\nSXE9SQ0hU0PYrqWVvI14VhMBjO68qQDMFGj1kWjKLN/ovpFsX/AkB9tMd5Zv\n8UJ1xY6/G4a1r/vXpNK8OjadWIIt+Q/2Pv/2ZZUhWEFefhwvPmTNdvMrSjny\n+bu5oZF4g6kH55rMeuJ8fyHYcPvaoZLFvD/dwE6o+rWOFysoBGSCtQ+OQt8P\nTatZC/yQoFrjfPfPezUB7Jf+LemhY5EZhv6Zex3+1fht5l8jFejshBFUN4z0\nEjnS\r\n=9fLV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDHsfXbugGbR8/nywrLW7azD6LX484rZFsoB6Umunw8FQIgagELW4XI2Mx2HAKRuPZAHYmeq+ogTGEErwcCOh/Lw84="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.5.3_1617195943161_0.28454358713257744"},"_hasShrinkwrap":false},"2.5.4":{"name":"caibird","version":"2.5.4","private":false,"scripts":{"prepare":"husky install","preinstall":"git config core.ignorecase false && rimraf .eslint/cache","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.10","@babel/types":"^7.13.0","@types/ali-oss":"^6.0.7","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/history":"^4.7.8","@types/jaeger-client":"^3.15.4","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.1","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.2","@types/lodash":"^4.14.168","@types/node":"^14.14.35","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.2","@types/script-ext-html-webpack-plugin":"^2.1.1","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^3.9.1","@types/webpack-dev-server":"^3.11.2","@types/webpack-hot-middleware":"^2.25.3","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.18.0","@typescript-eslint/eslint-plugin-tslint":"^4.18.0","@typescript-eslint/parser":"^4.18.0","ali-oss":"^6.14.0","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.10","eslint":"^7.22.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.22.0","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","history":"^4.10.1","html-entities":"^2.1.1","html-webpack-plugin":"^4.5.2","husky":"^5.2.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.1","react-dom":"^17.0.1","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","terser-webpack-plugin":"^4.2.3","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.1.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"cbf124973e65eb27a8fb0b461a3bfd5c8013370d","_id":"caibird@2.5.4","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-zFX8QiCraIdUTktt0S6749DqoBv7GrtK/Qmh7zZOZ7ditJ5K1bYa3+5Pva2h4971+isSqJnApduvN/Efz3D+Tg==","shasum":"8b61d41b3a4948b6e389955b66cb32b6cb4c7a79","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.5.4.tgz","fileCount":207,"unpackedSize":330259,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZXKCCRA9TVsSAnZWagAAV04P/i7lQkGNbO+dZQIY3Lw1\nzWeZOvq8ezmxR2OcV48qQm768ZRfG+hqWtOSPro2rEE1FaPN72fovfMVtMmv\naJQ/f+8kY4hQadvBe0AhvJEU/cEwoP8evhvwQiPzWSF/SqqmfgC2YKMmZkGo\n6/y9cnFDVFcTDgs+3gnMzVRwmcToV2XFeU94bOo02WpwC4ZYFqv3JdpdNIB8\ng6gHzmU3DlRjn0apWk347kF5RzMPn/trwsf489BQFatbXilnMXr21L2Pnslx\n6qbUEgo4FxDGglzluDjmNbsUm2dxxZE45Nwxw9PehzkTj6HWdp1GZ/OV1vZR\nXxxmnCbA+3azQfjfMpMSc6vVOb0ZsxbdO4G5/FBBKkLYbAs2Dc1GoLAtTM+X\nA9GZo3ctfVnAqAAzoPL/ZT41gxsgAXweC2XNPsEYYBnW4Zo2YsoDdetJ3Ee8\nByEwzxS5zqs9HxvLlgetzWajuuOSEY/KQ5tJuuRgQH2RFIksgzIKdWMMTSJk\n1AiCNb7mnEZ2Zel3Jhm3/jOsDqGc3AMJSa3rLuzcDXfZn1LtjZ2gTc/BZkWq\nbyaIaye+v2MZ5GsTXHktDlUW3HwInBARZ9/nMQmbPTWXgWHx+D+4dqseVpmB\ne2uZ4cCUGqtabWvObklSqwngLDeQhomb9qtPKWmSZx3rXuCaEubrYoQU3PIK\nMbmo\r\n=AzLT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC8YjgMzywNeFPQtB2xEnRd779p8L7NskZ5bzRtYgpc4QIhANvht7KBXaMhEnosHY831UHnIIwt1qqtSG/wxXBQWv71"}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.5.4_1617261186339_0.37105622396361304"},"_hasShrinkwrap":false},"2.5.5":{"name":"caibird","version":"2.5.5","private":false,"scripts":{"prepare":"husky install","preinstall":"git config core.ignorecase false && rimraf .eslint/cache","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.10","@babel/types":"^7.13.0","@types/ali-oss":"^6.0.7","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/history":"^4.7.8","@types/jaeger-client":"^3.15.4","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.1","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.2","@types/lodash":"^4.14.168","@types/node":"^14.14.35","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.2","@types/script-ext-html-webpack-plugin":"^2.1.1","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^3.9.1","@types/webpack-dev-server":"^3.11.2","@types/webpack-hot-middleware":"^2.25.3","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.18.0","@typescript-eslint/eslint-plugin-tslint":"^4.18.0","@typescript-eslint/parser":"^4.18.0","ali-oss":"^6.14.0","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.10","eslint":"^7.22.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.22.0","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","history":"^4.10.1","html-entities":"^2.1.1","html-webpack-plugin":"^4.5.2","husky":"^5.2.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.1","react-dom":"^17.0.1","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","terser-webpack-plugin":"^4.2.3","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.1.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"9a50e1e43e5c65d07807f4a72a99edd5fb21e45d","_id":"caibird@2.5.5","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-uNxL2px9H0T1WvHbei2S4SfOKyUSY3NZQX/knNFCbTXiUaDfflAjxVSb9EBfGT70iyBMPPS1r+YaM7+tnqeb9Q==","shasum":"1c9c54220f2c742875cae218f6a9184dc6608853","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.5.5.tgz","fileCount":207,"unpackedSize":330144,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZcayCRA9TVsSAnZWagAAV8sP/j6I2mG8YG/b2DGmZfaa\n4vzDlJ7dSbuN1a0k9pLVrIaN1Cr3QlqKi5bn980xuoJAJAHbNFnsjnpMgf+f\nvNbgGqMrtJLp0/CskJ6mZLEnl77b1akxa2FOeeuBOM2yTlM/TWJQ1f6/alVV\nCA66Dm9YSdp+Vi7J9Q/mqD2Gs9pWlJ/O365QkTJapwI0GKDqLi2+mVVGt/xf\n1/pHU+whs7zPYvMSGQ+icPZHGTLrrQrOgfSfP5cFasDGnBE30rvhR9znFdbZ\nV4EMlXbdMcxJmbBc2S/eME8X1QV8MJe4APQRl8GL4DVhIJdTV2c4BMBHvpWF\nmhO2I+4UaAcsSdVqEQ5LWE+yDYoqFJOOt83f2CqcnTTDtPcipOeaUeLGpnJI\nfvi3HxB449T/UvMLneL9yvC1AIGsuudZ0dQy5eDXOvWK4+bxUN5ISlzo/ywT\nBgcaLm2/VEkaIOemDC+A+xmLUZNE4nnjaz+wGR15rM+ajW05/mGBBnW880Nf\nbymx746w8ER0ncsDzrjmDb+hPv/OPXEPcTIs7s99aL6KwZtrXdizy2LNhlKD\n17zs7kcP24d2r8UYIDq1Lq9bIL3tH5HIrjgcpYrXwy7fXkg/KFO2EiYG0H8c\nrecAZvIeUX4VaY77DnjwXkee1HbYQGtFYIlfngIXByvkGDWmwhq2pSnvABn5\nXDvu\r\n=eqx3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAQ0iArX8IlbH0VAVLUj2tYYR0g6n+zXd8e5rb3k2kh2AiEAiVpvSHfru9gCtaBf0CeYJ2WoTlBjpc2srr4v9X6cp38="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.5.5_1617282738248_0.291693782074653"},"_hasShrinkwrap":false},"2.5.6":{"name":"caibird","version":"2.5.6","private":false,"scripts":{"prepare":"husky install","preinstall":"git config core.ignorecase false && rimraf .eslint/cache","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.10","@babel/types":"^7.13.0","@types/ali-oss":"^6.0.7","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/history":"^4.7.8","@types/jaeger-client":"^3.15.4","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.1","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.2","@types/lodash":"^4.14.168","@types/node":"^14.14.35","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.2","@types/script-ext-html-webpack-plugin":"^2.1.1","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^3.9.1","@types/webpack-dev-server":"^3.11.2","@types/webpack-hot-middleware":"^2.25.3","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.18.0","@typescript-eslint/eslint-plugin-tslint":"^4.18.0","@typescript-eslint/parser":"^4.18.0","ali-oss":"^6.14.0","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.10","eslint":"^7.22.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.22.0","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","history":"^4.10.1","html-entities":"^2.1.1","html-webpack-plugin":"^4.5.2","husky":"^5.2.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.1","react-dom":"^17.0.1","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","terser-webpack-plugin":"^4.2.3","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.1.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"d498bfae3413ff6ca9e3e699bbaaaba79d4e9467","_id":"caibird@2.5.6","_nodeVersion":"14.8.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-eBdn5ny+QsDTCkJu4xnRrS9hbRdFMmgbyaCw9oO7jxwX60AOePRulgFT+x1fTda1w+qp5Vm1K6CnuX0KGUHDlA==","shasum":"d8a43d09093eef56e9aeb9a27d2955988f7a5054","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.5.6.tgz","fileCount":208,"unpackedSize":331254,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJga3xhCRA9TVsSAnZWagAANyMP/0mWF/DHaCeiufACgJuF\nyYvrZRAN2JrunhMBUcd+YVrPm/dnoowrETlu/Zl9O7beu4iMPnfJuIVz67DU\nl6iJl2y2HqbtkPXMIG/hIys9LKNhH7Ph81awbSr4BjG0wXHZYd/P1No9Pz6H\nESPktqde8aHE903/TTwa2K3FinxZFnvGBrZaHw/E2cuw5LU1H0/hVsFIOhgA\ndTM9INjleO5qJSoH562Rmzg/esWJJ1MoaSqRcktnf3Gd5IVbh5PlJfwcEtSF\nAkxqqtjyu0FxA/lTfb+SZc6ap0Pn13Tr8/RfC4ge8S3h1sMz9hd25/JjspMD\nua+hw3vSdUGwDIf35P2QHWAg+9BB5nIuwJWKm9aVxostP451e5cFWb62cYdh\nQ3uvAfGHHsExd9PqQ2R06kfS980/0am57Q2mgjSwItppka7HX/vG9eYST38Z\nYOnEt79NL7uFN0fpZ/paDa5F7yeqhc8w4Bg8aY9nBwBeeiZ6FKNdbRb4pOkT\nJT3j9hQLnCiWVQYwST/I1ALFMLbt1fPY5LMABDR2rx3bbpuE/7nm9zQQFGGh\nXa33l6bmzz1jwu762RYlxby4t8d1gDPMGDJ0X6xXKL6umqmtShQyLRMGwybW\nEpBk5LjOQN09RPXiYDR4GkvYqB5Ldozn21Zu5qlOTNb2n7xEuS7IhdS02NQM\n4wZC\r\n=nX/y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrft5jHm9fRd2bYibhJEw52dbv/z1aZqWk3bQdC4xcrgIgTA8ppmTRCO64bt1OUtfQfl9cNUoOV5D/TGjwOL3ag2I="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.5.6_1617656928604_0.21498665453980315"},"_hasShrinkwrap":false},"2.5.7":{"name":"caibird","version":"2.5.7","private":false,"scripts":{"prepare":"husky install","preinstall":"git config core.ignorecase false && rimraf .eslint/cache","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.10","@babel/types":"^7.13.0","@types/ali-oss":"^6.0.7","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/history":"^4.7.8","@types/jaeger-client":"^3.15.4","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.1","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.2","@types/lodash":"^4.14.168","@types/node":"^14.14.35","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.2","@types/script-ext-html-webpack-plugin":"^2.1.1","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^3.9.1","@types/webpack-dev-server":"^3.11.2","@types/webpack-hot-middleware":"^2.25.3","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.18.0","@typescript-eslint/eslint-plugin-tslint":"^4.18.0","@typescript-eslint/parser":"^4.18.0","ali-oss":"^6.14.0","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.10","eslint":"^7.22.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.22.0","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","history":"^4.10.1","html-entities":"^2.1.1","html-webpack-plugin":"^4.5.2","husky":"^5.2.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.1","react-dom":"^17.0.1","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","terser-webpack-plugin":"^4.2.3","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.1.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"92fa74fa324771b1c1cfe8d4f030fe2caa52926d","_id":"caibird@2.5.7","_nodeVersion":"14.8.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-BJj0grVN7WP6xE2of6RoxXgyFoh/DrK2oEIvr2/hDt0rrxk1SoM/Kqwy/aRgWdCylDZmHL29iD0YtDVCyx3IzQ==","shasum":"3fc5a5e8d9ea40c63e1ecc6c16de8dfc91cd8eeb","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.5.7.tgz","fileCount":208,"unpackedSize":331477,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJga4IBCRA9TVsSAnZWagAAiiMP+wUrNvgIay7tzpOWWplJ\n9bZnLsuJJvl6spAmkYN3xeAlOqaiu9SpnzTYAonisUOybyNymPjUg8gJo533\nnOOoJXRtEAxDcrzMNwVni2FQTF7J1KHPu+kHhXmzEwoN9xFUYq5XPByzqNT4\n3z/OsxxkpQfGo+oPW8t8b/evifWBs1jJ3AMGKptKGwWcn0d5oPBnHoOqqgKN\n0RKpOcjTR1Q3o2MECKhSm4Rm5nrDSv/G3kzYyRYpv11jV1qdMY1Lag1Ra3SH\n4ltfJtV8vKdycpiXa9ss7yX4slYGPJ+dTfjMuYMKIkKPaPdnxut5YGj9jPPa\nBzlbasgXQIZa7KQGvemjyWXKYXrixLfDrfKdkvVTtPK3dTMTn5xyHBMetaP3\nJIbo/NMDlDW9laPzBghexkLFavsXw0qNxRxL7B7V48vRLk11U874peHeYWLU\noGYtOgcsYTKzlQCMwsbxndLtlLYa21D4tSdlk4cVcbobvo8Ikp2i/elfk2Y7\nZfcXALlIpsViB27iBMziWm1V7UtaI/A5ctjMBfmL+0XJ84y5QA9TRJLgCWQS\npg0Hf7npr8ouPAv4oLBHXmZ1U1aSfzU3m9MqetlhxdHfrLXgoNDzW1VeH+GO\nP6Bl8SOG7ul41KeR43eDW1UVteoNvaLis7BtT55+zslP7wKyxEH4Ago2gfGY\nyERt\r\n=b+Ip\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrMRcnRUSlVANRATBoW9Ff8VGUbFnfGeP3JLHiO+3OjwIgWFfcgjkl0VQdBsIMB/51V2alKT+dQyVpgl04jKK5AYY="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.5.7_1617658368646_0.369449013578915"},"_hasShrinkwrap":false},"2.5.8":{"name":"caibird","version":"2.5.8","private":false,"scripts":{"prepare":"husky install","preinstall":"git config core.ignorecase false && rimraf .eslint/cache","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.10","@babel/types":"^7.13.0","@types/ali-oss":"^6.0.7","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/gulp-sourcemaps":"0.0.34","@types/history":"^4.7.8","@types/jaeger-client":"^3.15.4","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.1","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.2","@types/lodash":"^4.14.168","@types/node":"^14.14.35","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.2","@types/script-ext-html-webpack-plugin":"^2.1.1","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^3.9.1","@types/webpack-dev-server":"^3.11.2","@types/webpack-hot-middleware":"^2.25.3","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.18.0","@typescript-eslint/eslint-plugin-tslint":"^4.18.0","@typescript-eslint/parser":"^4.18.0","ali-oss":"^6.14.0","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.10","eslint":"^7.22.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.22.0","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","history":"^4.10.1","html-entities":"^2.1.1","html-webpack-plugin":"^4.5.2","husky":"^5.2.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.1","react-dom":"^17.0.1","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.1.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"f8a3d276b61f44ade1f63f2f0a9abf099244a19a","_id":"caibird@2.5.8","_nodeVersion":"14.8.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-pOaiX+h10XvY10c+bxcFt7eGiOAykSuRTZvMemM4IWJZF93fU8sVyGVc0cKYUkqCVlAD9Nsj0OJ5eJW3Ihfy5g==","shasum":"16f4cb8bc1b1b399b4dbff8f2d8d94b8e64aa414","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.5.8.tgz","fileCount":208,"unpackedSize":332641,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJga6cuCRA9TVsSAnZWagAANycP/2cz9Ym2R3F517k32sT4\nLiQSYiE66PtQpDhPzf5q5n+aa2bZVnhcBak4vsQFkliP4W6gCpvODnqrzQeB\nzX7ijPTGEslQ1DHP5YR4JnaMI2mggwFBDS7AYWYNXTgpRVMg025hKwdSzq5w\nXNO+SuYQCy4rSO3Bf4EcjjFbaCM5+QFs1IIZCl2JHazX23xliEAHNn64Lj6Q\nCQhGYu7kkMSXAwFVmSRSJLI9vKxe2qZ2DTdQP27up4RSB4XkMp1PsjG/r8Js\n5vIBLW5M+M6ytyL8B4QLgIw3wHQp4r+bGzzXcWTQ5DWho2MB3U+QmJue6ppK\n5Zpr0WocpA/CrIjgv75bseQ68VrziM/r2QpnSitp/VY+mGuptrwV/HN7AWU6\nJ3jY/zlRdu+HL95EhdfUAB/oF4AofwFV/D+QFVCzKtC0ESYbGSGVAs5OOTMe\nyEZQmB96t6ik0M192T9Z3bgDFWoyoBTJ7b4/1ziXwH+irx16sHbcD1QrAxcN\ncEr7VuSMqM9kXJPmtDEVvwiXrVvdv4PlOe2xbUbzm+hublBlSfSguQg3vxPM\nc1CQnorQuz2RUrR6L95lUPtEimam8krxEwEHMxjENtQBgmSfjCwVlXJrI5Fb\nlnM+Hb7YPPy8cmdDA0Dv2wM44BK4Ivs+h0G/tt8OlPqjUNOemTte+U/SUVit\n6z35\r\n=Nu+L\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICagakwZ9ApAnH6cYG367XvJORfil6Q2/yj9/1QIc7ZBAiEAqfA+IWrHr5cD8V/XDOEShN9E0xXKXsydgEgpROEvpVo="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.5.8_1617667886162_0.5697817271088388"},"_hasShrinkwrap":false},"2.5.9":{"name":"caibird","version":"2.5.9","private":false,"scripts":{"prepare":"husky install","preinstall":"git config core.ignorecase false && rimraf .eslint/cache","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.10","@babel/types":"^7.13.0","@types/ali-oss":"^6.0.7","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/gulp-sourcemaps":"0.0.34","@types/history":"^4.7.8","@types/jaeger-client":"^3.15.4","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.1","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.2","@types/lodash":"^4.14.168","@types/node":"^14.14.35","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.2","@types/script-ext-html-webpack-plugin":"^2.1.1","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^3.9.1","@types/webpack-dev-server":"^3.11.2","@types/webpack-hot-middleware":"^2.25.3","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.18.0","@typescript-eslint/eslint-plugin-tslint":"^4.18.0","@typescript-eslint/parser":"^4.18.0","ali-oss":"^6.14.0","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.10","eslint":"^7.22.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.22.0","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","history":"^4.10.1","html-entities":"^2.1.1","html-webpack-plugin":"^4.5.2","husky":"^5.2.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.1","react-dom":"^17.0.1","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.1.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"74e919308eac48e01e0534ffe787082051553fbf","_id":"caibird@2.5.9","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-dx8syDBRPQXGsyaFCNqymetMc5U91zdRQzwVTxyLFom73cNbHqPuHDnp4N+oUlZEtL5WrkojYpCyHMh0TF85gA==","shasum":"19894329457fe6be1775bb992a3701f0f11dce13","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.5.9.tgz","fileCount":207,"unpackedSize":332557,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcO1sCRA9TVsSAnZWagAA72gP/37wSS/3ywKrkPkH33e8\ntA0vNBzfNGLfENcjDiQjoJdY6WdgH8d9BAMsmlaFHBZm7lKRzueukKyovmxD\npuQzdfa7s6623BBvX4RTplAw/Jp4F8gzfndvW1L1dn5gLVpCMOcu0nY2/4fw\nWBLXEWYEWOszdZ/Q2ipQONlvSISx0wOU9d1hlbNGAw0SRGDOhkW97tXIG9/c\nxSQTi+M1owNtxH62egwE3sMaUSIqdREk0Pw8cXpypdYqvJgka7LzStUa/Hoq\nrhyRGDdxIqK7dUU4khYdtyATegw0B4pZOBEX4cg6giH/kvLdTkE+L3eSgTFf\nGHBlBM/civR4AxJkosrGPrs+VHVTangb7pb7RxeZoQtnFLW6mOh5t5kFmP8s\n2inuRq+0CVUUGgHCG06Qx/IcknY/qSL8SLxZSeRLNm4AGzOgjP1w7Rgjjnsp\nFQztYsIghZIp5vy+zjBCsGGrephXsRFAqSQUZFeM08Piy4puEcAw9jLXNWX3\ncipmVFPwI25hNBV++Vk9TzDmmvNQLeR/gzIsd87nXd+Xn92IiXxuq9daEjlt\nFlc44M4zwREZG1vziw1nPxWjkdfgu5/8ZaGDsHlSCdNIgxAwlNEALauL93Tr\nr2JTEWHN58dD947it7KhXq4EQbZIWE92wgcs5lPcif04Nm3O9QEg2a0kXzU2\n2hvZ\r\n=7kn7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCcZVRziVFJ+8g3AnwHDsS8wqStLag29BnxD5AF5gNFjwIhAK0T7vyDJul4W1K1ifxdWpmVw/Jg0/WPTB+GYtYTVabS"}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.5.9_1618013547620_0.9472718882557858"},"_hasShrinkwrap":false},"2.6.0":{"name":"caibird","version":"2.6.0","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","postinstall":"husky install","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.10","@babel/types":"^7.13.0","@types/ali-oss":"^6.0.7","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/gulp-sourcemaps":"0.0.34","@types/history":"^4.7.8","@types/jaeger-client":"^3.15.4","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.1","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.2","@types/lodash":"^4.14.168","@types/node":"^14.14.35","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.2","@types/script-ext-html-webpack-plugin":"^2.1.1","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^3.9.1","@types/webpack-dev-server":"^3.11.2","@types/webpack-hot-middleware":"^2.25.3","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.18.0","@typescript-eslint/eslint-plugin-tslint":"^4.18.0","@typescript-eslint/parser":"^4.18.0","ali-oss":"^6.14.0","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.10","eslint":"^7.22.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.22.0","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","history":"^4.10.1","html-entities":"^2.1.1","html-webpack-plugin":"^4.5.2","husky":"^5.2.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.1","react-dom":"^17.0.1","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.1.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"cf900d6f35df3f6f4a352843529db608d65f5670","_id":"caibird@2.6.0","_nodeVersion":"14.8.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-tufyH3TiKeBsOyC1cMQxMflbXr0zmiwG0UxbU9HBLdRIiR/UHaPY5Ywvb5MadP/OzD6CcqRzo+f2fSvXrGaH0g==","shasum":"7de4e4831eeca135636ca0cc0ae81ad8c4f98125","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.6.0.tgz","fileCount":219,"unpackedSize":328657,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgc6HpCRA9TVsSAnZWagAAZ0wP/Rfccbegk1Z3SSmmX3vL\nPODDmzJO6zEwviRnC6TPtJMHC3U1h6kGObzjCD7PNhTUb6PJ15+kSAii+AVO\nPCyzEUXCjfNBiJGvsEhPGUn0zGGoI+zSkhFBf8kmvA5XoRAlC1cmhoZ9DV++\n34RhoK+QuqV5BV7a5klA0z77+zE/JTD9/eoYYiDu+suZzhL31cw9Sc6yBhrX\n+NNfPLjUb2an3TKDRZnKBn0OXiwIEN3iN71rUXDfdmZ16ovRLq5Ebu21mfu1\nKepga6taKJYjsc041IKUJvE2vju8dpwh4h0n9YX2AFTourAVEL3zY2/9Tcm6\n0nZbXSswqlvVvyBrcwM3xdcZM4r+0jVEbzGhoTTzHONQFEs8wjU0m9sf1bRf\nH3VJXh24iEY/KE2WhF3nZO9YErjClQFuztQ8lCUO1P7YVgHXJ7WQ/LysFhIr\nuD9QnW4A43U7icA0hjf+ZlDfu3zWxwCfMpZ6bZEUW7s6RW72TlgJ3cCiI/Oa\nf1p9pkwlZi+V0rz5YBTP9s7DqgprMmnNSCNlGNLYLD/if/0Qj2p0kcVS9xPD\nOE1pSK22FdQ7HodFdZTU1gDVVSnkzMjhzPPy8/XD3dLZsku9Rmzp1OggrWNV\n03OgL15+nunN263K7Bz8o5Com/7S/B3KW8KX0pVfLnjoahK1erlU9TwcUK+d\neBfk\r\n=3EpK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCglWn9ETvD3sFzrWuyVEWLKoFh4Dq/MvrPyiSGE3rfHAIhAKdmudfxGgenOWUmdELkC93U4m/wJ1nh3ZkGuiPVd4V2"}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.6.0_1618190825462_0.5183340009574327"},"_hasShrinkwrap":false},"2.6.1":{"name":"caibird","version":"2.6.1","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","postinstall":"husky install","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.10","@babel/types":"^7.13.0","@types/ali-oss":"^6.0.7","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/gulp-sourcemaps":"0.0.34","@types/history":"^4.7.8","@types/jaeger-client":"^3.15.4","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.1","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.2","@types/lodash":"^4.14.168","@types/node":"^14.14.35","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.2","@types/script-ext-html-webpack-plugin":"^2.1.1","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^3.9.1","@types/webpack-dev-server":"^3.11.2","@types/webpack-hot-middleware":"^2.25.3","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.18.0","@typescript-eslint/eslint-plugin-tslint":"^4.18.0","@typescript-eslint/parser":"^4.18.0","ali-oss":"^6.14.0","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.10","eslint":"^7.22.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.22.0","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","history":"^4.10.1","html-entities":"^2.1.1","html-webpack-plugin":"^4.5.2","husky":"^5.2.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.1","react-dom":"^17.0.1","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.1.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"b1a8077ff1967f6f32a68cd08b532fcb4ee395e2","_id":"caibird@2.6.1","_nodeVersion":"14.8.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-9xCYDjOcpwrfE+VQlndjBOugsAucFdKqDtf0Ka+8IQ8VKre4PMQew6aFCljznAQxTrkYjQZnmP6o6inaFlZn9w==","shasum":"f97c25c12f81e1d35393f45dbfa810e240640dbb","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.6.1.tgz","fileCount":219,"unpackedSize":328657,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgc6N5CRA9TVsSAnZWagAAokQQAJlHtAsiQsJZ+6A+R0in\njJSnYaYkb5OIuRIB9OkznrqiAKox3YXX2mSk2LqrDgffdEhl3j7KSAH/V5Ai\nusrpy4wrKRyshKqh8Sm2ukqw1mP08gKWe2eQKfJGVR4qgCQCAqigSBWl/jJH\nOE0zXCw/hC4/uE12szXGHDoinw1vMxJThbBdDSFncC4soJ+omKtDnT7ppoE6\n8ZHjjDV10Wz8KexSTLyiEYL60PQ9wTRMKq9nKYpPmhAypNJSdCujYLy+89HL\ncBksdLI86d9o3n2vfrx2FGXnzrEpkyk1Ve+bJPS3ERVoEjyKdFIPmHvIJ/Y6\nclLlyMHwOJKSdVO675HR4h8fkgnhmBLV8V0xozneNcGnjsunTR7rdQmmje75\n67Hw3BgpoIv5D6Dxxb8SB2rQvEdWIGCrPcYxDn7AdPOF/4yUh7zR0ff61EYI\nbmUyldxksPsxH5PXyAA3QAvWo4wSiZBHv4SDIROuoKkeat5A1XT/JP7wufpl\n9H7UhZMwxEAru4OErY81wSr7LH6eUuKU+RyYUBccel08FeCCtVgi+SXJ2k1B\nGzRWO2FIOB51YzHsA5oAbkQ3xDbKmkctp3u4jQRscNmMtmPFluCzztw8J9v/\nuITRkoTwe1aGMi5xq/lxs5ht6G/Z5ksry0KkWtZrS2pABhWWgGOnF/+l8FBk\nvk8o\r\n=kK5g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDBDw+4y1Ulc7Uxkekzp2lECwazkMsJaAmbcZpehJPf+AIgT5rEXvYn2flSD9YqhK1Nsg0/SQ7Xchie6b5OpVaWdRg="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.6.1_1618191225458_0.35596352436306944"},"_hasShrinkwrap":false},"2.6.2":{"name":"caibird","version":"2.6.2","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.10","@babel/types":"^7.13.0","@types/ali-oss":"^6.0.7","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/gulp-sourcemaps":"0.0.34","@types/history":"^4.7.8","@types/jaeger-client":"^3.15.4","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.1","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.2","@types/lodash":"^4.14.168","@types/node":"^14.14.35","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.2","@types/script-ext-html-webpack-plugin":"^2.1.1","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^3.9.1","@types/webpack-dev-server":"^3.11.2","@types/webpack-hot-middleware":"^2.25.3","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.18.0","@typescript-eslint/eslint-plugin-tslint":"^4.18.0","@typescript-eslint/parser":"^4.18.0","ali-oss":"^6.14.0","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.10","eslint":"^7.22.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.22.0","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","history":"^4.10.1","html-entities":"^2.1.1","html-webpack-plugin":"^4.5.2","husky":"^5.2.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.1","react-dom":"^17.0.1","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.1.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"b1a8077ff1967f6f32a68cd08b532fcb4ee395e2","_id":"caibird@2.6.2","_nodeVersion":"14.8.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-XXCzhVUiIXRrcyAGnz7B1cYYYZRrrvzVCjq1YVa+TrcWnxXdOC+yPPCDZ+uVolzFQXbxDgSvcQiWnQ7YF+fRug==","shasum":"ddf3cb187bac5ed67e46d33fde9f51e472a8bd44","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.6.2.tgz","fileCount":219,"unpackedSize":328621,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgc6WOCRA9TVsSAnZWagAARlQP/RfX8KVkTm9I+5FOZwQG\nFF524J2PH3yDIKQTYH0ZCQJNNt/HsY6FKTqLFHMwrSXRuJHsdytHS4gzA5kh\nzaFy28k6wy6hWjZPfisp2e7Wb0bLuhBeRJ0HiRGtE+P5fLJC2zv1OBlPZGfO\nFWhjfNUNRo7DIJBmzUweFju1rng+dx6cwiO3q1cXG0FnXlmTnLKq9S58MXM/\nP57h1iO0Q9BXLnqZV8TPuZL9Bhy5Dy1JQ4ym/RcviwsElFW+E4+5I9wqN1nX\ncY+xlGqIuEfdXjmSN4lN3AacsEmPcmkbp6NBgKZKdI8TZb1eere2HI7kdNrW\n/E0XXebQhgNc80lOe6oe+NkYI6yuiZo/S/2+RFNWSs0hak4Im2yHXcNJIA4/\nxSraguE/oQmLzGGEGNw/VjL5ih316hPF5CeOSNOm53CNcGnJcweUsro3bH6h\nDq7O6Ym9kKpdFt2H6O9JPC+27vE58SDeTA/E6MKh/WH1z+fJxAYCPN7zUOfZ\n8BMWrBqcvKIpxPsOtxm0AF31RVMj8JPn97wBkVIFYP8OeL33RBu3Daovuq4S\nmb6LIe0zmnmC4RmAylgZfrp4pMtfvqL1kUAPNX41Ywn3+HO1QrbztAmSR4Rs\nUlzX6Eiu/firhkO3JYDWrGgVSdI7Yp8q04GXzy94yGxlYWQNHIKyjXt/6Ftg\nf06Z\r\n=uszk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC71Vq3YGJKIK5B4KhM/VBIxtSyC/qvIQzyzO5uH4K1SAiB/ret8Rymre7QJdR2yO1yHwIA0T9TeZZwBmBCgucMkwQ=="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.6.2_1618191758070_0.4788824027402472"},"_hasShrinkwrap":false},"2.6.3":{"name":"caibird","version":"2.6.3","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.10","@babel/types":"^7.13.0","@types/ali-oss":"^6.0.7","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/gulp-sourcemaps":"0.0.34","@types/history":"^4.7.8","@types/jaeger-client":"^3.15.4","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.1","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.2","@types/lodash":"^4.14.168","@types/node":"^14.14.35","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.2","@types/script-ext-html-webpack-plugin":"^2.1.1","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^3.9.1","@types/webpack-dev-server":"^3.11.2","@types/webpack-hot-middleware":"^2.25.3","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.18.0","@typescript-eslint/eslint-plugin-tslint":"^4.18.0","@typescript-eslint/parser":"^4.18.0","ali-oss":"^6.14.0","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.10","eslint":"^7.22.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.22.0","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","history":"^4.10.1","html-entities":"^2.1.1","html-webpack-plugin":"^4.5.2","husky":"^5.2.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.1","react-dom":"^17.0.1","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.1.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"b11ea723ebed055016c6965c881bdc2765b73e0b","_id":"caibird@2.6.3","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-sMD/7VfRKsy9Kb44pvDZLBlX6Xkcsv9vL2GBXb/DB3iiyBM5473Za59N/RnbmBZbu6Qwf0p+ZjtnwH0DDZG8eA==","shasum":"0f4588d201d188f36b383ad77f768e6a4c0b7586","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.6.3.tgz","fileCount":219,"unpackedSize":328640,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdRNTCRA9TVsSAnZWagAAwIAP/i1tAN6DklxFGFPF/kwC\nMz8oQIReLQpV+RnfCr2wl2e+gM4UO+E6TTYGK06NXm0ppGpSIuOOC07Kv8IR\nuy0vunAAvE+kdimsyY7HkipSiZyd/oIA8m1PMGWm3akVqKY3XyrMb9tIc0Xk\nutD5Wfz3yiNPEnLGXwmDqTzNw6D3d9HaDHb5rYBH4c6BzsaoyT/ly97o96sp\nas1AQRsJsMniMXBpwMusweBHqfXjEa+Mja3MED33FPEvzjpar4Ko3ApQQbOd\n/v0NCqS5DGC0mOfAUGT8co+X092lOgzQs2iiZO/gNlGpRYZaeNIrGq8ofPgm\n7/pZ+Y4VlN/tdlnAoWz8vjLHxV3dCaK6bk4KXcnJldPnbckn+W//BfAm44hh\nmeK3elViHjc5FMqUc2OwFkR9MoFjJ9lW9hsRm6WaSjHoz+NxKxZ7Pd/4mMt/\nsHl6Nz8tmuWXPSl/qT/w2uYnzILp715XNl1icu9pGbbVDUtKSaGODGgBCv5j\nI71/b9/bXIbLM1Ya80+VhuZQZBvbLs0BRpEEEtgfPN1buHRA1Sb7kgzJLwUq\nqFCImCsLO832yaLrtW8G0BWQygeik2t+A0cIWDB/997WItQksDnMZm6umpnq\nOVWu+6I6mNSvs59luTfM63U9ID8kiZhCIJChTrgsXUveeeQuIfzs0Lz+za8g\n08dV\r\n=Hzuc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHFw5pbWW+/N2mm6B5TfIidyJ5VrLsBsRBcitPRVxgg3AiBXHBmuTORyUYxPhq9eBiVTgf5N+lY6CochyjFoobscnw=="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.6.3_1618285394595_0.11883838348038189"},"_hasShrinkwrap":false},"2.6.4":{"name":"caibird","version":"2.6.4","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.10","@babel/types":"^7.13.0","@types/ali-oss":"^6.0.7","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/gulp-sourcemaps":"0.0.34","@types/history":"^4.7.8","@types/jaeger-client":"^3.15.4","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.1","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.2","@types/lodash":"^4.14.168","@types/node":"^14.14.35","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.2","@types/script-ext-html-webpack-plugin":"^2.1.1","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^3.9.1","@types/webpack-dev-server":"^3.11.2","@types/webpack-hot-middleware":"^2.25.3","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.18.0","@typescript-eslint/eslint-plugin-tslint":"^4.18.0","@typescript-eslint/parser":"^4.18.0","ali-oss":"^6.14.0","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.10","eslint":"^7.22.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.22.0","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","history":"^4.10.1","html-entities":"^2.1.1","html-webpack-plugin":"^4.5.2","husky":"^5.2.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.1","react-dom":"^17.0.1","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.1.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"0ec82404b20df0047813a34f2dc5ff201167cb64","_id":"caibird@2.6.4","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-EPLpsfadbE8uy7jvXOAgaZODyapblJSadFTFUCEZh+85MMdAEqmh9kOuzAj9ie5bedeDBgYJvhd3IDplM1gNzA==","shasum":"2e9fc45221caeb311ce34de6eebbc8a2b469d6ef","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.6.4.tgz","fileCount":219,"unpackedSize":328735,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgd6kaCRA9TVsSAnZWagAAsWoQAIRVVo4wPh4Dl3rrXtpQ\n2YDanE11pEpyimIoemrNKN5LlavRbLXYVL5v/CCWngPXlqlALKxaFpFm6pVu\nC1K0a/6d599TpyIhx+fjEUbmbEKRNtvnlUcYF/hr9ts5SBshSRyT7YcYm7Yf\nTLu6zkN9VNoPX4yS+tor9xhNFVcsL7obaQmAo8awzfV5n32Ea98e+6DvxRrE\njFQ01YHYhCkKMpRgGjTwKtzCMYO1Pj7ixS1ZWcQwYx1Msi7nsQkIZ4sjmU56\n5EZLHQsfQXB/zBx80rJQHX1Ktfhhg41CZ8b1xOYEHJW7PalOXb837WKJ5+Og\nFJUjpaP/ps9gw1pKKjbHK7QoEqwczdD631fGE1MCqe71R9mvNH0e+ckxTYvZ\n7XFShwPxRFIoUF2fUiQa8Ry/V2sUEn1xELHY8QjO15Hr50KIkC0lRIW4TG8w\nYAH5XnqXHJO/0FalqtwaeH7adfGuhZ+kuqx052Kg2XfCIEhezLoPeID7uZfh\n2AKNzOJ/t+M7lj279xfkt5NTDrWZE8jwRVB/UZe4kbA1eetMu19DkzKGjWEA\nm2FuuW4g2jdN4gr+YtYebVuYzLab3PNlkOOm7wuH6HDBIYqRsFgYVGzFMfrH\nEcJcPUvTGy+jUpILFWgdUtbtWUpz/gcdzysOCEQBDOG/lfFjOwnR76O6RoB6\nwHoz\r\n=PCfR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/cYTCvrzjGgj/vtg/G0wYng7ajs4qHY+vF9keZbtWOQIgWpBksuUBh2ZfObdFRJHNdu/Zsq4iZWpce4hVkWL8Mp8="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.6.4_1618454810366_0.22013857253697933"},"_hasShrinkwrap":false},"2.6.5":{"name":"caibird","version":"2.6.5","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.10","@babel/types":"^7.13.0","@types/ali-oss":"^6.0.7","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/gulp-sourcemaps":"0.0.34","@types/history":"^4.7.8","@types/jaeger-client":"^3.15.4","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.1","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.2","@types/lodash":"^4.14.168","@types/node":"^14.14.35","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.2","@types/script-ext-html-webpack-plugin":"^2.1.1","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^3.9.1","@types/webpack-dev-server":"^3.11.2","@types/webpack-hot-middleware":"^2.25.3","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.18.0","@typescript-eslint/eslint-plugin-tslint":"^4.18.0","@typescript-eslint/parser":"^4.18.0","ali-oss":"^6.14.0","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.10","eslint":"^7.22.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.22.0","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","history":"^4.10.1","html-entities":"^2.1.1","html-webpack-plugin":"^4.5.2","husky":"^5.2.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.1","react-dom":"^17.0.1","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.1.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"92f0fe9564e25de64609e6803d35e38b0d2296b2","_id":"caibird@2.6.5","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-1bqxPJCJqIuikqpkugsM/hy8NkmQ365Dx1scv9NiaYPvM3saEEixx724HRtAQA7/co4XqWpZMNuWky1mpksd0A==","shasum":"c9d16ce103221aee01bf812895c1d5561d101352","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.6.5.tgz","fileCount":219,"unpackedSize":328736,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgd6wcCRA9TVsSAnZWagAAQKMQAKQBIbck8FyMMVSn/dyq\naTSN5Ij7zAUoCqbNNyrLe4h0vUX3yFYa5ERLsu0ESTtDZeX++tBEMxjIZIPZ\nBNS1k2mcFxH2v0V6ECq0fH4Yw0nKXfkha9AN1XyNpNV2Nq1n96CWJE7t2YXK\nlDMP0pC1rxnInAJsbr/GRHP7DpgVaFLYQorcYamhBBKIF2yA3txwsnCDIR+M\n2oaSSm/1kyEDw+qWvOy+KpHXcobINdhHrzlAoGe9Gjp/Iv724GCVbFYTVuGV\ntU7trlrF2XOLHzCJXytDSwTAPlhC1HKfH0MjUlsLtQMaIeMUtwbMpp9l+tYE\nUevHFmpHeeG/mP1G3/4PMjYEOoVbTXvBjB4mMVmDbbyPb6pJLWw/o0nwJ7XS\n8//1FAb0Od/bCozQ/nwTBsrkbILUGZ7BRee/CGEbBXYkT7cSZunrHoNSRG+a\nQJhgLv4K9nOIt/qHqJ3iWa95rQEWC45V43daF17ceXFNJXcu90cMCy0m2Zlq\nW89b+u1EVn881G015WWWDG1XbpiKL8yAuPtgClpn8aKfNAMr1NfEAcVdmpg3\nO9sGXbX14SQxSXRz09lRBxSpiV6yzKKta9cS6d7dn394RDnO4WFtlM3scCb5\nrtexhtJrugJfN+JHSehkgaNbmvcBflNUuXTjEz/W+1gYuxrtiWWWSTpblb1Q\n1idn\r\n=GbJA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICg1drIDaqj1k15QH8l8Tl9mm7/ayeYh3pKaS2GAXqqcAiEAi0gU8JgceYttRpqHlquyFanu6i2Rpn1S7xgSgoN8UPw="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.6.5_1618455579878_0.6201832674205128"},"_hasShrinkwrap":false},"2.6.6":{"name":"caibird","version":"2.6.6","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.15","@babel/types":"^7.13.14","@types/ali-oss":"^6.0.8","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/gulp-sourcemaps":"0.0.34","@types/history":"^4.7.8","@types/jaeger-client":"^3.18.0","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.2","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.3","@types/lodash":"^4.14.168","@types/node":"^14.14.41","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.3","@types/script-ext-html-webpack-plugin":"^2.1.2","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^4.4.0","@types/webpack-dev-server":"^3.11.3","@types/webpack-hot-middleware":"^2.25.4","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.22.0","@typescript-eslint/eslint-plugin-tslint":"^4.22.0","@typescript-eslint/parser":"^4.22.0","ali-oss":"^6.15.2","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.11","eslint":"^7.24.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.23.2","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","history":"^4.10.1","html-entities":"^2.3.2","html-webpack-plugin":"^4.5.2","husky":"^6.0.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.2","react-dom":"^17.0.2","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.2.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.4","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.1","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"a4ac55c0c32f07ddf9b7ac934446b721b53d2fd8","_id":"caibird@2.6.6","_nodeVersion":"14.8.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-LtCpr6vINunNUCSjGPYKm57aEOFSiBfhUAWYyef9M4AQb67MOBt1gTP5oAc1houAt8f+Zrzy4y7OGNqqczTbWw==","shasum":"cbb7e8d07c36cbc35123d30a93b4271657462982","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.6.6.tgz","fileCount":219,"unpackedSize":328870,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgfHLDCRA9TVsSAnZWagAAR4EP/2XthSi8JKUpX7TBxVZF\nUt+RdRNHzE/XvS72xnTl6DRId1HIUIB0QuibgTMVf5ahkctiEYeuDjLy9n8T\nn5dtrKUhPYRQuwOCjzyHUbFxdldPPqzr9wf9i2+eMf4zsxOiJjZ6PK+F42Qx\nlZVOARXKKwCmIGBnsB+raKiRrp0CP4iU3kAkYdZ99t28bvojdgqyAQUnD0dH\n6ocxlKBMUp3uES2Pwka1j8+p27zsrNEMwitI6pVhK+96gNWZYrhj+j1wf+Mv\ngjUw4lZne68zqdfA8mcDcTeAb1JU80MRJb6ee/R6lrXGbII5tY9KXkHBefvW\nevtCOQUdS2z+qnsp5vE4U4Isw0oCcu43FR3E1TXRVn5pG4bY15oQ1rOndQBX\nV5BkzFapi3sNK/ZwqQtgkFAN68qPPGdm5uRMg6gV6pOMsfh0SgxQa1Jsj/Cg\n3jAYfomhOjRJrshkFqdtVQYKyYZrB9fm+iuNZ6KXa4Ep6tM7tM1rESY4u5v3\nYnFubLKkf65Vh3EB9biyUnAePCtAhePcx8iT2IzEsZ4KGy4cPpiZE7SEQJcu\n3rUKoVpa79ReAKiH/yAlRlhufIKNl83JOENXxHJGuqKYdHDUL+SAcfdYhXtT\ng4OMqbZJo4Q9E2KVxxeO9Y74TO0Q+ezDEhUxu9PPjvarghCIWRI1i8SlhVCZ\n2P5j\r\n=zgmo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGwnwy3cXbCGqbl8n+bpFBZbfG0+XArFVsaVdMmai41sAiBiYDdchSFx1QD2YaJUEhhjSXMjmdpr5ZCFctuLbNZH6g=="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.6.6_1618768578516_0.6094641423417588"},"_hasShrinkwrap":false},"2.6.7":{"name":"caibird","version":"2.6.7","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.15","@babel/types":"^7.13.14","@types/ali-oss":"^6.0.8","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/gulp-sourcemaps":"0.0.34","@types/history":"^4.7.8","@types/jaeger-client":"^3.18.0","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.2","@types/koa-send":"^4.1.2","@types/koa-webpack":"^6.0.3","@types/lodash":"^4.14.168","@types/node":"^14.14.41","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.3","@types/script-ext-html-webpack-plugin":"^2.1.2","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^4.4.0","@types/webpack-dev-server":"^3.11.3","@types/webpack-hot-middleware":"^2.25.4","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.22.0","@typescript-eslint/eslint-plugin-tslint":"^4.22.0","@typescript-eslint/parser":"^4.22.0","ali-oss":"^6.15.2","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.11","eslint":"^7.24.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.23.2","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","history":"^4.10.1","html-entities":"^2.3.2","html-webpack-plugin":"^4.5.2","husky":"^6.0.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.2","react-dom":"^17.0.2","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.2.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.4","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.1","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"a524857308971156f8f97de79659e057a8b7e098","_id":"caibird@2.6.7","_nodeVersion":"14.8.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-rqENv14qsKL/LMU83530+wsc0+N9UU/QKQ61ngD4XdnazgMzVPNQjQDUx9kDYt0153eG7gObVpkogs1wrIi6Xw==","shasum":"fea09d83994575ebb153f7c350ec986f5e3fc0c3","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.6.7.tgz","fileCount":219,"unpackedSize":328881,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghl+PCRA9TVsSAnZWagAAWm8P/0X6MHXaiq8elsgGPS4G\nsl2TCH2FETDEwPCKqtg1e0+2Lhh/SjNyZdmL2NhrsSMVsyNM+xHw9Y5MCzl/\nPQaOrTK2Roik4tiSwUNaxGHw9FMSSHD9zGAmRXnw19ut8nLnQ2lUsSfXjfKx\nnlAth3NuhgE96ox8fjW01SWWi7kVq7yPSf4a3a5HaVwRP0weSxfkculOAQMC\nl0i9vEUvJUY9DBlH5X14KVDXsib4T+Ee9rnv0w4moQ7OPbmffZiVGNYLd2mf\n5Upj8UXbkKY5y+bqvRIoCkhrZ9bQpsRKCfjm6FRs+YPLZdF0QmUC+zNu6WeP\naP3A6vKON/2vvZ+rrBxw74bV9AC73tZYZTNQtY+R4NC2ba0SSz26WvK1WE/h\nBJ83J6ajO30hZ4isFbqGoJ7z4REZGltpOorYRx8PU07hhcLVN1xI9j5UufAk\n4KlwdzfOyACvi6toYRUkybDFGhCdHZ6Z6dZYF1wf60FeT+MRyj4UCGbGmyus\nJttQFZQGDmYmnTRWJoR9knSetyB5YDKNrLkYQwe0iBFZGbrLxFAFn9CE2cuL\nj8GkdQakik17quG5jh8gEFS2YBOhYOTeT0p5Y+jjcyc3YNyxyUU5MscKzO+3\nAGw3DhX57rZQSjMXJ03nk0cm3xA/ptrDnQwpFhSPI9RifESIhy7MuwtkifjO\n8+Mi\r\n=QKaz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+rIH51xqb2ghR/s59HxszlZ3OEuyGASq42dijtLFMwAIgR6tF8qkl+9xErBfoUE1eQfJ90QHd9vPo3dwkMSRm3Vw="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.6.7_1619419023034_0.9172376234299464"},"_hasShrinkwrap":false},"2.7.0":{"name":"caibird","version":"2.7.0","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.15","@babel/types":"^7.13.14","@types/ali-oss":"^6.0.8","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/gulp-sourcemaps":"0.0.34","@types/history":"^4.7.8","@types/jaeger-client":"^3.18.0","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.2","@types/koa-send":"^4.1.2","@types/koa-session":"^5.10.3","@types/koa-webpack":"^6.0.3","@types/lodash":"^4.14.168","@types/node":"^14.14.41","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.3","@types/script-ext-html-webpack-plugin":"^2.1.2","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^4.4.0","@types/webpack-dev-server":"^3.11.3","@types/webpack-hot-middleware":"^2.25.4","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.22.0","@typescript-eslint/eslint-plugin-tslint":"^4.22.0","@typescript-eslint/parser":"^4.22.0","ali-oss":"^6.15.2","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.11","eslint":"^7.24.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.23.2","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","history":"^4.10.1","html-entities":"^2.3.2","html-webpack-plugin":"^4.5.2","husky":"^6.0.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.2","react-dom":"^17.0.2","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.2.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.4","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.1","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"bf56fcb74c75f1d8300b572970e997e4a506cbfa","_id":"caibird@2.7.0","_nodeVersion":"14.16.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-u+WYXR7eR/QLn9T5K9C7+xh8jgnECW4H+W5ok/TNAM+qSTjpvXkXxeG+OHDwiSu+B2kZvirhK2UWKkKouor+Fg==","shasum":"86fb6b5b98037d91c506d125df51419769287286","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.7.0.tgz","fileCount":219,"unpackedSize":331509,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmc5qCRA9TVsSAnZWagAANloP/j5I+lqjG9VjZ1PIGVmT\n3HvqJ5VDtilLndfvHokCvV9khAhe2VtEvD2BgB7yuAZcrZ0PECghHsg6dsKu\nCHbB8hKlEQndo8z6TqMFoegI9LiwYmgCpKkm/SW2ElWCOJOKzD1JljNCoeaH\nzQ7ujCz+n9E4342X73AWbbT2HkZU0dwy8HMeW6Sn2rGhXEDZDeclxhwhG1sm\nhFqzyntWNNwG+y7XwjL6HNtlJxm1IsCY1lO8e8FecJloMbPQXArbXmj/nCvm\ntxvlDvlSTEJCGmjqGkR1rc7VtKdYIuqNrFEtaixr5UKGGN4c3QIMiEZoobU3\nIb4he3jDymrtnhQY+btx3hIsHUFD7NPXSX6Hx0i5lEWAEJcd955boVBwoUC3\npdAAMXQWfDGxLwcv31PGGIVLiNkMDtbJpOswTE3eATOgqG4GNtuhpIzFCYSA\n4T0cFe1HmVWtY47aC3B0S6ZTZfpodjtB72Ov1mq9e+oUgra2FIQ8BHIX8fXo\nurYVINxlEVwEBTLR4JNnLDMz+NSEB3Jdhpu6kk3OQXlyMvo/gRYPtH8u3Q3t\n01xRdDVPJJQA8qDrp9uQvMZhv5jM50SRI2FJuFSYDusGA6QTZBa/8kWJKPk5\nA5+byN3AxW+CgutRx2qxFbOZovvTPUfuouICmQ88TORen2h6lMhvJmw+j/Fc\nRQ7E\r\n=iXFq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDuO7zK75dB59yjqPyCi4ajUnMsS5pcent+usXwbqKbnAIgKG566q9yAU8ucKbfIeG0SOdEVT0JzMjUkieBJ6mQl2o="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.7.0_1620692586410_0.037440853817431785"},"_hasShrinkwrap":false},"2.8.0":{"name":"caibird","version":"2.8.0","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.15","@babel/types":"^7.13.14","@types/ali-oss":"^6.0.8","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/gulp-sourcemaps":"0.0.34","@types/history":"^4.7.8","@types/jaeger-client":"^3.18.0","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.2","@types/koa-send":"^4.1.2","@types/koa-session":"^5.10.3","@types/koa-webpack":"^6.0.3","@types/lodash":"^4.14.168","@types/node":"^14.14.41","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.3","@types/script-ext-html-webpack-plugin":"^2.1.2","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^4.4.0","@types/webpack-dev-server":"^3.11.3","@types/webpack-hot-middleware":"^2.25.4","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.22.0","@typescript-eslint/eslint-plugin-tslint":"^4.22.0","@typescript-eslint/parser":"^4.22.0","ali-oss":"^6.15.2","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.11","eslint":"^7.24.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.23.2","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","history":"^4.10.1","html-entities":"^2.3.2","html-webpack-plugin":"^4.5.2","husky":"^6.0.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.2","react-dom":"^17.0.2","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.2.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.4","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.1","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"39d1f719f14e54e022af565b4735efc02779e48f","_id":"caibird@2.8.0","_nodeVersion":"14.16.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-SmUK2fKBy1tuOKgTkcEmmz53vphWx/uKN+uTdPPo32Lx5x+Db8s90iiI2nBQaPor91fQvvwbehNwKWhAjyq9Bw==","shasum":"0465d8151c2b910d57b74f51792ac5c580950871","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.8.0.tgz","fileCount":217,"unpackedSize":334036,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhMIYuCRA9TVsSAnZWagAAWDsP/AjLyL009golwT20b2mU\nEclGTJC+jwXDBaH2ZNug2WCLnWr5ZIuoQZyh4xSg70Dgo1nN1DuJbVf4Y3le\nLVAub2L7w3lVGltk9ohJ9buQK/SL9eHoYg4rAYYQGY+/x5G+uC/6Lloj9fwd\nkTXHVoZRh6PHDPGqQU7d6Iv3QnaceceQZu4mZupj31wTvD8tCKCUFRRL+LZc\nqY4yikwpYYQFyMxKmwv6bPtHl2M0YfYSZ9pQv3FoS/hYYldCRnxn2pwOIApt\nOEBmblksimsBOgCExHfrdd6XlMhu563kJ5NGxdLjPNURFfW0Fb0c0dvJxSx2\ntPma6ML/y8fEu/VgI4v0U7k2pcJx+b0KgaXjhzZZJLNq0/V3vELofVJSsJmd\nJHxm07LKbpRom9qP82bjx/b1tVOrvM2oPWA+i+Y8mRf0eoDqJhzdvnE4ZRHn\noCLHNIe6bke7On4gd4tdobDglrSmuqRe1BXNhPFgwXWalTkdFFv6Va2hyCnj\npGhdi3GyVXE7sjK9Z3luwfjMxq/eoOfQ3KU/6+Dr9+ngLMkJMHkNpoHx7Gxe\njZvTjdDRwpuFEaHvfoVogHadxpVkyAcWH7hX7dHpha6dp3KQubKpdXLaVgUG\nb/tgon15YN7EQiQMWqIRpkEu6hMgfoaiJScTvlksbVoVjMC68qNzQXsxXlg8\nANo2\r\n=tIi/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7WEYSvXqBFzOSA/uKaICUMcqQkWHJ06sPqpJeZRw0ggIgL70j4yIdHE2ArAfJjHl9T36AsqOo2+YKzicqd2+ur5U="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.8.0_1630570030021_0.29882515089171124"},"_hasShrinkwrap":false},"2.8.1":{"name":"caibird","version":"2.8.1","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.15","@babel/types":"^7.13.14","@types/ali-oss":"^6.0.8","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/gulp-sourcemaps":"0.0.34","@types/history":"^4.7.8","@types/jaeger-client":"^3.18.0","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.2","@types/koa-send":"^4.1.2","@types/koa-session":"^5.10.3","@types/koa-webpack":"^6.0.3","@types/lodash":"^4.14.168","@types/node":"^14.14.41","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.3","@types/script-ext-html-webpack-plugin":"^2.1.2","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^4.4.0","@types/webpack-dev-server":"^3.11.3","@types/webpack-hot-middleware":"^2.25.4","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.22.0","@typescript-eslint/eslint-plugin-tslint":"^4.22.0","@typescript-eslint/parser":"^4.22.0","ali-oss":"^6.15.2","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.11","eslint":"^7.24.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.23.2","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","history":"^4.10.1","html-entities":"^2.3.2","html-webpack-plugin":"^4.5.2","husky":"^6.0.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.2","react-dom":"^17.0.2","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.2.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.4","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.1","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"5542a6e9e426f5a11a2497c2b6694bc3725ccca0","_id":"caibird@2.8.1","_nodeVersion":"14.16.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-c/p2+AcZF5nxgNGbufKQEBW6PWZS8tpRUFWPQfbHW+1VkGQORS12U8uXnVXpxm4shjgBpOzQVkyHaC57zKRZHw==","shasum":"1663620b58bc95f27df82aa5885731a577d7c40d","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.8.1.tgz","fileCount":217,"unpackedSize":334069,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhMRgOCRA9TVsSAnZWagAAMogP/jVIdOGGXapUSTJK0Z9a\nROWbWCWFgYg85jjRUyQpEh5/iUL58KCcrkj7ELwfU3Q1Isv9YR9LPaoQVR//\n9Q+iMR3tTITwPDvsl/fyc2EAHBEasrg6AFhVwAaUS5TAEJGZphx9dKMWy4fj\nrVwU2ysrM2Brfj+dnQYOoc087z3XfdF9lusIcTCylM8jZrlXdFy+nE1JG++Y\n94pV+OOZVvLsQLu3nrbNQQqwOFe6u/jqxt440htDfr0BHok+BBFzt0HqBMBh\nzJ6NhrejLe3qw6Jab8KoDdm9fySWcHTrZ3rWEE15KYxR5notI/aOAnyhU0c9\n0JTuA+KzL4n+tKvOQOMmUCsxbs3tni63jXcCpPimyiErKHRX4fFQ9YuHyIPG\nagik1VhHrT8raE0mXeLkEcgG84CQFm067NmfgKUJHwzmvlzMecTsKH5b871j\nrBlnz7Lvs/hmLOfAVkg9Sa43UgUlxKbN+J6bu0qJ6nGrlxi4ckt1YqAIIG35\nHAqJbhk6fsSvyE5so5b/Rocemn7atFUIZ6A0YJyKDsE6jBac3ifPk6Wo0cpA\nwYeX7YCJu8D7yV+ukiuhZJrzoN5HGdbJ7GZGpcoNGBttMvV2QxxyGd/K/q0p\nYwun/Ml9oMof1jngI4Q770WSExfyfWiSa9rrtQEneg2dHtUaLKutgSfGLQyD\n7QOk\r\n=yygS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC2eKNQis/y4picORUFtRu1BGSO4xxlRz2y3rM3hGykpAiEAm2OPMVEtA3xbuzaJEHR2jjvFJaOOxjdZC00I0Tu5okk="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.8.1_1630607374509_0.634871432895205"},"_hasShrinkwrap":false},"2.8.2":{"name":"caibird","version":"2.8.2","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.15","@babel/types":"^7.13.14","@types/ali-oss":"^6.0.8","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/gulp-sourcemaps":"0.0.34","@types/history":"^4.7.8","@types/jaeger-client":"^3.18.0","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.2","@types/koa-send":"^4.1.2","@types/koa-session":"^5.10.3","@types/koa-webpack":"^6.0.3","@types/lodash":"^4.14.168","@types/node":"^14.14.41","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.3","@types/script-ext-html-webpack-plugin":"^2.1.2","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^4.4.0","@types/webpack-dev-server":"^3.11.3","@types/webpack-hot-middleware":"^2.25.4","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.22.0","@typescript-eslint/eslint-plugin-tslint":"^4.22.0","@typescript-eslint/parser":"^4.22.0","ali-oss":"^6.15.2","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.11","eslint":"^7.24.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.23.2","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","history":"^4.10.1","html-entities":"^2.3.2","html-webpack-plugin":"^4.5.2","husky":"^6.0.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.2","react-dom":"^17.0.2","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.2.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.4","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.1","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"1d9e7b2033d619948a30ff72e52f5e1a7b6b0148","_id":"caibird@2.8.2","_nodeVersion":"14.16.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-dWGlhiiYbhDFU5YQ8Nx7tWLYCR3FLZaNu1Zqwlp4GWl8dkrUTIQwNEf2PIzmxHsPAsPYhaVvXy3GvS53eGFDVA==","shasum":"50bc3a9b6d1c66842ab4ce747867c40ecf0946ec","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.8.2.tgz","fileCount":217,"unpackedSize":334248,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhn1D7CRA9TVsSAnZWagAA65oP/AqVC0yuUVg22VMo7T8X\nDzkJPT0aq9mmrwGgAUQKoZxjcMt6wldiLZgvHlVf12NpCUGLhv5vaop2RHgZ\nsSMrK82ho2QywVy4OhYP2J43oNI+rM+n5ChICw0KACaaubj9bYMgmVKJ8eDz\nlN77XTNiI4TKyc+ZCOht37oUUXRVyhaUX1TjyG7aBG76MWukVG0YM2g1P3cM\nRpwx61ss39aED9r67vec94w1RgZLU7lGkulsgiM9UPgf0O0E1b0KoyKmLug2\n1YTnNjsKPIJ18SZyN6ngQbd2QOalrsyoSaMkZ2FnYsyPiLryvUxsI/sSdJBm\nQnQij7zQxbYNrmKagSAxWiqtr+JTyo3hpt1Vn2bMZb7jp9OY3m9H8IdShFsv\n+Z/5p7rh54OmTkoR5mSNDm6wDPXeKHBFyVrza8k0m15Uqk+r2Sdyz61DB+Uf\nNLj4iPo5ThZJqKX7GdqAaZy0v1uzSEfEYtbvRvWhBAMUtGL8WjgfV0hJhptl\nztA0a0giQpe48Ibp0h0kiOJ2Y7S9X7VyfmZTVG9wGpU+DkZisKdeKWZQyN+C\nwlCWvCKiSg1ebCVGr8EgxtaPShfy8oQmHj56tG1t4Fg3zQpF0MwaDjxWJ/Rm\n8Vfmbf9eMJSqxjIEOXN5ANga2ENpt9fwQOiG3ewk4FBjTSgjPwdbkuKwix0v\naNhh\r\n=vCN4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGUr21qKY7V6jsrmJ6O0I58btjskH6ZNVfr12UP3K12OAiEAxc28Fm88NqKUcJUI3nXqe9OvrApp7rvgXJQpq4nAmqM="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.8.2_1637830907762_0.8741034574573261"},"_hasShrinkwrap":false},"2.8.3":{"name":"caibird","version":"2.8.3","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.15","@babel/types":"^7.13.14","@types/ali-oss":"^6.0.8","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/gulp-sourcemaps":"0.0.34","@types/history":"^4.7.8","@types/jaeger-client":"^3.18.0","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.2","@types/koa-send":"^4.1.2","@types/koa-session":"^5.10.3","@types/koa-webpack":"^6.0.3","@types/lodash":"^4.14.168","@types/node":"^14.14.41","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.3","@types/script-ext-html-webpack-plugin":"^2.1.2","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^4.4.0","@types/webpack-dev-server":"^3.11.3","@types/webpack-hot-middleware":"^2.25.4","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.22.0","@typescript-eslint/eslint-plugin-tslint":"^4.22.0","@typescript-eslint/parser":"^4.22.0","ali-oss":"^6.15.2","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.11","eslint":"^7.24.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.23.2","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","history":"^4.10.1","html-entities":"^2.3.2","html-webpack-plugin":"^4.5.2","husky":"^6.0.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.2","react-dom":"^17.0.2","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.2.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.4","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.1","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"29878bdea11c6e7dbc94c3bb959c9556df298667","_id":"caibird@2.8.3","_nodeVersion":"14.8.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-zTIEJrmPwEMOSi7wo6UvJT/lH6xGzo8Z4HcIM1It2kIsGAFwi+wH/IfJUp3FalXgeH4nxoy9577Ir20rnqHcrQ==","shasum":"6d4bbb2733d8aab47e46bb5f5676750a4b825b12","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.8.3.tgz","fileCount":217,"unpackedSize":334584,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhpLfTCRA9TVsSAnZWagAACVMQAITPXpdthxT0vQtF4GNd\na7O9AvgTFhAEqWmtQ4Sfl+Rv9Mv1nveGlxAC4KS6ecNc7zlqb481OVV66QH0\nrpKMy0HJo6U7VJW2CXt+3po9nVnF4MRAWvnq1AVgJwTQ97rSLyd/UQOddFiB\nLIHJi5lygQ9zUq4PuMEA9C9fNESapTp+xws1fXqFPAHGz7y3Unu7q0mnkrB6\nGqBcC2FTGsvWq8EtUXQZfYbilPFlqya+6vLw3ZDyJiXqD0G8SQ/H76ZcUftM\nHRSMzqboWHg+HgoxeU1dtAyS0SCQC0iFhLV9oXARfZ9ktgE0wQ4SrGEYBjH/\nVnV7AqzLapa9znGUYxACPPyYw6nUc2TzeGrOfNtQ3/InDZDCq6uA8ehwxzIy\nEvRvdholUFV+uFY1QgJ5sIn9a5gaabAjGBLqsWJXw/0dbHt3SQnZZ0PlSlpy\nx2vxv3+Lm8LXg7DRzgLwkdqn5ISkI8DMjzrZ/I+EcLP6iOuUyxXgolnDzO75\nh8l63sie3GhzYWRaL4ux3ouJnKUFystrcxYoKmEu65cLiP+SGjNIaTLhac7I\n8KFPlavlPN7Dhngm/7rb7bcZGzKLXztQEUsc0PMeCp04g43tQZK7XfEbPtQB\nEIfwnyOQuBEtzKbwU67Uz8Bd3k6Y82yEkWZv2pjziefO/j17lhxRtZaAL4bH\nei2Z\r\n=94Iv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDertXjDM7nBHz1KgNaqbJqIhHBjSd2+ixk1K5MdllCWAIhAL5OXkx8Xu0r2cUpI7P3TUQ8E4fl+IBEfPiJJ6KMIIId"}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.8.3_1638184915677_0.09230534541176327"},"_hasShrinkwrap":false},"2.8.4":{"name":"caibird","version":"2.8.4","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.15","@babel/types":"^7.13.14","@types/ali-oss":"^6.0.8","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/gulp-sourcemaps":"0.0.34","@types/history":"^4.7.8","@types/jaeger-client":"^3.18.0","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.2","@types/koa-send":"^4.1.2","@types/koa-session":"^5.10.3","@types/koa-webpack":"^6.0.3","@types/lodash":"^4.14.168","@types/node":"^14.14.41","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.3","@types/script-ext-html-webpack-plugin":"^2.1.2","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^4.4.0","@types/webpack-dev-server":"^3.11.3","@types/webpack-hot-middleware":"^2.25.4","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.22.0","@typescript-eslint/eslint-plugin-tslint":"^4.22.0","@typescript-eslint/parser":"^4.22.0","ali-oss":"^6.15.2","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.11","eslint":"^7.24.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.23.2","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","history":"^4.10.1","html-entities":"^2.3.2","html-webpack-plugin":"^4.5.2","husky":"^6.0.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.2","react-dom":"^17.0.2","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.2.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.4","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.1","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"a71addcea4671afd6f164359885ed33e0d2ee363","_id":"caibird@2.8.4","_nodeVersion":"14.8.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-xB3M/SMvytOkJSWOMedgVKXs4CMxTIXRtjydy0DyBJepy3WMIK7E6cIGvIvVISOuefyi8r8arQTNStJXFjVzmQ==","shasum":"0a8ea718dbe7b517bd71bf68e9b82362ff74ce07","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.8.4.tgz","fileCount":217,"unpackedSize":334897,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhpdrACRA9TVsSAnZWagAAr0MP/0OirJ3KV6tVtY97ZMw6\nGAKTYlfRIwfnYu+Y/Yx7lrt4gf1b7NnrbX9JOos4xxi1LbUATe9Lbgok9ONM\nf3dbD7EyO/q21d8I0sJ/raEr5ifZJ1nYkh4xbdbFMu2we7fSFLsEiYYtROOh\nuG1DQC5IxKkxloAw/gHdSo5qsvXs9/SIRuPJWVj0S1TuETeNyDTPEset9QOj\nkdz85ez6bVISuxs4MKWcMXULNPv973Tl5XHH7tNFRDZs7GuBFBJjU3oPYY+A\nCb0GHMapz7Fk316uiGFwWdDFv+EdyZV2hm5kPSeaPMYQOG02Dq0wNfPKhGeb\n+c0r7cqfWihqVjx5YWh+cnVS1+x0De+QUDalQpd/sdIw125bNQtKs9JucEJR\nDawDke1g2aIqh5sim3B+eEJx5AQ5hvlNkrRTqRpEb/Rq1Q2ywbxSQIVjJ0dH\nEDTyC5c1Djk45M+UMIFq5M1UNnSiD75FEsb32Sj5smqRypiqNBsVGBPq7t9l\nWyyX2peREWT5qAuipIbpka7hPY0xGIpERIRtgo4f8nO1ZQDlAjxiJ0Q4Li8p\n95603VdCplrlncEHU4LEj2g3ZnGQuGYK9gK+ip9CW4arSHpBCcTeD2q4U3fo\nFqOJB3sS3fbS25ZQB8TtPvolVnlDgw43j/zkvoLarewUE9nT4BCsM7Yye6Ft\nTG1w\r\n=PA2b\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCEGYDKHb9iXWYQSCf8jHpcVQdR+DzLU7riXiUk5IjwPQIgFqZCgH2ROUXrM36eHYmaCMKZ5bPtIqrW9lW+9O7FHk8="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.8.4_1638259392200_0.1406908733354677"},"_hasShrinkwrap":false},"2.8.5":{"name":"caibird","version":"2.8.5","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.15","@babel/types":"^7.13.14","@types/ali-oss":"^6.0.8","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/gulp-sourcemaps":"0.0.34","@types/gulp-strip-comments":"^2.5.1","@types/history":"^4.7.8","@types/jaeger-client":"^3.18.0","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.2","@types/koa-send":"^4.1.2","@types/koa-session":"^5.10.3","@types/koa-webpack":"^6.0.3","@types/lodash":"^4.14.168","@types/node":"^14.14.41","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.3","@types/script-ext-html-webpack-plugin":"^2.1.2","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^4.4.0","@types/webpack-dev-server":"^3.11.3","@types/webpack-hot-middleware":"^2.25.4","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.22.0","@typescript-eslint/eslint-plugin-tslint":"^4.22.0","@typescript-eslint/parser":"^4.22.0","ali-oss":"^6.15.2","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.11","eslint":"^7.24.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.23.2","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","gulp-strip-comments":"^2.5.2","history":"^4.10.1","html-entities":"^2.3.2","html-webpack-plugin":"^4.5.2","husky":"^6.0.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.2","react-dom":"^17.0.2","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.2.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.4","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.1","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"38b24e5d34230e5558b00157e612dbc5669f5efa","_id":"caibird@2.8.5","_nodeVersion":"14.8.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-d3sQA+DZgL+YGdymHMpKDxIEBaV5r7QP4BsI3avcn3Fw7QtFzSWDzGW1tFfmA4zAh9KU+MMus2j7uB6hCjNz8w==","shasum":"9c1ba99779748dab7d3186cd870e182b2e64c255","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.8.5.tgz","fileCount":217,"unpackedSize":335324,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh8fbmCRA9TVsSAnZWagAAw9oQAI9zUk676rjn3eZ3Ms7f\nkAjP3mcW+FU1TeJxOI+TkPI0lgBUJvtMzQjwrpuEOfEyQtXxqNoo0BLIPb01\nl5EkM5CJgAPRSJ0bqE6SBpOknv2yNzlBn93H8c4uEPQJ94mB7DWg63nbge0i\nfJYhwiySy6yFGihkNwWWyJFz5iZmUdLb4TtFSnkgLV2zIsKUleM3/WU56lXW\n/beYgx52ZuoPP2NqSfVE8IPgeOhIWfhot3QzUMi15hZnUf9SDY7BJWDXa/oI\n+8MlwQe1ygL63e1Danh2n6roo4dO/EsNaYlgOcWgLbTQAly9RC5L9saQyhei\nrwzsuLVJoTZdfeDUdZv+ocAMTDZrQFDNEzFBYwz9AJPgz5wJOn5caKayK+wM\niTGaZ0Ro/OrYZL1/RPpdbGcj0doZvn3Dewgfc1uEerdI95yBeDyjtJed6hvY\nwSwHEokYmpJ4YhOzH3U5sdVn8Uv0MbFslF9z97NDa0RwEMk28XLwTUgbkvnf\nEeII16GID/dhDJ1vXsqJLdarXAu3kBAqN5hIpRs+aSYoGacc8XZH51cyX4XS\n6DPkpyIlKO2KQGKFG0GDPaQQn/0zayQQwuvOFSJAl8lmWjG71+XIdZYYRUDo\neTjDgFawblaUvxh1npfJSnmKR44I2MhRIDOvsFDuzSxR/tjLeOf7dhC6Zt/U\ntTUS\r\n=TrLW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3oP25sIWOLmsyIJb1CXAC+kq2Ga7ufA5JGO1nP8tGigIgCbf/8z7LEcqcvz8E5llDhFNBbhVY/aOxJ7kIuakIQJE="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.8.5_1643247334453_0.7902029790741878"},"_hasShrinkwrap":false},"2.8.6":{"name":"caibird","version":"2.8.6","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.15","@babel/types":"^7.13.14","@types/ali-oss":"^6.0.8","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/gulp-sourcemaps":"0.0.34","@types/gulp-strip-comments":"^2.5.1","@types/history":"^4.7.8","@types/jaeger-client":"^3.18.0","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.2","@types/koa-send":"^4.1.2","@types/koa-session":"^5.10.3","@types/koa-webpack":"^6.0.3","@types/lodash":"^4.14.168","@types/node":"^14.14.41","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.3","@types/script-ext-html-webpack-plugin":"^2.1.2","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^4.4.0","@types/webpack-dev-server":"^3.11.3","@types/webpack-hot-middleware":"^2.25.4","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.22.0","@typescript-eslint/eslint-plugin-tslint":"^4.22.0","@typescript-eslint/parser":"^4.22.0","ali-oss":"^6.15.2","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.11","eslint":"^7.24.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.23.2","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","gulp-strip-comments":"^2.5.2","history":"^4.10.1","html-entities":"^2.3.2","html-webpack-plugin":"^4.5.2","husky":"^6.0.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.2","react-dom":"^17.0.2","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.2.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.4","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.1","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"39f34480694766357e1bce01c85e1cd2c4607988","_id":"caibird@2.8.6","_nodeVersion":"14.8.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-ZL59vPqXIcF62TQiEMwM20iBOE3jYpvR2U5P5w/Jswfw8v031avAQ/wJoBDisZBy7Pc+AeWqfXn7XC+/Gkk6bA==","shasum":"1eacfdf595e5f551c5dc26c3f6d6327db5967980","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.8.6.tgz","fileCount":217,"unpackedSize":335759,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiPSK3ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpQ6RAAk0WVkivRjXU1X8+JmmLAVK5lsSPYda+HUX/3KMhlxcwhQX1Y\r\nO9q8hbxAdqAL8vAACb4hIXhEJveVf34JdcBO7aNChCqeVCQoJs5GdwOff5y9\r\nkDPhZU/XTWjV69pBDNpcbkku8jtDDSDFBjIywpc6Smvobefjk0njSc689vQI\r\nQjFghdFuXNWSs2l0VyPFyx6RQXadXNsvaD8sedPodIWel/sVdPTNMW9R9xAS\r\nG8XT2UyrskvV9iy7gnNWFF/uwT1g8jl3Kh+rbZ2XA+RrNY9wOwl3MiTaczgk\r\nb2YFS8gSvmk0tKL9+uWUbVq2pmjmpsi2zwJOITOmlYvHJ/gP5fqinIeynlyZ\r\nYxgDM10MjgfMZQYNBefNDhsI8osVzAndHBLCr3IS+xwZ9OtWdHrdHSQSeSTQ\r\nVmE77s7jXLTJaGR/pSmYrO/f0i+0Y5CocoetGIFKSG02ztG56TJqSTpf7EKi\r\nIwQcKbmUvIYlSjKHpLLFt+Ya/1Q5ywm5vtqiP7faqMv1fxLtNAFdnYZFwBS2\r\ntkVtHqNBW9LwzGXu9fNsCAfXXgnAEoqC8jj4YQAyiAUFuuIImLdzPiFV8sEN\r\npWurDE4SzhxjDUK257j8rNtdeVa7+xuobXHHP3JJ22s1M9lg4PMhZ0YU4ZRS\r\nQVoqbvLgnIbhiEhGn7UnUr0JjjQmUJ1FpxQ=\r\n=U4cG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDBRMUFhrBfvf3ZcNZlKvhBIaTgpqoJxa/Jw1CD23x9cgIgTEb5WOqdaQeGZO7rzyi+FdrJCtIHEmoo2BT0rqCi03E="}]},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.8.6_1648173751095_0.21016042282507508"},"_hasShrinkwrap":false},"2.8.7":{"name":"caibird","version":"2.8.7","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.15","@babel/types":"^7.13.14","@types/ali-oss":"^6.0.8","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/gulp-sourcemaps":"0.0.34","@types/gulp-strip-comments":"^2.5.1","@types/history":"^4.7.8","@types/jaeger-client":"^3.18.0","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.2","@types/koa-send":"^4.1.2","@types/koa-session":"^5.10.3","@types/koa-webpack":"^6.0.3","@types/lodash":"^4.14.168","@types/node":"^14.14.41","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.3","@types/script-ext-html-webpack-plugin":"^2.1.2","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^4.4.0","@types/webpack-dev-server":"^3.11.3","@types/webpack-hot-middleware":"^2.25.4","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.22.0","@typescript-eslint/eslint-plugin-tslint":"^4.22.0","@typescript-eslint/parser":"^4.22.0","ali-oss":"^6.15.2","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.11","eslint":"^7.24.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.23.2","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","gulp-strip-comments":"^2.5.2","history":"^4.10.1","html-entities":"^2.3.2","html-webpack-plugin":"^4.5.2","husky":"^6.0.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.2","react-dom":"^17.0.2","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.2.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.4","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.1","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"59a7ea8620e2e36b107434edfe12d922f805ac07","_id":"caibird@2.8.7","_nodeVersion":"14.8.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-LBhzXq23cNF4cE+qZQ0JWuJ2PKLGEynW/HNS0bNmil5xpmulSUMdBXK/xouKN+lcglENTLNvs3tFB7/gA6I1lA==","shasum":"beb979ee23e825263a27d9c060fb2c82de8871d6","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.8.7.tgz","fileCount":217,"unpackedSize":335972,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDujWSE5V65f58iY1kztk1Mbf9FBSx2NLblxkC5Y2K2hAiAj+Bwd8UJIBqmS381XQZwDeGCRH4o8NQUDangPOWqenw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiZkm9ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq5/hAAgrSE+PG8Qc4HFWJzVEB5YJVBwV2vr3RGrq5uKWfDtg1OYr5O\r\nijEYK4h0p4YstZnUoGpTW8Y3z/jde3ttwfSwUdqbat465+Bk6dTirTrGedHW\r\n2sR49s1PS81t4YvdqZIMzP1R3tr+dtGYKrO5mGxGk8emPMdFGc3LYgg/3PtL\r\nWroM2kwMMOWv+Nr/pT5uHHfi5YGflydRE19pNCu3hxjxcEj8SiAM4M6NqNz/\r\nUBAJsrqdK10ehpufs8Dj/VS71pk1jlrf0iWS4B4t6i5ecupgOdHY+JIk47Z+\r\n38vMqHy56deLWRMLDSN5oH2hDi7Ivxd1gUlxrfoh53nFz4bWXWM7cAfBM1aU\r\nxdOdn1mx3+yuwcbCHJ0A9kXND9HiHJf3UYflkoB+dsm8/Gn+dwplgN4hnhtr\r\nWLzC4YJUpqCnkvies3feuGgUEZXokgMBAooMdEEuUQA87XP+i89i+W/UE8aZ\r\n5MeP2lqKYB+v6CIva3+Xv3N+kDMXnQWwdwS97kpRzImUy16jldcxPrv9uZSS\r\n+PpGZEJuWfCgHD1EBcYmx2/xqq8e8g3Cx2Iy2OZrbduORz1mHhY1zfkE9b+1\r\nvYcr2BKc85As/5YusdOUxI8dz0gM2UYuAxSxMjwkgt6gLsuh3zi7+okrOY/7\r\nt8jLSI0UWAnr06GoJc8vUW7+xFAr3DfTDMs=\r\n=oT4C\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.8.7_1650870717429_0.08675197779559007"},"_hasShrinkwrap":false},"2.8.8":{"name":"caibird","version":"2.8.8","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","dependencies":{},"homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.15","@babel/types":"^7.13.14","@types/ali-oss":"^6.0.8","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/gulp-sourcemaps":"0.0.34","@types/gulp-strip-comments":"^2.5.1","@types/history":"^4.7.8","@types/jaeger-client":"^3.18.0","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.2","@types/koa-send":"^4.1.2","@types/koa-session":"^5.10.3","@types/koa-webpack":"^6.0.3","@types/lodash":"^4.14.168","@types/node":"^14.14.41","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.3","@types/script-ext-html-webpack-plugin":"^2.1.2","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^4.4.0","@types/webpack-dev-server":"^3.11.3","@types/webpack-hot-middleware":"^2.25.4","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^4.22.0","@typescript-eslint/eslint-plugin-tslint":"^4.22.0","@typescript-eslint/parser":"^4.22.0","ali-oss":"^6.15.2","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.11","eslint":"^7.24.0","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.22.1","eslint-plugin-jsdoc":"^32.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.23.2","eslint-plugin-unicorn":"^29.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","gulp-strip-comments":"^2.5.2","history":"^4.10.1","html-entities":"^2.3.2","html-webpack-plugin":"^4.5.2","husky":"^6.0.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.2","react-dom":"^17.0.2","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.2.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.2.4","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.1","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"0b9c22df575f814faa24fff340288ad39abef19b","_id":"caibird@2.8.8","_nodeVersion":"14.8.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-DNHXjLUifm9TzAfX93Yp1w3iEdIE/8PWJcnEJr6vHg3RZpo04t3jcBphrK/U64Nmz+y4rbp17CmJYe0Oxv3DrQ==","shasum":"a24da7d14edbadb59cfe194bc6b823fc9dc483e0","tarball":"https://registry.npmjs.org/caibird/-/caibird-2.8.8.tgz","fileCount":217,"unpackedSize":336260,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDfiK7bUp7ZdtJn44uD9FtDA8qZg+AOj3hAiEHZaHSQ1gIgJajD9jUP9xXoduSb3txYsAdP3iJfyRAOpiybJ2WIgR4="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJihLeiACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo4zA//dgLOR/qBhkFQ1QZdJoVzuZifh/TQmdhr1hDlgwfk0WHwRDfe\r\nqqIvznKVPvemuv+eszla+zFH/n8339MZxyR+JSzU7ZYM79xcAXGCqag6o6iA\r\nqvvlzzO7+zhV+FaPkc9pje4xy808Q3Xj7SF8Pp0kCH36hlyKU2wvUnyuZGzb\r\nkdZXskZdQGl0oJ/b9mvcdVmFAkIbd2OG12UVCMWpO7DHoFPpNDhIG1WjO/Ar\r\nXaaiJm/L1h9xWxy/IgVe8YKXUi9dfqZCcGHQvngPitCZ3Fq0f1pd5UnHjUi0\r\nVxOrsq/h2OjCj54iQTF7LX3mWCPkj6c31PMmBruYL61KY03giK9LW5aZpeHq\r\nZcfJly3ExQiIugCd6IlDqkgYtefIRqjoJmwBbBHctotGAiz5/flTEZkcDd4H\r\nZqfOmPkdPbgbToUMcetGxtr+WzbwU3Phs/+wL29MDopV4wZIKsayBX/kPSSB\r\nSeZ8zdainjCj7qNoAs4yX6eS1BOiAWoRV6d13YslV70+zvurg5weYH+C3/jv\r\nsCPNSVtGjzsdhO8zVE9bfFcX5sGE//QREt+BlZlHVU4aRKsElSnQrxKWaTYx\r\n8ReHOkKF8uDDQjk21xA3krys8ANE2AUNYMjBBrcwwS5dGHR0ZrBnZWTE7L0Y\r\ndNmWRVS2S9cekKbl4fEWDn4j+yTR2HOi2go=\r\n=7zL5\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_2.8.8_1652864930269_0.8924058353115223"},"_hasShrinkwrap":false},"3.0.0":{"name":"caibird","version":"3.0.0","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.15","@babel/types":"^7.13.14","@types/ali-oss":"^6.0.8","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/gulp-sourcemaps":"0.0.34","@types/gulp-strip-comments":"^2.5.1","@types/history":"^4.7.8","@types/jaeger-client":"^3.18.0","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.2","@types/koa-send":"^4.1.2","@types/koa-session":"^5.10.3","@types/koa-webpack":"^6.0.3","@types/lodash":"^4.14.168","@types/node":"^14.14.41","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.3","@types/script-ext-html-webpack-plugin":"^2.1.2","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^4.4.0","@types/webpack-dev-server":"^3.11.3","@types/webpack-hot-middleware":"^2.25.4","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^5.25.0","@typescript-eslint/eslint-plugin-tslint":"^5.25.0","@typescript-eslint/parser":"^5.25.0","ali-oss":"^6.15.2","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.11","eslint":"^8.15.0","eslint-formatter-codeframe":"^7.32.1","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.26.0","eslint-plugin-jsdoc":"^39.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.30.0","eslint-plugin-unicorn":"^42.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","gulp-strip-comments":"^2.5.2","history":"^4.10.1","html-entities":"^2.3.2","html-webpack-plugin":"^4.5.2","husky":"^6.0.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.2","react-dom":"^17.0.2","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.2.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.6.4","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.1","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"c63e836b22db2918c21a427759303d63e61bd70c","_id":"caibird@3.0.0","_nodeVersion":"16.15.0","_npmVersion":"8.5.5","dist":{"integrity":"sha512-6Xa9834kondNCAwoz2Ytth9nnVrmrB81Nia4zs2x4Uymi3DjTINvhiY76tRuTDaAmsLt7sui3BKjajJlyrrSDw==","shasum":"1b2fcec6327be64c1777bce6fc26de3feecc9953","tarball":"https://registry.npmjs.org/caibird/-/caibird-3.0.0.tgz","fileCount":217,"unpackedSize":337948,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC1arkimLwxwjROpWxfZ4TWIf0beh9QvMGUIBjmRxAdgQIgCuQvr4PPoGlLqWw6yPdkr0Mzw6NjMm1bHaOCh6Ttlh4="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJih0eRACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpgDQ//cCvsC5xPlZJQjd52KJMHh2IkWDTVQZqTRvCG4gObVD05Q7e7\r\nM2ajcU1c6odgG/ajVYlXrDQIh9QWXJWlVr6Jh0BYZF1CUqCELzKDMAO9s0TQ\r\nBCoczhC0v7tb5x9+C+X24PGD6Zuk6kaqoXh1I/0gO2ZgCq8BwaZ30icuMvZO\r\nji1FnCzBTPdiwUcHRfZNT0YFKZetrNGgG4uTalQUPLetah6ykzDJHA+NqPcN\r\n/yGxseHhfIda2O+xPMkUPKjGmkUjVLs29VPsBVaWG47q1nket+eFB6DR5QRC\r\nOhMMCkPEiFE0Rz0y0lySFwNnBJj3tz31F60u2fDBqIJIv1eSfPyVDOYgvSkO\r\nBTftzKk10dunhvX9ZG6moQRAb3n6kyl/7D666Qz5iTeojFaApGTt1m+OYnGM\r\nFkt/q1KulyD93ISd4QQONpN0sv3doJwVSdbF9mqgg0raFAvvpsTu6n2sa6Zi\r\nH2PYsdgn0sxNhW6M2zqvDnG7DBcwh9DIMa7f/j5M18V9NY7ZCduM4sF0q35T\r\nuQJ+HmVUFljy0gDAc8AGtvmxOrUkIf/gL3r6iX627bTaA4uaC28PjI4xBIrj\r\nZgwvwV/PCXb7l1rowc8FFgyLd4F7pvKH/cULS8I+td0Y+TGlgtxFJVPdW8oA\r\neWWrVaWjj/BDNxCAaMbG3K1tmVg9a3x4q4U=\r\n=OLur\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_3.0.0_1653032849377_0.8540081348522299"},"_hasShrinkwrap":false},"3.0.1":{"name":"caibird","version":"3.0.1","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.15","@babel/types":"^7.13.14","@types/ali-oss":"^6.0.8","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/gulp-sourcemaps":"0.0.34","@types/gulp-strip-comments":"^2.5.1","@types/history":"^4.7.8","@types/jaeger-client":"^3.18.0","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.2","@types/koa-send":"^4.1.2","@types/koa-session":"^5.10.3","@types/koa-webpack":"^6.0.3","@types/lodash":"^4.14.168","@types/node":"^14.14.41","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.3","@types/script-ext-html-webpack-plugin":"^2.1.2","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^4.4.0","@types/webpack-dev-server":"^3.11.3","@types/webpack-hot-middleware":"^2.25.4","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^5.25.0","@typescript-eslint/eslint-plugin-tslint":"^5.25.0","@typescript-eslint/parser":"^5.25.0","ali-oss":"^6.15.2","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.11","eslint":"^8.15.0","eslint-formatter-codeframe":"^7.32.1","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.26.0","eslint-plugin-jsdoc":"^39.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.30.0","eslint-plugin-unicorn":"^42.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","gulp-strip-comments":"^2.5.2","history":"^4.10.1","html-entities":"^2.3.2","html-webpack-plugin":"^4.5.2","husky":"^6.0.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.2","react-dom":"^17.0.2","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.2.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.6.4","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.1","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"cce166745ac7211a5eee88f9e8459cccbd972e52","_id":"caibird@3.0.1","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-S6CtUT7IbpEba1v/B+q5gpaTr1idhU8LTZh2YsR2swqL4R7MVLwwc0KB8baNrJTgmqeomqO3oAM1uCgTPKbENA==","shasum":"b96de063f6cb5c46eb3e0092b305475a31aa608f","tarball":"https://registry.npmjs.org/caibird/-/caibird-3.0.1.tgz","fileCount":217,"unpackedSize":337947,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCgouyZzCLMynKdxUdtTy8KnPVCsdORepoKTayfHqvg4gIgP+hrCuW40w8dApr82tAsFuKEh44xI5eXZzHAyrFL1uc="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJih1wTACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqnLBAAjHJ3xE8suqvqX6PCfcMJZJTFoW8EexmfzIdReeK5f3yyGlvt\r\nsjcCSi617nFTEXLiLlvduvoavD1m/73tD+Mv6KOp0iAeYnB5uNNMq3n3f7W4\r\n6LJFFUir5bTPX92u5cPu4MvDbPO7pEGqLz4AIgg97VKEO/VLKBI+1YsgN3gJ\r\nawG3vIpyi0NGmiPou0ojj5Sp1qGy5hXfgOk67oy2oLIw8dgmeXM/DFEnBXV1\r\nig1IC1kSVlWp5EQQZ8G+nqCeZQTDAMfCGpx404fbLlvbvmX6lcdu5/yJoESd\r\nnMZKeh+f8WvJBkA2HVuvXL4K1lcCPHYghkCk3FVE+Eonf3cpb+yk7lP7yqdM\r\nl8hngTnTmrrkrxSFHHK4MDyhntkvUvbTCWAHPPlKHHrlx6CLciYrLhwaonSr\r\n9/OJtrsA7QjlMoOSOpx3bltky8fGUwUfH1V9IU5eOMRHDkm+o2F2/AgPa/C5\r\nDSm1FDqiIuSDVkkXe/91TODDST79QwJk124yydj1qDLYYGQg2i+gInHwY4v5\r\nuA18GULLS1P6hW5xkyl+/8OtcEesiPSzxmxJIWcPMjMGPgPHvCFc/06QzMZ2\r\n2WMkzC3aJIwReopKwkfJEulLTlKwwEaioMMJQyRGnyjN4aIAXN9e3YeZT8ga\r\nFB6EvBCXrF2NgQsH7fVQHkNqKuscwbYEF68=\r\n=vEOf\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_3.0.1_1653038099049_0.22195656084342352"},"_hasShrinkwrap":false},"3.0.2":{"name":"caibird","version":"3.0.2","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.15","@babel/types":"^7.13.14","@types/ali-oss":"^6.0.8","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/gulp-sourcemaps":"0.0.34","@types/gulp-strip-comments":"^2.5.1","@types/history":"^4.7.8","@types/jaeger-client":"^3.18.0","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.2","@types/koa-send":"^4.1.2","@types/koa-session":"^5.10.3","@types/koa-webpack":"^6.0.3","@types/lodash":"^4.14.168","@types/node":"^14.14.41","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.3","@types/script-ext-html-webpack-plugin":"^2.1.2","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^4.4.0","@types/webpack-dev-server":"^3.11.3","@types/webpack-hot-middleware":"^2.25.4","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^5.25.0","@typescript-eslint/eslint-plugin-tslint":"^5.25.0","@typescript-eslint/parser":"^5.25.0","ali-oss":"^6.15.2","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.11","eslint":"^8.15.0","eslint-formatter-codeframe":"^7.32.1","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.26.0","eslint-plugin-jsdoc":"^39.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.30.0","eslint-plugin-unicorn":"^42.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","gulp-strip-comments":"^2.5.2","history":"^4.10.1","html-entities":"^2.3.2","html-webpack-plugin":"^4.5.2","husky":"^6.0.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.2","react-dom":"^17.0.2","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.4.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.6.4","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.1","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"cf056135e6e8f46ccf5829734cb9289570c3cf55","_id":"caibird@3.0.2","_nodeVersion":"14.16.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-JV6Q0GFmw3PtuYVSUoDP/zGr4mpLPoVqT8/J1r8KDR6qSZrKwMnPL2sSai9BmBe1LAMgbKdLPKJlRKUGiDK3vw==","shasum":"b8e6fdc5e485befc31540d02f8bdb14b9e260727","tarball":"https://registry.npmjs.org/caibird/-/caibird-3.0.2.tgz","fileCount":217,"unpackedSize":337947,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAeUDEVel72vNkU4jEO9mci0nDdz6fA3PdQN0mIpuoOkAiEA9qJwEqiD2s0EcR5TzKyXPIjoW5ZDWPHHyv9Gq6BtBC8="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJii058ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoETA/+LZFOhlN97TmR6cWIZlq+0hcOtmHzcoYLlJcXlGuD5/RPXhUM\r\n4FBGBvvi9p0929O1JXvfFK+3sjyzusix+gWk+nWdca2j8s1zXfN5/MQdADem\r\nyRnPoHm8pgLIM235YMLKixW/vaGc7kvPl5kRjN4VYu23iedO1suz9/tGUZao\r\nChWKnsYpxWbAbATp5KpnQvlTqP4iomUehLMpA7h3woZqnTvPBkxeNnxmV9/Z\r\ndGGaDfmkRXw/fpJ8ih369GICoYzsU2iXZe2kTORjbEKPgr8WxQKKRcUELg87\r\nMeAiAjcXC2x3uhkgLx2bbdQZ/k/XOVh0b0cErMckI4QQwbl/hHNiYS0dZhxN\r\n4AfOp1RSV54ySINgwLlAxNYufA2IznCEp6E8BbKZjtH1mp7ehI0PJJcJQmsx\r\nIXPAbzJT1MboKxyOitu59C59x9yfiVyMB6kSNx4jaWidP73PaWs7W62Uy94m\r\nN5Zv48sFQ0EwniliA19X3S5eN7OVjQIhFfn3tRXvsDj076QDXKTwEZC4yPG4\r\nSdbZwhqFfXHk8SIEMoIW+JYxWocVsXoAT1dg/TsAL5yy33UQSJElZL1Y199o\r\ncNxe95+YF/7UwVcqNLI84pGTlMT2t22PXd9VSQZzoCkNtWhJtvc01IV6wZP5\r\n3LMqHyafVsbHIIH4BWqwKsZ0axa1CBDY444=\r\n=NobM\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_3.0.2_1653296764244_0.11465344233513841"},"_hasShrinkwrap":false},"3.0.3":{"name":"caibird","version":"3.0.3","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.15","@babel/types":"^7.13.14","@types/ali-oss":"^6.0.8","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/gulp-sourcemaps":"0.0.34","@types/gulp-strip-comments":"^2.5.1","@types/history":"^4.7.8","@types/jaeger-client":"^3.18.0","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.2","@types/koa-send":"^4.1.2","@types/koa-session":"^5.10.3","@types/koa-webpack":"^6.0.3","@types/lodash":"^4.14.168","@types/node":"^14.14.41","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.3","@types/script-ext-html-webpack-plugin":"^2.1.2","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^4.4.0","@types/webpack-dev-server":"^3.11.3","@types/webpack-hot-middleware":"^2.25.4","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^5.25.0","@typescript-eslint/eslint-plugin-tslint":"^5.25.0","@typescript-eslint/parser":"^5.25.0","ali-oss":"^6.15.2","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.11","eslint":"^8.15.0","eslint-formatter-codeframe":"^7.32.1","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.26.0","eslint-plugin-jsdoc":"^39.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.30.0","eslint-plugin-unicorn":"^42.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","gulp-strip-comments":"^2.5.2","history":"^4.10.1","html-entities":"^2.3.2","html-webpack-plugin":"^4.5.2","husky":"^6.0.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.2","react-dom":"^17.0.2","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.4.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.6.4","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.1","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"5c167a9a5f7c842367baf20f59a2321ace3c78ef","_id":"caibird@3.0.3","_nodeVersion":"14.16.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-cvER57mtpZhf6WLV7lgblQLEUSdVdNuWlZxzhFsbMtwk5LPcYiOBRSxnYE8BB7T6GhMTVVNJN3Sq8Efvau5nCA==","shasum":"b6a3110daea4fd2d6ccd2f104aaf4886a6ef372a","tarball":"https://registry.npmjs.org/caibird/-/caibird-3.0.3.tgz","fileCount":217,"unpackedSize":337110,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGTmRiu/j6FZ57MVbXB/l8Iwdv9IQmMhFNsYc0kRqWYAIhAL+m9+/v0M8FyUXNL2t/MxFdmuut3lKobPI8hsoWcZAZ"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJijITuACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrpjw//SlZt6pGiJRYdNlWZ2JXz+UCi9brAeQrOO5QF9BeEh0KD0Q05\r\nSFCORnD+Nxlh/S/a+3UeuGtP81vo6DsetPS3fCicwaFH68eCJfke9xumnDQe\r\noJVpAajpKnk9aONbfPAeZTw86MWzC8Lhzr+7vqIjRYP4HJFMrJxHF14gmsPu\r\nCKpBKqp84hr3hU7TD+cxwaMIKxEHRpwD42ib6zzYLsQ2F2biXa/1I2S/GPd2\r\nmcAftobObswovuX87OgjLCWALPuML8KfBEDSwcvNJ+r9NmAINEyAAieA2fjy\r\nNl5UXvReMNzEh3WXYCG7qMJu0ha7dBKUjjMW7fSxCpzYwYm04gJ2MeM1o4cv\r\n64JDxw1Amur0uvgbxxCJO8nYMurKr4GIW5aoYItJ5xuVmdOywg2gDxm/Wgm5\r\n3jM1OydukSrjfQwrtefdESQMhNE98K/QAwyrLXHr3MBas7L6P5lwTA75ueNC\r\ngkMvPbgX4JxIAMHSvPmC/b/FOkdF0yp4vJEdR9TXHDcvd75Fhrs+4M66pIRG\r\n1qA+hMHBwIJdBsys+cO8ZScJndPUSADfzQ+OETLVmlOddqUygisyfh0tcQBZ\r\ninPkTIKFi+DlwJH7A40Y0Ks3xXfal8gam8OZh8aqif5csFcsDl95VYhii654\r\nrMymtNemSonTQ9sNgYpH+vZYFZwwwQIz3EU=\r\n=GiIG\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_3.0.3_1653376236849_0.5239472391483173"},"_hasShrinkwrap":false},"3.0.4":{"name":"caibird","version":"3.0.4","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.15","@babel/types":"^7.13.14","@types/ali-oss":"^6.0.8","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/gulp-sourcemaps":"0.0.34","@types/gulp-strip-comments":"^2.5.1","@types/history":"^4.7.8","@types/jaeger-client":"^3.18.0","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.2","@types/koa-send":"^4.1.2","@types/koa-session":"^5.10.3","@types/koa-webpack":"^6.0.3","@types/lodash":"^4.14.168","@types/node":"^14.14.41","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.3","@types/script-ext-html-webpack-plugin":"^2.1.2","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^4.4.0","@types/webpack-dev-server":"^3.11.3","@types/webpack-hot-middleware":"^2.25.4","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^5.25.0","@typescript-eslint/eslint-plugin-tslint":"^5.25.0","@typescript-eslint/parser":"^5.25.0","ali-oss":"^6.15.2","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.11","eslint":"^8.15.0","eslint-formatter-codeframe":"^7.32.1","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.26.0","eslint-plugin-jsdoc":"^39.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.30.0","eslint-plugin-unicorn":"^42.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","gulp-strip-comments":"^2.5.2","history":"^4.10.1","html-entities":"^2.3.2","html-webpack-plugin":"^4.5.2","husky":"^6.0.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.2","react-dom":"^17.0.2","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.4.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.6.4","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.1","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"55691f73e57c39c242c0c02bbccb7fb00b77f68d","_id":"caibird@3.0.4","_nodeVersion":"14.16.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-WiHMKptGPlimjyX85M/+O3KkWweBe4HJCmSO8fYTCBD6AcDd+yHkZJgDwr1GUERYcaXXT8oLaLw1yIYVqpRk+w==","shasum":"7d6394da556e9276aefdee9ef78b37278c9a2a66","tarball":"https://registry.npmjs.org/caibird/-/caibird-3.0.4.tgz","fileCount":217,"unpackedSize":337127,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCOm2ZVp5qRku7ENThloJGKPr7ub3nrZyQueDZsc+FABwIgMewemwfYDu9fLgHVxAzbTBUUaoMzUaeZoJ+qXUUBS0g="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJijf2OACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmovTw/9EDO1h4k8LUGUlemSTO6ZcOdZpMKAqtxKrKjk8MU4SnOrKgNU\r\nHwG6SBOPYEAqtrl5j4SpG1e01mgs9KmH0iQcVpmHDD98vtteGMFWbnYMwoL6\r\nbOhEzs/v9FGZ+nfHAccAII7i29OHlLqkS7xlG05NSQbCH7s3bluHwCPX0zGJ\r\nwhRq+tpwiEYXu7AH8+JCJXeZfrc5RBb8b17ljd6t6LfeJTNtGal/MUAjsu9h\r\n1Y1JSmC3wZ+pelZ/UzYCMNQAOANSWoELBl6gSWX//m8FfNHnIY3vkS9+ilQj\r\nhjhjYhk+oItjWCWsluju06GH00/ERTQPyU2oV40cygfJWqKQhnr/UkFLhMwM\r\nn0lTaDIs3vDzzKOebps4Nh/d2qwBJhBOc6lkrrvSONeUhdgF/VgwJlSX8lnj\r\nR/ufluYzXq7MCHewvXiv6lq1/dQVn5l1ZdhU+GaEhRqk7tuXtElOTofRGNwm\r\nQ2BgeV/OgtU+Ky4o2yWabQdOTUsTD0YkAGnm0p0m/PBGv+yCabzuDaNkEgmC\r\nfp6+W5teH9YeKh1rp4di2fJ9dyROMFwvMuctrticWEJYiVCJjx2TM0vrkPKr\r\nGBl4AytHUWGJrfmZhpEgPJcROFKRawl11ncQnjp3eCO7X8C4bi90amYOyW8M\r\nf9LGko4jQnzW6XqwmAPHApOdF+k6rMS6LSY=\r\n=vwFO\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_3.0.4_1653472653909_0.4019784234780541"},"_hasShrinkwrap":false},"3.0.5":{"name":"caibird","version":"3.0.5","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.18.2","@babel/types":"^7.18.4","@types/ali-oss":"^6.16.3","@types/babel__core":"^7.1.19","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.1","@types/find":"^0.2.1","@types/gulp":"^4.0.9","@types/gulp-babel":"^6.1.30","@types/gulp-rename":"^2.0.1","@types/gulp-sourcemaps":"0.0.35","@types/gulp-strip-comments":"^2.5.1","@types/history":"^5.0.0","@types/jaeger-client":"^3.18.3","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.4","@types/koa-router":"^7.4.4","@types/koa-send":"^4.1.3","@types/koa-session":"^5.10.6","@types/koa-webpack":"^6.0.5","@types/lodash":"^4.14.182","@types/node":"^14.18.21","@types/nodemon":"^1.19.1","@types/platform":"^1.3.4","@types/react":"^18.0.12","@types/react-dom":"^18.0.5","@types/script-ext-html-webpack-plugin":"^2.1.3","@types/sequelize":"^4.28.13","@types/shelljs":"^0.8.11","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.4","@types/webpack-bundle-analyzer":"^4.4.1","@types/webpack-dev-server":"^3.11.6","@types/webpack-hot-middleware":"^2.25.6","@types/xml2js":"^0.4.11","@typescript-eslint/eslint-plugin":"^5.27.1","@typescript-eslint/eslint-plugin-tslint":"^5.27.1","@typescript-eslint/parser":"^5.27.1","ali-oss":"^6.17.1","axios":"^0.27.2","cls-hooked":"^4.2.2","compare-versions":"^4.1.3","cssnano":"^4.1.11","eslint":"^8.17.0","eslint-formatter-codeframe":"^7.32.1","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.26.0","eslint-plugin-jsdoc":"^39.3.2","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.30.0","eslint-plugin-unicorn":"^42.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","gulp-strip-comments":"^2.5.2","history":"^5.3.0","html-entities":"^2.3.3","html-webpack-plugin":"^4.5.2","husky":"^8.0.1","jaeger-client":"^3.19.0","json-stringify-safe":"^5.0.1","koa":"^2.13.4","koa-body":"^5.0.0","koa-router":"^10.1.1","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^8.0.0","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.5.2","moment":"^2.29.3","mysql2":"^2.3.3","nodemon":"^2.0.16","platform":"^1.3.6","react":"^18.1.0","react-dom":"^18.1.0","react-jss":"^10.9.0","redux":"^4.2.0","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.5","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^2.0.0","tsconfig-paths-webpack-plugin":"^3.5.2","tslib":"^2.4.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.7.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.5.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.3","webpack-hot-middleware":"^2.25.1","xml2js":"^0.4.23"},"gitHead":"24821560120d845d0ea9206045041d5b6ff8a0e8","_id":"caibird@3.0.5","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-PlS+ZGuSam1qNh9ZCxdSig8ZzUX8dRGUdRfsqvlnzV4Fpad2XENCRyEZmxOEyZLYuFfqJumuZPz3TVF92W7/uQ==","shasum":"d3c267baee9d4cceb7101dc51d01e0cd911faa59","tarball":"https://registry.npmjs.org/caibird/-/caibird-3.0.5.tgz","fileCount":217,"unpackedSize":337261,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDh82eKFO8aRjGS7QsZfoxKJjlW1TIbPLK81htEd6Pc6gIgBFmnfhtF4mE8PUmH1zX07irXbSLCGmj7JnsKPc++TVE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJioEU/ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrAaxAAhndym73W3MY4fLTyox446g+S9t/sijERA14nXx8raLDItjs7\r\nkwfulFidrXCzoFFn0g68D+feHoJ3LaXxZNhaRIkZToL/BGhEBv/H2NTq3vMl\r\nWfRG7BuedTlPg0mJpo2gwxf3AmVBuDhJBWYKk5wC5bEmuWqLInUTclGqWCVw\r\nejtOWVbYHJyk2Ls0ShlCymQnvktRIvf8QGorwTJOHFC2gdzKrc/B+OMKTvx4\r\ng27fKCRZfrp9jQxQQRysg840gN9osjZB3XNWGOWSvCnGZ3TQKjSfAqce1WfA\r\nGZLCr4ppxxe5ASwHHvQUWFjW/EBixy/BsPA8011V/J7XWJdstPEICy7WNtUH\r\nEweQBULyP9fuNDQvIHJYBZQ1Zvtx6IPdqbCnVQ9jO6tnvRCYa2Sr5KOt6xTm\r\n5teOAE7UKo0jfUwLZD6z+2L5/CV/REbxIeOg49XRIbzYulV/oVJ2BsMCRvVQ\r\nYsfSC+GAPNt5nChF/sg/mhc/KCkauc0awiSHHowfKorBBjCq5MGfqEsyKRuc\r\nzpAHtG1aNGiazojHbBb88pD9wWgBxl2BzY50W7xZ23PzPIbyNH1QfxY/OXoY\r\n0lT3Lt+5zAMv2gTQuFguPGak7998NtakdARTWv91fZYFBoV6X0l8lHNfEPI9\r\negkAgXSKnS1w2mKWAqyllJN+ebHNQA8N5yA=\r\n=8RTa\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_3.0.5_1654670655140_0.8880126667853607"},"_hasShrinkwrap":false},"3.0.41":{"name":"caibird","version":"3.0.41","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.13.15","@babel/types":"^7.13.14","@types/ali-oss":"^6.0.8","@types/babel__core":"^7.1.14","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.0","@types/find":"^0.2.1","@types/gulp":"^4.0.8","@types/gulp-babel":"^6.1.29","@types/gulp-rename":"^2.0.0","@types/gulp-sourcemaps":"0.0.34","@types/gulp-strip-comments":"^2.5.1","@types/history":"^4.7.8","@types/jaeger-client":"^3.18.0","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.1","@types/koa-router":"^7.4.2","@types/koa-send":"^4.1.2","@types/koa-session":"^5.10.3","@types/koa-webpack":"^6.0.3","@types/lodash":"^4.14.168","@types/node":"^14.14.41","@types/nodemon":"^1.19.0","@types/platform":"^1.3.3","@types/react":"^17.0.3","@types/react-dom":"^17.0.3","@types/script-ext-html-webpack-plugin":"^2.1.2","@types/sequelize":"^4.28.9","@types/shelljs":"^0.8.8","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.0","@types/webpack-bundle-analyzer":"^4.4.0","@types/webpack-dev-server":"^3.11.3","@types/webpack-hot-middleware":"^2.25.4","@types/xml2js":"^0.4.8","@typescript-eslint/eslint-plugin":"^5.25.0","@typescript-eslint/eslint-plugin-tslint":"^5.25.0","@typescript-eslint/parser":"^5.25.0","ali-oss":"^6.15.2","axios":"^0.21.1","cls-hooked":"^4.2.2","compare-versions":"^3.6.0","cssnano":"^4.1.11","eslint":"^8.15.0","eslint-formatter-codeframe":"^7.32.1","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.26.0","eslint-plugin-jsdoc":"^39.3.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.30.0","eslint-plugin-unicorn":"^42.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","gulp-strip-comments":"^2.5.2","history":"^4.10.1","html-entities":"^2.3.2","html-webpack-plugin":"^4.5.2","husky":"^6.0.0","jaeger-client":"^3.18.1","json-stringify-safe":"^5.0.1","koa":"^2.13.1","koa-body":"^4.2.0","koa-router":"^10.0.0","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^7.0.1","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.3.0","moment":"^2.29.1","mysql2":"^2.2.5","nodemon":"^2.0.7","platform":"^1.3.6","react":"^17.0.2","react-dom":"^17.0.2","react-jss":"^10.6.0","redux":"^4.0.5","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.4","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^1.6.7","tsconfig-paths-webpack-plugin":"^3.5.1","tslib":"^2.4.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.6.4","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.4.1","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.2","webpack-hot-middleware":"^2.25.0","xml2js":"^0.4.23"},"gitHead":"8818485a4ad52ac2318bb2d63b53627a292ec806","_id":"caibird@3.0.41","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-YeDlB0W9sTC5sE8vFgtp9B88j2tIlo8QNBGJy74VZ1EzcG1cItrBwpFgVf/zKLsXTpT9+gUDHgMri0dMS4nNHw==","shasum":"fec5d11bbb261a91f6dfcf5d0ebe0229523f256f","tarball":"https://registry.npmjs.org/caibird/-/caibird-3.0.41.tgz","fileCount":217,"unpackedSize":337131,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIERzlGUmnn7gdI/BCUwa5QwyCTd7qz2MGN1vLIMI/Q2wAiAUcrezEvMcI7FOLvk86q4/X2c+NjGl5ZMMeQ7NHmYGjw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiow+oACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpkjA//Ze8evCNxecStXYckkCpamVPaSJykr3HOcDbSmEnvKbxrjEI9\r\n3KFy5Msg7d23cQHcLkx2GkMYZHpJN2eWMx4PNMoLG3I3nd1wAM3XVWDO43w+\r\nozb9zrBoJncOGN3LE80ax3hXjl4ysxxVdA0JJYJcfmknaYg8igVQj21ZSsrZ\r\nMJSkztwUMw426k4XqONcgxWfLauzt+hLvXXWYxznVgA1h35oDHWZXUf0aTru\r\nTNPblfd+sr8MLigPIffD32ckBGhdwnuBtYDcMmjVrD77tf18/7rOa7VXzrjc\r\nEwk9z911jeC9OmfV/VuJWaufuIBGVf/7JUP/60KQdNU3a3H9zHQaiut3sieH\r\nne81hGtjrzDu0lTCgFPS7lSWpLnE96qrrrTLbPzPQ/dtEODjkW+0YV1g3XTJ\r\nTtIsbTqwi15xMncoQ5/L2xP4XmavXD2yP92LkPInbbxURefmMwL8hi83nwDG\r\nDbJYTWgJXq4BBrgYBMgEiUe9CBUKxvd8wa/+HeA2EsATdkIRORFVlt+Wj8bv\r\nhKsAm4NeqrTnDD4wN7kd7Jw0Yw8w6XtD+CdSk0NAWzV2OgqEasVRPQ5J9ZDI\r\nJoAim7wnCb6KRQv2sd2KW5TE77k0Mr///RMSrxph8TX5R6U893Yf80J2mTpx\r\nw21qMKM/eJ1OmWVSoLsdiZuHoRUg9SduXpM=\r\n=tRta\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_3.0.41_1654853544018_0.3502218276250588"},"_hasShrinkwrap":false},"3.0.6":{"name":"caibird","version":"3.0.6","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.18.2","@babel/types":"^7.18.4","@types/ali-oss":"^6.16.3","@types/babel__core":"^7.1.19","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.1","@types/find":"^0.2.1","@types/gulp":"^4.0.9","@types/gulp-babel":"^6.1.30","@types/gulp-rename":"^2.0.1","@types/gulp-sourcemaps":"0.0.35","@types/gulp-strip-comments":"^2.5.1","@types/jaeger-client":"^3.18.3","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.4","@types/koa-router":"^7.4.4","@types/koa-send":"^4.1.3","@types/koa-session":"^5.10.6","@types/koa-webpack":"^6.0.5","@types/lodash":"^4.14.182","@types/node":"^14.18.21","@types/nodemon":"^1.19.1","@types/platform":"^1.3.4","@types/react":"^18.0.12","@types/react-dom":"^18.0.5","@types/script-ext-html-webpack-plugin":"^2.1.3","@types/sequelize":"^4.28.13","@types/shelljs":"^0.8.11","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.4","@types/webpack-bundle-analyzer":"^4.4.1","@types/webpack-dev-server":"^3.11.6","@types/webpack-hot-middleware":"^2.25.6","@types/xml2js":"^0.4.11","@typescript-eslint/eslint-plugin":"^5.27.1","@typescript-eslint/eslint-plugin-tslint":"^5.27.1","@typescript-eslint/parser":"^5.27.1","ali-oss":"^6.17.1","axios":"^0.27.2","cls-hooked":"^4.2.2","compare-versions":"^4.1.3","cssnano":"^4.1.11","eslint":"^8.17.0","eslint-formatter-codeframe":"^7.32.1","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.26.0","eslint-plugin-jsdoc":"^39.3.2","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.30.0","eslint-plugin-unicorn":"^42.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","gulp-strip-comments":"^2.5.2","html-entities":"^2.3.3","html-webpack-plugin":"^4.5.2","husky":"^8.0.1","jaeger-client":"^3.19.0","json-stringify-safe":"^5.0.1","koa":"^2.13.4","koa-body":"^5.0.0","koa-router":"^10.1.1","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^8.0.0","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.5.2","moment":"^2.29.3","mysql2":"^2.3.3","nodemon":"^2.0.16","platform":"^1.3.6","react":"^18.1.0","react-dom":"^18.1.0","react-jss":"^10.9.0","redux":"^4.2.0","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.5","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^2.0.0","tsconfig-paths-webpack-plugin":"^3.5.2","tslib":"^2.4.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.7.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.5.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.3","webpack-hot-middleware":"^2.25.1","xml2js":"^0.4.23"},"gitHead":"e51dc00ef7347c0c461932c433f735af8315be78","_id":"caibird@3.0.6","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-uc48vz4k+57WX1I/HCFRp/q4/4b9g6rNFxm+EnUXBswgvmA0e838MvZGcutWryvgYfg1FDALKSBhWfsUslZlbw==","shasum":"f43f1fc71f9e892d6174a3834fe4fde46289826c","tarball":"https://registry.npmjs.org/caibird/-/caibird-3.0.6.tgz","fileCount":217,"unpackedSize":336100,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsBOX7PmisRRWX97M2yxlpCNLgUCj42gD3Qn1tIo9VuQIgQ+5pDjJiNvQjyHg3TGm3XXeZHBtOGzs17HxIB6uWHVs="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiqFdGACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrvjBAAowpqgam+BWWSkjpNZtkRHxSIBvgvAW5yxaogOZO9WHmJXoNc\r\nvCc5HXaojBHqBFLpGKwttUy0X0zEGFtJGx3w0mgRsqZfz51gJPVJmBvhH7t4\r\nhdl56M+/Ni9vcGjKDeeHCSfB/SmrNvF1DmdGgeu/FE7whkChfV1F2OaxANlW\r\n12uL7Bw89v7uC8smipMxuB9fXRh6FR2KB5jybdF6d6WLTnliJ3hYgw+fi9sf\r\nz01c3tyiW8epw/xoy8jtwxw6O5qfbPwJruH8XcuZU6E5o7Xh9VdP1Np1It3o\r\nMg4aRtL8AfeR3Fh5wsB5lYs906gguqzanLVxna/2Z0vPLRv82ov57VfQ1kOM\r\nCXXiNWrsTi2qmwt/PT2wR96O+FlGt2HeDFEPx0zCg1pW3h88USrLz5h/THZ9\r\nneLm6iRC7fidCtsDcOayigL5stUgv6T5CmN5B1Thg30HVDU4N816nHAoTfRG\r\nlRMxtKTIOI7+HyfFYAiMTXWncYncM+uA8lCbGdK2XuOf4ULVJMsX3MXk6iay\r\nUKktF3x++gpwGDsqNZ9PIXQv0dt3rZ1LBITF1ysy5iXOn6brKS1e/Uslk4Xc\r\nOEeODAeu+rGhyLF6YDqpO/JQWQ76NtW8aWkETzyDydB5dR++dzqAy8rQZRfG\r\nUrxuhbz5MsoG2O3SDI/nIEksW1VVDdaddN8=\r\n=EzBB\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_3.0.6_1655199558140_0.9447314030027198"},"_hasShrinkwrap":false},"3.1.0":{"name":"caibird","version":"3.1.0","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.18.2","@babel/types":"^7.18.4","@koa/router":"^10.1.1","@types/ali-oss":"^6.16.3","@types/babel__core":"^7.1.19","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.1","@types/find":"^0.2.1","@types/gulp":"^4.0.9","@types/gulp-babel":"^6.1.30","@types/gulp-rename":"^2.0.1","@types/gulp-sourcemaps":"0.0.35","@types/gulp-strip-comments":"^2.5.1","@types/jaeger-client":"^3.18.3","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.4","@types/koa-send":"^4.1.3","@types/koa-session":"^5.10.6","@types/koa-webpack":"^6.0.5","@types/koa__router":"^8.0.11","@types/lodash":"^4.14.182","@types/node":"^14.18.21","@types/nodemon":"^1.19.1","@types/platform":"^1.3.4","@types/react":"^18.0.12","@types/react-dom":"^18.0.5","@types/script-ext-html-webpack-plugin":"^2.1.3","@types/sequelize":"^4.28.13","@types/shelljs":"^0.8.11","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.4","@types/webpack-bundle-analyzer":"^4.4.1","@types/webpack-dev-server":"^3.11.6","@types/webpack-hot-middleware":"^2.25.6","@types/xml2js":"^0.4.11","@typescript-eslint/eslint-plugin":"^5.27.1","@typescript-eslint/eslint-plugin-tslint":"^5.27.1","@typescript-eslint/parser":"^5.27.1","ali-oss":"^6.17.1","axios":"^0.27.2","cls-hooked":"^4.2.2","compare-versions":"^4.1.3","cssnano":"^4.1.11","eslint":"^8.17.0","eslint-formatter-codeframe":"^7.32.1","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.26.0","eslint-plugin-jsdoc":"^39.3.2","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.30.0","eslint-plugin-unicorn":"^42.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","gulp-strip-comments":"^2.5.2","html-entities":"^2.3.3","html-webpack-plugin":"^4.5.2","husky":"^8.0.1","jaeger-client":"^3.19.0","json-stringify-safe":"^5.0.1","koa":"^2.13.4","koa-body":"^5.0.0","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^8.0.0","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.5.2","moment":"^2.29.3","mysql2":"^2.3.3","nodemon":"^2.0.16","platform":"^1.3.6","react":"^18.1.0","react-dom":"^18.1.0","react-jss":"^10.9.0","redux":"^4.2.0","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.5","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^2.0.0","tsconfig-paths-webpack-plugin":"^3.5.2","tslib":"^2.4.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.7.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.5.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.3","webpack-hot-middleware":"^2.25.1","xml2js":"^0.4.23"},"gitHead":"c8925d040a28d3598aefcfa96d89a40ecfdc7b57","_id":"caibird@3.1.0","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-F0U7Np7c66wII5sp2sD9kF7ecCfeL4qKzxg777NjDSy3RfZMU4pPxwbLw+Z27YJNVevVMaJxUiiUHrmOxSVMug==","shasum":"44144e99ba11027d4ab5a6bb538b7fdad50c1a0d","tarball":"https://registry.npmjs.org/caibird/-/caibird-3.1.0.tgz","fileCount":217,"unpackedSize":336104,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBTJLfoA5GdO93YlmaEAYp+eaMzAQiN8vNhUPyw/0iE0AiEAi3megc68/gpMqH0e7/avcVkX2oy8d1ceo3fB0Ml3TRQ="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJisFJZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqAuw//fTFAH6STmTcsJ0SUTRcMuOk+SSOFT7/GFP1kD+3LWVUiZAB9\r\nrpx3I+oy2JCmFt7xVIBdpMx7FDQDDPcFXmJIvdf2shoWEHtsbDv8dH1M8kEt\r\nE3y9XZmhYpD2uxm9djYjqWMh2U4zkgTdsINU9Xs2PqcOJjUtvdnfuyaxtUJg\r\nsift+FHCy26ab9G8E5/jHcaKZ/GubL80kE33uuDXvLoaNLjDcj8lOTB9C2ge\r\n5UHKA70q7XJN/7Ad2flzeufyO8BOkSmWF5Y7trw2YK6Abq1MJKExugZfHML1\r\nI+xYo+IZhxGWLqCRu8Hf33wjmgss+9Zx1kNliLdVg+m58kgKKcsKaHE8LSgW\r\ncrV7KTcU89A22gHBpsNeIvsrx3l3D+FfG8rC4bCwY3L+/o2G21YzF6ryFuOQ\r\nITb2PSguF5Nqr7lnPA1JgBTPXnR9+fvo1Nnlpbl7spvtDs5Y4ThQs/UfY82Q\r\nBckJGM6mT2GfI1CC7hOE9Y0ulFEPajSogjRkgQxsBVZVR6MCpDW8U5Z/oFBs\r\nVgxXkHJIlKUfSMv7GoAt39h49onnHsrVkJFz15s19/3ByystK3xKw4wfah8p\r\n3POkmwtI1Rue09dQrCDt7Or8E+Cc1Q6T+YOM7TxAk6tV+ujDtiZe7ym5qBQh\r\nk4LpQjou/JAGQ7rQh86HzoBgVwXpW2Hu87s=\r\n=hQvT\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_3.1.0_1655722585017_0.7454041950865486"},"_hasShrinkwrap":false},"3.1.1":{"name":"caibird","version":"3.1.1","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.18.2","@babel/types":"^7.18.4","@koa/router":"^10.1.1","@types/ali-oss":"^6.16.3","@types/babel__core":"^7.1.19","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.1","@types/find":"^0.2.1","@types/gulp":"^4.0.9","@types/gulp-babel":"^6.1.30","@types/gulp-rename":"^2.0.1","@types/gulp-sourcemaps":"0.0.35","@types/gulp-strip-comments":"^2.5.1","@types/jaeger-client":"^3.18.3","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.4","@types/koa-send":"^4.1.3","@types/koa-session":"^5.10.6","@types/koa-webpack":"^6.0.5","@types/koa__router":"^8.0.11","@types/lodash":"^4.14.182","@types/node":"^14.18.21","@types/nodemon":"^1.19.1","@types/platform":"^1.3.4","@types/react":"^18.0.12","@types/react-dom":"^18.0.5","@types/script-ext-html-webpack-plugin":"^2.1.3","@types/sequelize":"^4.28.13","@types/shelljs":"^0.8.11","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.4","@types/webpack-bundle-analyzer":"^4.4.1","@types/webpack-dev-server":"^3.11.6","@types/webpack-hot-middleware":"^2.25.6","@types/xml2js":"^0.4.11","@typescript-eslint/eslint-plugin":"^5.27.1","@typescript-eslint/eslint-plugin-tslint":"^5.27.1","@typescript-eslint/parser":"^5.27.1","ali-oss":"^6.17.1","axios":"^0.27.2","cls-hooked":"^4.2.2","compare-versions":"^4.1.3","cssnano":"^4.1.11","eslint":"^8.17.0","eslint-formatter-codeframe":"^7.32.1","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.26.0","eslint-plugin-jsdoc":"^39.3.2","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.30.0","eslint-plugin-unicorn":"^42.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-changed-in-place":"^2.3.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","gulp-strip-comments":"^2.5.2","html-entities":"^2.3.3","html-webpack-plugin":"^4.5.2","husky":"^8.0.1","jaeger-client":"^3.19.0","json-stringify-safe":"^5.0.1","koa":"^2.13.4","koa-body":"^5.0.0","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^8.0.0","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.5.2","moment":"^2.29.3","mysql2":"^2.3.3","nodemon":"^2.0.16","platform":"^1.3.6","react":"^18.1.0","react-dom":"^18.1.0","react-jss":"^10.9.0","redux":"^4.2.0","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.5","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^2.0.0","tsconfig-paths-webpack-plugin":"^3.5.2","tslib":"^2.4.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.7.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.5.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.3","webpack-hot-middleware":"^2.25.1","xml2js":"^0.4.23"},"gitHead":"30bc59aacda18600636d9f2e2d67ea7311597e0e","_id":"caibird@3.1.1","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-KGAesxZDEXfoClVRgL86MjKM1gB1MmNOUgBVcTIY40+x2kwldGFZdCRYQ7fKVn7K4t3h+LwmV3sBjEL0zkAa8A==","shasum":"f7c8fabe670bb144095945cbccaf893bf4090176","tarball":"https://registry.npmjs.org/caibird/-/caibird-3.1.1.tgz","fileCount":218,"unpackedSize":335889,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFU39cKs9ViQltaenB2gDH+huWz5ffzKs/QYLXr66PDAAiATZVHy4FDJ480qDU0HxhR0qffDSuJwvQVEyu9s43DTJA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJitC+1ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq6zxAAo+KZqpu7Xwsoi4Lx21oNQpquNA2+ose+XcKJ1X5+2iXcCJsq\r\nVAuZB68ZXKMcKK5yN5TTRPqRjGoI2QqO0w8OFhBi2AgZvhXSvRqSwZNxFl/9\r\n/JtxHaAWoNH89YcpfPhYvDjXZ3SmTtlMpnylfAb6xbvfM9hZy969vMlY1yiU\r\nRLh3zsd1zmoc+mfGmnBOGNjbve5CRjXqSZ23oggAtDFWOjO4p+5KhM6uj1t2\r\n3Fq+kSApxKtHWmDYPpuAaOtFkJk6sbvqYhyvlYojkfRZ7Mgr5gxwtbvqEpf9\r\nJjpspWjXzBpUJWWoXt1I4b9ASlELOAJ+HIAgf3BO3y/NtpTY5raMSdEvIDoB\r\nAQLpbDdP3TVMDqGqBj31VLSvk2sSkkaPEIFfygXXdT3J6Oa7iNZqiQW62pIE\r\nYExp1VInAzSbdMkeJA9P0NS9J8QMslOOX12McC7niZc1pIF5p6op4uLhOqDK\r\nxiye/jhfGb6vF4BbDby+BAlLOZUbhnEZ7WAduq2bsR6sfmEYoJ3eZOsGKvuh\r\n5PqeVJ45LvPNJnp3NVPWUExd6y7wVtOwOPuO8qIybsAkD5BAG/ZMduejGeId\r\n6wbn5xawViMkjmiw+ds2L+aVjM3f5RboZBD/yi7qpv2KRyuoBkOydef4xZA+\r\nuyHwLUUP8UNZegZXtPHr8zQdU2RGkFGn6xQ=\r\n=JYNA\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_3.1.1_1655975861239_0.464586144209975"},"_hasShrinkwrap":false},"3.1.2":{"name":"caibird","version":"3.1.2","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.18.2","@babel/types":"^7.18.4","@koa/router":"^10.1.1","@types/ali-oss":"^6.16.3","@types/babel__core":"^7.1.19","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.1","@types/find":"^0.2.1","@types/gulp":"^4.0.9","@types/gulp-babel":"^6.1.30","@types/gulp-rename":"^2.0.1","@types/gulp-sourcemaps":"0.0.35","@types/gulp-strip-comments":"^2.5.1","@types/jaeger-client":"^3.18.3","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.4","@types/koa-send":"^4.1.3","@types/koa-session":"^5.10.6","@types/koa-webpack":"^6.0.5","@types/koa__router":"^8.0.11","@types/lodash":"^4.14.182","@types/node":"^14.18.21","@types/nodemon":"^1.19.1","@types/platform":"^1.3.4","@types/react":"^18.0.12","@types/react-dom":"^18.0.5","@types/script-ext-html-webpack-plugin":"^2.1.3","@types/sequelize":"^4.28.13","@types/shelljs":"^0.8.11","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.4","@types/webpack-bundle-analyzer":"^4.4.1","@types/webpack-dev-server":"^3.11.6","@types/webpack-hot-middleware":"^2.25.6","@types/xml2js":"^0.4.11","@typescript-eslint/eslint-plugin":"^5.27.1","@typescript-eslint/eslint-plugin-tslint":"^5.27.1","@typescript-eslint/parser":"^5.27.1","ali-oss":"^6.17.1","axios":"^0.27.2","cls-hooked":"^4.2.2","compare-versions":"^4.1.3","cssnano":"^4.1.11","eslint":"^8.17.0","eslint-formatter-codeframe":"^7.32.1","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.26.0","eslint-plugin-jsdoc":"^39.3.2","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.30.0","eslint-plugin-unicorn":"^42.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-changed-in-place":"^2.3.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","gulp-strip-comments":"^2.5.2","html-entities":"^2.3.3","html-webpack-plugin":"^4.5.2","husky":"^8.0.1","jaeger-client":"^3.19.0","json-stringify-safe":"^5.0.1","koa":"^2.13.4","koa-body":"^5.0.0","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^8.0.0","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.5.2","moment":"^2.29.3","mysql2":"^2.3.3","nodemon":"^2.0.16","platform":"^1.3.6","react":"^18.1.0","react-dom":"^18.1.0","react-jss":"^10.9.0","redux":"^4.2.0","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.5","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^2.0.0","tsconfig-paths-webpack-plugin":"^3.5.2","tslib":"^2.4.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.7.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.5.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.3","webpack-hot-middleware":"^2.25.1","xml2js":"^0.4.23"},"gitHead":"30bc59aacda18600636d9f2e2d67ea7311597e0e","_id":"caibird@3.1.2","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-O6Tp7FNR+YXul7TAr02OhAxC11WCMYDzWdr/egixpiUDVShvRB4sX2WDQpWi01nP0LLP8ZF2g/0AePsmY3KOwg==","shasum":"6a55938bb5e4bae88a11a3968caf41a135223261","tarball":"https://registry.npmjs.org/caibird/-/caibird-3.1.2.tgz","fileCount":218,"unpackedSize":335889,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD0qPH6ohUnd8cSTLFNRFPrMsPabiy5GezNbiU1BSHJVgIhANJs/B2hWq6RgvuX1VOO3MIQKN2P9IOIKparQMczXBRU"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiumcZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpT9g//c3Pn8cN8JdnmGoYpgOEJqqD+Un65sPgm+aO+tRGVnpLJgj0C\r\nJEWi3Od34DYsyMb/TY5l6nqp5fWP9ZFcjNVO8KSaTlHGsuYGByYrE4Dn4SUx\r\nmD7l90M31dHUf3+94e3GQnKs30pcQ1lU2EcrSa0jkXct16fx+up48wNcOJMR\r\nnzPYj7h19bSzvustxsRPunpwLEyWgji6hXT/a9i0Un2LGQk7P0LhT+uMMdUY\r\nHDSceWYYyLTqMyp/8xBqvBj0qoFZYTulUChF8uzhDZDnl+45bzg2Uybjr2oE\r\nnM6Q7IWk8ywmynM1IsFUFijE8oi6uhq21+DScOtV34Y6bRi5UxL7KPKpi2f+\r\nrB7aFkfPdDq9VdJHP4BXlH6G+SQfAgiJxmdxzGFrkARvwyYvKfUaiNwlFTPD\r\n85Fe7TmlpDCSolfF0GdGRYA9zYBLZIvqJjzBa1uKn7p1/qdxJ45QGTmguMJn\r\ndO/NmcojUBxFOsAhiC/OeRhUPWHUqx2wxBt6H6zRXrjadbF2md+93sTllfjc\r\nBMP6YLX/l6wIl3FNS/S411FT23KRP5o88GEOFPtBOormh4EB+1DBKZ2InVBO\r\nRr+VYW0jXNNOifNRmE5jvLDcZzOQaZkWfSgsTr5SQ5gad86ySGmBxON9SqB8\r\n1/Rx5okDMVEUJz7FIG8+Qo4ONa03iKHTpWY=\r\n=zJ9W\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_3.1.2_1656383257423_0.9917240426417986"},"_hasShrinkwrap":false},"3.1.3":{"name":"caibird","version":"3.1.3","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.18.2","@babel/types":"^7.18.4","@koa/router":"^10.1.1","@types/ali-oss":"^6.16.3","@types/babel__core":"^7.1.19","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.1","@types/find":"^0.2.1","@types/gulp":"^4.0.9","@types/gulp-babel":"^6.1.30","@types/gulp-rename":"^2.0.1","@types/gulp-sourcemaps":"0.0.35","@types/gulp-strip-comments":"^2.5.1","@types/jaeger-client":"^3.18.3","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.4","@types/koa-send":"^4.1.3","@types/koa-session":"^5.10.6","@types/koa-webpack":"^6.0.5","@types/koa__router":"^8.0.11","@types/lodash":"^4.14.182","@types/node":"^14.18.21","@types/nodemon":"^1.19.1","@types/platform":"^1.3.4","@types/react":"^18.0.12","@types/react-dom":"^18.0.5","@types/script-ext-html-webpack-plugin":"^2.1.3","@types/sequelize":"^4.28.13","@types/shelljs":"^0.8.11","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.4","@types/webpack-bundle-analyzer":"^4.4.1","@types/webpack-dev-server":"^3.11.6","@types/webpack-hot-middleware":"^2.25.6","@types/xml2js":"^0.4.11","@typescript-eslint/eslint-plugin":"^5.27.1","@typescript-eslint/eslint-plugin-tslint":"^5.27.1","@typescript-eslint/parser":"^5.27.1","ali-oss":"^6.17.1","axios":"^0.27.2","cls-hooked":"^4.2.2","compare-versions":"^4.1.3","cssnano":"^4.1.11","eslint":"^8.17.0","eslint-formatter-codeframe":"^7.32.1","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.26.0","eslint-plugin-jsdoc":"^39.3.2","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.30.0","eslint-plugin-unicorn":"^42.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-changed-in-place":"^2.3.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","gulp-strip-comments":"^2.5.2","html-entities":"^2.3.3","html-webpack-plugin":"^4.5.2","husky":"^8.0.1","jaeger-client":"^3.19.0","json-stringify-safe":"^5.0.1","koa":"^2.13.4","koa-body":"^5.0.0","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^8.0.0","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.5.2","moment":"^2.29.3","mysql2":"^2.3.3","nodemon":"^2.0.16","platform":"^1.3.6","react":"^18.1.0","react-dom":"^18.1.0","react-jss":"^10.9.0","redux":"^4.2.0","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.5","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^2.0.0","tsconfig-paths-webpack-plugin":"^3.5.2","tslib":"^2.4.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.7.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.5.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.3","webpack-hot-middleware":"^2.25.1","xml2js":"^0.4.23"},"gitHead":"35ee987608d601e9fdb00c91fa30028bca992767","_id":"caibird@3.1.3","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-rCoYD0QvqCKnzKkz5St+c/iTqObVKLd/cPUeoatyWaTcTLwgkFGK097pbx8pk1Wd/InXgSTQ64St1dknsc8Tpg==","shasum":"848b1112a6c669bf7c75d326a85cf103a1f6d17a","tarball":"https://registry.npmjs.org/caibird/-/caibird-3.1.3.tgz","fileCount":218,"unpackedSize":336104,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDL+J9stoMDhTql78Ht1nkL9ttUgl6myzaUhRoJ13gdJAIgDShh/y3uUIdt1xCHNth9bRik4EApWVrHbXU3Fr8euP0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiusZlACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr9NA//TITBLZiF/Snb7N+abKlNswQVQ5MvrKTyYyPs0u8alUH09iFf\r\nkvTkGqaTXVbLDseEM9iYH9NJ+b1Ayub1syIR+hx3xIt+mrj4hoQQjPAj02Hi\r\n2R71AQJ4dNaDq5gxWfjcnFb6SzcSCZ+lJ7hGOv2kGmIaooOdw2L7qFYdOU0f\r\n4msXwjs67RYP0G0cJoOXaESziQD8Xa62WzXyv3tVPOMWTp1h+5ZyYqER8TEt\r\nD8iHHxZYd255dvk+t0qXgb/41mW3ARGm4UjqgymUW0naFujb3Nnng5tL4WpS\r\nUZc9DafdSr/hijBvERhacqioryyPs6Jdb180pxDcCY5Ndjx5YRWa26P/X0yA\r\nFtV5z6UxDi9Hy2g5Yikf/iSKPSLculwslZgV3bfkW331LIYKn3rwfIIA83be\r\nHKFec35XtTR5d8B61JF+pc93gMNl/sl7WfyZkUclZyj85RrcCqSXMnD2BngR\r\nnGGhLdXLALVmJ1TpWYkLlEWN94b8lm3F+RAxXBR1iuntNzojmluwW7vJ6iIZ\r\nc0ID94alnpZhMTo/s09xKR5fC0vQnpCZ9gfNZryDNmPRN/kugjFQ/qR9MKer\r\nSoW4v1zDbAjnwUzx0D4SCvXkbtOlOSOC2zmH0T8fB8mUUXghbTH5s0od70mX\r\nW11Q1ZHeklYD4MACl81qKLFZ8s+TtwkLmDs=\r\n=SKNe\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_3.1.3_1656407653229_0.543458062930952"},"_hasShrinkwrap":false},"3.1.4":{"name":"caibird","version":"3.1.4","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.18.2","@babel/types":"^7.18.4","@koa/router":"^10.1.1","@types/ali-oss":"^6.16.3","@types/babel__core":"^7.1.19","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.1","@types/find":"^0.2.1","@types/gulp":"^4.0.9","@types/gulp-babel":"^6.1.30","@types/gulp-rename":"^2.0.1","@types/gulp-sourcemaps":"0.0.35","@types/gulp-strip-comments":"^2.5.1","@types/jaeger-client":"^3.18.3","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.4","@types/koa-send":"^4.1.3","@types/koa-session":"^5.10.6","@types/koa-webpack":"^6.0.5","@types/koa__router":"^8.0.11","@types/lodash":"^4.14.182","@types/node":"^14.18.21","@types/nodemon":"^1.19.1","@types/platform":"^1.3.4","@types/react":"^18.0.12","@types/react-dom":"^18.0.5","@types/script-ext-html-webpack-plugin":"^2.1.3","@types/sequelize":"^4.28.13","@types/shelljs":"^0.8.11","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.4","@types/webpack-bundle-analyzer":"^4.4.1","@types/webpack-dev-server":"^3.11.6","@types/webpack-hot-middleware":"^2.25.6","@types/xml2js":"^0.4.11","@typescript-eslint/eslint-plugin":"^5.27.1","@typescript-eslint/eslint-plugin-tslint":"^5.27.1","@typescript-eslint/parser":"^5.27.1","ali-oss":"^6.17.1","axios":"^0.27.2","cls-hooked":"^4.2.2","compare-versions":"^4.1.3","cssnano":"^4.1.11","eslint":"^8.17.0","eslint-formatter-codeframe":"^7.32.1","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.26.0","eslint-plugin-jsdoc":"^39.3.2","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.30.0","eslint-plugin-unicorn":"^42.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-changed-in-place":"^2.3.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","gulp-strip-comments":"^2.5.2","html-entities":"^2.3.3","html-webpack-plugin":"^4.5.2","husky":"^8.0.1","jaeger-client":"^3.19.0","json-stringify-safe":"^5.0.1","koa":"^2.13.4","koa-body":"^5.0.0","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^8.0.0","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.5.2","moment":"^2.29.3","mysql2":"^2.3.3","nodemon":"^2.0.16","platform":"^1.3.6","react":"^18.1.0","react-dom":"^18.1.0","react-jss":"^10.9.0","redux":"^4.2.0","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.5","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^2.0.0","tsconfig-paths-webpack-plugin":"^3.5.2","tslib":"^2.4.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.7.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.5.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.3","webpack-hot-middleware":"^2.25.1","xml2js":"^0.4.23"},"gitHead":"0d76c2b8fddd5f4443afe311819da1cd0508f7a2","_id":"caibird@3.1.4","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-YU3jt9LLB1a2q5q7ZL6P/NXoOBG9qkZDxyUnWeHK1sbeozxrOIZ7j9V4XXrCXFQP4a0p+CO9CPC11pJQsYfdHw==","shasum":"af2e4487818de87691b3cd74b22791c4248df2ec","tarball":"https://registry.npmjs.org/caibird/-/caibird-3.1.4.tgz","fileCount":218,"unpackedSize":335952,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCUNOoOwyF/PQpAbHKNG6Eq9qgwtl0l5kuxCkd5t6+pIgIgA+/RzYw0NDtZt/CWbIBhxV2ZEdfORFc75TTi4gWtSz0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiuuCZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrEjg//UTM7HjhW99NbPnDtw2Gfx8fVO69UE7BzS/IX6CZfb3R2UWwH\r\ntSvpUZtdSr32mh1wwlpZq+w3dxkD1Cu4EQDKvmPCOk/Ia97PzUyLdKMUbVlV\r\nE6MAW3ado5Y6YqyDK8KZpRaGAUgWwF5XUtNwBvFLzpvubDrCyT2MiU/WIUTb\r\nHof/wvjXcFcBDk74Eq3VlMvo4ghce+SRiBbOGx54kgnrK0dbC2hfchI10hqQ\r\ngRia+2/UflQZhzu49grQmX0yQhq2vwkwwsOmvph45oumVSdYpaN3cv/n7N3j\r\nzB5oG8PXJs2PY/WQalINjbTuLlNKQ4ZyxqfchMfvswWMoyDXWLLHQ64mb64J\r\nNYBATLGODU4hG/GzS1crpAJaFJKSUHBgBiVcfMDpQOjAOpeW4polrkVozSyt\r\nGa4V3gD0suHYn8RWADDslXAlnEMm8EXT1F+763APqDQCB7Ujk3F9NQkrg/rV\r\nhHvZIbyZDK4MNXpakBtOzXUFzBn6dgDRj7XoPlLZIJKV4HtgmVTDHUGNE0to\r\nsC4EcsdPZ7lNBVc2qVVf/crZDWPjyWS2TNWGzzaCkrNsplUFbDmQq/g0GkJ7\r\nO9kpy3f9DPUMTLq1cLgUtj9e09xPq+i5Aq+8RHSOR25/9GmjAo/NRvweXU4e\r\nfKOJt49pW3y5feEbBAFbjBvBVrOtk3g/oNA=\r\n=wEUB\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_3.1.4_1656414361770_0.5491490632390159"},"_hasShrinkwrap":false},"3.1.5":{"name":"caibird","version":"3.1.5","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint/cache &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint/cache && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"rimraf .tsc && tsc -v && tsc -p src/tsconfig.json","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.18.2","@babel/types":"^7.18.4","@koa/router":"^10.1.1","@types/ali-oss":"^6.16.3","@types/babel__core":"^7.1.19","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.1","@types/find":"^0.2.1","@types/gulp":"^4.0.9","@types/gulp-babel":"^6.1.30","@types/gulp-rename":"^2.0.1","@types/gulp-sourcemaps":"0.0.35","@types/gulp-strip-comments":"^2.5.1","@types/jaeger-client":"^3.18.3","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.4","@types/koa-send":"^4.1.3","@types/koa-session":"^5.10.6","@types/koa-webpack":"^6.0.5","@types/koa__router":"^8.0.11","@types/lodash":"^4.14.182","@types/node":"^14.18.21","@types/nodemon":"^1.19.1","@types/platform":"^1.3.4","@types/react":"^18.0.12","@types/react-dom":"^18.0.5","@types/script-ext-html-webpack-plugin":"^2.1.3","@types/sequelize":"^4.28.13","@types/shelljs":"^0.8.11","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.4","@types/webpack-bundle-analyzer":"^4.4.1","@types/webpack-dev-server":"^3.11.6","@types/webpack-hot-middleware":"^2.25.6","@types/xml2js":"^0.4.11","@typescript-eslint/eslint-plugin":"^5.27.1","@typescript-eslint/eslint-plugin-tslint":"^5.27.1","@typescript-eslint/parser":"^5.27.1","ali-oss":"^6.17.1","axios":"^0.27.2","cls-hooked":"^4.2.2","compare-versions":"^4.1.3","cssnano":"^4.1.11","eslint":"^8.17.0","eslint-formatter-codeframe":"^7.32.1","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.26.0","eslint-plugin-jsdoc":"^39.3.2","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.30.0","eslint-plugin-unicorn":"^42.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-changed-in-place":"^2.3.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","gulp-strip-comments":"^2.5.2","html-entities":"^2.3.3","html-webpack-plugin":"^4.5.2","husky":"^8.0.1","jaeger-client":"^3.19.0","json-stringify-safe":"^5.0.1","koa":"^2.13.4","koa-body":"^5.0.0","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^8.0.0","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.5.2","moment":"^2.29.3","mysql2":"^2.3.3","nodemon":"^2.0.16","platform":"^1.3.6","react":"^18.1.0","react-dom":"^18.1.0","react-jss":"^10.9.0","redux":"^4.2.0","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.5","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^2.0.0","tsconfig-paths-webpack-plugin":"^3.5.2","tslib":"^2.4.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.7.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.5.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.3","webpack-hot-middleware":"^2.25.1","xml2js":"^0.4.23"},"gitHead":"0d76c2b8fddd5f4443afe311819da1cd0508f7a2","_id":"caibird@3.1.5","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-rgcZQ+3iFn0h1OpV3YPpQNp2sbiHIqPXmUn5IUnOqjQ9jFltq0skdRXk/Qj4HZ2gqgV9xu7oBfLDcvFvy5b8vw==","shasum":"281a8e3794441835cef6e88faff0c5357a084efb","tarball":"https://registry.npmjs.org/caibird/-/caibird-3.1.5.tgz","fileCount":218,"unpackedSize":335990,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCahDxcpgsC1JEyGA/ngCge8TJw2NZnL2sQ2UFD8lOomQIgHRj2HoS6vR0UhhrWDjr0LRdMHLndueo9jz0lVCyqiFU="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiu66PACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqiPg/8DcKINtgVDts8kopiB1P0tuNsfZnRPStXbulwAlUFjYlJ9UaG\r\nQHlw6fz/L3bJmOVFmFfg5wcnbBoy7HqlO5Yl3YL3ebTjdpmVKBZm2e2qYMHi\r\nT4jU6j4A+Kgd4y7QFibrjQmPTC4Cc28Z3LXECENMM3FLHKUVEUAPLQ4cNpYE\r\noJ49BZY8NcXD9bEBddYl4v069GvWr5RgSY8UJr4n1NZsmy2ZHxHPfrcJ/MFX\r\nSjj7cFMOT7yJ4LO6v90rCB33aJ88r7ohCEaja//dEKDuvcVGQRj51hNwI0h6\r\ncTHAcbIVetxsIiBShxCzbyulI8eDglXfGEEtB9K9WVnmdoYMQZPN1uS0eaP4\r\n3oCME+XNK/hXtnYAKEkcDHKIJbH41OeX7nPTtJzB12+EIIAibGlV7AdGiOPM\r\nxePvgnmfdewQspnpb73VrOpD1FQrDdVlEp6a0VgjSjf72xptDjtPsyjUKDET\r\nQ2aQzHwV/9ATD43X/awimUL7hjB65U+zp11GAcDvhiDSfcgJjE5nKaL3SUyg\r\n6NixbMH2kJfQuDwVNNStL2UOAXGvlqbNZxkNEdcOpXjE0GXRt+1k5xVTFhyN\r\nHyTw6Zjp00vJzhhNWQPBBtvjN1fQYo+5acQxtl/y/gMaXS4fOTh1aesIQI3D\r\nxbRr358rj+bLYQD6ADjqz9EeE8uRVSekh54=\r\n=sm7H\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_3.1.5_1656467087170_0.2549353326249364"},"_hasShrinkwrap":false},"3.2.0":{"name":"caibird","version":"3.2.0","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint & rimraf .tsc &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"tsc -v && tsc -p src/tsconfig.json","tsc-no-cache":"rimraf .tsc && npm run tsc","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc-no-cache"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.18.2","@babel/types":"^7.18.4","@koa/router":"^10.1.1","@types/ali-oss":"^6.16.3","@types/babel__core":"^7.1.19","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.1","@types/find":"^0.2.1","@types/gulp":"^4.0.9","@types/gulp-babel":"^6.1.30","@types/gulp-rename":"^2.0.1","@types/gulp-sourcemaps":"0.0.35","@types/gulp-strip-comments":"^2.5.1","@types/jaeger-client":"^3.18.3","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.4","@types/koa-send":"^4.1.3","@types/koa-session":"^5.10.6","@types/koa-webpack":"^6.0.5","@types/koa__router":"^8.0.11","@types/lodash":"^4.14.182","@types/node":"^14.18.21","@types/nodemon":"^1.19.1","@types/platform":"^1.3.4","@types/react":"^18.0.12","@types/react-dom":"^18.0.5","@types/script-ext-html-webpack-plugin":"^2.1.3","@types/sequelize":"^4.28.13","@types/shelljs":"^0.8.11","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.4","@types/webpack-bundle-analyzer":"^4.4.1","@types/webpack-dev-server":"^3.11.6","@types/webpack-hot-middleware":"^2.25.6","@types/xml2js":"^0.4.11","@typescript-eslint/eslint-plugin":"^5.27.1","@typescript-eslint/eslint-plugin-tslint":"^5.27.1","@typescript-eslint/parser":"^5.27.1","ali-oss":"^6.17.1","axios":"^0.27.2","cls-hooked":"^4.2.2","compare-versions":"^4.1.3","cssnano":"^4.1.11","eslint":"^8.17.0","eslint-formatter-codeframe":"^7.32.1","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.26.0","eslint-plugin-jsdoc":"^39.3.2","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.30.0","eslint-plugin-unicorn":"^42.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-changed-in-place":"^2.3.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","gulp-strip-comments":"^2.5.2","html-entities":"^2.3.3","html-webpack-plugin":"^4.5.2","husky":"^8.0.1","jaeger-client":"^3.19.0","json-stringify-safe":"^5.0.1","koa":"^2.13.4","koa-body":"^5.0.0","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^8.0.0","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.5.2","moment":"^2.29.3","mysql2":"^2.3.3","nodemon":"^2.0.16","platform":"^1.3.6","react":"^18.1.0","react-dom":"^18.1.0","react-jss":"^10.9.0","redux":"^4.2.0","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.5","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^2.0.0","tsconfig-paths-webpack-plugin":"^3.5.2","tslib":"^2.4.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.7.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.5.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.3","webpack-hot-middleware":"^2.25.1","xml2js":"^0.4.23"},"gitHead":"50cea26381c82e85136c746a640e092d9e4a79a8","_id":"caibird@3.2.0","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-QsQYUjt86CGBd9FVR6WhQFl3Dyd0zVw+k7GxtIbpTF7T5Fp/ypGFUkHnrNGZ1ggh/TB7m4GxaWl9VTxbZ4XJPg==","shasum":"c172bc2245cbba22b0e16e636565e416e220bb3f","tarball":"https://registry.npmjs.org/caibird/-/caibird-3.2.0.tgz","fileCount":218,"unpackedSize":337599,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQChPAk11zujT8yw8iR6FI50HRgXnbKEuTlXEeayyaEVBQIgO8Sm62E3Xk4CRcfE6ED8nB7BPlLcmLPX6Oqh29rBpZ0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJivAqiACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmodeBAAhHmm+aiSI09NrqEuEC1rdebiVHokF+pMIFuEniOjwiqdvszE\r\nqunoH0gqvwcDS0cmTIZc7JUa9K3/DkcgbkKJj8nD8QMhnIEQXmOxA957+oek\r\n9lNSEnPAVUTlBYX2cJXoaoN5DaSfqsh7gVzEyDdrUYr6HqaArBVGGgmjJhrQ\r\nnqX9SggdfL/TIiP1jtMCQzqR/a7JY5lEOGBdfPOpMMIOXYyo7F6PZKponVWg\r\nvaRTxQqNdf7GTdpjPA4S5oyoBLLjRicRKK9blXZJxfhja54YmRbpQe405Lrd\r\n1EsKlsAykg4nOnhsH9sx3cyC1Vo3ZmZMl7a70YUBexaPRyGmfLWmBedSCiR7\r\n58FO+IJm9FonFDwC24nm63Rmydg4CQPdYrr3EXHcxL8ZF9YfXd9o4k9a7yvY\r\nMA6tUEHMvadOsQpz1fkcDYAc84CcbX0r7/p6eqXx9wa/8BQ9hs7ZcITQgUhn\r\nW+AxwQbIMzM1Fm1/AQzpa87Ztb36QyHbMwzl9uK/Nt197iFW4vcHTvuLEk7G\r\nMNotAqSgaXCDRZM3eVuntZFhaHHQpYNLBNmg6rFnXpKDflIu/MjUYM0Ii5U1\r\ni17lfPkaN+X/AK805uyKb4623uhNAbRCz9O4V9zEEOuBHzzMdLsuITDgpUqn\r\nGTdRrbqQIWUIrqWIWJ7n2fWIB+9hwRFVsuo=\r\n=JfAV\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_3.2.0_1656490658506_0.7204389360841525"},"_hasShrinkwrap":false},"3.2.1":{"name":"caibird","version":"3.2.1","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint & rimraf .tsc &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"tsc -v && tsc -p src/tsconfig.json","tsc-no-cache":"rimraf .tsc && npm run tsc","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc-no-cache"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.18.2","@babel/types":"^7.18.4","@koa/router":"^10.1.1","@types/ali-oss":"^6.16.3","@types/babel__core":"^7.1.19","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.1","@types/find":"^0.2.1","@types/gulp":"^4.0.9","@types/gulp-babel":"^6.1.30","@types/gulp-rename":"^2.0.1","@types/gulp-sourcemaps":"0.0.35","@types/gulp-strip-comments":"^2.5.1","@types/jaeger-client":"^3.18.3","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.4","@types/koa-send":"^4.1.3","@types/koa-session":"^5.10.6","@types/koa-webpack":"^6.0.5","@types/koa__router":"^8.0.11","@types/lodash":"^4.14.182","@types/node":"^14.18.21","@types/nodemon":"^1.19.1","@types/platform":"^1.3.4","@types/react":"^18.0.12","@types/react-dom":"^18.0.5","@types/script-ext-html-webpack-plugin":"^2.1.3","@types/sequelize":"^4.28.13","@types/shelljs":"^0.8.11","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.4","@types/webpack-bundle-analyzer":"^4.4.1","@types/webpack-dev-server":"^3.11.6","@types/webpack-hot-middleware":"^2.25.6","@types/xml2js":"^0.4.11","@typescript-eslint/eslint-plugin":"^5.27.1","@typescript-eslint/eslint-plugin-tslint":"^5.27.1","@typescript-eslint/parser":"^5.27.1","ali-oss":"^6.17.1","axios":"^0.27.2","cls-hooked":"^4.2.2","compare-versions":"^4.1.3","cssnano":"^4.1.11","eslint":"^8.17.0","eslint-formatter-codeframe":"^7.32.1","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.26.0","eslint-plugin-jsdoc":"^39.3.2","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.30.0","eslint-plugin-unicorn":"^42.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-changed-in-place":"^2.3.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","gulp-strip-comments":"^2.5.2","html-entities":"^2.3.3","html-webpack-plugin":"^4.5.2","husky":"^8.0.1","jaeger-client":"^3.19.0","json-stringify-safe":"^5.0.1","koa":"^2.13.4","koa-body":"^5.0.0","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^8.0.0","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.5.2","moment":"^2.29.3","mysql2":"^2.3.3","nodemon":"^2.0.16","platform":"^1.3.6","react":"^18.1.0","react-dom":"^18.1.0","react-jss":"^10.9.0","redux":"^4.2.0","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.5","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^2.0.0","tsconfig-paths-webpack-plugin":"^3.5.2","tslib":"^2.4.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.7.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.5.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.3","webpack-hot-middleware":"^2.25.1","xml2js":"^0.4.23"},"gitHead":"a39b86c4fba7d731c54a095a30f23dcbe786015a","_id":"caibird@3.2.1","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-Fu7cB1KenEcLCtnTClb4WdGw4GaM3xbAhx5/CR/gwmuiy8VT262Lm8rvbt0duIzaeUnC7YxLkgCrWP70Agg85A==","shasum":"701e479f0824fc2ac49e93fbd54a1f9818d4f64c","tarball":"https://registry.npmjs.org/caibird/-/caibird-3.2.1.tgz","fileCount":218,"unpackedSize":337485,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDAbNnG3cTCPd6XDHd+b7+7vUpeb477gW9lWpbI7m8wvAiEAlRKaAOudwQZVAl6PaBNRSDgc9uEaukCs3EbHwvjgwe0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJivAwzACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrzYg/+JE8dJzZgoejdcX8EqB8C376IFFHDtQ5WB++uwmfQpr2Zi1He\r\nN/gzPUlvoqY5tG/coY+lM5nnc7o6bF4/IoXXLWfbXiROpIj/vBaWaQSjOxXK\r\nvTnnKbMMFG/WzCroS4OGLpyZgM8bzTJorLPuzgQG6lMix2lbkvtn2ptww+DM\r\nLAzXe9Xbh+FsI1gXvJ4wPGCSfWgAo2AAl7N6P1TPcUs/fm1oEAYQef5RLNS7\r\ngpz9VUvjcjconG7HzrtV4xwAdql8kBhTE+DsF5nde8yqxnGcufnYRawRTE8D\r\n8mfUzMxFITCLHAuplOgUrRDcTCi7/j608S//BeTWy4UpGQFC2k1JBK2jjBPD\r\nG95fbFpT5T+ZV2J0QBWrsrPNVe8lDWmaUoo7fkAPx5d79gQTDW5hBJJpsI9T\r\n3OmzUgySVtSk96BYwb31bDaKPCeUBObt/LlaCPFcLXYPdNSQlAm/d5ZZ8HqX\r\nXsmjnRmNuX+hFTToY0T0LEi6WzjMUrAn/fQT3TiEw7HZ+MjGX3tPIfNp/rde\r\nws8USHal6xlkUqQnFgwqRxia29r6cII+Yav1eVwNM+o0zRRHyZdE+LAvhTkO\r\nvbM9aG4MYYaCLaiOSAzyi5KgGptG3tk+UHDdI7JAWl29/HKmMsqgBmrxk9dx\r\n1w2QRFl9xPh43v2IZekwn/73AHQaQnCsm/c=\r\n=Ao2o\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_3.2.1_1656491059435_0.20893820224719817"},"_hasShrinkwrap":false},"3.2.2":{"name":"caibird","version":"3.2.2","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint & rimraf .tsc &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"tsc -v && tsc -p src/tsconfig.json","tsc-no-cache":"rimraf .tsc && npm run tsc","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc-no-cache"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.18.2","@babel/types":"^7.18.4","@koa/router":"^10.1.1","@types/ali-oss":"^6.16.3","@types/babel__core":"^7.1.19","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.1","@types/find":"^0.2.1","@types/gulp":"^4.0.9","@types/gulp-babel":"^6.1.30","@types/gulp-rename":"^2.0.1","@types/gulp-sourcemaps":"0.0.35","@types/gulp-strip-comments":"^2.5.1","@types/jaeger-client":"^3.18.3","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.4","@types/koa-send":"^4.1.3","@types/koa-session":"^5.10.6","@types/koa-webpack":"^6.0.5","@types/koa__router":"^8.0.11","@types/lodash":"^4.14.182","@types/node":"^14.18.21","@types/nodemon":"^1.19.1","@types/platform":"^1.3.4","@types/react":"^18.0.12","@types/react-dom":"^18.0.5","@types/script-ext-html-webpack-plugin":"^2.1.3","@types/sequelize":"^4.28.13","@types/shelljs":"^0.8.11","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.4","@types/webpack-bundle-analyzer":"^4.4.1","@types/webpack-dev-server":"^3.11.6","@types/webpack-hot-middleware":"^2.25.6","@types/xml2js":"^0.4.11","@typescript-eslint/eslint-plugin":"^5.27.1","@typescript-eslint/eslint-plugin-tslint":"^5.27.1","@typescript-eslint/parser":"^5.27.1","ali-oss":"^6.17.1","axios":"^0.27.2","cls-hooked":"^4.2.2","compare-versions":"^4.1.3","cssnano":"^4.1.11","eslint":"^8.17.0","eslint-formatter-codeframe":"^7.32.1","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.26.0","eslint-plugin-jsdoc":"^39.3.2","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.30.0","eslint-plugin-unicorn":"^42.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-changed-in-place":"^2.3.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","gulp-strip-comments":"^2.5.2","html-entities":"^2.3.3","html-webpack-plugin":"^4.5.2","husky":"^8.0.1","jaeger-client":"^3.19.0","json-stringify-safe":"^5.0.1","koa":"^2.13.4","koa-body":"^5.0.0","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^8.0.0","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.5.2","moment":"^2.29.3","mysql2":"^2.3.3","nodemon":"^2.0.16","platform":"^1.3.6","react":"^18.1.0","react-dom":"^18.1.0","react-jss":"^10.9.0","redux":"^4.2.0","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.5","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^2.0.0","tsconfig-paths-webpack-plugin":"^3.5.2","tslib":"^2.4.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.7.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.5.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.3","webpack-hot-middleware":"^2.25.1","xml2js":"^0.4.23"},"gitHead":"979753117e1efbadf4f3537ff74096dd84b017ee","_id":"caibird@3.2.2","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-qetgKv/aU5yVEvQC+6PYtELq9sAtwi1zIXlORskB7kJYNVTy/Cs60jNJqjiBM3Iy7laH3K+qEoUZjexgahR+8Q==","shasum":"c3b9f1eda2e5a63639439e48954fadb28a866bf3","tarball":"https://registry.npmjs.org/caibird/-/caibird-3.2.2.tgz","fileCount":218,"unpackedSize":338309,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCS1YClj6EVr2F5VwU/4dB/XsRZLuJQcjivDiN5duiQOQIgFHMm7VJ1n2bJKdC0bcm22u6BTj+TgEbJC4WEm1lYloU="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJivCkQACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo8XhAAi3NgTD+3ylht6cP/8DGRqJTcUC0kPxKjBJg4NS5mkiPD1rdK\r\nXIwq8mLl0bOQ/JxpagWmBCnT5I26WVgrnPWpqdVs+/OkW2pI04Nag6EaLmLH\r\n7Lln23BQbMCuD7cvfmSqgVIe5M1MQazohjh+dPr8WWSrnvC0gcssWFtpa3uS\r\n8AyJNKkuILyJvQn7AP7hUaV/SpODihJkmB4ggACy04je24Gpn4VP5S7Iy+WN\r\nOAMIjbObeuBikjpIe7uwZWEWUgADzpS7tNEx4QYWDoM7euoGfuL+QIxIgZ/B\r\nmZBTczuP33TLrL3u4IST7xDlj00w/X3rJRSsFE6dK0hF6NS4IdXjO0cT/LoN\r\nYXWnHoxPU1KgSpAcWNQyYtKqqTcP0Unv6JgSUGoN2RfNR6n+Jx3D0dqKTbb0\r\nPV+2xMHPBdSA5vL+hjWDLaz6WUYNUJFh+SQ1LloODJlTzLG+gPiLphgsEhuH\r\n9H3wWEloMb3viKkvgnS7Rr62E9+fs/xoCvCadPUC7PYgH/TP2EjJSFuGHUC3\r\nbo4YjUCzmu7ro8VAPGUdwLnMOi/T677HqmbmIUaKzcbTzafeezs7hn2cfIo3\r\nm7V6x+9qSTs2wuP3ZlPZkIcjnn7Eldvbvzj0goJoge20malCbsn3OZq0J1yB\r\neYz0+iUqozGZIjlEjxe5agmbSusdXJhRQEw=\r\n=40rS\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_3.2.2_1656498448663_0.7933857308418364"},"_hasShrinkwrap":false},"3.2.3":{"name":"caibird","version":"3.2.3","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint & rimraf .tsc &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"tsc -v && tsc -p src/tsconfig.json","tsc-no-cache":"rimraf .tsc && npm run tsc","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc-no-cache"},"author":{"name":"cmZhou"},"description":"### 分支规范 feat/${userName}-${YYYYMMDD}-${featName} fix/${userName}-${YYYYMMDD}-${bugName}","homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.18.2","@babel/types":"^7.18.4","@koa/router":"^10.1.1","@types/ali-oss":"^6.16.3","@types/babel__core":"^7.1.19","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.1","@types/find":"^0.2.1","@types/gulp":"^4.0.9","@types/gulp-babel":"^6.1.30","@types/gulp-rename":"^2.0.1","@types/gulp-sourcemaps":"0.0.35","@types/gulp-strip-comments":"^2.5.1","@types/jaeger-client":"^3.18.3","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.4","@types/koa-send":"^4.1.3","@types/koa-session":"^5.10.6","@types/koa-webpack":"^6.0.5","@types/koa__router":"^8.0.11","@types/lodash":"^4.14.182","@types/node":"^14.18.21","@types/nodemon":"^1.19.1","@types/platform":"^1.3.4","@types/react":"^18.0.12","@types/react-dom":"^18.0.5","@types/script-ext-html-webpack-plugin":"^2.1.3","@types/sequelize":"^4.28.13","@types/shelljs":"^0.8.11","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.4","@types/webpack-bundle-analyzer":"^4.4.1","@types/webpack-dev-server":"^3.11.6","@types/webpack-hot-middleware":"^2.25.6","@types/xml2js":"^0.4.11","@typescript-eslint/eslint-plugin":"^5.27.1","@typescript-eslint/eslint-plugin-tslint":"^5.27.1","@typescript-eslint/parser":"^5.27.1","ali-oss":"^6.17.1","axios":"^0.27.2","cls-hooked":"^4.2.2","compare-versions":"^4.1.3","cssnano":"^4.1.11","eslint":"^8.17.0","eslint-formatter-codeframe":"^7.32.1","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.26.0","eslint-plugin-jsdoc":"^39.3.2","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.30.0","eslint-plugin-unicorn":"^42.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-changed-in-place":"^2.3.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","gulp-strip-comments":"^2.5.2","html-entities":"^2.3.3","html-webpack-plugin":"^4.5.2","husky":"^8.0.1","jaeger-client":"^3.19.0","json-stringify-safe":"^5.0.1","koa":"^2.13.4","koa-body":"^5.0.0","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^8.0.0","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.5.2","moment":"^2.29.3","mysql2":"^2.3.3","nodemon":"^2.0.16","platform":"^1.3.6","react":"^18.1.0","react-dom":"^18.1.0","react-jss":"^10.9.0","redux":"^4.2.0","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.5","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^2.0.0","tsconfig-paths-webpack-plugin":"^3.5.2","tslib":"^2.4.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.7.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.5.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.3","webpack-hot-middleware":"^2.25.1","xml2js":"^0.4.23"},"gitHead":"cbacbab58fff301fa907b2b5ccbe43c975dfb9ed","_id":"caibird@3.2.3","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-Hj6GNZZ579N1IuLTYMEshcR2B2SHv4un84SPKju03slyC5rstNGjuGc9FpEw/OsO7NQosYEZejDHo0EV5yWvbQ==","shasum":"b2a115b40f0b0fea6128f8aa0f1a90a8daa737a1","tarball":"https://registry.npmjs.org/caibird/-/caibird-3.2.3.tgz","fileCount":218,"unpackedSize":338494,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAgvQDdC7o64n+xhpR3YheD1bx4B2pFWSc9mI+IuIEmjAiAgpv0/P4MLcLc0325F30McE8e50jWJ2wCLHWcOHNmo5w=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJixUO3ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoYYw//e2KGD2hp2IkcVee1qItOHmQI5PCl8Ssw9XTPXTwulgVQuEa7\r\n33sZ+5W9+TglZrkoT9WkyDCOCuP3lycqDu+jo6ETtFhZneZtAS4P1kSSf/i5\r\n4NA4AWHPd+boN3gDbJvJyXYBMwBBdmX65WJQjjUPMXpZNkktfFmJQ8txz9/k\r\nnMZr1RSut8WJ5WP+1eXnFan4Umst8FSavqJtc4wwLOuH9lKshOCJuDkPAhXb\r\nURxq43OKfkx6TTwkYTxCF1ddQzro0o0JpttXsJpV8DbN2ruBILftC9dn/7W9\r\n2VfSBHVvs0GPtj44VgL/O0cKWrM9mgD2qJSPi1EgynvN6TOACy2E6cpq9AZ3\r\nB2eTRV3MAThn71+L7cLFZeK/GUitFL0KWADz+ZWTU7xp2ihFtUgFb8QyXjXG\r\nb9w4Yp6FvlIPUf3ni/yOlhgm1kArlwnd+VPfpnr/7mJcssU4JlK9hi3o3SJW\r\nfyiHSLb+fz6VaH+8Qr0hdhqY9omgSGjPmkVECuB8//lPPQzaAVdVgvIpDwp5\r\ntxw6Nq0Q3vebvNSI/rI4iVFzyQNWn8ewKSTE0kUowzl15zxMW11fAt1zQVeP\r\nHN74vZB2tEuyAPmOi/4p58iH6ekWIZubpKCuv88fsxc1i4ZWrdWBWj2YX+UY\r\nRUgu6ISjqk77pIM3dSvdUde8I5Vdtmnr5U4=\r\n=dIKk\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_3.2.3_1657095095272_0.25129219374324685"},"_hasShrinkwrap":false},"3.2.4":{"name":"caibird","version":"3.2.4","private":false,"scripts":{"preinstall":"git config core.ignorecase false & rimraf .eslint & rimraf .tsc &","init-project":"npm i rimraf -g && rimraf node_modules && npm i && husky install && node bin/initProject","update-package":"rimraf node_modules package-lock.json && npm i shelljs@latest --save-dev && node bin/updatePackage","eslint":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./","eslint-no-cache":"rimraf .eslint && npm run eslint","eslint-fix":"eslint --cache --cache-location \"./.eslint/cache\" -f codeframe --ext .ts,.tsx,.js,.jsx ./ --fix","tsc":"tsc -v && tsc -p src/tsconfig.json","tsc-no-cache":"rimraf .tsc && npm run tsc","check-tsc":"npm run eslint && npm run tsc","check-tsc-no-cache":"npm run eslint-no-cache && npm run tsc-no-cache"},"author":{"name":"cmZhou"},"description":"## 一套集“类型约束、组件化、抽象化、面向对象、自动化、跨平台、标准化、Monorepo、BFF、RPC、MVC”等思想为一体的前端架构","homepage":"https://github.com/xiaocaibird/caibird-mvc","devDependencies":{"@babel/core":"^7.18.2","@babel/types":"^7.18.4","@koa/router":"^10.1.1","@types/ali-oss":"^6.16.3","@types/babel__core":"^7.1.19","@types/cls-hooked":"^4.3.3","@types/cssnano":"^4.0.1","@types/find":"^0.2.1","@types/gulp":"^4.0.9","@types/gulp-babel":"^6.1.30","@types/gulp-rename":"^2.0.1","@types/gulp-sourcemaps":"0.0.35","@types/gulp-strip-comments":"^2.5.1","@types/jaeger-client":"^3.18.3","@types/json-stringify-safe":"^5.0.0","@types/koa":"^2.13.4","@types/koa-send":"^4.1.3","@types/koa-session":"^5.10.6","@types/koa-webpack":"^6.0.5","@types/koa__router":"^8.0.11","@types/lodash":"^4.14.182","@types/node":"^14.18.21","@types/nodemon":"^1.19.1","@types/platform":"^1.3.4","@types/react":"^18.0.12","@types/react-dom":"^18.0.5","@types/script-ext-html-webpack-plugin":"^2.1.3","@types/sequelize":"^4.28.13","@types/shelljs":"^0.8.11","@types/terser-webpack-plugin":"^4.2.0","@types/through2":"^2.0.36","@types/uuid":"^8.3.4","@types/webpack-bundle-analyzer":"^4.4.1","@types/webpack-dev-server":"^3.11.6","@types/webpack-hot-middleware":"^2.25.6","@types/xml2js":"^0.4.11","@typescript-eslint/eslint-plugin":"^5.27.1","@typescript-eslint/eslint-plugin-tslint":"^5.27.1","@typescript-eslint/parser":"^5.27.1","ali-oss":"^6.17.1","axios":"^0.27.2","cls-hooked":"^4.2.2","compare-versions":"^4.1.3","cssnano":"^4.1.11","eslint":"^8.17.0","eslint-formatter-codeframe":"^7.32.1","eslint-plugin-header":"^3.1.1","eslint-plugin-import":"^2.26.0","eslint-plugin-jsdoc":"^39.3.2","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prefer-arrow":"^1.2.3","eslint-plugin-react":"^7.30.0","eslint-plugin-unicorn":"^42.0.0","find":"^0.3.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-changed-in-place":"^2.3.0","gulp-rename":"^2.0.0","gulp-sourcemaps":"^3.0.0","gulp-strip-comments":"^2.5.2","html-entities":"^2.3.3","html-webpack-plugin":"^4.5.2","husky":"^8.0.1","jaeger-client":"^3.19.0","json-stringify-safe":"^5.0.1","koa":"^2.13.4","koa-body":"^5.0.0","koa-send":"^5.0.1","koa-session":"^6.2.0","koa-views":"^8.0.0","koa-webpack":"^6.0.0","lodash":"^4.17.21","log4js":"^6.5.2","moment":"^2.29.3","mysql2":"^2.3.3","nodemon":"^2.0.16","platform":"^1.3.6","react":"^18.1.0","react-dom":"^18.1.0","react-jss":"^10.9.0","redux":"^4.2.0","script-ext-html-webpack-plugin":"^2.1.5","sequelize":"^4.44.4","shelljs":"^0.8.5","tapable":"^1.1.3","terser-webpack-plugin":"^4.2.3","through2":"^4.0.2","ts-import-plugin":"^2.0.0","tsconfig-paths-webpack-plugin":"^3.5.2","tslib":"^2.4.0","tslint":"^6.1.3","tslint-eslint-rules":"^5.4.0","tslint-react":"^5.0.0","typescript":"^4.7.3","uuid":"^8.3.2","webpack":"^4.44.2","webpack-bundle-analyzer":"^4.5.0","webpack-cli":"^3.3.12","webpack-dev-server":"^3.11.3","webpack-hot-middleware":"^2.25.1","xml2js":"^0.4.23"},"gitHead":"e5b8b85bfd663ea6b5fdfa62059e58344e93bbc3","_id":"caibird@3.2.4","_nodeVersion":"14.19.1","_npmVersion":"6.14.16","dist":{"integrity":"sha512-TQN7gzsDmYkBdHK+TnHeQpkhZqzK/oGkNRmjpAWf1TB+NJpk066l6fnED6iH8WnDg8lLRcqgv4kCBRVH2I4dPw==","shasum":"32478500bb50fafce62fc1ba30f09312de595144","tarball":"https://registry.npmjs.org/caibird/-/caibird-3.2.4.tgz","fileCount":218,"unpackedSize":338565,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3ois0YYWcdCuOW8EBjaDTTjraD+6xMoSfmz6qbftZrgIgYry026GVCP6IjiUPsB3l0M3Wht6NlAF/Zg2ePJjJ7xI="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjKDHWACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmow8RAAkTK9CfNhhM0DtdAOvJHoJT1iOXNJkMXHlXfdVasCU1Majoc0\r\nUrrYX+U0dj3FossSyMWSNjvRSgRiZJ/k8C2XzZjIixPV524cTWqHZXqb8WkD\r\nehZVDyP7ZR5muXzo9yOdIg0LTzLtdeenrRvkvIY+LRU2s76bF8v+NJFmao0N\r\nzFajlf9cu9OneKRWWBP1B9lt/Fkl4+6sN3FxQhzGuu21Nmw0vZ9pExxSxakI\r\nNBLnCbCRTS8EpRvKh2t89w02mWd2gjBu5pCsfjVUyvXhWRHZ55itCxYsoWV4\r\nJ0MRxw1u4uK+EMZRfYzrFn1UC35+aNDOy5k1fqtYhvrtsQPsKUZJ6nu2tAhS\r\nsKf3v/dXtt8H8+NeV0ppkqKZxQLc0fMVlpKpgL2RSa/pG75ryMiueY0PKeo5\r\nF8eXalYLn65jSIM6iRX2heCaKSavfSq+YeR1MZayFOPTqVdu+Bgtr8v4jfS3\r\nH59+fL8aBwYw/KiUbakNEIzz/oXQZpblp8vJP7CK/AbCZj7MPdC6A3Fg+4Bt\r\n3xJnJ2c1zLf8IUJszozy4vANGDVIlzgsqEtp0zSXbW0hvrhMe7+bvQp1BWWC\r\nU/2+Jw4of6LPMwG/dbIgOzWSsdmOYE8KZYn1ncwaOlKJKII0+spM7r11ygF5\r\nIkPtHvQ5gPljQDXOKkJhXHVDf5hWS4KFwmc=\r\n=SfFq\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"yizhixiaocaibird@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_3.2.4_1663578582500_0.6511404938881638"},"_hasShrinkwrap":false},"4.0.0-rc.1":{"name":"caibird","version":"4.0.0-rc.1","description":"","main":"","type":"module","scripts":{"dist":"rimraf dist && tsc --outDir dist --moduleResolution node --module commonjs --verbatimModuleSyntax false && node bin/rename2cjs.cjs && tsc --outDir dist"},"author":{"name":"caibird"},"license":"MIT","devDependencies":{"@types/koa":"2.13.12","@types/koa-send":"4.1.6","@types/koa__router":"12.0.4","@types/lodash":"4.14.202","rimraf":"5.0.5","typescript":"5.3.2"},"dependencies":{"@koa/router":"12.0.1","@ladjs/koa-views":"9.0.0","axios":"1.6.2","form-data":"4.0.0","koa":"2.14.2","koa-body":"6.0.1","koa-send":"5.0.1","lodash":"4.17.21","reflect-metadata":"0.1.13","tslib":"2.6.2","url-join":"5.0.0"},"exports":{".":"./dist/index.js","./*":"./dist/*"},"_id":"caibird@4.0.0-rc.1","gitHead":"1d35d43bafcb7c3e5ac5a86b75ff0e8756eacf22","_nodeVersion":"21.0.0","_npmVersion":"10.2.0","dist":{"integrity":"sha512-khUi0O53KnSD0n32tLpoIjc74IcNbL23oyLL9OSLgE8M27E2qEf3AuXEGHqwznPRxJ/dNVCEwA47bmXeDitpgQ==","shasum":"e3e319396c6b74592ff828f6fc023174c6319d5b","tarball":"https://registry.npmjs.org/caibird/-/caibird-4.0.0-rc.1.tgz","fileCount":2,"unpackedSize":1001,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC75hmE+jhkcHmxE/7bg8XV8fOLPM6kAZHDhx4yeG9leQIgJkhy3eU0AF8dBa1qP1WjXYc4Xi0NqXvu++ev+Zhc9vA="}]},"_npmUser":{"name":"xiaocaibird","email":"332877152@qq.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"332877152@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_4.0.0-rc.1_1701588076128_0.6779419368566695"},"_hasShrinkwrap":false},"4.0.0-rc.2":{"name":"caibird","version":"4.0.0-rc.2","description":"","main":"","type":"module","scripts":{"dist":"rimraf dist && tsc --outDir dist --moduleResolution node --module commonjs --verbatimModuleSyntax false && node bin/rename2cjs.cjs && tsc --outDir dist"},"author":{"name":"caibird"},"license":"MIT","devDependencies":{"@types/koa":"2.13.12","@types/koa-send":"4.1.6","@types/koa__router":"12.0.4","@types/lodash":"4.14.202","rimraf":"5.0.5","typescript":"5.3.2"},"dependencies":{"@koa/router":"12.0.1","@ladjs/koa-views":"9.0.0","axios":"1.6.2","form-data":"4.0.0","koa":"2.14.2","koa-body":"6.0.1","koa-send":"5.0.1","lodash":"4.17.21","reflect-metadata":"0.1.13","tslib":"2.6.2","url-join":"5.0.0"},"exports":{".":"./dist/index.js","./*":"./dist/*"},"_id":"caibird@4.0.0-rc.2","gitHead":"af0b9b6b7b8e99fac40de5e3f86e22e26fc7391e","_nodeVersion":"21.0.0","_npmVersion":"10.2.0","dist":{"integrity":"sha512-LDiH2goAe5nQ9aSS5c7PHWRXva8/LtwR38P6qx5+tyvkHzWKaC+63fFP9rOaf0+dYYfpy4AVMvJl+7e4gTgkyg==","shasum":"d0de3a71e7475bbddce5b60ec633179b4a2dafa1","tarball":"https://registry.npmjs.org/caibird/-/caibird-4.0.0-rc.2.tgz","fileCount":50,"unpackedSize":82445,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE9RcuCXLFIIMXLQidoIHDsPRmvvB+p5fX5wt5FygLlCAiEAtCaJE+YbZmnbonAb1NRON0U7OewZLPEEo/eP6rczoQk="}]},"_npmUser":{"name":"xiaocaibird","email":"332877152@qq.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"332877152@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_4.0.0-rc.2_1701588157414_0.6868909817032633"},"_hasShrinkwrap":false},"4.0.0-rc.3":{"name":"caibird","version":"4.0.0-rc.3","description":"","main":"","scripts":{"dist":"rimraf dist && tsc --outDir dist && node bin/rename2mjs.js && tsc --outDir dist --moduleResolution node --module commonjs --verbatimModuleSyntax false"},"author":{"name":"caibird"},"license":"MIT","devDependencies":{"@types/koa":"2.13.12","@types/koa-send":"4.1.6","@types/koa__router":"12.0.4","@types/lodash":"4.14.202","rimraf":"5.0.5","typescript":"5.3.2"},"dependencies":{"@koa/router":"12.0.1","@ladjs/koa-views":"9.0.0","axios":"1.6.2","form-data":"4.0.0","koa":"2.14.2","koa-body":"6.0.1","koa-send":"5.0.1","lodash":"4.17.21","reflect-metadata":"0.1.13","tslib":"2.6.2","url-join":"5.0.0"},"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"}},"_id":"caibird@4.0.0-rc.3","gitHead":"f930169f5007ab5ead556623c167135043b54404","_nodeVersion":"21.0.0","_npmVersion":"10.2.0","dist":{"integrity":"sha512-Ruojg+hk10Fr5Gibtrw2epXwCaD4WqPHD0jgWSP3HWw5xif64/3V7dglrWrpdVihk9b1FpkvUQrbKFL+hLWC1A==","shasum":"c0e1427ba6dd709c752d58819c81b9d7a188f693","tarball":"https://registry.npmjs.org/caibird/-/caibird-4.0.0-rc.3.tgz","fileCount":50,"unpackedSize":82466,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICa5osm7agsKoTonr71kgi9VB1es5r+/g0rk2DLW4r2/AiBUWzmD6LIQsQ+S1Ia7ki7om0Ak1CEZ9ydRycAxGNuaeA=="}]},"_npmUser":{"name":"xiaocaibird","email":"332877152@qq.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"332877152@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_4.0.0-rc.3_1701588704021_0.4041476824665686"},"_hasShrinkwrap":false},"4.0.0-rc.4":{"name":"caibird","version":"4.0.0-rc.4","description":"","main":"","scripts":{"dist":"rimraf dist && tsc --outDir dist && node bin/rename2mjs.js && tsc --outDir dist --moduleResolution node --module commonjs --verbatimModuleSyntax false"},"author":{"name":"caibird"},"license":"MIT","devDependencies":{"@types/koa":"2.13.12","@types/koa-send":"4.1.6","@types/koa__router":"12.0.4","@types/lodash":"4.14.202","rimraf":"5.0.5","typescript":"5.3.2"},"dependencies":{"@koa/router":"12.0.1","@ladjs/koa-views":"9.0.0","axios":"1.6.2","form-data":"4.0.0","koa":"2.14.2","koa-body":"6.0.1","koa-send":"5.0.1","lodash":"4.17.21","reflect-metadata":"0.1.13","tslib":"2.6.2","url-join":"5.0.0"},"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"}},"_id":"caibird@4.0.0-rc.4","gitHead":"f2633b09cd6729ffc33fbfa2f0bb945dc5def4dc","_nodeVersion":"21.0.0","_npmVersion":"10.2.0","dist":{"integrity":"sha512-ti2AMj+lB78lHPwlyhNg0ag4RrkOJ40cZRdAsX5FsUoKzxOHu3zCQonx5iIWxAjNf7Yl4Wq0zJC8xjahBOgVCA==","shasum":"3eae3f2ea66403566a678f65822315d7d52f0b06","tarball":"https://registry.npmjs.org/caibird/-/caibird-4.0.0-rc.4.tgz","fileCount":66,"unpackedSize":103055,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGuUn6w+mJkh/cDKqgXgAoCtWnMuSNZyEj4T0eiT8kviAiEAr46wxyXzrmkAVj1ksEgOitvnwh6orcyqmw/n1k3EN84="}]},"_npmUser":{"name":"xiaocaibird","email":"332877152@qq.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"332877152@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_4.0.0-rc.4_1701588812280_0.8166840863458034"},"_hasShrinkwrap":false},"4.0.0-rc.5":{"name":"caibird","version":"4.0.0-rc.5","description":"","main":"dist/index.js","scripts":{"dist":"rimraf dist && tsc --outDir dist && node bin/rename2mjs.js && tsc --outDir dist --moduleResolution node --module commonjs --verbatimModuleSyntax false"},"author":{"name":"caibird"},"license":"MIT","devDependencies":{"@types/koa":"2.13.12","@types/koa-send":"4.1.6","@types/koa__router":"12.0.4","@types/lodash":"4.14.202","rimraf":"5.0.5","typescript":"5.3.2"},"dependencies":{"@koa/router":"12.0.1","@ladjs/koa-views":"9.0.0","axios":"1.6.2","form-data":"4.0.0","koa":"2.14.2","koa-body":"6.0.1","koa-send":"5.0.1","lodash":"4.17.21","reflect-metadata":"0.1.13","tslib":"2.6.2","url-join":"5.0.0"},"_id":"caibird@4.0.0-rc.5","gitHead":"f2633b09cd6729ffc33fbfa2f0bb945dc5def4dc","types":"./dist/index.d.ts","_nodeVersion":"21.0.0","_npmVersion":"10.2.0","dist":{"integrity":"sha512-HRZxCnWy8eUPq4uOnIS5zHjbwLogDWcOdfWUqKq9DGVsWIvO78rIXX/XLGju8KhPrv1aSrEQwgDnnGOjgsTS3Q==","shasum":"125cb66f5e60f1665bc16a87d7b569e93c65155c","tarball":"https://registry.npmjs.org/caibird/-/caibird-4.0.0-rc.5.tgz","fileCount":66,"unpackedSize":102956,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICP5VrCbzhVQcNJx61HhXZIh1+2dGcZrArOvsdyzzuuuAiBW1q9bJ2Oo4YCXJP/1GI+tX6TRTLdBKX95sFO3MGQa5w=="}]},"_npmUser":{"name":"xiaocaibird","email":"332877152@qq.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"332877152@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_4.0.0-rc.5_1701588999669_0.651351279311914"},"_hasShrinkwrap":false},"4.0.0-rc.6":{"name":"caibird","version":"4.0.0-rc.6","description":"","main":"dist/index.js","scripts":{"dist":"rimraf dist && tsc --outDir dist && node bin/rename2mjs.js && tsc --outDir dist --moduleResolution node --module commonjs --verbatimModuleSyntax false"},"author":{"name":"caibird"},"license":"MIT","devDependencies":{"@types/koa":"2.13.12","@types/koa-send":"4.1.6","@types/koa__router":"12.0.4","@types/lodash":"4.14.202","rimraf":"5.0.5","typescript":"5.3.2"},"dependencies":{"@koa/router":"12.0.1","@ladjs/koa-views":"9.0.0","axios":"1.6.2","form-data":"4.0.0","koa":"2.14.2","koa-body":"6.0.1","koa-send":"5.0.1","lodash":"4.17.21","reflect-metadata":"0.1.13","tslib":"2.6.2","url-join":"5.0.0"},"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"},"./*":"./dist/*","./client":{"import":"./dist/client/index.mjs","require":"./dist/client/index.js"},"./@types":{"import":"./dist/@types/index.mjs","require":"./dist/@types/index.js"}},"_id":"caibird@4.0.0-rc.6","gitHead":"c3a566462a30dc097b1171875cda969051fd1626","types":"./dist/index.d.ts","_nodeVersion":"21.0.0","_npmVersion":"10.2.0","dist":{"integrity":"sha512-hrBuHm5Yaj44EjbMcWhDr4ZY/1lYVnh6IYMacmY6nZo2s4kw8UnskZKUXfWqo/j7+W8py72Hm7Fy04lK1vH5Tw==","shasum":"67307ee62723b56cb9b3e769cedd1bfbc16d5c03","tarball":"https://registry.npmjs.org/caibird/-/caibird-4.0.0-rc.6.tgz","fileCount":66,"unpackedSize":103319,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICsCuG7VNglH9cq8gotVxcdgyWcQ0QeW1BhPsTE/JC6rAiEA4jTCoO1PTX9kD8dSFTPVQnSyXdMDsbM5/FAnluFN2As="}]},"_npmUser":{"name":"xiaocaibird","email":"332877152@qq.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"332877152@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_4.0.0-rc.6_1701589644209_0.5515906576231697"},"_hasShrinkwrap":false},"4.0.0-rc.7":{"name":"caibird","version":"4.0.0-rc.7","description":"","main":"dist/index.js","scripts":{"dist":"rimraf dist && tsc --outDir dist && node bin/rename2mjs.js && tsc --outDir dist --moduleResolution node --module commonjs --verbatimModuleSyntax false"},"author":{"name":"caibird"},"license":"MIT","devDependencies":{"@types/koa":"2.13.12","@types/koa-send":"4.1.6","@types/koa__router":"12.0.4","@types/lodash":"4.14.202","rimraf":"5.0.5","typescript":"5.3.2"},"dependencies":{"@koa/router":"12.0.1","@ladjs/koa-views":"9.0.0","axios":"1.6.2","form-data":"4.0.0","koa":"2.14.2","koa-body":"6.0.1","koa-send":"5.0.1","lodash":"4.17.21","reflect-metadata":"0.1.13","tslib":"2.6.2","url-join":"5.0.0"},"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"},"./*":"./dist/*","./client":{"import":"./dist/client/index.mjs","require":"./dist/client/index.js"},"./@types":{"import":"./dist/@types/index.mjs","require":"./dist/@types/index.js"}},"_id":"caibird@4.0.0-rc.7","gitHead":"ef50dc2fc44b0e7c94da9dc7194ea11981013e20","types":"./dist/index.d.ts","_nodeVersion":"21.0.0","_npmVersion":"10.2.0","dist":{"integrity":"sha512-mB0Pv0Bbv387W69otFpjdVmUIv6bebCUgpEtzgKkKcGHiQECZfOHQ2jb9AhqYn3w23wRBP5pS5JmbBKUrDtdTw==","shasum":"220905ec22b03a5522e7a35f4f5bb000f169f159","tarball":"https://registry.npmjs.org/caibird/-/caibird-4.0.0-rc.7.tgz","fileCount":66,"unpackedSize":103319,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpeSRLEzBss+QoKFddhkUiPFftsgQzDeSa2fGi4y0cbAIhAPN5+tsKLAWoP0/FrDJmsp3VRf3HOBGFpWeyjah31Wk/"}]},"_npmUser":{"name":"xiaocaibird","email":"332877152@qq.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"332877152@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_4.0.0-rc.7_1701589704646_0.3185383107501438"},"_hasShrinkwrap":false},"4.0.0-rc.8":{"name":"caibird","version":"4.0.0-rc.8","description":"","main":"dist/index.js","scripts":{"dist":"rimraf dist && tsc --outDir dist && node bin/rename2mjs.js && tsc --outDir dist --moduleResolution node --module commonjs --verbatimModuleSyntax false"},"author":{"name":"caibird"},"license":"MIT","devDependencies":{"@types/koa":"2.13.12","@types/koa-send":"4.1.6","@types/koa__router":"12.0.4","@types/lodash":"4.14.202","rimraf":"5.0.5","typescript":"5.3.2"},"dependencies":{"@koa/router":"12.0.1","@ladjs/koa-views":"9.0.0","axios":"1.6.2","form-data":"4.0.0","koa":"2.14.2","koa-body":"6.0.1","koa-send":"5.0.1","lodash":"4.17.21","reflect-metadata":"0.1.13","tslib":"2.6.2","url-join":"5.0.0"},"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"},"./*":"./dist/*","./client":{"import":"./dist/client/index.mjs","require":"./dist/client/index.js"},"./@types":{"import":"./dist/@types/index.mjs","require":"./dist/@types/index.js"}},"_id":"caibird@4.0.0-rc.8","gitHead":"ef50dc2fc44b0e7c94da9dc7194ea11981013e20","types":"./dist/index.d.ts","_nodeVersion":"21.0.0","_npmVersion":"10.2.0","dist":{"integrity":"sha512-4rbSJrnfxY7FI8M67gifihCp8J9kBoGxF2yW9sJqVOc5d4rKLJrQAo3sV3IwlPY8zR25GVLiYp3za5rua8HXRQ==","shasum":"9deb1294cdeb60038e24c291b6bbd7bd2b090fb8","tarball":"https://registry.npmjs.org/caibird/-/caibird-4.0.0-rc.8.tgz","fileCount":66,"unpackedSize":103319,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGRnMJJO803lRh3DcR+oMY+YiMxW97qwGWVUm2FSdwnbAiBQuzlcPXbdlQ65BS/obRxeeL3fZYDbTfhKeSJ5PQ+U6Q=="}]},"_npmUser":{"name":"xiaocaibird","email":"332877152@qq.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"332877152@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_4.0.0-rc.8_1701589764458_0.7439277547224301"},"_hasShrinkwrap":false},"4.0.0-rc.9":{"name":"caibird","version":"4.0.0-rc.9","description":"### 序","main":"dist/index.js","scripts":{"dist":"rimraf dist && tsc --outDir dist && node bin/rename2mjs.js && tsc --outDir dist --moduleResolution node --module commonjs --verbatimModuleSyntax false"},"author":{"name":"caibird"},"license":"MIT","devDependencies":{"@types/koa":"2.13.12","@types/koa-send":"4.1.6","@types/koa__router":"12.0.4","@types/lodash":"4.14.202","rimraf":"5.0.5","typescript":"5.3.2"},"dependencies":{"@koa/router":"12.0.1","@ladjs/koa-views":"9.0.0","axios":"1.6.2","form-data":"4.0.0","koa":"2.14.2","koa-body":"6.0.1","koa-send":"5.0.1","lodash":"4.17.21","reflect-metadata":"0.1.13","tslib":"2.6.2","url-join":"5.0.0"},"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"},"./*":"./dist/*","./client":{"import":"./dist/client/index.mjs","require":"./dist/client/index.js"},"./@types":{"import":"./dist/@types/index.mjs","require":"./dist/@types/index.js"}},"_id":"caibird@4.0.0-rc.9","readme":"# caibird\n\n### 序\n\n我一直认为typescript对前端的代码质量和开发效率的提升意义非常重大。\n\n所谓“善战者无赫赫之功，善医者无煌煌之名”，如果能把typescript用好，它就是前端代码质量和开发效率的“善战者和善医者”。\n\n### 版本\n\n    v4.0-RC\n\n3.0之前也实现了类型同构，但整体功能非常重，接入成本也比较高。\n\n4.0后将专注于做一个`MVC+DI+类型同构`的通用型框架，接入成本低且将拥抱开源。\n\n### 安装\n\n    npm i caibird@rc\n\n### 简介\n\n首先说明，这里的后端指的nodejs服务端。现在大部分前端项目，都有自己的nodejs服务，可能仅做为接入层和简单的BFF层，也可能有更多的后端职责。\n\n一般情况下，nodejs端(以下统称为：`server端`)的代码也会和前端(以下统称为：`client端`)的代码放在一个工程里管理。可即使在同一个工程里，当我们在server端开发完业务api，并在client端调用时，想要获取api的字段类型，通常要做不少额外工作。\n\n另外当我们需要快速从调用方(client端)的逻辑，跳转到被调用方(server端)的逻辑时，也不能像一个函数调用一样快速跳转。\n\n\n所以这里抛出一个合理的猜想：\n\n    既然在一个工程里了，是否有办法能让业务功能在开发过程中，零成本的接入client端到server端的类型检查以及快速调试？\n\n于是我就想到了要做“前后端类型同构”，关键能力如下：\n\n1. 提供client+server的跨端类型同构能力\n1. 提供server端api(nodejs api)的方法级调用能力\n1. 完全基于ts和koa，无需任何中间层和额外的协议文件，在开发时能随时响应api的字段变化\n1. 在开发时能直接从client端跳转到server端的api代码或参数字段\n\n### server端示例\n\n```ts\n// src/server/index.ts\n// 服务端入口\nimport Koa from 'koa';\nimport { controllersRouter } from 'caibird';\n\nimport * as Controllers from './controllers';\n\nconst app = new Koa();\n\napp.use(controllersRouter({\n    Controllers\n}, app));\n\napp.listen(8080, '127.0.0.1');\n\n```\n\n```ts\n// src/server/controllers/test.ts\nimport { Controller, httpMethodFilter, View, BaseController } from 'caibird';\n\n@httpMethodFilter('POST')\n@Controller()\nexport class TestController extends BaseController {\n    @httpMethodFilter(['POST', 'GET'])\n    public async getConfig(reqData: { obj: { a: string, b: number } }) {\n        return { prop12: true };\n    }\n\n    public async getMsg() {\n        return '你好';\n    }\n\n    @httpMethodFilter('GET')\n    public async toUrl(reqData: { url: string }) {\n        return View.Redirect(reqData.url);\n    }\n}\n\n```\n\n### client端示例\n\n```ts\n\nimport { ApiService } from 'caibird/client';\n\n// CaibirdGlobal 是一个跨端的全局类型命名空间，CaibirdGlobal.Controllers是所有server端的Controller类型\nconst apiService = new ApiService<CaibirdGlobal.Controllers>({\n    transformGetMethodJsonData: {\n        enabled: true,\n        queryKey: 'caibirdurljsonparamskey',\n    },\n});\n\nconst fn = async () => {\n    // 仅获取response data\n    const res1 = await apiService.call.Test.getConfig({ obj: { a: '', b: 0 } }, { httpMethod: 'GET' });\n    // 获取完整的response body\n    const res2 = await apiService.call.Test.getConfig({ obj: { a: '', b: 0 } }, { isRaw: true });\n\n    console.log(res1);\n    console.log(res2);\n}\n\nfn();\n\n```\n\n### 核心模块\n\n#### `Controller`装饰器\n\n1. 用于标记需要`controllersRouter中间件`(以下简称`中间件`)处理的controller\n\n1. options：\n\n    ```ts\n    type Options = {\n        // 命名后缀，一般不用传。 默认为'Controller'。\n        // 需要与中间件的controllerSuffix配合使用\n        suffix?: string\n    };\n    ```\n\n1. 核心概念：\n    1. action：controller中的一个方法，对应一个接口响应\n    1. filter：可灵活组合，拦截进入controller或action的请求，实现AOP\n\n#### koa中间件：`controllersRouter`\n\n1. options字段说明:\n\n    ```ts\n    type Options = {\n        // 传入所有自定义的controllers，必填\n        Controllers: UninitControllers;\n\n        // koa-body的配置，传false可禁用自动 use koa-body\n        koaBodyOptions?: KoaBodyMiddlewareOptions | false;\n        \n        // koa-views的配置，传false可禁用自动 use koa-views\n        koaViewsOptions?: KoaViewsOptions | false;\n\n        // url路由前缀，一般需要与client端的ApiService对应配置一起使用。默认为空\n        prefix?: string;\n        \n        /* controller命名后缀，默认为'Controller'\n        若定义的名称为：TestController，那么在url路由和调用中的名称会识别为Test\n        若定义的名称为：TestCtrl，则保持不变 */\n        controllerSuffix?: string;\n        \n        /* 当路由里缺省controllerName或actionName时对应的默认值\n        可设置：\"localhost/\" \"localhost/user\" 这类短地址默认指向的controller和action */\n        defaultPathMatchs?: RoutePathMatchs;\n        \n        /* 全局默认filter，当controller和action没有同类filter时，会执行这里的filter */\n        globalFilters?: Filter.BindConfig[];\n        \n        /* 接口响应状态为success时，json body里的code。默认为0\n        如要自定义，需要与client端的ApiService对应配置一起使用 */\n        successCode?: number;\n        \n        // 开启后，get请求会从queryKey读取并解析reqData。需和ApiService的对应配置一起使用\n        transformGetMethodJsonData?: {\n            enabled: boolean;\n            queryKey: string;\n        };\n        \n        /* 可自定义传入action的reqData */\n        getRequestData?: (nowReqData: object, ctx: Context) => InnerDeclares.MayPromise<object>;\n        \n        /* 在接口设置json body前，可做最后修改 */\n        getJsonBody?: (nowJsonBody: object, context: Context) => InnerDeclares.MayPromise<object>;\n        \n        /* 在接口响应Response前，可做最后调整 */\n        onResponse?: (ctx: Context, next: Next) => InnerDeclares.MayPromise<void>;\n    };\n    ```\n\n#### clinet端接口调用：`ApiService`\n\n1. `new ApiService<TControllers, TControllerSuffix>(initOptions)`\n    \n    1. 泛型TControllers：必须是个object，其中每个值都要是一个Controller，或是Controller的实例\n    \n    1. 泛型TControllerSuffix：一般不传，默认为'Controller'，和中间件的controllerSuffix配合使用\n        \n    1. Options: \n        ```ts\n        // 以下大部分字段，除了可以直接提供最终值，也可以提供一个同步或异步函数以获取最终值\n        type InitOptions = {\n            // 重试次数，默认不重试\n            retry?: number;\n            \n            // 默认为 \"/\"\n            origin?: ValueOrFunc<string, OmitUrlPreCallFuncParams>;\n            \n            // 请求api时统一在url上加的前缀，一般要和中间件的对应配置一起使用。默认为空\n            prefix?: ValueOrFunc<string, OmitUrlPreCallFuncParams>;\n            \n            // 当接口返回json数据时，哪些code会认为success状态，一般要和中间件的对应配置一起使用。\n            // 默认为：[0]\n            successCodes?: ValueOrFunc<SuccessCodes, PostCallFuncParams>;\n            \n            // 超时时间。默认为空\n            timeout?: PreCallValueOrFunc<number>;\n            \n            // 默认为POST\n            httpMethod?: PreCallValueOrFunc<HttpMethod>;\n            \n            // 默认为空，content-type等字段如果没有设置，会在请求时根据数据类型自动设置。\n            headers?: PreCallValueOrFunc<Record<string, number | string>>;\n            \n            // 默认的公共请求数据，每次请求都会带上，极端场景才会用到。\n            commonReqData?: PreCallValueOrFunc<ReqData>;\n            \n            // 公共的axios RequestConfig\n            baseRequestConfig?: PreCallValueOrFunc<BaseRequestConfig>;\n            \n            // 开启后，get请求会将reqData序列化后用queryKey传递。需和中间件的对应配置一起使用\n            transformGetMethodJsonData?: {\n                enabled: boolean;\n                queryKey: string;\n            };\n            \n            // 在发起请求前，最后调整axios RequestConfig\n            getFinallyRequestConfig?: (params: PreCallFuncParams & {\n                nowRequestConfig: RequestConfig;\n            }) => InnerDeclares.MayPromise<RequestConfig>;\n            \n            // 获取到Response后，可进行预处理\n            onReturnResponse?: (params: PostCallFuncParams) => InnerDeclares.MayPromise<Response<ResData, RawResponse>>;\n            \n            // 异常处理\n            onError?: (error: unknown, params: OmitUrlPreCallFuncParams) => InnerDeclares.MayPromise<unknown>;\n        };\n        ```\n2. `apiService.call.controller.action(reqData, callOptions)`\n    \n    1. reqData：根据对应的controller.action自动映射类型\n    \n    1. callOptions：\n        ```ts\n        // 可传所有InitOptions中的字段，并覆盖\n        type CallOptions = InitOptions & {\n            /* 为false时，会先判断code是否success，非success的code会直接抛异常 \n            为true时会得到原始接口回包，开发者需自行判断状态码code是否符合预期。\n            对应的返回类型也会因isRaw的值不同而变化。\n            默认为false */\n            isRaw?: boolean;\n            \n            /* 是否使用formData请求接口 */\n            isFormData?: boolean;\n        }\n        ```\n    1. return类型:  \n          1. isRaw为false或不传，return的类型为接口数据类型(response Data)\n          1. isRaw为true时，return的类型为原始回包(response Body)\n\n#### 其它模块\n1. View：\n    \n    用于让action响应除了json body以外的数据类型。目前添加了几个常用的，之后会持续丰富：\n    1. View.Redirect：302跳转\n    2. View.StaticFile：返回静态文件\n    3. View.Render：渲染html\n    4. View.Buffer：返回buffer数据\n    5. View.Xml：返回xml数据\n1. createFilter：\n    \n    创建自定义filter，如权限验证等。\n\n    1. 内置filter：httpMethodFilter","readmeFilename":"README.md","gitHead":"c61ff7c9791fe6f58631b13ce4e1f7a8031611e3","types":"./dist/index.d.ts","_nodeVersion":"21.0.0","_npmVersion":"10.2.0","dist":{"integrity":"sha512-Wk9LSXTZav4gObtVi7fcQFMHLXgKGU4G2qszKrI4aWQPvg/Rwnmr3Y7AvDczh2lWgYg6sqXzFIxHyiYJWkCcWQ==","shasum":"9d76f1ead01461541e90d44f4c3e9649753f1854","tarball":"https://registry.npmjs.org/caibird/-/caibird-4.0.0-rc.9.tgz","fileCount":66,"unpackedSize":113631,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBpMqM4RMFZfY+KIhePpAX7zGrLlI80lMcUepf67dQP1AiAG+uViMSTSt/TL4c6Erk2LxIpADA7kVgs8gwSuv3qHTw=="}]},"_npmUser":{"name":"xiaocaibird","email":"332877152@qq.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"332877152@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_4.0.0-rc.9_1701620247789_0.7809978547092673"},"_hasShrinkwrap":false},"4.0.0-rc.10":{"name":"caibird","version":"4.0.0-rc.10","description":"## 序","main":"dist/index.js","scripts":{"dist":"rimraf dist && tsc --outDir dist && node bin/rename2mjs.js && tsc --outDir dist --moduleResolution node --module commonjs --verbatimModuleSyntax false"},"author":{"name":"caibird"},"license":"MIT","devDependencies":{"@types/koa":"2.13.12","@types/koa-send":"4.1.6","@types/koa__router":"12.0.4","@types/lodash":"4.14.202","rimraf":"5.0.5","typescript":"5.3.2"},"dependencies":{"@koa/router":"12.0.1","@ladjs/koa-views":"9.0.0","axios":"1.6.2","form-data":"4.0.0","koa":"2.14.2","koa-body":"6.0.1","koa-send":"5.0.1","lodash":"4.17.21","reflect-metadata":"0.1.13","tslib":"2.6.2","url-join":"5.0.0"},"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"},"./*":"./dist/*","./client":{"import":"./dist/client/index.mjs","require":"./dist/client/index.js"},"./@types":{"import":"./dist/@types/index.mjs","require":"./dist/@types/index.js"}},"_id":"caibird@4.0.0-rc.10","readme":"# caibird\n\n## 序\n\n&emsp;&emsp;我一直认为typescript对前端的代码质量和开发效率的提升意义非常重大。\n\n&emsp;&emsp;所谓“善战者无赫赫之功，善医者无煌煌之名”，如果能把typescript用好，它就是前端代码质量和开发效率的“善战者和善医者”。\n\n## 版本\n\n    v4.0-RC\n\n&emsp;&emsp;3.0之前也实现了类型同构，但整体功能非常重，接入成本也比较高。\n\n&emsp;&emsp;4.0后将专注于做一个`MVC+DI+类型同构`的通用型框架，接入成本低且将拥抱开源。\n\n## 安装\n\n    npm i caibird@rc\n\n## 简介\n\n&emsp;&emsp;首先说明，这里的后端指的nodejs服务端。现在大部分前端项目，都有自己的nodejs服务，可能仅做为接入层和简单的BFF层，也可能有更多的后端职责。\n\n&emsp;&emsp;一般情况下，nodejs端(以下统称为：`server端`)的代码也会和前端(以下统称为：`client端`)的代码放在一个工程里管理。可即使在同一个工程里，当我们在server端开发完业务api，并在client端调用时，想要获取api的字段类型，通常要做不少额外工作。\n\n&emsp;&emsp;另外当我们需要快速从调用方(client端)的逻辑，跳转到被调用方(server端)的逻辑时，也不能像一个函数调用一样快速跳转。\n\n\n&emsp;&emsp;所以这里抛出一个合理的猜想：\n\n    既然在一个工程里了，是否有办法能让业务功能在开发过程中，零成本的接入client端到server端的类型检查以及快速调试？\n\n&emsp;&emsp;于是我就想到了要做“前后端类型同构”，关键能力如下：\n\n1. 提供client+server的跨端类型同构能力\n1. 提供server端api(nodejs api)的方法级调用能力\n1. 完全基于ts和koa，无需任何中间层和额外的协议文件，在开发时能随时响应api的字段变化\n1. 在开发时能直接从client端跳转到server端的api代码或参数字段\n\n## server端示例\n\n```ts\n// src/server/index.ts\n// 服务端入口\nimport Koa from 'koa';\nimport { controllersRouter } from 'caibird';\n\nimport * as Controllers from './controllers';\n\nconst app = new Koa();\n\napp.use(controllersRouter({\n    Controllers\n}, app));\n\napp.listen(8080, '127.0.0.1');\n\n```\n\n```ts\n// src/server/controllers/test.ts\nimport { Controller, httpMethodFilter, View, BaseController } from 'caibird';\n\n@httpMethodFilter('POST')\n@Controller()\nexport class TestController extends BaseController {\n    @httpMethodFilter(['POST', 'GET'])\n    public async getConfig(reqData: { obj: { a: string, b: number } }) {\n        return { prop12: true };\n    }\n\n    public async getMsg() {\n        return '你好';\n    }\n\n    @httpMethodFilter('GET')\n    public async toUrl(reqData: { url: string }) {\n        return View.Redirect(reqData.url);\n    }\n}\n\n```\n\n## client端示例\n\n```ts\n\nimport { ApiService } from 'caibird/client';\n\n// CaibirdGlobal 是一个跨端的全局类型命名空间，CaibirdGlobal.Controllers是所有server端的Controller类型\nconst apiService = new ApiService<CaibirdGlobal.Controllers>({\n    transformGetMethodJsonData: {\n        enabled: true,\n        queryKey: 'caibirdurljsonparamskey',\n    },\n});\n\nconst fn = async () => {\n    // 仅获取response data\n    const res1 = await apiService.call.Test.getConfig({ obj: { a: '', b: 0 } }, { httpMethod: 'GET' });\n    // 获取完整的response body\n    const res2 = await apiService.call.Test.getConfig({ obj: { a: '', b: 0 } }, { isRaw: true });\n\n    console.log(res1);\n    console.log(res2);\n}\n\nfn();\n\n```\n\n## 核心模块\n\n### `Controller`装饰器\n\n1. 用于标记需要`controllersRouter中间件`(以下简称`中间件`)处理的controller\n\n1. options：\n\n    ```ts\n    type Options = {\n        // 命名后缀，一般不用传。 默认为'Controller'。\n        // 需要与中间件的controllerSuffix配合使用\n        suffix?: string\n    };\n    ```\n\n1. 核心概念：\n    1. action：controller中的一个方法，对应一个接口响应\n    1. filter：可灵活组合，拦截进入controller或action的请求，实现AOP\n\n### koa中间件：`controllersRouter`\n\n1. options字段说明:\n\n    ```ts\n    type Options = {\n        // 传入所有自定义的controllers，必填\n        Controllers: UninitControllers;\n\n        // koa-body的配置，传false可禁用自动 use koa-body\n        koaBodyOptions?: KoaBodyMiddlewareOptions | false;\n        \n        // koa-views的配置，传false可禁用自动 use koa-views\n        koaViewsOptions?: KoaViewsOptions | false;\n\n        // url路由前缀，一般需要与client端的ApiService对应配置一起使用。默认为空\n        prefix?: string;\n        \n        /* controller命名后缀，默认为'Controller'\n        若定义的名称为：TestController，那么在url路由和调用中的名称会识别为Test\n        若定义的名称为：TestCtrl，则保持不变 */\n        controllerSuffix?: string;\n        \n        /* 当路由里缺省controllerName或actionName时对应的默认值\n        可设置：\"localhost/\" \"localhost/user\" 这类短地址默认指向的controller和action */\n        defaultPathMatchs?: RoutePathMatchs;\n        \n        /* 全局默认filter，当controller和action没有同类filter时，会执行这里的filter */\n        globalFilters?: Filter.BindConfig[];\n        \n        /* 接口响应状态为success时，json body里的code。默认为0\n        如要自定义，需要与client端的ApiService对应配置一起使用 */\n        successCode?: number;\n        \n        // 开启后，get请求会从queryKey读取并解析reqData。需和ApiService的对应配置一起使用\n        transformGetMethodJsonData?: {\n            enabled: boolean;\n            queryKey: string;\n        };\n        \n        /* 可自定义传入action的reqData */\n        getRequestData?: (nowReqData: object, ctx: Context) => InnerDeclares.MayPromise<object>;\n        \n        /* 在接口设置json body前，可做最后修改 */\n        getJsonBody?: (nowJsonBody: object, context: Context) => InnerDeclares.MayPromise<object>;\n        \n        /* 在接口响应Response前，可做最后调整 */\n        onResponse?: (ctx: Context, next: Next) => InnerDeclares.MayPromise<void>;\n    };\n    ```\n\n### clinet端接口调用：`ApiService`\n\n1. `new ApiService<TControllers, TControllerSuffix>(initOptions)`\n    \n    1. 泛型TControllers：必须是个object，其中每个值都要是一个Controller，或是Controller的实例\n    \n    1. 泛型TControllerSuffix：一般不传，默认为'Controller'，和中间件的controllerSuffix配合使用\n        \n    1. Options: \n        ```ts\n        // 以下大部分字段，除了可以直接提供最终值，也可以提供一个同步或异步函数以获取最终值\n        type InitOptions = {\n            // 重试次数，默认不重试\n            retry?: number;\n            \n            // 默认为 \"/\"\n            origin?: ValueOrFunc<string, OmitUrlPreCallFuncParams>;\n            \n            // 请求api时统一在url上加的前缀，一般要和中间件的对应配置一起使用。默认为空\n            prefix?: ValueOrFunc<string, OmitUrlPreCallFuncParams>;\n            \n            // 当接口返回json数据时，哪些code会认为success状态，一般要和中间件的对应配置一起使用。\n            // 默认为：[0]\n            successCodes?: ValueOrFunc<SuccessCodes, PostCallFuncParams>;\n            \n            // 超时时间。默认为空\n            timeout?: PreCallValueOrFunc<number>;\n            \n            // 默认为POST\n            httpMethod?: PreCallValueOrFunc<HttpMethod>;\n            \n            // 默认为空，content-type等字段如果没有设置，会在请求时根据数据类型自动设置。\n            headers?: PreCallValueOrFunc<Record<string, number | string>>;\n            \n            // 默认的公共请求数据，每次请求都会带上，极端场景才会用到。\n            commonReqData?: PreCallValueOrFunc<ReqData>;\n            \n            // 公共的axios RequestConfig\n            baseRequestConfig?: PreCallValueOrFunc<BaseRequestConfig>;\n            \n            // 开启后，get请求会将reqData序列化后用queryKey传递。需和中间件的对应配置一起使用\n            transformGetMethodJsonData?: {\n                enabled: boolean;\n                queryKey: string;\n            };\n            \n            // 在发起请求前，最后调整axios RequestConfig\n            getFinallyRequestConfig?: (params: PreCallFuncParams & {\n                nowRequestConfig: RequestConfig;\n            }) => InnerDeclares.MayPromise<RequestConfig>;\n            \n            // 获取到Response后，可进行预处理\n            onReturnResponse?: (params: PostCallFuncParams) => InnerDeclares.MayPromise<Response<ResData, RawResponse>>;\n            \n            // 异常处理\n            onError?: (error: unknown, params: OmitUrlPreCallFuncParams) => InnerDeclares.MayPromise<unknown>;\n        };\n        ```\n2. `apiService.call.controller.action(reqData, callOptions)`\n    \n    1. reqData：根据对应的controller.action自动映射类型\n    \n    1. callOptions：\n        ```ts\n        // 可传所有InitOptions中的字段，并覆盖\n        type CallOptions = InitOptions & {\n            /* 为false时，会先判断code是否success，非success的code会直接抛异常 \n            为true时会得到原始接口回包，开发者需自行判断状态码code是否符合预期。\n            对应的返回类型也会因isRaw的值不同而变化。\n            默认为false */\n            isRaw?: boolean;\n            \n            /* 是否使用formData请求接口 */\n            isFormData?: boolean;\n        }\n        ```\n    1. return类型:  \n          1. isRaw为false或不传，return的类型为接口数据类型(response Data)\n          1. isRaw为true时，return的类型为原始回包(response Body)\n\n### 其它模块\n1. View：\n    \n    用于让action响应除了json body以外的数据类型。目前添加了几个常用的，之后会持续丰富：\n    1. View.Redirect：302跳转\n    2. View.StaticFile：返回静态文件\n    3. View.Render：渲染html\n    4. View.Buffer：返回buffer数据\n    5. View.Xml：返回xml数据\n1. createFilter：\n    \n    创建自定义filter，如权限验证等。\n\n    1. 内置filter：httpMethodFilter","readmeFilename":"README.md","gitHead":"231713f5fd88dfc474ae67164b0791f775c88ea0","types":"./dist/index.d.ts","_nodeVersion":"21.0.0","_npmVersion":"10.2.0","dist":{"integrity":"sha512-WyPiJfQ/HJqPqRy6eKSRifHVX3HO22hyicsH6DTls2zGcfNlTIK8X0e68xMBFi1KDGGrcyQb+ew2267K9xc2Vw==","shasum":"286bb89dd2a4b6cf959eb1ddab9936638f8d2ce0","tarball":"https://registry.npmjs.org/caibird/-/caibird-4.0.0-rc.10.tgz","fileCount":66,"unpackedSize":113729,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD0DbdsW/As86f/YmZl0cu4O3sVzYB/83ZiUpQC+S2ezwIgA7rtUa+soGkGBKtoGwphaHT8RMHO49AVXOF6HdvMTvY="}]},"_npmUser":{"name":"xiaocaibird","email":"332877152@qq.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"332877152@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_4.0.0-rc.10_1701620631614_0.6201289649452346"},"_hasShrinkwrap":false},"4.0.0-rc.11":{"name":"caibird","version":"4.0.0-rc.11","description":"## 序","main":"dist/index.js","scripts":{"dist":"rimraf dist && tsc --outDir dist && node bin/rename2mjs.js && tsc --outDir dist --moduleResolution node --module commonjs --verbatimModuleSyntax false"},"author":{"name":"caibird"},"license":"MIT","devDependencies":{"@types/koa":"2.13.12","@types/koa-send":"4.1.6","@types/koa__router":"12.0.4","@types/lodash":"4.14.202","rimraf":"5.0.5","typescript":"5.3.2"},"dependencies":{"@koa/router":"12.0.1","@ladjs/koa-views":"9.0.0","axios":"1.6.2","form-data":"4.0.0","koa":"2.14.2","koa-body":"6.0.1","koa-send":"5.0.1","lodash":"4.17.21","reflect-metadata":"0.1.13","tslib":"2.6.2","url-join":"5.0.0"},"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"},"./*":"./dist/*","./client":{"import":"./dist/client/index.mjs","require":"./dist/client/index.js"},"./@types":{"import":"./dist/@types/index.mjs","require":"./dist/@types/index.js"}},"_id":"caibird@4.0.0-rc.11","readme":"# caibird\n\n## 序\n\n&emsp;&emsp;我一直认为typescript对前端的代码质量和开发效率的提升意义非常重大。\n\n&emsp;&emsp;所谓“善战者无赫赫之功，善医者无煌煌之名”，如果能把typescript用好，它就是前端代码质量和开发效率的“善战者和善医者”。\n\n## 版本\n\n    v4.0-RC\n\n&emsp;&emsp;3.0之前也实现了类型同构，但整体功能非常重，接入成本也比较高。\n\n&emsp;&emsp;4.0后将专注于做一个`MVC+DI+类型同构`的通用型框架，接入成本低且将拥抱开源。\n\n## 安装\n\n    npm i caibird@rc\n\n## 简介\n\n&emsp;&emsp;首先说明，这里的后端指的nodejs服务端。现在大部分前端项目，都有自己的nodejs服务，可能仅做为接入层和简单的BFF层，也可能有更多的后端职责。\n\n&emsp;&emsp;一般情况下，nodejs端(以下统称为：`server端`)的代码也会和前端(以下统称为：`client端`)的代码放在一个工程里管理。可即使在同一个工程里，当我们在server端开发完业务api，并在client端调用时，想要获取api的字段类型，通常要做不少额外工作。\n\n&emsp;&emsp;另外当我们需要快速从调用方(client端)的逻辑，跳转到被调用方(server端)的逻辑时，也不能像一个函数调用一样快速跳转。\n\n\n&emsp;&emsp;所以这里抛出一个合理的猜想：\n\n    既然在一个工程里了，是否有办法能让业务功能在开发过程中，\n    零成本的接入client端到server端的类型检查以及快速调试？\n\n&emsp;&emsp;于是我就想到了要做“前后端类型同构”，关键能力如下：\n\n1. 提供client+server的跨端类型同构能力\n1. 提供server端api(nodejs api)的方法级调用能力\n1. 完全基于ts和koa，无需任何中间层和额外的协议文件，在开发时能随时响应api的字段变化\n1. 在开发时能直接从client端跳转到server端的api代码或参数字段\n\n## server端示例\n\n```ts\n// src/server/index.ts\n// 服务端入口\nimport Koa from 'koa';\nimport { controllersRouter } from 'caibird';\n\nimport * as Controllers from './controllers';\n\nconst app = new Koa();\n\napp.use(controllersRouter({\n    Controllers\n}, app));\n\napp.listen(8080, '127.0.0.1');\n\n```\n\n```ts\n// src/server/controllers/test.ts\nimport { Controller, httpMethodFilter, View, BaseController } from 'caibird';\n\n@httpMethodFilter('POST')\n@Controller()\nexport class TestController extends BaseController {\n    @httpMethodFilter(['POST', 'GET'])\n    public async getConfig(reqData: { obj: { a: string, b: number } }) {\n        return { prop12: true };\n    }\n\n    public async getMsg() {\n        return '你好';\n    }\n\n    @httpMethodFilter('GET')\n    public async toUrl(reqData: { url: string }) {\n        return View.Redirect(reqData.url);\n    }\n}\n\n```\n\n## client端示例\n\n```ts\n\nimport { ApiService } from 'caibird/client';\n\n// CaibirdGlobal 是一个跨端的全局类型命名空间，CaibirdGlobal.Controllers是所有server端的Controller类型\nconst apiService = new ApiService<CaibirdGlobal.Controllers>({\n    transformGetMethodJsonData: {\n        enabled: true,\n        queryKey: 'caibirdurljsonparamskey',\n    },\n});\n\nconst fn = async () => {\n    // 仅获取response data\n    const res1 = await apiService.call.Test.getConfig({ obj: { a: '', b: 0 } }, { httpMethod: 'GET' });\n    // 获取完整的response body\n    const res2 = await apiService.call.Test.getConfig({ obj: { a: '', b: 0 } }, { isRaw: true });\n\n    console.log(res1);\n    console.log(res2);\n}\n\nfn();\n\n```\n\n## 核心模块\n\n### `Controller`装饰器\n\n1. 用于标记需要`controllersRouter中间件`(以下简称`中间件`)处理的controller\n\n1. options：\n\n    ```ts\n    type Options = {\n        // 命名后缀，一般不用传。 默认为'Controller'。\n        // 需要与中间件的controllerSuffix配合使用\n        suffix?: string\n    };\n    ```\n\n1. 核心概念：\n    1. action：controller中的一个方法，对应一个接口响应\n    1. filter：可灵活组合，拦截进入controller或action的请求，实现AOP\n\n### koa中间件：`controllersRouter`\n\n1. options字段说明:\n\n    ```ts\n    type Options = {\n        // 传入所有自定义的controllers，必填\n        Controllers: UninitControllers;\n\n        // koa-body的配置，传false可禁用自动 use koa-body\n        koaBodyOptions?: KoaBodyMiddlewareOptions | false;\n        \n        // koa-views的配置，传false可禁用自动 use koa-views\n        koaViewsOptions?: KoaViewsOptions | false;\n\n        // url路由前缀，一般需要与client端的ApiService对应配置一起使用。默认为空\n        prefix?: string;\n        \n        /* controller命名后缀，默认为'Controller'\n        若定义的名称为：TestController，那么在url路由和调用中的名称会识别为Test\n        若定义的名称为：TestCtrl，则保持不变 */\n        controllerSuffix?: string;\n        \n        /* 当路由里缺省controllerName或actionName时对应的默认值\n        可设置：\"localhost/\" \"localhost/user\" 这类短地址默认指向的controller和action */\n        defaultPathMatchs?: RoutePathMatchs;\n        \n        /* 全局默认filter，当controller和action没有同类filter时，会执行这里的filter */\n        globalFilters?: Filter.BindConfig[];\n        \n        /* 接口响应状态为success时，json body里的code。默认为0\n        如要自定义，需要与client端的ApiService对应配置一起使用 */\n        successCode?: number;\n        \n        // 开启后，get请求会从queryKey读取并解析reqData。需和ApiService的对应配置一起使用\n        transformGetMethodJsonData?: {\n            enabled: boolean;\n            queryKey: string;\n        };\n        \n        /* 可自定义传入action的reqData */\n        getRequestData?: (nowReqData: object, ctx: Context) => InnerDeclares.MayPromise<object>;\n        \n        /* 在接口设置json body前，可做最后修改 */\n        getJsonBody?: (nowJsonBody: object, context: Context) => InnerDeclares.MayPromise<object>;\n        \n        /* 在接口响应Response前，可做最后调整 */\n        onResponse?: (ctx: Context, next: Next) => InnerDeclares.MayPromise<void>;\n    };\n    ```\n\n### clinet端接口调用：`ApiService`\n\n1. `new ApiService<TControllers, TControllerSuffix>(initOptions)`\n    \n    1. 泛型TControllers：必须是个object，其中每个值都要是一个Controller，或是Controller的实例\n    \n    1. 泛型TControllerSuffix：一般不传，默认为'Controller'，和中间件的controllerSuffix配合使用\n        \n    1. Options: \n        ```ts\n        // 以下大部分字段，除了可以直接提供最终值，也可以提供一个同步或异步函数以获取最终值\n        type InitOptions = {\n            // 重试次数，默认不重试\n            retry?: number;\n            \n            // 默认为 \"/\"\n            origin?: ValueOrFunc<string, OmitUrlPreCallFuncParams>;\n            \n            // 请求api时统一在url上加的前缀，一般要和中间件的对应配置一起使用。默认为空\n            prefix?: ValueOrFunc<string, OmitUrlPreCallFuncParams>;\n            \n            // 当接口返回json数据时，哪些code会认为success状态，一般要和中间件的对应配置一起使用。\n            // 默认为：[0]\n            successCodes?: ValueOrFunc<SuccessCodes, PostCallFuncParams>;\n            \n            // 超时时间。默认为空\n            timeout?: PreCallValueOrFunc<number>;\n            \n            // 默认为POST\n            httpMethod?: PreCallValueOrFunc<HttpMethod>;\n            \n            // 默认为空，content-type等字段如果没有设置，会在请求时根据数据类型自动设置。\n            headers?: PreCallValueOrFunc<Record<string, number | string>>;\n            \n            // 默认的公共请求数据，每次请求都会带上，极端场景才会用到。\n            commonReqData?: PreCallValueOrFunc<ReqData>;\n            \n            // 公共的axios RequestConfig\n            baseRequestConfig?: PreCallValueOrFunc<BaseRequestConfig>;\n            \n            // 开启后，get请求会将reqData序列化后用queryKey传递。需和中间件的对应配置一起使用\n            transformGetMethodJsonData?: {\n                enabled: boolean;\n                queryKey: string;\n            };\n            \n            // 在发起请求前，最后调整axios RequestConfig\n            getFinallyRequestConfig?: (params: PreCallFuncParams & {\n                nowRequestConfig: RequestConfig;\n            }) => InnerDeclares.MayPromise<RequestConfig>;\n            \n            // 获取到Response后，可进行预处理\n            onReturnResponse?: (params: PostCallFuncParams) => InnerDeclares.MayPromise<Response<ResData, RawResponse>>;\n            \n            // 异常处理\n            onError?: (error: unknown, params: OmitUrlPreCallFuncParams) => InnerDeclares.MayPromise<unknown>;\n        };\n        ```\n2. `apiService.call.controller.action(reqData, callOptions)`\n    \n    1. reqData：根据对应的controller.action自动映射类型\n    \n    1. callOptions：\n        ```ts\n        // 可传所有InitOptions中的字段，并覆盖\n        type CallOptions = InitOptions & {\n            /* 为false时，会先判断code是否success，非success的code会直接抛异常 \n            为true时会得到原始接口回包，开发者需自行判断状态码code是否符合预期。\n            对应的返回类型也会因isRaw的值不同而变化。\n            默认为false */\n            isRaw?: boolean;\n            \n            /* 是否使用formData请求接口 */\n            isFormData?: boolean;\n        }\n        ```\n    1. return类型:  \n          1. isRaw为false或不传，return的类型为接口数据类型(response Data)\n          1. isRaw为true时，return的类型为原始回包(response Body)\n\n### 其它模块\n1. View：\n    \n    用于让action响应除了json body以外的数据类型。目前添加了几个常用的，之后会持续丰富：\n    1. View.Redirect：302跳转\n    2. View.StaticFile：返回静态文件\n    3. View.Render：渲染html\n    4. View.Buffer：返回buffer数据\n    5. View.Xml：返回xml数据\n1. createFilter：\n    \n    创建自定义filter，如权限验证等。\n\n    1. 内置filter：httpMethodFilter","readmeFilename":"README.md","gitHead":"b0e4ce057f9c9636687de56cb216560894f92fad","types":"./dist/index.d.ts","_nodeVersion":"21.0.0","_npmVersion":"10.2.0","dist":{"integrity":"sha512-2Pe4/FiwDyVrI3UnlaB3t5+beytM+6qy4nKkmmTJ9z35MDt4eQDi0unJOOy+6C7voz3rWzBvslYiaPsIjZf5Bg==","shasum":"60fce5938f175544772b18631f8b4ced24f75f2d","tarball":"https://registry.npmjs.org/caibird/-/caibird-4.0.0-rc.11.tgz","fileCount":66,"unpackedSize":113734,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDqwrR0iPtPs0m+1x5jjtaIJA45sUXEDNZ2hjEHRsnppAIhAO4p9bySl30MZmL+1/tUJb6HMfybC69w9yyAmpePyAsn"}]},"_npmUser":{"name":"xiaocaibird","email":"332877152@qq.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"332877152@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_4.0.0-rc.11_1701620778439_0.05815771101423439"},"_hasShrinkwrap":false},"4.0.0-rc.12":{"name":"caibird","version":"4.0.0-rc.12","description":"## 序","main":"dist/index.js","scripts":{"dist":"rimraf dist && tsc --outDir dist && node bin/rename2mjs.js && tsc --outDir dist --moduleResolution node --module commonjs --verbatimModuleSyntax false"},"author":{"name":"caibird"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/xiaocaibird/caibird-new.git"},"homepage":"https://github.com/xiaocaibird/caibird-new","devDependencies":{"@types/koa":"2.13.12","@types/koa-send":"4.1.6","@types/koa__router":"12.0.4","@types/lodash":"4.14.202","rimraf":"5.0.5","typescript":"5.3.2"},"dependencies":{"@koa/router":"12.0.1","@ladjs/koa-views":"9.0.0","axios":"1.6.2","form-data":"4.0.0","koa":"2.14.2","koa-body":"6.0.1","koa-send":"5.0.1","lodash":"4.17.21","reflect-metadata":"0.1.13","tslib":"2.6.2","url-join":"5.0.0"},"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"},"./*":"./dist/*","./client":{"import":"./dist/client/index.mjs","require":"./dist/client/index.js"},"./@types":{"import":"./dist/@types/index.mjs","require":"./dist/@types/index.js"}},"types":"./dist/index.d.ts","readme":"# caibird\n\n## 序\n\n&emsp;&emsp;我一直认为typescript对前端的代码质量和开发效率的提升意义非常重大。\n\n&emsp;&emsp;所谓“善战者无赫赫之功，善医者无煌煌之名”，如果能把typescript用好，它就是前端代码质量和开发效率的“善战者和善医者”。\n\n## 版本\n\n    v4.0-RC\n\n&emsp;&emsp;3.0之前也实现了类型同构，但整体功能非常重，接入成本也比较高。\n\n&emsp;&emsp;4.0后将专注于做一个`MVC+DI+类型同构`的通用型框架，接入成本低且将拥抱开源。\n\n## 安装\n\n    npm i caibird@rc\n\n## 简介\n\n&emsp;&emsp;首先说明，这里的后端指的nodejs服务端。现在大部分前端项目，都有自己的nodejs服务，可能仅做为接入层和简单的BFF层，也可能有更多的后端职责。\n\n&emsp;&emsp;一般情况下，nodejs端(以下统称为：`server端`)的代码也会和前端(以下统称为：`client端`)的代码放在一个工程里管理。可即使在同一个工程里，当我们在server端开发完业务api，并在client端调用时，想要获取api的字段类型，通常要做不少额外工作。\n\n&emsp;&emsp;另外当我们需要快速从调用方(client端)的逻辑，跳转到被调用方(server端)的逻辑时，也不能像一个函数调用一样快速跳转。\n\n\n&emsp;&emsp;所以这里抛出一个合理的猜想：\n\n    既然在一个工程里了，是否有办法能让业务功能在开发过程中，\n    零成本的接入client端到server端的类型检查以及快速调试？\n\n&emsp;&emsp;于是我就想到了要做“前后端类型同构”，关键能力如下：\n\n1. 提供client+server的跨端类型同构能力\n1. 提供server端api(nodejs api)的方法级调用能力\n1. 完全基于ts和koa，无需任何中间层和额外的协议文件，在开发时能随时响应api的字段变化\n1. 在开发时能直接从client端跳转到server端的api代码或参数字段\n\n## server端示例\n\n```ts\n// src/server/index.ts\n// 服务端入口\nimport Koa from 'koa';\nimport { controllersRouter } from 'caibird';\n\nimport * as Controllers from './controllers';\n\nconst app = new Koa();\n\napp.use(controllersRouter({\n    Controllers\n}, app));\n\napp.listen(8080, '127.0.0.1');\n\n```\n\n```ts\n// src/server/controllers/test.ts\nimport { Controller, httpMethodFilter, View, BaseController } from 'caibird';\n\n@httpMethodFilter('POST')\n@Controller()\nexport class TestController extends BaseController {\n    @httpMethodFilter(['POST', 'GET'])\n    public async getConfig(reqData: { obj: { a: string, b: number } }) {\n        return { prop12: true };\n    }\n\n    public async getMsg() {\n        return '你好';\n    }\n\n    @httpMethodFilter('GET')\n    public async toUrl(reqData: { url: string }) {\n        return View.Redirect(reqData.url);\n    }\n}\n\n```\n\n## client端示例\n\n```ts\n\nimport { ApiService } from 'caibird/client';\n\n// CaibirdGlobal 是一个跨端的全局类型命名空间，CaibirdGlobal.Controllers是所有server端的Controller类型\nconst apiService = new ApiService<CaibirdGlobal.Controllers>({\n    transformGetMethodJsonData: {\n        enabled: true,\n        queryKey: 'caibirdurljsonparamskey',\n    },\n});\n\nconst fn = async () => {\n    // 仅获取response data\n    const res1 = await apiService.call.Test.getConfig({ obj: { a: '', b: 0 } }, { httpMethod: 'GET' });\n    // 获取完整的response body\n    const res2 = await apiService.call.Test.getConfig({ obj: { a: '', b: 0 } }, { isRaw: true });\n\n    console.log(res1);\n    console.log(res2);\n}\n\nfn();\n\n```\n\n## 核心模块\n\n### `Controller`装饰器\n\n1. 用于标记需要`controllersRouter中间件`(以下简称`中间件`)处理的controller\n\n1. options：\n\n    ```ts\n    type Options = {\n        // 命名后缀，一般不用传。 默认为'Controller'。\n        // 需要与中间件的controllerSuffix配合使用\n        suffix?: string\n    };\n    ```\n\n1. 核心概念：\n    1. action：controller中的一个方法，对应一个接口响应\n    1. filter：可灵活组合，拦截进入controller或action的请求，实现AOP\n\n### koa中间件：`controllersRouter`\n\n1. options字段说明:\n\n    ```ts\n    type Options = {\n        // 传入所有自定义的controllers，必填\n        Controllers: UninitControllers;\n\n        // koa-body的配置，传false可禁用自动 use koa-body\n        koaBodyOptions?: KoaBodyMiddlewareOptions | false;\n        \n        // koa-views的配置，传false可禁用自动 use koa-views\n        koaViewsOptions?: KoaViewsOptions | false;\n\n        // url路由前缀，一般需要与client端的ApiService对应配置一起使用。默认为空\n        prefix?: string;\n        \n        /* controller命名后缀，默认为'Controller'\n        若定义的名称为：TestController，那么在url路由和调用中的名称会识别为Test\n        若定义的名称为：TestCtrl，则保持不变 */\n        controllerSuffix?: string;\n        \n        /* 当路由里缺省controllerName或actionName时对应的默认值\n        可设置：\"localhost/\" \"localhost/user\" 这类短地址默认指向的controller和action */\n        defaultPathMatchs?: RoutePathMatchs;\n        \n        /* 全局默认filter，当controller和action没有同类filter时，会执行这里的filter */\n        globalFilters?: Filter.BindConfig[];\n        \n        /* 接口响应状态为success时，json body里的code。默认为0\n        如要自定义，需要与client端的ApiService对应配置一起使用 */\n        successCode?: number;\n        \n        // 开启后，get请求会从queryKey读取并解析reqData。需和ApiService的对应配置一起使用\n        transformGetMethodJsonData?: {\n            enabled: boolean;\n            queryKey: string;\n        };\n        \n        /* 可自定义传入action的reqData */\n        getRequestData?: (nowReqData: object, ctx: Context) => InnerDeclares.MayPromise<object>;\n        \n        /* 在接口设置json body前，可做最后修改 */\n        getJsonBody?: (nowJsonBody: object, context: Context) => InnerDeclares.MayPromise<object>;\n        \n        /* 在接口响应Response前，可做最后调整 */\n        onResponse?: (ctx: Context, next: Next) => InnerDeclares.MayPromise<void>;\n    };\n    ```\n\n### clinet端接口调用：`ApiService`\n\n1. `new ApiService<TControllers, TControllerSuffix>(initOptions)`\n    \n    1. 泛型TControllers：必须是个object，其中每个值都要是一个Controller，或是Controller的实例\n    \n    1. 泛型TControllerSuffix：一般不传，默认为'Controller'，和中间件的controllerSuffix配合使用\n        \n    1. Options: \n        ```ts\n        // 以下大部分字段，除了可以直接提供最终值，也可以提供一个同步或异步函数以获取最终值\n        type InitOptions = {\n            // 重试次数，默认不重试\n            retry?: number;\n            \n            // 默认为 \"/\"\n            origin?: ValueOrFunc<string, OmitUrlPreCallFuncParams>;\n            \n            // 请求api时统一在url上加的前缀，一般要和中间件的对应配置一起使用。默认为空\n            prefix?: ValueOrFunc<string, OmitUrlPreCallFuncParams>;\n            \n            // 当接口返回json数据时，哪些code会认为success状态，一般要和中间件的对应配置一起使用。\n            // 默认为：[0]\n            successCodes?: ValueOrFunc<SuccessCodes, PostCallFuncParams>;\n            \n            // 超时时间。默认为空\n            timeout?: PreCallValueOrFunc<number>;\n            \n            // 默认为POST\n            httpMethod?: PreCallValueOrFunc<HttpMethod>;\n            \n            // 默认为空，content-type等字段如果没有设置，会在请求时根据数据类型自动设置。\n            headers?: PreCallValueOrFunc<Record<string, number | string>>;\n            \n            // 默认的公共请求数据，每次请求都会带上，极端场景才会用到。\n            commonReqData?: PreCallValueOrFunc<ReqData>;\n            \n            // 公共的axios RequestConfig\n            baseRequestConfig?: PreCallValueOrFunc<BaseRequestConfig>;\n            \n            // 开启后，get请求会将reqData序列化后用queryKey传递。需和中间件的对应配置一起使用\n            transformGetMethodJsonData?: {\n                enabled: boolean;\n                queryKey: string;\n            };\n            \n            // 在发起请求前，最后调整axios RequestConfig\n            getFinallyRequestConfig?: (params: PreCallFuncParams & {\n                nowRequestConfig: RequestConfig;\n            }) => InnerDeclares.MayPromise<RequestConfig>;\n            \n            // 获取到Response后，可进行预处理\n            onReturnResponse?: (params: PostCallFuncParams) => InnerDeclares.MayPromise<Response<ResData, RawResponse>>;\n            \n            // 异常处理\n            onError?: (error: unknown, params: OmitUrlPreCallFuncParams) => InnerDeclares.MayPromise<unknown>;\n        };\n        ```\n2. `apiService.call.controller.action(reqData, callOptions)`\n    \n    1. reqData：根据对应的controller.action自动映射类型\n    \n    1. callOptions：\n        ```ts\n        // 可传所有InitOptions中的字段，并覆盖\n        type CallOptions = InitOptions & {\n            /* 为false时，会先判断code是否success，非success的code会直接抛异常 \n            为true时会得到原始接口回包，开发者需自行判断状态码code是否符合预期。\n            对应的返回类型也会因isRaw的值不同而变化。\n            默认为false */\n            isRaw?: boolean;\n            \n            /* 是否使用formData请求接口 */\n            isFormData?: boolean;\n        }\n        ```\n    1. return类型:  \n          1. isRaw为false或不传，return的类型为接口数据类型(response Data)\n          1. isRaw为true时，return的类型为原始回包(response Body)\n\n### 其它模块\n1. View：\n    \n    用于让action响应除了json body以外的数据类型。目前添加了几个常用的，之后会持续丰富：\n    1. View.Redirect：302跳转\n    2. View.StaticFile：返回静态文件\n    3. View.Render：渲染html\n    4. View.Buffer：返回buffer数据\n    5. View.Xml：返回xml数据\n1. createFilter：\n    \n    创建自定义filter，如权限验证等。\n\n    1. 内置filter：httpMethodFilter","readmeFilename":"README.md","gitHead":"52f48ac647cf4858612710e48a0f7548af3a8773","bugs":{"url":"https://github.com/xiaocaibird/caibird-new/issues"},"_id":"caibird@4.0.0-rc.12","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-8pSPuOnILE+VMkZwM35YWJRDE6J48k55ryPttH1NweS4bIBQdEggL4QKEkziR7TeviK7jC1jX92ur7KwctQp5A==","shasum":"4e834ed581edd776b8e99a935ab3e962466b61b6","tarball":"https://registry.npmjs.org/caibird/-/caibird-4.0.0-rc.12.tgz","fileCount":66,"unpackedSize":113856,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICH/6bdZGRLptsNiPv16mhITbITRL4RTKB1YXbwdwlpNAiBlAkpNqmKioPRR305zEcWxW7o3rCyWc8ypGBMphstO/g=="}]},"_npmUser":{"name":"xiaocaibird","email":"332877152@qq.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"332877152@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_4.0.0-rc.12_1701626130951_0.0414603338676065"},"_hasShrinkwrap":false},"4.0.0-rc.13":{"name":"caibird","version":"4.0.0-rc.13","description":"## 序","main":"dist/index.js","scripts":{"dist":"rimraf dist && tsc --outDir dist && node bin/rename2mjs.js && tsc --outDir dist --moduleResolution node --module commonjs --verbatimModuleSyntax false"},"author":{"name":"caibird"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/xiaocaibird/caibird-new.git"},"homepage":"https://github.com/xiaocaibird/caibird-new","devDependencies":{"@types/koa":"2.13.12","@types/koa-send":"4.1.6","@types/koa__router":"12.0.4","@types/lodash":"4.14.202","rimraf":"5.0.5","typescript":"5.3.2"},"dependencies":{"@koa/router":"12.0.1","@ladjs/koa-views":"9.0.0","axios":"1.6.2","form-data":"4.0.0","koa":"2.14.2","koa-body":"6.0.1","koa-send":"5.0.1","lodash":"4.17.21","reflect-metadata":"0.1.13","tslib":"2.6.2","url-join":"5.0.0"},"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"},"./*":"./dist/*","./client":{"import":"./dist/client/index.mjs","require":"./dist/client/index.js"},"./@types":{"import":"./dist/@types/index.mjs","require":"./dist/@types/index.js"}},"types":"./dist/index.d.ts","readme":"# caibird\n\n## 序\n\n&emsp;&emsp;我一直认为typescript对前端的代码质量和开发效率的提升意义非常重大。\n\n&emsp;&emsp;所谓“善战者无赫赫之功，善医者无煌煌之名”，如果能把typescript用好，它就是前端代码质量和开发效率的“善战者和善医者”。\n\n## 版本\n\n    v4.0-RC\n\n&emsp;&emsp;3.0之前也实现了类型同构，但整体功能非常重，接入成本也比较高。\n\n&emsp;&emsp;4.0后将专注于做一个`MVC+DI+类型同构`的通用型框架，接入成本低且将拥抱开源。\n\n## 安装\n\n    npm i caibird@rc\n\n## 仓库\n\n源码：`https://github.com/xiaocaibird/caibird-new`\n\ndemo: `https://github.com/xiaocaibird/caibird-demo`\n\n## 简介\n\n&emsp;&emsp;首先说明，这里的后端指的nodejs服务端。现在大部分前端项目，都有自己的nodejs服务，可能仅做为接入层和简单的BFF层，也可能有更多的后端职责。\n\n&emsp;&emsp;一般情况下，nodejs端(以下统称为：`server端`)的代码也会和前端(以下统称为：`client端`)的代码放在一个工程里管理。可即使在同一个工程里，当我们在server端开发完业务api，并在client端调用时，想要获取api的字段类型，通常要做不少额外工作。\n\n&emsp;&emsp;另外当我们需要快速从调用方(client端)的逻辑，跳转到被调用方(server端)的逻辑时，也不能像一个函数调用一样快速跳转。\n\n\n&emsp;&emsp;所以这里抛出一个合理的猜想：\n\n    既然在一个工程里了，是否有办法能让业务功能在开发过程中，\n    零成本的接入client端到server端的类型检查以及快速调试？\n\n&emsp;&emsp;于是我就想到了要做“前后端类型同构”，关键能力如下：\n\n1. 提供client+server的跨端类型同构能力\n1. 提供server端api(nodejs api)的方法级调用能力\n1. 完全基于ts和koa，无需任何中间层和额外的协议文件，在开发时能随时响应api的字段变化\n1. 在开发时能直接从client端跳转到server端的api代码或参数字段\n\n## server端示例\n\n```ts\n// src/server/index.ts\n// 服务端入口\nimport Koa from 'koa';\nimport { controllersRouter } from 'caibird';\n\nimport * as Controllers from './controllers';\n\nconst app = new Koa();\n\napp.use(controllersRouter({\n    Controllers\n}, app));\n\napp.listen(8080, '127.0.0.1');\n\n```\n\n```ts\n// src/server/controllers/test.ts\nimport { Controller, httpMethodFilter, View, BaseController } from 'caibird';\n\n@httpMethodFilter('POST')\n@Controller()\nexport class TestController extends BaseController {\n    @httpMethodFilter(['POST', 'GET'])\n    public async getConfig(reqData: { obj: { a: string, b: number } }) {\n        return { prop12: true };\n    }\n\n    public async getMsg() {\n        return '你好';\n    }\n\n    @httpMethodFilter('GET')\n    public async toUrl(reqData: { url: string }) {\n        return View.Redirect(reqData.url);\n    }\n}\n\n```\n\n## client端示例\n\n```ts\n\nimport { ApiService } from 'caibird/client';\n\n// CaibirdGlobal 是一个跨端的全局类型命名空间，CaibirdGlobal.Controllers是所有server端的Controller类型\nconst apiService = new ApiService<CaibirdGlobal.Controllers>({\n    transformGetMethodJsonData: {\n        enabled: true,\n        queryKey: 'caibirdurljsonparamskey',\n    },\n});\n\nconst fn = async () => {\n    // 仅获取response data\n    const res1 = await apiService.call.Test.getConfig({ obj: { a: '', b: 0 } }, { httpMethod: 'GET' });\n    // 获取完整的response body\n    const res2 = await apiService.call.Test.getConfig({ obj: { a: '', b: 0 } }, { isRaw: true });\n\n    console.log(res1);\n    console.log(res2);\n}\n\nfn();\n\n```\n\n## 核心模块\n\n### `Controller`装饰器\n\n1. 用于标记需要`controllersRouter中间件`(以下简称`中间件`)处理的controller\n\n1. options：\n\n    ```ts\n    type Options = {\n        // 命名后缀，一般不用传。 默认为'Controller'。\n        // 需要与中间件的controllerSuffix配合使用\n        suffix?: string\n    };\n    ```\n\n1. 核心概念：\n    1. action：controller中的一个方法，对应一个接口响应\n    1. filter：可灵活组合，拦截进入controller或action的请求，实现AOP\n\n### koa中间件：`controllersRouter`\n\n1. options字段说明:\n\n    ```ts\n    type Options = {\n        // 传入所有自定义的controllers，必填\n        Controllers: UninitControllers;\n\n        // koa-body的配置，传false可禁用自动 use koa-body\n        koaBodyOptions?: KoaBodyMiddlewareOptions | false;\n        \n        // koa-views的配置，传false可禁用自动 use koa-views\n        koaViewsOptions?: KoaViewsOptions | false;\n\n        // url路由前缀，一般需要与client端的ApiService对应配置一起使用。默认为空\n        prefix?: string;\n        \n        /* controller命名后缀，默认为'Controller'\n        若定义的名称为：TestController，那么在url路由和调用中的名称会识别为Test\n        若定义的名称为：TestCtrl，则保持不变 */\n        controllerSuffix?: string;\n        \n        /* 当路由里缺省controllerName或actionName时对应的默认值\n        可设置：\"localhost/\" \"localhost/user\" 这类短地址默认指向的controller和action */\n        defaultPathMatchs?: RoutePathMatchs;\n        \n        /* 全局默认filter，当controller和action没有同类filter时，会执行这里的filter */\n        globalFilters?: Filter.BindConfig[];\n        \n        /* 接口响应状态为success时，json body里的code。默认为0\n        如要自定义，需要与client端的ApiService对应配置一起使用 */\n        successCode?: number;\n        \n        // 开启后，get请求会从queryKey读取并解析reqData。需和ApiService的对应配置一起使用\n        transformGetMethodJsonData?: {\n            enabled: boolean;\n            queryKey: string;\n        };\n        \n        /* 可自定义传入action的reqData */\n        getRequestData?: (nowReqData: object, ctx: Context) => InnerDeclares.MayPromise<object>;\n        \n        /* 在接口设置json body前，可做最后修改 */\n        getJsonBody?: (nowJsonBody: object, context: Context) => InnerDeclares.MayPromise<object>;\n        \n        /* 在接口响应Response前，可做最后调整 */\n        onResponse?: (ctx: Context, next: Next) => InnerDeclares.MayPromise<void>;\n    };\n    ```\n\n### clinet端接口调用：`ApiService`\n\n1. `new ApiService<TControllers, TControllerSuffix>(initOptions)`\n    \n    1. 泛型TControllers：必须是个object，其中每个值都要是一个Controller，或是Controller的实例\n    \n    1. 泛型TControllerSuffix：一般不传，默认为'Controller'，和中间件的controllerSuffix配合使用\n        \n    1. Options: \n        ```ts\n        // 以下大部分字段，除了可以直接提供最终值，也可以提供一个同步或异步函数以获取最终值\n        type InitOptions = {\n            // 重试次数，默认不重试\n            retry?: number;\n            \n            // 默认为 \"/\"\n            origin?: ValueOrFunc<string, OmitUrlPreCallFuncParams>;\n            \n            // 请求api时统一在url上加的前缀，一般要和中间件的对应配置一起使用。默认为空\n            prefix?: ValueOrFunc<string, OmitUrlPreCallFuncParams>;\n            \n            // 当接口返回json数据时，哪些code会认为success状态，一般要和中间件的对应配置一起使用。\n            // 默认为：[0]\n            successCodes?: ValueOrFunc<SuccessCodes, PostCallFuncParams>;\n            \n            // 超时时间。默认为空\n            timeout?: PreCallValueOrFunc<number>;\n            \n            // 默认为POST\n            httpMethod?: PreCallValueOrFunc<HttpMethod>;\n            \n            // 默认为空，content-type等字段如果没有设置，会在请求时根据数据类型自动设置。\n            headers?: PreCallValueOrFunc<Record<string, number | string>>;\n            \n            // 默认的公共请求数据，每次请求都会带上，极端场景才会用到。\n            commonReqData?: PreCallValueOrFunc<ReqData>;\n            \n            // 公共的axios RequestConfig\n            baseRequestConfig?: PreCallValueOrFunc<BaseRequestConfig>;\n            \n            // 开启后，get请求会将reqData序列化后用queryKey传递。需和中间件的对应配置一起使用\n            transformGetMethodJsonData?: {\n                enabled: boolean;\n                queryKey: string;\n            };\n            \n            // 在发起请求前，最后调整axios RequestConfig\n            getFinallyRequestConfig?: (params: PreCallFuncParams & {\n                nowRequestConfig: RequestConfig;\n            }) => InnerDeclares.MayPromise<RequestConfig>;\n            \n            // 获取到Response后，可进行预处理\n            onReturnResponse?: (params: PostCallFuncParams) => InnerDeclares.MayPromise<Response<ResData, RawResponse>>;\n            \n            // 异常处理\n            onError?: (error: unknown, params: OmitUrlPreCallFuncParams) => InnerDeclares.MayPromise<unknown>;\n        };\n        ```\n2. `apiService.call.controller.action(reqData, callOptions)`\n    \n    1. reqData：根据对应的controller.action自动映射类型\n    \n    1. callOptions：\n        ```ts\n        // 可传所有InitOptions中的字段，并覆盖\n        type CallOptions = InitOptions & {\n            /* 为false时，会先判断code是否success，非success的code会直接抛异常 \n            为true时会得到原始接口回包，开发者需自行判断状态码code是否符合预期。\n            对应的返回类型也会因isRaw的值不同而变化。\n            默认为false */\n            isRaw?: boolean;\n            \n            /* 是否使用formData请求接口 */\n            isFormData?: boolean;\n        }\n        ```\n    1. return类型:  \n          1. isRaw为false或不传，return的类型为接口数据类型(response Data)\n          1. isRaw为true时，return的类型为原始回包(response Body)\n\n### 其它模块\n1. View：\n    \n    用于让action响应除了json body以外的数据类型。目前添加了几个常用的，之后会持续丰富：\n    1. View.Redirect：302跳转\n    2. View.StaticFile：返回静态文件\n    3. View.Render：渲染html\n    4. View.Buffer：返回buffer数据\n    5. View.Xml：返回xml数据\n1. createFilter：\n    \n    创建自定义filter，如权限验证等。\n\n    1. 内置filter：httpMethodFilter","readmeFilename":"README.md","gitHead":"e57e5691431ec76f0356da86a10bc4349a7a0dc6","bugs":{"url":"https://github.com/xiaocaibird/caibird-new/issues"},"_id":"caibird@4.0.0-rc.13","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-KYaHWsaRMrvT7Zpc85EFLa5LhAJO8RQxJZWv1RVR68cte9CLMOvKDLHaLoP7k7HpZgTWyBvq+UAZfu0lFbV+Og==","shasum":"0d64631abc78e27e6672771b819a9f5cb6e5dfa6","tarball":"https://registry.npmjs.org/caibird/-/caibird-4.0.0-rc.13.tgz","fileCount":66,"unpackedSize":113975,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDxg4xCNVcMr3pjPmSuNfRMxiflY5NRJhYIYFU8EF6qYAIgdDEDsycrDZT4pi453lGE8f2pjOTBjyHIOfCphjtQPVY="}]},"_npmUser":{"name":"xiaocaibird","email":"332877152@qq.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"332877152@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_4.0.0-rc.13_1701627261595_0.5558478604707837"},"_hasShrinkwrap":false},"4.0.0-rc.14":{"name":"caibird","version":"4.0.0-rc.14","description":"## 序","main":"dist/index.js","scripts":{"dist":"rimraf dist && tsc --outDir dist && node bin/rename2mjs.js && tsc --outDir dist --moduleResolution node --module commonjs --verbatimModuleSyntax false"},"author":{"name":"caibird"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/xiaocaibird/caibird-new.git"},"homepage":"https://github.com/xiaocaibird/caibird-new","devDependencies":{"@types/koa":"2.13.12","@types/koa-send":"4.1.6","@types/koa__router":"12.0.4","@types/lodash":"4.14.202","rimraf":"5.0.5","typescript":"5.3.2"},"dependencies":{"@koa/router":"12.0.1","@ladjs/koa-views":"9.0.0","axios":"1.6.2","form-data":"4.0.0","koa":"2.14.2","koa-body":"6.0.1","koa-send":"5.0.1","lodash":"4.17.21","reflect-metadata":"0.1.13","tslib":"2.6.2","url-join":"5.0.0"},"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"},"./*":"./dist/*","./client":{"import":"./dist/client/index.mjs","require":"./dist/client/index.js"},"./@types":{"import":"./dist/@types/index.mjs","require":"./dist/@types/index.js"}},"types":"./dist/index.d.ts","readme":"# caibird\n\n## 序\n\n&emsp;&emsp;我一直认为typescript对前端的代码质量和开发效率的提升意义非常重大。\n\n&emsp;&emsp;所谓“善战者无赫赫之功，善医者无煌煌之名”，如果能把typescript用好，它就是前端代码质量和开发效率的“善战者和善医者”。\n\n## 版本\n\n    v4.0-RC\n\n&emsp;&emsp;3.0之前也实现了类型同构，但整体功能非常重，接入成本也比较高。\n\n&emsp;&emsp;4.0后将专注于做一个`MVC+DI+类型同构`的通用型框架，接入成本低且将拥抱开源。\n\n## 安装\n\n    npm i caibird@rc\n\n## 仓库\n\n源码：[https://github.com/xiaocaibird/caibird-new](https://github.com/xiaocaibird/caibird-new)\n\ndemo: [https://github.com/xiaocaibird/caibird-demo](https://github.com/xiaocaibird/caibird-demo)\n\n## 简介\n\n&emsp;&emsp;首先说明，这里的后端指的nodejs服务端。现在大部分前端项目，都有自己的nodejs服务，可能仅做为接入层和简单的BFF层，也可能有更多的后端职责。\n\n&emsp;&emsp;一般情况下，nodejs端(以下统称为：`server端`)的代码也会和前端(以下统称为：`client端`)的代码放在一个工程里管理。可即使在同一个工程里，当我们在server端开发完业务api，并在client端调用时，想要获取api的字段类型，通常要做不少额外工作。\n\n&emsp;&emsp;另外当我们需要快速从调用方(client端)的逻辑，跳转到被调用方(server端)的逻辑时，也不能像一个函数调用一样快速跳转。\n\n\n&emsp;&emsp;所以这里抛出一个合理的猜想：\n\n    既然在一个工程里了，是否有办法能让业务功能在开发过程中，\n    零成本的接入client端到server端的类型检查以及快速调试？\n\n&emsp;&emsp;于是我就想到了要做“前后端类型同构”，关键能力如下：\n\n1. 提供client+server的跨端类型同构能力\n1. 提供server端api(nodejs api)的方法级调用能力\n1. 完全基于ts和koa，无需任何中间层和额外的协议文件，在开发时能随时响应api的字段变化\n1. 在开发时能直接从client端跳转到server端的api代码或参数字段\n\n## server端示例\n\n```ts\n// src/server/index.ts\n// 服务端入口\nimport Koa from 'koa';\nimport { controllersRouter } from 'caibird';\n\nimport * as Controllers from './controllers';\n\nconst app = new Koa();\n\napp.use(controllersRouter({\n    Controllers\n}, app));\n\napp.listen(8080, '127.0.0.1');\n\n```\n\n```ts\n// src/server/controllers/test.ts\nimport { Controller, httpMethodFilter, View, BaseController } from 'caibird';\n\n@httpMethodFilter('POST')\n@Controller()\nexport class TestController extends BaseController {\n    @httpMethodFilter(['POST', 'GET'])\n    public async getConfig(reqData: { obj: { a: string, b: number } }) {\n        return { prop12: true };\n    }\n\n    public async getMsg() {\n        return '你好';\n    }\n\n    @httpMethodFilter('GET')\n    public async toUrl(reqData: { url: string }) {\n        return View.Redirect(reqData.url);\n    }\n}\n\n```\n\n## client端示例\n\n```ts\n\nimport { ApiService } from 'caibird/client';\n\n// CaibirdGlobal 是一个跨端的全局类型命名空间，CaibirdGlobal.Controllers是所有server端的Controller类型\nconst apiService = new ApiService<CaibirdGlobal.Controllers>({\n    transformGetMethodJsonData: {\n        enabled: true,\n        queryKey: 'caibirdurljsonparamskey',\n    },\n});\n\nconst fn = async () => {\n    // 仅获取response data\n    const res1 = await apiService.call.Test.getConfig({ obj: { a: '', b: 0 } }, { httpMethod: 'GET' });\n    // 获取完整的response body\n    const res2 = await apiService.call.Test.getConfig({ obj: { a: '', b: 0 } }, { isRaw: true });\n\n    console.log(res1);\n    console.log(res2);\n}\n\nfn();\n\n```\n\n## 核心模块\n\n### `Controller`装饰器\n\n1. 用于标记需要`controllersRouter中间件`(以下简称`中间件`)处理的controller\n\n1. options：\n\n    ```ts\n    type Options = {\n        // 命名后缀，一般不用传。 默认为'Controller'。\n        // 需要与中间件的controllerSuffix配合使用\n        suffix?: string\n    };\n    ```\n\n1. 核心概念：\n    1. action：controller中的一个方法，对应一个接口响应\n    1. filter：可灵活组合，拦截进入controller或action的请求，实现AOP\n\n### koa中间件：`controllersRouter`\n\n1. options字段说明:\n\n    ```ts\n    type Options = {\n        // 传入所有自定义的controllers，必填\n        Controllers: UninitControllers;\n\n        // koa-body的配置，传false可禁用自动 use koa-body\n        koaBodyOptions?: KoaBodyMiddlewareOptions | false;\n        \n        // koa-views的配置，传false可禁用自动 use koa-views\n        koaViewsOptions?: KoaViewsOptions | false;\n\n        // url路由前缀，一般需要与client端的ApiService对应配置一起使用。默认为空\n        prefix?: string;\n        \n        /* controller命名后缀，默认为'Controller'\n        若定义的名称为：TestController，那么在url路由和调用中的名称会识别为Test\n        若定义的名称为：TestCtrl，则保持不变 */\n        controllerSuffix?: string;\n        \n        /* 当路由里缺省controllerName或actionName时对应的默认值\n        可设置：\"localhost/\" \"localhost/user\" 这类短地址默认指向的controller和action */\n        defaultPathMatchs?: RoutePathMatchs;\n        \n        /* 全局默认filter，当controller和action没有同类filter时，会执行这里的filter */\n        globalFilters?: Filter.BindConfig[];\n        \n        /* 接口响应状态为success时，json body里的code。默认为0\n        如要自定义，需要与client端的ApiService对应配置一起使用 */\n        successCode?: number;\n        \n        // 开启后，get请求会从queryKey读取并解析reqData。需和ApiService的对应配置一起使用\n        transformGetMethodJsonData?: {\n            enabled: boolean;\n            queryKey: string;\n        };\n        \n        /* 可自定义传入action的reqData */\n        getRequestData?: (nowReqData: object, ctx: Context) => InnerDeclares.MayPromise<object>;\n        \n        /* 在接口设置json body前，可做最后修改 */\n        getJsonBody?: (nowJsonBody: object, context: Context) => InnerDeclares.MayPromise<object>;\n        \n        /* 在接口响应Response前，可做最后调整 */\n        onResponse?: (ctx: Context, next: Next) => InnerDeclares.MayPromise<void>;\n    };\n    ```\n\n### clinet端接口调用：`ApiService`\n\n1. `new ApiService<TControllers, TControllerSuffix>(initOptions)`\n    \n    1. 泛型TControllers：必须是个object，其中每个值都要是一个Controller，或是Controller的实例\n    \n    1. 泛型TControllerSuffix：一般不传，默认为'Controller'，和中间件的controllerSuffix配合使用\n        \n    1. Options: \n        ```ts\n        // 以下大部分字段，除了可以直接提供最终值，也可以提供一个同步或异步函数以获取最终值\n        type InitOptions = {\n            // 重试次数，默认不重试\n            retry?: number;\n            \n            // 默认为 \"/\"\n            origin?: ValueOrFunc<string, OmitUrlPreCallFuncParams>;\n            \n            // 请求api时统一在url上加的前缀，一般要和中间件的对应配置一起使用。默认为空\n            prefix?: ValueOrFunc<string, OmitUrlPreCallFuncParams>;\n            \n            // 当接口返回json数据时，哪些code会认为success状态，一般要和中间件的对应配置一起使用。\n            // 默认为：[0]\n            successCodes?: ValueOrFunc<SuccessCodes, PostCallFuncParams>;\n            \n            // 超时时间。默认为空\n            timeout?: PreCallValueOrFunc<number>;\n            \n            // 默认为POST\n            httpMethod?: PreCallValueOrFunc<HttpMethod>;\n            \n            // 默认为空，content-type等字段如果没有设置，会在请求时根据数据类型自动设置。\n            headers?: PreCallValueOrFunc<Record<string, number | string>>;\n            \n            // 默认的公共请求数据，每次请求都会带上，极端场景才会用到。\n            commonReqData?: PreCallValueOrFunc<ReqData>;\n            \n            // 公共的axios RequestConfig\n            baseRequestConfig?: PreCallValueOrFunc<BaseRequestConfig>;\n            \n            // 开启后，get请求会将reqData序列化后用queryKey传递。需和中间件的对应配置一起使用\n            transformGetMethodJsonData?: {\n                enabled: boolean;\n                queryKey: string;\n            };\n            \n            // 在发起请求前，最后调整axios RequestConfig\n            getFinallyRequestConfig?: (params: PreCallFuncParams & {\n                nowRequestConfig: RequestConfig;\n            }) => InnerDeclares.MayPromise<RequestConfig>;\n            \n            // 获取到Response后，可进行预处理\n            onReturnResponse?: (params: PostCallFuncParams) => InnerDeclares.MayPromise<Response<ResData, RawResponse>>;\n            \n            // 异常处理\n            onError?: (error: unknown, params: OmitUrlPreCallFuncParams) => InnerDeclares.MayPromise<unknown>;\n        };\n        ```\n2. `apiService.call.controller.action(reqData, callOptions)`\n    \n    1. reqData：根据对应的controller.action自动映射类型\n    \n    1. callOptions：\n        ```ts\n        // 可传所有InitOptions中的字段，并覆盖\n        type CallOptions = InitOptions & {\n            /* 为false时，会先判断code是否success，非success的code会直接抛异常 \n            为true时会得到原始接口回包，开发者需自行判断状态码code是否符合预期。\n            对应的返回类型也会因isRaw的值不同而变化。\n            默认为false */\n            isRaw?: boolean;\n            \n            /* 是否使用formData请求接口 */\n            isFormData?: boolean;\n        }\n        ```\n    1. return类型:  \n          1. isRaw为false或不传，return的类型为接口数据类型(response Data)\n          1. isRaw为true时，return的类型为原始回包(response Body)\n\n### 其它模块\n1. View：\n    \n    用于让action响应除了json body以外的数据类型。目前添加了几个常用的，之后会持续丰富：\n    1. View.Redirect：302跳转\n    2. View.StaticFile：返回静态文件\n    3. View.Render：渲染html\n    4. View.Buffer：返回buffer数据\n    5. View.Xml：返回xml数据\n1. createFilter：\n    \n    创建自定义filter，如权限验证等。\n\n    1. 内置filter：httpMethodFilter","readmeFilename":"README.md","gitHead":"3459bd7e57210bdcff18acd9780e73958b367dcb","bugs":{"url":"https://github.com/xiaocaibird/caibird-new/issues"},"_id":"caibird@4.0.0-rc.14","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-OBjnFPYjwb764aO6Q+XBtLS+hMSEEusXc2GmaIkHch/bYA5/FxJitv4lBaqzKRRRCuTmlujUQNsgj+lfE9dSgQ==","shasum":"fab4c59309b813d9bb7ee52761fbefa4833df2ba","tarball":"https://registry.npmjs.org/caibird/-/caibird-4.0.0-rc.14.tgz","fileCount":66,"unpackedSize":114064,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCp+oOPnju39A0TPEbJjeIMsjGchMF8TM1gu4VowWSbYgIgIqlHMzuHyI9dcGkTik/Zx/jwPkSQmmOWdVNBtpFGnoo="}]},"_npmUser":{"name":"xiaocaibird","email":"332877152@qq.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"332877152@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_4.0.0-rc.14_1701627438843_0.7327610384963847"},"_hasShrinkwrap":false},"4.0.0-rc.15":{"name":"caibird","version":"4.0.0-rc.15","description":"## 序","main":"dist/index.js","scripts":{"dist":"rimraf dist && tsc --outDir dist && node bin/rename2mjs.js && tsc --outDir dist --moduleResolution node --module commonjs --verbatimModuleSyntax false"},"author":{"name":"caibird"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/xiaocaibird/caibird-new.git"},"homepage":"https://github.com/xiaocaibird/caibird-new","devDependencies":{"@types/koa":"^2.14.0","@types/koa-send":"^4.1.6","@types/koa__router":"^12.0.4","@types/lodash":"^4.14.202","rimraf":"^5.0.5","typescript":"^5.3.3"},"dependencies":{"@koa/router":"^12.0.1","@ladjs/koa-views":"^9.0.0","axios":"^1.6.5","form-data":"^4.0.0","koa":"^2.15.0","koa-body":"^6.0.1","koa-send":"^5.0.1","lodash":"^4.17.21","reflect-metadata":"^0.2.1","tslib":"^2.6.2","url-join":"^5.0.0"},"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"},"./*":"./dist/*","./client":{"import":"./dist/client/index.mjs","require":"./dist/client/index.js"},"./@types":{"import":"./dist/@types/index.mjs","require":"./dist/@types/index.js"}},"types":"./dist/index.d.ts","readme":"# caibird\n\n## 序\n\n&emsp;&emsp;我一直认为typescript对前端的代码质量和开发效率的提升意义非常重大。\n\n&emsp;&emsp;所谓“善战者无赫赫之功，善医者无煌煌之名”，如果能把typescript用好，它就是前端代码质量和开发效率的“善战者和善医者”。\n\n## 版本\n\n    v4.0-RC\n\n&emsp;&emsp;3.0之前也实现了类型同构，但整体功能非常重，接入成本也比较高。\n\n&emsp;&emsp;4.0后将专注于做一个`MVC+DI+类型同构`的通用型框架，接入成本低且将拥抱开源。\n\n## 安装\n\n    npm i caibird@rc\n\n## 仓库\n\n源码：[https://github.com/xiaocaibird/caibird-new](https://github.com/xiaocaibird/caibird-new)\n\ndemo: [https://github.com/xiaocaibird/caibird-demo](https://github.com/xiaocaibird/caibird-demo)\n\n## 简介\n\n&emsp;&emsp;首先说明，这里的后端指的nodejs服务端。现在大部分前端项目，都有自己的nodejs服务，可能仅做为接入层和简单的BFF层，也可能有更多的后端职责。\n\n&emsp;&emsp;一般情况下，nodejs端(以下统称为：`server端`)的代码也会和前端(以下统称为：`client端`)的代码放在一个工程里管理。可即使在同一个工程里，当我们在server端开发完业务api，并在client端调用时，想要获取api的字段类型，通常要做不少额外工作。\n\n&emsp;&emsp;另外当我们需要快速从调用方(client端)的逻辑，跳转到被调用方(server端)的逻辑时，也不能像一个函数调用一样快速跳转。\n\n\n&emsp;&emsp;所以这里抛出一个合理的猜想：\n\n    既然在一个工程里了，是否有办法能让业务功能在开发过程中，\n    零成本的接入client端到server端的类型检查以及快速调试？\n\n&emsp;&emsp;于是我就想到了要做“前后端类型同构”，关键能力如下：\n\n1. 提供client+server的跨端类型同构能力\n1. 提供server端api(nodejs api)的方法级调用能力\n1. 完全基于ts和koa，无需任何中间层和额外的协议文件，在开发时能随时响应api的字段变化\n1. 在开发时能直接从client端跳转到server端的api代码或参数字段\n\n## server端示例\n\n```ts\n// src/server/index.ts\n// 服务端入口\nimport Koa from 'koa';\nimport { controllersRouter } from 'caibird';\n\nimport * as Controllers from './controllers';\n\nconst app = new Koa();\n\napp.use(controllersRouter({\n    Controllers\n}, app));\n\napp.listen(8080, '127.0.0.1');\n\n```\n\n```ts\n// src/server/controllers/test.ts\nimport { Controller, httpMethodFilter, View, BaseController } from 'caibird';\n\n@httpMethodFilter('POST')\n@Controller()\nexport class TestController extends BaseController {\n    @httpMethodFilter(['POST', 'GET'])\n    public async getConfig(reqData: { obj: { a: string, b: number } }) {\n        return { prop12: true };\n    }\n\n    public async getMsg() {\n        return '你好';\n    }\n\n    @httpMethodFilter('GET')\n    public async toUrl(reqData: { url: string }) {\n        return View.Redirect(reqData.url);\n    }\n}\n\n```\n\n## client端示例\n\n```ts\n\nimport { ApiService } from 'caibird/client';\n\n// CaibirdGlobal 是一个跨端的全局类型命名空间，CaibirdGlobal.Controllers是所有server端的Controller类型\nconst apiService = new ApiService<CaibirdGlobal.Controllers>({\n    transformGetMethodJsonData: {\n        enabled: true,\n        queryKey: 'caibirdurljsonparamskey',\n    },\n});\n\nconst fn = async () => {\n    // 仅获取response data\n    const res1 = await apiService.call.Test.getConfig({ obj: { a: '', b: 0 } }, { httpMethod: 'GET' });\n    // 获取完整的response body\n    const res2 = await apiService.call.Test.getConfig({ obj: { a: '', b: 0 } }, { isRaw: true });\n\n    console.log(res1);\n    console.log(res2);\n}\n\nfn();\n\n```\n\n## 核心模块\n\n### `Controller`装饰器\n\n1. 用于标记需要`controllersRouter中间件`(以下简称`中间件`)处理的controller\n\n1. options：\n\n    ```ts\n    type Options = {\n        // 命名后缀，一般不用传。 默认为'Controller'。\n        // 需要与中间件的controllerSuffix配合使用\n        suffix?: string\n    };\n    ```\n\n1. 核心概念：\n    1. action：controller中的一个方法，对应一个接口响应\n    1. filter：可灵活组合，拦截进入controller或action的请求，实现AOP\n\n### koa中间件：`controllersRouter`\n\n1. options字段说明:\n\n    ```ts\n    type Options = {\n        // 传入所有自定义的controllers，必填\n        Controllers: UninitControllers;\n\n        // koa-body的配置，传false可禁用自动 use koa-body\n        koaBodyOptions?: KoaBodyMiddlewareOptions | false;\n        \n        // koa-views的配置，传false可禁用自动 use koa-views\n        koaViewsOptions?: KoaViewsOptions | false;\n\n        // url路由前缀，一般需要与client端的ApiService对应配置一起使用。默认为空\n        prefix?: string;\n        \n        /* controller命名后缀，默认为'Controller'\n        若定义的名称为：TestController，那么在url路由和调用中的名称会识别为Test\n        若定义的名称为：TestCtrl，则保持不变 */\n        controllerSuffix?: string;\n        \n        /* 当路由里缺省controllerName或actionName时对应的默认值\n        可设置：\"localhost/\" \"localhost/user\" 这类短地址默认指向的controller和action */\n        defaultPathMatchs?: RoutePathMatchs;\n        \n        /* 全局默认filter，当controller和action没有同类filter时，会执行这里的filter */\n        globalFilters?: Filter.BindConfig[];\n        \n        /* 接口响应状态为success时，json body里的code。默认为0\n        如要自定义，需要与client端的ApiService对应配置一起使用 */\n        successCode?: number;\n        \n        // 开启后，get请求会从queryKey读取并解析reqData。需和ApiService的对应配置一起使用\n        transformGetMethodJsonData?: {\n            enabled: boolean;\n            queryKey: string;\n        };\n        \n        /* 可自定义传入action的reqData */\n        getRequestData?: (nowReqData: object, ctx: Context) => InnerDeclares.MayPromise<object>;\n        \n        /* 在接口设置json body前，可做最后修改 */\n        getJsonBody?: (nowJsonBody: object, context: Context) => InnerDeclares.MayPromise<object>;\n        \n        /* 在接口响应Response前，可做最后调整 */\n        onResponse?: (ctx: Context, next: Next) => InnerDeclares.MayPromise<void>;\n    };\n    ```\n\n### clinet端接口调用：`ApiService`\n\n1. `new ApiService<TControllers, TControllerSuffix>(initOptions)`\n    \n    1. 泛型TControllers：必须是个object，其中每个值都要是一个Controller，或是Controller的实例\n    \n    1. 泛型TControllerSuffix：一般不传，默认为'Controller'，和中间件的controllerSuffix配合使用\n        \n    1. Options: \n        ```ts\n        // 以下大部分字段，除了可以直接提供最终值，也可以提供一个同步或异步函数以获取最终值\n        type InitOptions = {\n            // 重试次数，默认不重试\n            retry?: number;\n            \n            // 默认为 \"/\"\n            origin?: ValueOrFunc<string, OmitUrlPreCallFuncParams>;\n            \n            // 请求api时统一在url上加的前缀，一般要和中间件的对应配置一起使用。默认为空\n            prefix?: ValueOrFunc<string, OmitUrlPreCallFuncParams>;\n            \n            // 当接口返回json数据时，哪些code会认为success状态，一般要和中间件的对应配置一起使用。\n            // 默认为：[0]\n            successCodes?: ValueOrFunc<SuccessCodes, PostCallFuncParams>;\n            \n            // 超时时间。默认为空\n            timeout?: PreCallValueOrFunc<number>;\n            \n            // 默认为POST\n            httpMethod?: PreCallValueOrFunc<HttpMethod>;\n            \n            // 默认为空，content-type等字段如果没有设置，会在请求时根据数据类型自动设置。\n            headers?: PreCallValueOrFunc<Record<string, number | string>>;\n            \n            // 默认的公共请求数据，每次请求都会带上，极端场景才会用到。\n            commonReqData?: PreCallValueOrFunc<ReqData>;\n            \n            // 公共的axios RequestConfig\n            baseRequestConfig?: PreCallValueOrFunc<BaseRequestConfig>;\n            \n            // 开启后，get请求会将reqData序列化后用queryKey传递。需和中间件的对应配置一起使用\n            transformGetMethodJsonData?: {\n                enabled: boolean;\n                queryKey: string;\n            };\n            \n            // 在发起请求前，最后调整axios RequestConfig\n            getFinallyRequestConfig?: (params: PreCallFuncParams & {\n                nowRequestConfig: RequestConfig;\n            }) => InnerDeclares.MayPromise<RequestConfig>;\n            \n            // 获取到Response后，可进行预处理\n            onReturnResponse?: (params: PostCallFuncParams) => InnerDeclares.MayPromise<Response<ResData, RawResponse>>;\n            \n            // 异常处理\n            onError?: (error: unknown, params: OmitUrlPreCallFuncParams) => InnerDeclares.MayPromise<unknown>;\n        };\n        ```\n2. `apiService.call.controller.action(reqData, callOptions)`\n    \n    1. reqData：根据对应的controller.action自动映射类型\n    \n    1. callOptions：\n        ```ts\n        // 可传所有InitOptions中的字段，并覆盖\n        type CallOptions = InitOptions & {\n            /* 为false时，会先判断code是否success，非success的code会直接抛异常 \n            为true时会得到原始接口回包，开发者需自行判断状态码code是否符合预期。\n            对应的返回类型也会因isRaw的值不同而变化。\n            默认为false */\n            isRaw?: boolean;\n            \n            /* 是否使用formData请求接口 */\n            isFormData?: boolean;\n        }\n        ```\n    1. return类型:  \n          1. isRaw为false或不传，return的类型为接口数据类型(response Data)\n          1. isRaw为true时，return的类型为原始回包(response Body)\n\n### 其它模块\n1. View：\n    \n    用于让action响应除了json body以外的数据类型。目前添加了几个常用的，之后会持续丰富：\n    1. View.Redirect：302跳转\n    2. View.StaticFile：返回静态文件\n    3. View.Render：渲染html\n    4. View.Buffer：返回buffer数据\n    5. View.Xml：返回xml数据\n1. createFilter：\n    \n    创建自定义filter，如权限验证等。\n\n    1. 内置filter：httpMethodFilter","readmeFilename":"README.md","gitHead":"4da5cc9190136b903470ef19924c6f9856c0cfdd","bugs":{"url":"https://github.com/xiaocaibird/caibird-new/issues"},"_id":"caibird@4.0.0-rc.15","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-tF8UPxVoFTnQUpMYMQ7QcrINDhEc6uZbcqcRul4XQPbtWZUH8bMtgCZfw3JIr3wUR7UUOM/E6MYHPlZrpv3Ffg==","shasum":"0b1f94a5f5066ae9916340a627abc6b68a8ef206","tarball":"https://registry.npmjs.org/caibird/-/caibird-4.0.0-rc.15.tgz","fileCount":66,"unpackedSize":114067,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE8QFJLXaYVzcL3lp0KukRyHgorThb/BssvoCDuo1cuBAiEAkP9rcz/2wkVhQ3CIbWV3mJWW6MHSIm6HoJVIkMNuwus="}]},"_npmUser":{"name":"xiaocaibird","email":"332877152@qq.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"332877152@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_4.0.0-rc.15_1705284806818_0.6365240952255582"},"_hasShrinkwrap":false},"4.0.0-rc.16":{"name":"caibird","version":"4.0.0-rc.16","description":"## 序","main":"dist/index.js","scripts":{"dist":"rimraf dist && tsc --outDir dist && node bin/rename2mjs.js && tsc --outDir dist --moduleResolution node --module commonjs --verbatimModuleSyntax false"},"author":{"name":"caibird"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/xiaocaibird/caibird-new.git"},"homepage":"https://github.com/xiaocaibird/caibird-new","devDependencies":{"@types/koa":"^2.14.0","@types/koa-send":"^4.1.6","@types/koa__router":"^12.0.4","@types/lodash":"^4.14.202","rimraf":"^5.0.5","typescript":"^5.3.3"},"dependencies":{"@koa/router":"^12.0.1","@ladjs/koa-views":"^9.0.0","axios":"^1.6.5","form-data":"^4.0.0","koa":"^2.15.0","koa-body":"^6.0.1","koa-send":"^5.0.1","lodash":"^4.17.21","reflect-metadata":"^0.2.1","tslib":"^2.6.2","url-join":"^5.0.0"},"exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"},"./*":"./dist/*","./client":{"import":"./dist/client/index.mjs","require":"./dist/client/index.js"},"./@types":{"import":"./dist/@types/index.mjs","require":"./dist/@types/index.js"}},"types":"./dist/index.d.ts","readme":"# caibird\n\n## 序\n\n&emsp;&emsp;我一直认为typescript对前端的代码质量和开发效率的提升意义非常重大。\n\n&emsp;&emsp;所谓“善战者无赫赫之功，善医者无煌煌之名”，如果能把typescript用好，它就是前端代码质量和开发效率的“善战者和善医者”。\n\n## 版本\n\n    v4.0-RC\n\n&emsp;&emsp;3.0之前也实现了类型同构，但整体功能非常重，接入成本也比较高。\n\n&emsp;&emsp;4.0后将专注于做一个`MVC+DI+类型同构`的通用型框架，接入成本低且将拥抱开源。\n\n## 安装\n\n    npm i caibird@rc\n\n## 仓库\n\n源码：[https://github.com/xiaocaibird/caibird-new](https://github.com/xiaocaibird/caibird-new)\n\ndemo: [https://github.com/xiaocaibird/caibird-demo](https://github.com/xiaocaibird/caibird-demo)\n\n## 简介\n\n&emsp;&emsp;首先说明，这里的后端指的nodejs服务端。现在大部分前端项目，都有自己的nodejs服务，可能仅做为接入层和简单的BFF层，也可能有更多的后端职责。\n\n&emsp;&emsp;一般情况下，nodejs端(以下统称为：`server端`)的代码也会和前端(以下统称为：`client端`)的代码放在一个工程里管理。可即使在同一个工程里，当我们在server端开发完业务api，并在client端调用时，想要获取api的字段类型，通常要做不少额外工作。\n\n&emsp;&emsp;另外当我们需要快速从调用方(client端)的逻辑，跳转到被调用方(server端)的逻辑时，也不能像一个函数调用一样快速跳转。\n\n\n&emsp;&emsp;所以这里抛出一个合理的猜想：\n\n    既然在一个工程里了，是否有办法能让业务功能在开发过程中，\n    零成本的接入client端到server端的类型检查以及快速调试？\n\n&emsp;&emsp;于是我就想到了要做“前后端类型同构”，关键能力如下：\n\n1. 提供client+server的跨端类型同构能力\n1. 提供server端api(nodejs api)的方法级调用能力\n1. 完全基于ts和koa，无需任何中间层和额外的协议文件，在开发时能随时响应api的字段变化\n1. 在开发时能直接从client端跳转到server端的api代码或参数字段\n\n## server端示例\n\n```ts\n// src/server/index.ts\n// 服务端入口\nimport Koa from 'koa';\nimport { controllersRouter } from 'caibird';\n\nimport * as Controllers from './controllers';\n\nconst app = new Koa();\n\napp.use(controllersRouter({\n    Controllers\n}, app));\n\napp.listen(8080, '127.0.0.1');\n\n```\n\n```ts\n// src/server/controllers/test.ts\nimport { Controller, httpMethodFilter, View, BaseController } from 'caibird';\n\n@httpMethodFilter('POST')\n@Controller()\nexport class TestController extends BaseController {\n    @httpMethodFilter(['POST', 'GET'])\n    public async getConfig(reqData: { obj: { a: string, b: number } }) {\n        return { prop12: true };\n    }\n\n    public async getMsg() {\n        return '你好';\n    }\n\n    @httpMethodFilter('GET')\n    public async toUrl(reqData: { url: string }) {\n        return View.Redirect(reqData.url);\n    }\n}\n\n```\n\n## client端示例\n\n```ts\n\nimport { ApiService } from 'caibird/client';\n\n// CaibirdGlobal 是一个跨端的全局类型命名空间，CaibirdGlobal.Controllers是所有server端的Controller类型\nconst apiService = new ApiService<CaibirdGlobal.Controllers>({\n    transformGetMethodJsonData: {\n        enabled: true,\n        queryKey: 'caibirdurljsonparamskey',\n    },\n});\n\nconst fn = async () => {\n    // 仅获取response data\n    const res1 = await apiService.call.Test.getConfig({ obj: { a: '', b: 0 } }, { httpMethod: 'GET' });\n    // 获取完整的response body\n    const res2 = await apiService.call.Test.getConfig({ obj: { a: '', b: 0 } }, { isRaw: true });\n\n    console.log(res1);\n    console.log(res2);\n}\n\nfn();\n\n```\n\n## 核心模块\n\n### `Controller`装饰器\n\n1. 用于标记需要`controllersRouter中间件`(以下简称`中间件`)处理的controller\n\n1. options：\n\n    ```ts\n    type Options = {\n        // 命名后缀，一般不用传。 默认为'Controller'。\n        // 需要与中间件的controllerSuffix配合使用\n        suffix?: string\n    };\n    ```\n\n1. 核心概念：\n    1. action：controller中的一个方法，对应一个接口响应\n    1. filter：可灵活组合，拦截进入controller或action的请求，实现AOP\n\n### koa中间件：`controllersRouter`\n\n1. options字段说明:\n\n    ```ts\n    type Options = {\n        // 传入所有自定义的controllers，必填\n        Controllers: UninitControllers;\n\n        // koa-body的配置，传false可禁用自动 use koa-body\n        koaBodyOptions?: KoaBodyMiddlewareOptions | false;\n        \n        // koa-views的配置，传false可禁用自动 use koa-views\n        koaViewsOptions?: KoaViewsOptions | false;\n\n        // url路由前缀，一般需要与client端的ApiService对应配置一起使用。默认为空\n        prefix?: string;\n        \n        /* controller命名后缀，默认为'Controller'\n        若定义的名称为：TestController，那么在url路由和调用中的名称会识别为Test\n        若定义的名称为：TestCtrl，则保持不变 */\n        controllerSuffix?: string;\n        \n        /* 当路由里缺省controllerName或actionName时对应的默认值\n        可设置：\"localhost/\" \"localhost/user\" 这类短地址默认指向的controller和action */\n        defaultPathMatchs?: RoutePathMatchs;\n        \n        /* 全局默认filter，当controller和action没有同类filter时，会执行这里的filter */\n        globalFilters?: Filter.BindConfig[];\n        \n        /* 接口响应状态为success时，json body里的code。默认为0\n        如要自定义，需要与client端的ApiService对应配置一起使用 */\n        successCode?: number;\n        \n        // 开启后，get请求会从queryKey读取并解析reqData。需和ApiService的对应配置一起使用\n        transformGetMethodJsonData?: {\n            enabled: boolean;\n            queryKey: string;\n        };\n        \n        /* 可自定义传入action的reqData */\n        getRequestData?: (nowReqData: object, ctx: Context) => InnerDeclares.MayPromise<object>;\n        \n        /* 在接口设置json body前，可做最后修改 */\n        getJsonBody?: (nowJsonBody: object, context: Context) => InnerDeclares.MayPromise<object>;\n        \n        /* 在接口响应Response前，可做最后调整 */\n        onResponse?: (ctx: Context, next: Next) => InnerDeclares.MayPromise<void>;\n    };\n    ```\n\n### clinet端接口调用：`ApiService`\n\n1. `new ApiService<TControllers, TControllerSuffix>(initOptions)`\n    \n    1. 泛型TControllers：必须是个object，其中每个值都要是一个Controller，或是Controller的实例\n    \n    1. 泛型TControllerSuffix：一般不传，默认为'Controller'，和中间件的controllerSuffix配合使用\n        \n    1. Options: \n        ```ts\n        // 以下大部分字段，除了可以直接提供最终值，也可以提供一个同步或异步函数以获取最终值\n        type InitOptions = {\n            // 重试次数，默认不重试\n            retry?: number;\n            \n            // 默认为 \"/\"\n            origin?: ValueOrFunc<string, OmitUrlPreCallFuncParams>;\n            \n            // 请求api时统一在url上加的前缀，一般要和中间件的对应配置一起使用。默认为空\n            prefix?: ValueOrFunc<string, OmitUrlPreCallFuncParams>;\n            \n            // 当接口返回json数据时，哪些code会认为success状态，一般要和中间件的对应配置一起使用。\n            // 默认为：[0]\n            successCodes?: ValueOrFunc<SuccessCodes, PostCallFuncParams>;\n            \n            // 超时时间。默认为空\n            timeout?: PreCallValueOrFunc<number>;\n            \n            // 默认为POST\n            httpMethod?: PreCallValueOrFunc<HttpMethod>;\n            \n            // 默认为空，content-type等字段如果没有设置，会在请求时根据数据类型自动设置。\n            headers?: PreCallValueOrFunc<Record<string, number | string>>;\n            \n            // 默认的公共请求数据，每次请求都会带上，极端场景才会用到。\n            commonReqData?: PreCallValueOrFunc<ReqData>;\n            \n            // 公共的axios RequestConfig\n            baseRequestConfig?: PreCallValueOrFunc<BaseRequestConfig>;\n            \n            // 开启后，get请求会将reqData序列化后用queryKey传递。需和中间件的对应配置一起使用\n            transformGetMethodJsonData?: {\n                enabled: boolean;\n                queryKey: string;\n            };\n            \n            // 在发起请求前，最后调整axios RequestConfig\n            getFinallyRequestConfig?: (params: PreCallFuncParams & {\n                nowRequestConfig: RequestConfig;\n            }) => InnerDeclares.MayPromise<RequestConfig>;\n            \n            // 获取到Response后，可进行预处理\n            onReturnResponse?: (params: PostCallFuncParams) => InnerDeclares.MayPromise<Response<ResData, RawResponse>>;\n            \n            // 异常处理\n            onError?: (error: unknown, params: OmitUrlPreCallFuncParams) => InnerDeclares.MayPromise<unknown>;\n        };\n        ```\n2. `apiService.call.controller.action(reqData, callOptions)`\n    \n    1. reqData：根据对应的controller.action自动映射类型\n    \n    1. callOptions：\n        ```ts\n        // 可传所有InitOptions中的字段，并覆盖\n        type CallOptions = InitOptions & {\n            /* 为false时，会先判断code是否success，非success的code会直接抛异常 \n            为true时会得到原始接口回包，开发者需自行判断状态码code是否符合预期。\n            对应的返回类型也会因isRaw的值不同而变化。\n            默认为false */\n            isRaw?: boolean;\n            \n            /* 是否使用formData请求接口 */\n            isFormData?: boolean;\n        }\n        ```\n    1. return类型:  \n          1. isRaw为false或不传，return的类型为接口数据类型(response Data)\n          1. isRaw为true时，return的类型为原始回包(response Body)\n\n### 其它模块\n1. View：\n    \n    用于让action响应除了json body以外的数据类型。目前添加了几个常用的，之后会持续丰富：\n    1. View.Redirect：302跳转\n    2. View.StaticFile：返回静态文件\n    3. View.Render：渲染html\n    4. View.Buffer：返回buffer数据\n    5. View.Xml：返回xml数据\n1. createFilter：\n    \n    创建自定义filter，如权限验证等。\n\n    1. 内置filter：httpMethodFilter","readmeFilename":"README.md","gitHead":"00f1a0538316c79894ebfb91a3da0b5bc5362f7e","bugs":{"url":"https://github.com/xiaocaibird/caibird-new/issues"},"_id":"caibird@4.0.0-rc.16","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-rf4grbdX90KcOKc8mM52HtgpsETVt2Ntqn6fUDgc5baCvD8m0N7J5K36WqLYUQRaYuAFYF/GT6qdjtlaQa28Lw==","shasum":"cd7e8ff4795d2e8101bfd0bbbfd12aec21b4b389","tarball":"https://registry.npmjs.org/caibird/-/caibird-4.0.0-rc.16.tgz","fileCount":66,"unpackedSize":114067,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDS6KUWIVCOzhSjJqCJWLA648KOZxsLHTFdY2RV2xzmhAiEAi1Z7MrEdeqXjsYhZZ2sLb2kmQNucqylD/3kg0GAVYcI="}]},"_npmUser":{"name":"xiaocaibird","email":"332877152@qq.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"332877152@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_4.0.0-rc.16_1705284875292_0.8093041770676388"},"_hasShrinkwrap":false},"4.0.0":{"name":"caibird","version":"4.0.0","description":"## 序","type":"module","main":"dist/index.js","scripts":{"dist":"rimraf dist && tsc --outDir dist","dist-cjs":"rimraf dist && tsc --outDir dist --moduleResolution node --module commonjs --verbatimModuleSyntax false"},"author":{"name":"caibird"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/xiaocaibird/caibird-new.git"},"homepage":"https://github.com/xiaocaibird/caibird-new","devDependencies":{"rimraf":"^5.0.5"},"dependencies":{"@koa/router":"^12.0.1","@ladjs/koa-views":"^9.0.0","@types/koa":"^2.15.0","@types/koa-send":"^4.1.6","@types/koa__router":"^12.0.4","@types/lodash":"^4.14.202","axios":"^1.6.7","form-data":"^4.0.0","koa":"^2.15.0","koa-body":"^6.0.1","koa-send":"^5.0.1","lodash":"^4.17.21","reflect-metadata":"^0.2.1","tslib":"^2.6.2","typescript":"^5.4.2","url-join":"^5.0.0"},"exports":{".":{"import":"./dist/index.js"},"./*":{"import":"./dist/*"},"./client":{"import":"./dist/client/index.js"},"./@types":{"import":"./dist/@types/index.js"}},"types":"./dist/index.d.ts","gitHead":"d4722c49571c13473022b7532eba5769b98a593a","bugs":{"url":"https://github.com/xiaocaibird/caibird-new/issues"},"_id":"caibird@4.0.0","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-wod9rEUfy1t/gWrS4aNE2EWn6663xMKQ4l0S2mm2E0U32inYruHOGc5l9JjQGyv7skhFNYXnZzzC/VDWWBojwg==","shasum":"7f8d0d6a329217bb9e2c7c829c8b62d14d22a82d","tarball":"https://registry.npmjs.org/caibird/-/caibird-4.0.0.tgz","fileCount":34,"unpackedSize":60754,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhQoZ3kwcDx8NWXiGhUVyd7V3vvgIEAWuSMwyv5fPDBQIgeMEkDD4t3y3Hz624TB2t1tq9DaG87p/NRIjgd+D9uu0="}]},"_npmUser":{"name":"xiaocaibird","email":"332877152@qq.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"332877152@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_4.0.0_1710009179967_0.5437538537944924"},"_hasShrinkwrap":false},"4.0.1":{"name":"caibird","version":"4.0.1","description":"## 序","type":"commonjs","main":"dist/index.js","scripts":{"dist-mjs":"rimraf dist && tsc --outDir dist","dist-cjs":"rimraf dist && tsc --outDir dist --moduleResolution node --module commonjs --verbatimModuleSyntax false"},"author":{"name":"caibird"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/xiaocaibird/caibird-new.git"},"homepage":"https://github.com/xiaocaibird/caibird-new","devDependencies":{"rimraf":"^5.0.5"},"dependencies":{"@koa/router":"^12.0.1","@ladjs/koa-views":"^9.0.0","@types/koa":"^2.15.0","@types/koa-send":"^4.1.6","@types/koa__router":"^12.0.4","@types/lodash":"^4.14.202","axios":"^1.6.7","form-data":"^4.0.0","koa":"^2.15.0","koa-body":"^6.0.1","koa-send":"^5.0.1","lodash":"^4.17.21","reflect-metadata":"^0.2.1","tslib":"^2.6.2","typescript":"^5.4.2","url-join":"^5.0.0"},"exports":{".":{"require":"./dist/index.js"},"./*":{"require":"./dist/*"},"./client":{"require":"./dist/client/index.js"},"./@types":{"require":"./dist/@types/index.js"}},"types":"./dist/index.d.ts","gitHead":"f986fdf63d181665b29c258a87543b4f24d51bea","bugs":{"url":"https://github.com/xiaocaibird/caibird-new/issues"},"_id":"caibird@4.0.1","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-+tswnfH2lrrQ+kGeaOow2Z/0xttp5jSdqCxG7rCo5x0VtquXx1sPhn16IFbOFrcyPQnRs+9uRifepwgd4ANrug==","shasum":"1001b550219e38f75845d8779497b9f69f8c2bb2","tarball":"https://registry.npmjs.org/caibird/-/caibird-4.0.1.tgz","fileCount":34,"unpackedSize":60817,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCAZSqAokIz+zuL4ES1BccB+WK3sl+WVLSnyPak+4Hj6QIhAM44IW+PSQK3mkYauBJHQnwtnLTTjPAy9RJcZI0R9s+/"}]},"_npmUser":{"name":"xiaocaibird","email":"332877152@qq.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"332877152@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_4.0.1_1710009721589_0.0014538352964315049"},"_hasShrinkwrap":false},"4.0.2":{"name":"caibird","version":"4.0.2","description":"## 序","type":"commonjs","main":"dist/index.js","scripts":{"dist-mjs":"rimraf dist && tsc --outDir dist","dist-cjs":"rimraf dist && tsc --outDir dist --moduleResolution node --module commonjs --verbatimModuleSyntax false"},"author":{"name":"caibird"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/xiaocaibird/caibird-new.git"},"homepage":"https://github.com/xiaocaibird/caibird-new","devDependencies":{"rimraf":"^5.0.5"},"dependencies":{"@koa/router":"^12.0.1","@ladjs/koa-views":"^9.0.0","@types/koa":"^2.15.0","@types/koa-send":"^4.1.6","@types/koa__router":"^12.0.4","@types/lodash":"^4.14.202","axios":"^1.6.7","form-data":"^4.0.0","koa":"^2.15.0","koa-body":"^6.0.1","koa-send":"^5.0.1","lodash":"^4.17.21","reflect-metadata":"^0.2.1","tslib":"^2.6.2","typescript":"^5.4.2","url-join":"^5.0.0"},"exports":{".":{"require":"./dist/index.js"},"./*":{"require":"./dist/*"},"./client":{"require":"./dist/client/index.js"},"./@types":{"require":"./dist/@types/index.js"}},"types":"./dist/index.d.ts","gitHead":"b7f89bfc8543db0ef2cf45bbaea675a70b3d2d02","bugs":{"url":"https://github.com/xiaocaibird/caibird-new/issues"},"_id":"caibird@4.0.2","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-I6hdbw77FtufoA2yx2eKWJRQu2uJKTRqGopTnXK0vw4tynqJ5GDVTybsChp6mKO4ou+L/WobJPLltD1Np9/LOA==","shasum":"6264c0e9b0cb2eddb08f6d5f9fbdedeae38ef69e","tarball":"https://registry.npmjs.org/caibird/-/caibird-4.0.2.tgz","fileCount":34,"unpackedSize":65555,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD5hjVkTtYsG878Li5LNtaAMKQMgEkTFkf7nbvjbtp2ugIhAPaMl7uv9mCcUem+gt3RfsTbykxcDgsNu/lgd3xrIIBc"}]},"_npmUser":{"name":"xiaocaibird","email":"332877152@qq.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"332877152@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_4.0.2_1710009930730_0.6361064207903986"},"_hasShrinkwrap":false},"4.0.3":{"name":"caibird","version":"4.0.3","description":"## 序","type":"commonjs","main":"dist/index.js","scripts":{"dist-mjs":"rimraf dist && tsc --outDir dist","dist-cjs":"rimraf dist && tsc --outDir dist --moduleResolution node --module commonjs --verbatimModuleSyntax false"},"author":{"name":"caibird"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/xiaocaibird/caibird-new.git"},"homepage":"https://github.com/xiaocaibird/caibird-new","devDependencies":{"rimraf":"^5.0.5"},"dependencies":{"@koa/router":"^12.0.1","@ladjs/koa-views":"^9.0.0","@types/koa":"^2.15.0","@types/koa-send":"^4.1.6","@types/koa__router":"^12.0.4","@types/lodash":"^4.14.202","axios":"^1.6.7","form-data":"^4.0.0","koa":"^2.15.0","koa-body":"^6.0.1","koa-send":"^5.0.1","lodash":"^4.17.21","reflect-metadata":"^0.2.1","tslib":"^2.6.2","typescript":"^5.4.2","url-join":"^5.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./*":"./dist/*","./client":{"types":"./dist/client/index.d.ts","default":"./dist/client/index.js"},"./@types":{"types":"./dist/@types/index.d.ts","default":"./dist/@types/index.js"}},"types":"./dist/index.d.ts","gitHead":"9f4dcdf8565bcd706e465a0024a2f00c45e693b6","bugs":{"url":"https://github.com/xiaocaibird/caibird-new/issues"},"_id":"caibird@4.0.3","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-eS7TgXTBk4m/Ityl9WCIZqx56qTwoiwy/1k0ZWrc3+0CUCFyJ4bNG3Mmw70/gbrQQoVPZqRucfKxeJVLCOKi1w==","shasum":"8f8d79a11089c9dddbc2e7bd96678ed1204d34bf","tarball":"https://registry.npmjs.org/caibird/-/caibird-4.0.3.tgz","fileCount":34,"unpackedSize":65661,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAYQzk3PHRBVTUexbazxmFCaZ0W916AKyFa3k1PC9y0TAiAZukZDUOcWdhu5ou2314ArTnoXVS09cQeFhkVMyIeZ/Q=="}]},"_npmUser":{"name":"xiaocaibird","email":"332877152@qq.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"332877152@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_4.0.3_1710010318100_0.5202775018290862"},"_hasShrinkwrap":false},"4.0.4":{"name":"caibird","version":"4.0.4","description":"## 序","scripts":{"dist":"npm run dist-mjs && npm run dist-cjs","dist-mjs":"rimraf dist/mjs && tsc --outDir dist/mjs","dist-cjs":"rimraf dist/cjs && tsc --outDir dist/cjs --moduleResolution node --module commonjs --verbatimModuleSyntax false"},"author":{"name":"caibird"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/xiaocaibird/caibird-new.git"},"homepage":"https://github.com/xiaocaibird/caibird-new","devDependencies":{"rimraf":"^5.0.5"},"dependencies":{"@koa/router":"^12.0.1","@ladjs/koa-views":"^9.0.0","@types/koa":"^2.15.0","@types/koa-send":"^4.1.6","@types/koa__router":"^12.0.4","@types/lodash":"^4.14.202","axios":"^1.6.7","form-data":"^4.0.0","koa":"^2.15.0","koa-body":"^6.0.1","koa-send":"^5.0.1","lodash":"^4.17.21","reflect-metadata":"^0.2.1","tslib":"^2.6.2","typescript":"^5.4.2","url-join":"^5.0.0"},"exports":{".":{"import":{"types":"./dist/mjs/index.d.ts","default":"./dist/mjs/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./*":{"import":"./dist/mjs/*","require":"./dist/cjs/*"},"./client":{"import":{"types":"./dist/mjs/client/index.d.ts","default":"./dist/mjs/client/index.js"},"require":{"types":"./dist/cjs/client/index.d.ts","default":"./dist/cjs/client/index.js"}},"./@types":{"import":{"types":"./dist/mjs/@types/index.d.ts","default":"./dist/mjs/@types/index.js"},"require":{"types":"./dist/cjs/@types/index.d.ts","default":"./dist/cjs/@types/index.js"}}},"gitHead":"9f4dcdf8565bcd706e465a0024a2f00c45e693b6","bugs":{"url":"https://github.com/xiaocaibird/caibird-new/issues"},"_id":"caibird@4.0.4","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-wyJuRZlhdjN6G9q0H1dfGccR1dqe/OyEIUxq9k6DB6bAg+FHkIyR/ea/lshC2vteY390cpbw8zrimTXwFtOxIA==","shasum":"121cd11f78404e5617e829de070ed66d0bc28133","tarball":"https://registry.npmjs.org/caibird/-/caibird-4.0.4.tgz","fileCount":66,"unpackedSize":115030,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEjtDPMVbdAQxpOrhkwUhjlDlQp4dzUzOp+Gb0H0eCHAAiAqI94SLlWWAZXH9gEnbAAYgLzMDvuxWuJcn3Zu419zhQ=="}]},"_npmUser":{"name":"xiaocaibird","email":"332877152@qq.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"332877152@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_4.0.4_1710270129505_0.8424123930181611"},"_hasShrinkwrap":false},"4.1.0":{"name":"caibird","version":"4.1.0","description":"## 序","type":"commonjs","main":"dist/index.js","scripts":{"dist-mjs":"rimraf dist && tsc --outDir dist","dist-cjs":"rimraf dist && tsc --outDir dist --moduleResolution node --module commonjs --verbatimModuleSyntax false"},"author":{"name":"caibird"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/xiaocaibird/caibird-new.git"},"homepage":"https://github.com/xiaocaibird/caibird-new","devDependencies":{"rimraf":"^5.0.5"},"dependencies":{"@koa/router":"^12.0.1","@ladjs/koa-views":"^9.0.0","@types/koa":"^2.15.0","@types/koa-send":"^4.1.6","@types/koa__router":"^12.0.4","@types/lodash":"^4.14.202","axios":"^1.6.7","form-data":"^4.0.0","koa":"^2.15.0","koa-body":"^6.0.1","koa-send":"^5.0.1","lodash":"^4.17.21","reflect-metadata":"^0.2.1","tslib":"^2.6.2","typescript":"^5.4.2","url-join":"^5.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./*":"./dist/*","./client":{"types":"./dist/client/index.d.ts","default":"./dist/client/index.js"},"./@types":{"types":"./dist/@types/index.d.ts","default":"./dist/@types/index.js"}},"types":"./dist/index.d.ts","gitHead":"9f4dcdf8565bcd706e465a0024a2f00c45e693b6","bugs":{"url":"https://github.com/xiaocaibird/caibird-new/issues"},"_id":"caibird@4.1.0","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-8g9dlUdGZfLyfCcZQcYyALgmd1h9njvv9N/uscM1qKh1sjV1ewkSUp1EvGmNcFFWUdojix8RZVcinc7lBLu+Ug==","shasum":"c77c0fcf918bcdba762bba314f6e7176b79b4342","tarball":"https://registry.npmjs.org/caibird/-/caibird-4.1.0.tgz","fileCount":34,"unpackedSize":65661,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDDTKK9F8BT6M/7CdcZOfQir0ISq4YHNX9/vn7+bcxttAiBYcj+k2rIWBLiT/9+ezDx+Zjm7M1mW0RGxfWJ+Mkj4pA=="}]},"_npmUser":{"name":"xiaocaibird","email":"332877152@qq.com"},"directories":{},"maintainers":[{"name":"xiaocaibird","email":"332877152@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/caibird_4.1.0_1710271205637_0.09201299041863753"},"_hasShrinkwrap":false}},"time":{"created":"2021-03-21T01:35:45.058Z","2.3.5":"2021-03-21T01:35:45.280Z","modified":"2024-03-12T19:20:06.231Z","2.4.0":"2021-03-21T22:12:35.518Z","2.4.1":"2021-03-23T14:06:36.489Z","2.4.2":"2021-03-24T18:00:43.203Z","2.4.3":"2021-03-24T20:11:37.632Z","2.4.4":"2021-03-24T20:31:39.279Z","2.4.5":"2021-03-25T09:41:32.238Z","2.4.6":"2021-03-26T08:02:18.882Z","2.4.7":"2021-03-28T14:19:03.915Z","2.4.8":"2021-03-28T22:11:08.876Z","2.4.9":"2021-03-29T08:39:34.933Z","2.5.0":"2021-03-30T15:38:48.495Z","2.5.1":"2021-03-30T17:54:08.335Z","2.5.2":"2021-03-31T03:49:42.734Z","2.5.3":"2021-03-31T13:05:43.387Z","2.5.4":"2021-04-01T07:13:06.549Z","2.5.5":"2021-04-01T13:12:18.425Z","2.5.6":"2021-04-05T21:08:48.777Z","2.5.7":"2021-04-05T21:32:48.874Z","2.5.8":"2021-04-06T00:11:26.386Z","2.5.9":"2021-04-10T00:12:27.792Z","2.6.0":"2021-04-12T01:27:05.598Z","2.6.1":"2021-04-12T01:33:45.640Z","2.6.2":"2021-04-12T01:42:38.221Z","2.6.3":"2021-04-13T03:43:14.766Z","2.6.4":"2021-04-15T02:46:50.550Z","2.6.5":"2021-04-15T02:59:40.302Z","2.6.6":"2021-04-18T17:56:18.713Z","2.6.7":"2021-04-26T06:37:03.201Z","2.7.0":"2021-05-11T00:23:06.525Z","2.8.0":"2021-09-02T08:07:10.162Z","2.8.1":"2021-09-02T18:29:34.828Z","2.8.2":"2021-11-25T09:01:47.913Z","2.8.3":"2021-11-29T11:21:55.827Z","2.8.4":"2021-11-30T08:03:12.378Z","2.8.5":"2022-01-27T01:35:34.712Z","2.8.6":"2022-03-25T02:02:31.274Z","2.8.7":"2022-04-25T07:11:57.624Z","2.8.8":"2022-05-18T09:08:50.572Z","3.0.0":"2022-05-20T07:47:29.594Z","3.0.1":"2022-05-20T09:14:59.184Z","3.0.2":"2022-05-23T09:06:04.408Z","3.0.3":"2022-05-24T07:10:38.613Z","3.0.4":"2022-05-25T09:57:34.180Z","3.0.5":"2022-06-08T06:44:15.300Z","3.0.41":"2022-06-10T09:32:24.194Z","3.0.6":"2022-06-14T09:39:18.322Z","3.1.0":"2022-06-20T10:56:25.142Z","3.1.1":"2022-06-23T09:17:41.379Z","3.1.2":"2022-06-28T02:27:37.679Z","3.1.3":"2022-06-28T09:14:13.455Z","3.1.4":"2022-06-28T11:06:01.941Z","3.1.5":"2022-06-29T01:44:47.395Z","3.2.0":"2022-06-29T08:17:38.687Z","3.2.1":"2022-06-29T08:24:19.626Z","3.2.2":"2022-06-29T10:27:28.847Z","3.2.3":"2022-07-06T08:11:35.438Z","3.2.4":"2022-09-19T09:09:42.619Z","4.0.0-rc.1":"2023-12-03T07:21:16.361Z","4.0.0-rc.2":"2023-12-03T07:22:37.628Z","4.0.0-rc.3":"2023-12-03T07:31:44.231Z","4.0.0-rc.4":"2023-12-03T07:33:32.451Z","4.0.0-rc.5":"2023-12-03T07:36:39.953Z","4.0.0-rc.6":"2023-12-03T07:47:24.444Z","4.0.0-rc.7":"2023-12-03T07:48:24.852Z","4.0.0-rc.8":"2023-12-03T07:49:24.643Z","4.0.0-rc.9":"2023-12-03T16:17:27.992Z","4.0.0-rc.10":"2023-12-03T16:23:51.842Z","4.0.0-rc.11":"2023-12-03T16:26:18.604Z","4.0.0-rc.12":"2023-12-03T17:55:31.127Z","4.0.0-rc.13":"2023-12-03T18:14:21.792Z","4.0.0-rc.14":"2023-12-03T18:17:19.006Z","4.0.0-rc.15":"2024-01-15T02:13:26.992Z","4.0.0-rc.16":"2024-01-15T02:14:35.450Z","4.0.0":"2024-03-09T18:33:00.211Z","4.0.1":"2024-03-09T18:42:01.796Z","4.0.2":"2024-03-09T18:45:30.958Z","4.0.3":"2024-03-09T18:51:58.254Z","4.0.4":"2024-03-12T19:02:09.690Z","4.1.0":"2024-03-12T19:20:05.814Z"},"maintainers":[{"name":"xiaocaibird","email":"332877152@qq.com"}],"author":{"name":"caibird"},"readme":"# caibird\n\n## 序\n\n&emsp;&emsp;我一直认为typescript对前端的代码质量和开发效率的提升意义非常重大。\n\n&emsp;&emsp;所谓“善战者无赫赫之功，善医者无煌煌之名”，如果能把typescript用好，它就是前端代码质量和开发效率的“善战者和善医者”。\n\n## 版本\n\n    v4.0-RC\n\n&emsp;&emsp;3.0之前也实现了类型同构，但整体功能非常重，接入成本也比较高。\n\n&emsp;&emsp;4.0后将专注于做一个`MVC+DI+类型同构`的通用型框架，接入成本低且将拥抱开源。\n\n## 安装\n\n    npm i caibird@rc\n\n## 仓库\n\n源码：[https://github.com/xiaocaibird/caibird-new](https://github.com/xiaocaibird/caibird-new)\n\ndemo: [https://github.com/xiaocaibird/caibird-demo](https://github.com/xiaocaibird/caibird-demo)\n\n## 简介\n\n&emsp;&emsp;首先说明，这里的后端指的nodejs服务端。现在大部分前端项目，都有自己的nodejs服务，可能仅做为接入层和简单的BFF层，也可能有更多的后端职责。\n\n&emsp;&emsp;一般情况下，nodejs端(以下统称为：`server端`)的代码也会和前端(以下统称为：`client端`)的代码放在一个工程里管理。可即使在同一个工程里，当我们在server端开发完业务api，并在client端调用时，想要获取api的字段类型，通常要做不少额外工作。\n\n&emsp;&emsp;另外当我们需要快速从调用方(client端)的逻辑，跳转到被调用方(server端)的逻辑时，也不能像一个函数调用一样快速跳转。\n\n\n&emsp;&emsp;所以这里抛出一个合理的猜想：\n\n    既然在一个工程里了，是否有办法能让业务功能在开发过程中，\n    零成本的接入client端到server端的类型检查以及快速调试？\n\n&emsp;&emsp;于是我就想到了要做“前后端类型同构”，关键能力如下：\n\n1. 提供client+server的跨端类型同构能力\n1. 提供server端api(nodejs api)的方法级调用能力\n1. 完全基于ts和koa，无需任何中间层和额外的协议文件，在开发时能随时响应api的字段变化\n1. 在开发时能直接从client端跳转到server端的api代码或参数字段\n\n## server端示例\n\n```ts\n// src/server/index.ts\n// 服务端入口\nimport Koa from 'koa';\nimport { controllersRouter } from 'caibird';\n\nimport * as Controllers from './controllers';\n\nconst app = new Koa();\n\napp.use(controllersRouter({\n    Controllers\n}, app));\n\napp.listen(8080, '127.0.0.1');\n\n```\n\n```ts\n// src/server/controllers/test.ts\nimport { Controller, httpMethodFilter, View, BaseController } from 'caibird';\n\n@httpMethodFilter('POST')\n@Controller()\nexport class TestController extends BaseController {\n    @httpMethodFilter(['POST', 'GET'])\n    public async getConfig(reqData: { obj: { a: string, b: number } }) {\n        return { prop12: true };\n    }\n\n    public async getMsg() {\n        return '你好';\n    }\n\n    @httpMethodFilter('GET')\n    public async toUrl(reqData: { url: string }) {\n        return View.Redirect(reqData.url);\n    }\n}\n\n```\n\n## client端示例\n\n```ts\n\nimport { ApiService } from 'caibird/client';\n\n// CaibirdGlobal 是一个跨端的全局类型命名空间，CaibirdGlobal.Controllers是所有server端的Controller类型\nconst apiService = new ApiService<CaibirdGlobal.Controllers>({\n    transformGetMethodJsonData: {\n        enabled: true,\n        queryKey: 'caibirdurljsonparamskey',\n    },\n});\n\nconst fn = async () => {\n    // 仅获取response data\n    const res1 = await apiService.call.Test.getConfig({ obj: { a: '', b: 0 } }, { httpMethod: 'GET' });\n    // 获取完整的response body\n    const res2 = await apiService.call.Test.getConfig({ obj: { a: '', b: 0 } }, { isRaw: true });\n\n    console.log(res1);\n    console.log(res2);\n}\n\nfn();\n\n```\n\n## 核心模块\n\n### `Controller`装饰器\n\n1. 用于标记需要`controllersRouter中间件`(以下简称`中间件`)处理的controller\n\n1. options：\n\n    ```ts\n    type Options = {\n        // 命名后缀，一般不用传。 默认为'Controller'。\n        // 需要与中间件的controllerSuffix配合使用\n        suffix?: string\n    };\n    ```\n\n1. 核心概念：\n    1. action：controller中的一个方法，对应一个接口响应\n    1. filter：可灵活组合，拦截进入controller或action的请求，实现AOP\n\n### koa中间件：`controllersRouter`\n\n1. options字段说明:\n\n    ```ts\n    type Options = {\n        // 传入所有自定义的controllers，必填\n        Controllers: UninitControllers;\n\n        // koa-body的配置，传false可禁用自动 use koa-body\n        koaBodyOptions?: KoaBodyMiddlewareOptions | false;\n        \n        // koa-views的配置，传false可禁用自动 use koa-views\n        koaViewsOptions?: KoaViewsOptions | false;\n\n        // url路由前缀，一般需要与client端的ApiService对应配置一起使用。默认为空\n        prefix?: string;\n        \n        /* controller命名后缀，默认为'Controller'\n        若定义的名称为：TestController，那么在url路由和调用中的名称会识别为Test\n        若定义的名称为：TestCtrl，则保持不变 */\n        controllerSuffix?: string;\n        \n        /* 当路由里缺省controllerName或actionName时对应的默认值\n        可设置：\"localhost/\" \"localhost/user\" 这类短地址默认指向的controller和action */\n        defaultPathMatchs?: RoutePathMatchs;\n        \n        /* 全局默认filter，当controller和action没有同类filter时，会执行这里的filter */\n        globalFilters?: Filter.BindConfig[];\n        \n        /* 接口响应状态为success时，json body里的code。默认为0\n        如要自定义，需要与client端的ApiService对应配置一起使用 */\n        successCode?: number;\n        \n        // 开启后，get请求会从queryKey读取并解析reqData。需和ApiService的对应配置一起使用\n        transformGetMethodJsonData?: {\n            enabled: boolean;\n            queryKey: string;\n        };\n        \n        /* 可自定义传入action的reqData */\n        getRequestData?: (nowReqData: object, ctx: Context) => InnerDeclares.MayPromise<object>;\n        \n        /* 在接口设置json body前，可做最后修改 */\n        getJsonBody?: (nowJsonBody: object, context: Context) => InnerDeclares.MayPromise<object>;\n        \n        /* 在接口响应Response前，可做最后调整 */\n        onResponse?: (ctx: Context, next: Next) => InnerDeclares.MayPromise<void>;\n    };\n    ```\n\n### clinet端接口调用：`ApiService`\n\n1. `new ApiService<TControllers, TControllerSuffix>(initOptions)`\n    \n    1. 泛型TControllers：必须是个object，其中每个值都要是一个Controller，或是Controller的实例\n    \n    1. 泛型TControllerSuffix：一般不传，默认为'Controller'，和中间件的controllerSuffix配合使用\n        \n    1. Options: \n        ```ts\n        // 以下大部分字段，除了可以直接提供最终值，也可以提供一个同步或异步函数以获取最终值\n        type InitOptions = {\n            // 重试次数，默认不重试\n            retry?: number;\n            \n            // 默认为 \"/\"\n            origin?: ValueOrFunc<string, OmitUrlPreCallFuncParams>;\n            \n            // 请求api时统一在url上加的前缀，一般要和中间件的对应配置一起使用。默认为空\n            prefix?: ValueOrFunc<string, OmitUrlPreCallFuncParams>;\n            \n            // 当接口返回json数据时，哪些code会认为success状态，一般要和中间件的对应配置一起使用。\n            // 默认为：[0]\n            successCodes?: ValueOrFunc<SuccessCodes, PostCallFuncParams>;\n            \n            // 超时时间。默认为空\n            timeout?: PreCallValueOrFunc<number>;\n            \n            // 默认为POST\n            httpMethod?: PreCallValueOrFunc<HttpMethod>;\n            \n            // 默认为空，content-type等字段如果没有设置，会在请求时根据数据类型自动设置。\n            headers?: PreCallValueOrFunc<Record<string, number | string>>;\n            \n            // 默认的公共请求数据，每次请求都会带上，极端场景才会用到。\n            commonReqData?: PreCallValueOrFunc<ReqData>;\n            \n            // 公共的axios RequestConfig\n            baseRequestConfig?: PreCallValueOrFunc<BaseRequestConfig>;\n            \n            // 开启后，get请求会将reqData序列化后用queryKey传递。需和中间件的对应配置一起使用\n            transformGetMethodJsonData?: {\n                enabled: boolean;\n                queryKey: string;\n            };\n            \n            // 在发起请求前，最后调整axios RequestConfig\n            getFinallyRequestConfig?: (params: PreCallFuncParams & {\n                nowRequestConfig: RequestConfig;\n            }) => InnerDeclares.MayPromise<RequestConfig>;\n            \n            // 获取到Response后，可进行预处理\n            onReturnResponse?: (params: PostCallFuncParams) => InnerDeclares.MayPromise<Response<ResData, RawResponse>>;\n            \n            // 异常处理\n            onError?: (error: unknown, params: OmitUrlPreCallFuncParams) => InnerDeclares.MayPromise<unknown>;\n        };\n        ```\n2. `apiService.call.controller.action(reqData, callOptions)`\n    \n    1. reqData：根据对应的controller.action自动映射类型\n    \n    1. callOptions：\n        ```ts\n        // 可传所有InitOptions中的字段，并覆盖\n        type CallOptions = InitOptions & {\n            /* 为false时，会先判断code是否success，非success的code会直接抛异常 \n            为true时会得到原始接口回包，开发者需自行判断状态码code是否符合预期。\n            对应的返回类型也会因isRaw的值不同而变化。\n            默认为false */\n            isRaw?: boolean;\n            \n            /* 是否使用formData请求接口 */\n            isFormData?: boolean;\n        }\n        ```\n    1. return类型:  \n          1. isRaw为false或不传，return的类型为接口数据类型(response Data)\n          1. isRaw为true时，return的类型为原始回包(response Body)\n\n### 其它模块\n1. View：\n    \n    用于让action响应除了json body以外的数据类型。目前添加了几个常用的，之后会持续丰富：\n    1. View.Redirect：302跳转\n    2. View.StaticFile：返回静态文件\n    3. View.Render：渲染html\n    4. View.Buffer：返回buffer数据\n    5. View.Xml：返回xml数据\n1. createFilter：\n    \n    创建自定义filter，如权限验证等。\n\n    1. 内置filter：httpMethodFilter","readmeFilename":"README.md","description":"## 序","homepage":"https://github.com/xiaocaibird/caibird-new","repository":{"type":"git","url":"git+https://github.com/xiaocaibird/caibird-new.git"},"bugs":{"url":"https://github.com/xiaocaibird/caibird-new/issues"},"license":"MIT"}