{"_id":"sg-resource","_rev":"44-12aaf246646b7905a1c4dea9cdde9d02","time":{"1.0.0":"2021-03-05T05:01:31.106Z","created":"2021-03-06T06:09:06.849Z","1.0.1":"2021-03-06T06:09:07.021Z","modified":"2022-09-24T00:44:03.276Z","1.0.2":"2021-03-06T06:28:05.577Z","1.0.3":"2021-03-16T13:53:46.826Z","1.0.4":"2021-03-17T06:47:39.729Z","1.0.5":"2021-03-27T04:49:39.656Z","1.0.6":"2021-07-29T15:04:36.087Z","1.0.7":"2021-07-29T15:10:55.270Z","1.0.8":"2021-07-29T15:26:51.662Z","1.0.9":"2021-07-30T02:14:13.120Z","1.0.10":"2021-07-30T03:04:03.123Z","1.0.11":"2021-07-31T00:42:59.331Z","1.0.12":"2021-07-31T03:44:08.932Z","1.0.14":"2021-08-12T10:59:03.935Z","1.0.15":"2021-08-12T11:02:51.951Z","1.0.16":"2021-08-12T11:14:40.616Z","1.0.17":"2021-08-17T01:17:01.493Z","1.0.18":"2021-08-27T02:14:21.615Z","1.0.19":"2021-08-27T02:21:00.790Z","1.0.20":"2021-08-27T03:16:56.029Z","1.0.21":"2021-09-08T08:07:40.171Z","2.0.0-beta.0":"2022-01-25T09:11:56.670Z","2.0.0-beta.1":"2022-02-10T14:24:19.794Z","2.0.0-bata.2":"2022-02-13T09:14:50.317Z","2.0.0-beta.2":"2022-02-13T09:17:38.489Z","2.0.0-beta.3":"2022-02-13T09:40:36.759Z","2.0.0-beta.4":"2022-02-13T10:38:34.767Z","2.0.0-beta.5":"2022-02-15T12:18:43.984Z","2.0.0-beta.6":"2022-02-15T12:21:59.739Z","2.0.0-beta.7":"2022-02-17T04:29:53.906Z","2.0.0-beta.8":"2022-02-17T07:35:34.381Z","2.0.0-beta.9":"2022-02-17T07:38:19.045Z","2.0.0":"2022-02-19T08:34:07.701Z","2.0.1":"2022-02-23T03:49:00.125Z","2.0.2":"2022-02-23T04:15:16.400Z","2.0.3":"2022-02-24T03:35:29.162Z","2.0.4":"2022-02-24T03:42:41.867Z","1.0.22":"2022-05-18T11:52:51.161Z","1.0.23":"2022-05-18T12:11:56.452Z"},"name":"sg-resource","dist-tags":{"latest":"2.0.4","beta":"2.0.0-beta.9"},"versions":{"1.0.3":{"name":"sg-resource","version":"1.0.3","description":"> 一个网络资源管理工具","main":"./dist","scripts":{"build":"tsc","test":"echo \"Error: no test specified\" && exit 1"},"keywords":[],"author":"","license":"ISC","types":"./dist/index.d.ts","dependencies":{"reflect-metadata":"^0.1.13"},"gitHead":"58823cecd6406860d7a3ef8207281a92f5b705a9","_id":"sg-resource@1.0.3","_nodeVersion":"12.20.2","_npmVersion":"7.6.0","dist":{"integrity":"sha512-Yw02DjYMoFR8bYHMqPNmqrrdwz0GEQENgg4oG5llE/3kw21GmQ4Kxd/K/BBY1Px15jDLiivP3URP+b7K1q7wPg==","shasum":"9dc3502a1ffa45a85e8c0173f35b987dd999050d","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-1.0.3.tgz","fileCount":16,"unpackedSize":81660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgULhrCRA9TVsSAnZWagAARvEP/035D/l6DLH+CssyGXrg\n0F6w8qXYclOKdJsR+ydiRqr+aOKc7irsk2YdJb4ItOLyTDQC5a6at2837RKK\nEQXJ4oCHhJzyqavMvkvtMztJIuAwx2vKIyeeWZSOGHxuwhtRi366XmYwrv85\nlIfPUFHOw71mAlBj6tKolHbV4Jnj8WOv2x5tjO2hEVUDVZeFa8SuThGaXOYc\n6inCZrK9JQesTi1KsIiFrYYAGaUQct0KOKPykSZbx8E8nuK76j1K6U515H5V\nvnWyzMC5lUbcDdKUStx0Z39T8D6xBXBXEsxyiaHtFcVu867HgrGM1jCokfSk\nWRQr/PoX6mvyeFxDPOgs3mY76Ljxo+Q2JM5lzrQ+c2462svlC3s1YDwe7z6G\nh7hRji44ojy0viFIGjbW0qmZyfI0AvbdKVoY9m1fizg53dxSV3JhlSCYhOm9\nT6+ezejOlRFQQSyULifi7STa3Tlfcp0Xjf6I2fNsPh4jl1oxF0iVv5AwoQpC\nosh70eT1AFZneqFuBRf+UElPA2XGIZ6lxPvG3pGfzPXoweqIN2EkGSewrSji\nNBeErm/YHiRNLcAnIIMGNHAnQ4LJdcUSZoJ0m+M3HFxe9lltRgEZ6eD7CLJb\nhqHdzQSdKQkYhPijfNdu3utvUa8DbkJh2AkEM4PaJiMS1D2bi4v0D8tlPATw\nv7jk\r\n=nn6e\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC6UC2GBP/6LKfUEMQLXenXpQI2t3k0uTLZ21YjgxT4TwIgM9ia4vAKzNaM1gKpscjkbMne6AezKLY4q5en0BQvbj0="}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_1.0.3_1615902826657_0.257196661538192"},"_hasShrinkwrap":false},"1.0.4":{"name":"sg-resource","version":"1.0.4","description":"> 一个网络资源管理工具。使用HTTP协议请求，支持Vite、webpack、微信小程序、支持SSR。","main":"./dist","scripts":{"build":"tsc","test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":[],"author":"","license":"ISC","types":"./dist/index.d.ts","dependencies":{"reflect-metadata":"^0.1.13"},"gitHead":"28672c34757ca3f0928c2439dc4ca4d95b29fadd","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@1.0.4","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-arur31u9bjkkjqebwzZ+3YT+ORUqYCP4oArdQPW9atzGEd9cWumYlmEliZPKvFcTZ3iLFXu2WUShpl9X0PP5zw==","shasum":"78e40dbec0efd27c74f1620f1a4d2837f07cdcea","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-1.0.4.tgz","fileCount":19,"unpackedSize":85617,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUaYMCRA9TVsSAnZWagAAiYoP/3tGmyGkAabA3mUZxlH0\nwJxNsVEh+XxV5d9Jf9ufaf26RxllvE84vSQPMjrKcQ1kOAJDhMKkV2jfCx9y\nrGYues3y8ROHM/3bbUdJTX5HT3VsSuTWh5/P4vwP/QFgbUp1A+HCgE/vuKkC\no07XowrgM2jm3vpYALtJA24rRK+9W0AgABYBjrdjpck6fKESA8U3pPCjjJBd\ne5F+b2zR54Fi0d11di72/UfLaV5OWVipucLcjnR6XMB4I4MxIIx4v13J2w2e\nyLZSIvx6Lh7O+6aemf43HsX9YbZFydrx1a+KAPIgsQvL4zkQBNiWB2o+bAzA\noZyp5+NGSZsm3YBkGreSidB6/OgaOjgJuMjnR5jZiJ7+HeR7oYBAMOhAD2VK\nDzkgOLV71OuKJUSxyP0rS2FYHLgcXdw0ynTmPJW+b0MKhLXKYjj9r8/UacmE\noKWHSTu+hvXJwRdJhNdqEgYa7HoFt4cS+8NyU8NHHMSdv6lUq1N7IEoo2n1B\nCSYV3MEMJyi9gFNb4rl4hlQ9olIsI3ufL04HPZb5VOM2A+ShfQnFT3O6N1Fi\nMk74pkDvu58uII7Jee89C4NwwDebHG8FOIJ3dmSygD9K71Oe71miLuWa8TPo\nmSFBCnxf2JbndAtc1J527GRkPJYc044y2hysNOky5kDrgdbiFvh/OgcVjcNf\nzOYh\r\n=LkRv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDaBeVvp3eySMFGodLd+Ki5Vc6SP7QlU7i0UVOitYeyQAiEA+YWDcYzuycTpBC6+tIbKbGv6TL0mku/JGGGb+1yRZC4="}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_1.0.4_1615963659584_0.10228038471538348"},"_hasShrinkwrap":false},"1.0.5":{"name":"sg-resource","version":"1.0.5","description":"> 一个网络资源管理工具。使用HTTP协议请求，支持Vite、webpack、微信小程序、支持SSR。","main":"./dist","scripts":{"build":"tsc","test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":[],"author":"","license":"ISC","types":"./dist/index.d.ts","dependencies":{"reflect-metadata":"^0.1.13","typescript":"^4.2.3"},"gitHead":"73cd2119d71da329fb09405e49db2ce528d0ffa2","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@1.0.5","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-yUUVsp781R1GqYJpv0XjfNggnH9kOhrbA8gt/qO6LutXdNY96pRnGmJ30Z5dlrzqxFLQnzrSmoR00UYEmWo6dQ==","shasum":"f00928ca58569437b4cae2d1fb14a38e64bca5db","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-1.0.5.tgz","fileCount":19,"unpackedSize":84539,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXrlkCRA9TVsSAnZWagAA2RIQAIqzatQyjmkADL8zcyHF\n9VlGZzd9MKVNcdwpbvcTJrFd1D4hMp3o/KoLjGHLJ+evHiC6GRNM91aABl+i\nGDvBkoZnrY06/IlI7HBe2lYfht5StiZMgI/J1D9fSnd8Kf1Evwk6cLu+AMF3\nZ61Mb39ec+TaRGAr0Riytxo+ssqfiHMKk5AiXg2hy1h2kFzq6B/VaxmkEorv\nGaITcqHrSL31wYJge9V8ef6pLdT+J0U83O4GRaMfiSSQ3HU4WxhPCke2tPVD\npXCc710omEQhoDqOdQiMyBOsoB3gKk+lP3FvAf1Ia5CxM/uemzso5w3zhZkO\nhhS8l77ckT2bd+I33eyi7frIS7WvAS3OoiAuYwKWJPS1fb84eZGI2qy9ThQE\nVsTXViGn2I9IetqTunlT1PTZ3c77yYewcpxZUONxLstoDUSU/q0hUbG7/kwZ\n10tNu5FT7jmcaRchOhXPNgHmFRhlmGNmitX5ROc7igEp51ZtjvjoGxA5C69i\n5ft0SX9NIJgnSGuL6tlrczcYv0we1/zIziRQxv1iewTZZTFklshiP0QdL3Hl\n6PCtODv1vLEtlnqdZ3lrFuNcx9BFr9KBBYlK0bID0iDVnzsfJzxTxhQsW7mr\nWD4SLdtU8FIpG1qfSuDRNXbJ6dlFwrsDfXu6bjfR8jc/LhsI19/tiz/ekVoH\nnxee\r\n=BrQp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHp8kO211mXbYP0nWB0457b/vPtOTi7JM2hJK6RdX7oXAiEAstGobV0mTWIF+3fY7CDPENA8DYonth2Jknhb3Pvd0hs="}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_1.0.5_1616820579523_0.0518621659092906"},"_hasShrinkwrap":false},"1.0.6":{"name":"sg-resource","version":"1.0.6","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持 Vite、webpack、微信小程序、支持 SSR。","main":"./dist/index.js","scripts":{"dev":"tsc -w","build":"tsc","link":"npm unlink && npm link","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":[],"author":"","license":"ISC","types":"./dist/index.d.ts","dependencies":{"axios":"^0.21.1","reflect-metadata":"^0.1.13"},"devDependencies":{"@types/jest":"^26.0.24","jest":"^27.0.6","ts-jest":"^27.0.3","typescript":"^4.2.3"},"gitHead":"9750c319a7d116691780448c1a68d67d1ac1f64e","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@1.0.6","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-3wQo/Tv41h3vIvRVWJY9rvpt9SszHytUDHXkvdtObva65OWEfbXUHDf/At5KQneDImQ1gwjX1ADRzYwie50ylQ==","shasum":"b4ee1e3ea9e4f9f6bf8f2f49101471f4f969a7de","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-1.0.6.tgz","fileCount":36,"unpackedSize":68846,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhAsOECRA9TVsSAnZWagAANDUP+gLqYbaatDRfSx6w/Kez\nC/rBAI/TztU4VczWqIk7scgHmB4ALzRs+1W9jf28mnTxpvso4pDFtryz9Oi2\no6AcJhXrfXHTazLK+VSsx6Sud/40U6VCE1TV9VqysmCkkRfUGWLp2SbwTGgW\n5/x3qg/QFW2Hl4bvSnhS46/WdAvIj542Y/F9Yq/tOtwZKiPyWs/uUnAiKBqY\nWHBj3eG1NkpoKlhRo26xvK/6wu9nHw+YnmMfgq2n6LIPN9mqC8/u5lg0TN03\nE+6wSKjn0YSyarI1T1XAGJQUjgJ5xm/hF2QvtgW3qY+TGnWswjOpsUQExdNt\n6Aa18bPlXknLAvdY5liZGDZgD1vaDH5MZZyxrBQltFRJJszjiJ8MYLKgRQbp\n78IIrPgU0oMlxCPbM+CRd16DtVvkBWrbattuTTfAPC5oNwjgrlXav2xQ0+n5\nrLV1/0Db3U2nIIdF8PFE+AiIUmLfEw1GqF5rFwMOrS02yN6cASJ6nJ92YK0h\n7gGLFvSlX1FtVt7qs2icPYL6nFXD+l0pGsi/Pei+ZOwMBu2ehjaPQ/TjZOsz\nwCnRUCwhBNnwn4wMDrjKJ4AoTYg1XYYRjRpuOXpv/N9KNlJX3p3ztK3wh3CV\niJqrCJzpbwBzcDOYW//jbaR0RSdsByHJbqje9MWtsYlujtvXg014VJPQ3jBC\nDG6c\r\n=LD/n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2vNB74ShEPazF+R/tFcz6ZJjatqP5hge6q0rsC6D78wIgRUngLPCXCXpJ/HsnMrQqbNH/dm+QfaDWS6r3piUl8Pw="}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_1.0.6_1627571075921_0.4310784980766751"},"_hasShrinkwrap":false},"1.0.7":{"name":"sg-resource","version":"1.0.7","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持Vue、React，支持 SSR。","main":"./dist/index.js","scripts":{"dev":"tsc -w","build":"tsc","link":"npm unlink && npm link","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":[],"author":"","license":"ISC","types":"./dist/index.d.ts","dependencies":{"axios":"^0.21.1","reflect-metadata":"^0.1.13"},"devDependencies":{"@types/jest":"^26.0.24","jest":"^27.0.6","ts-jest":"^27.0.3","typescript":"^4.2.3"},"gitHead":"9ce18591cc6a2bce58e9099297997188e0c59f51","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@1.0.7","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-/AERA/pZOLUEhmMGMGaTgLIQnqmFQQSo4gJtWSglKh8fDDCmKuvPHzfeQJnBwzLqntjRMIdvUD70YWBdFHEUFw==","shasum":"dfd53b9e46a2dbbc1c7f0f7be1ce4e1fcafc4301","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-1.0.7.tgz","fileCount":36,"unpackedSize":68824,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhAsT/CRA9TVsSAnZWagAAAYwP/R+/JxDhDcQFwUJr/O8m\nGsN1N34uYovuGK0jWfIASBcOd3gB0luMRlYF7h4KLvHN0bAKJ1nQzbBTy8j4\nDYyXllSVQFlPjgCsHpoFe3NGa+2s6LjD8rSuCAlpcSXF1f2HHeQWZynGvdGf\nMELjadvxVmYoMJgcLZtNKYCYnUkv7EpOVZxuErRUrVCCDgRy3p8APtl3LX0U\nSEn+prMWqSlR6twFHxvkTJO/91Hzdbo5Q918t5gB3TXftsQz0ZcI7wiglb+V\nQTblya22MgdVDaYf/FHsBAheUcXk2bYTyzVooXCr/CenXfG+hfgxatY/aLiq\nfLVWgyPhsW7z9HFwLSeB8qb0tZ9ZWB1MRVBOi/Qvybq5VcJowoWahP/z11tT\nJDqih+gBgqFwOV1gKP0a4mUqpWzVuoJqurzY11Rz/v7MHm3Q/+KAICeZo2Qh\nglpgwcW/sKr16CbEBFMoKLpSwU0AoGsEmYMnmjAhdRYoVY1iWddMyawb9PiS\nBqy9q1mSIgmWvF0qoyZCHGy2VKyH2aOwpiXYM5nB+cXZV+TU56nlFkPSssus\nFzOzoALcvtaMIAaKL19T709GTU4uFJ7rc2Eqdk8UvrohAqTnhfehQ0znILTx\nTyMX6sF6VhtgrU1HLNb7rxFtG3PgzGcMfFDoIOtjNUZqPLQukNMmS3q/n6V3\nKw15\r\n=/yRb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICUVWurRsgyVN+8seaQZ2dVSzvlpXsmr+7VrajUEva5ZAiEAxMd0qcjPeBvsu0AIUsiLxxh3w5LwmJiHgkfNuauXCMI="}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_1.0.7_1627571455092_0.5538261479865532"},"_hasShrinkwrap":false},"1.0.8":{"name":"sg-resource","version":"1.0.8","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持Vue、React，支持 SSR。","main":"./dist/index.js","scripts":{"dev":"tsc -w","build":"tsc","link":"npm unlink && npm link","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":[],"author":"","license":"ISC","types":"./dist/index.d.ts","dependencies":{"axios":"^0.21.1","reflect-metadata":"^0.1.13"},"devDependencies":{"@types/jest":"^26.0.24","jest":"^27.0.6","ts-jest":"^27.0.3","typescript":"^4.2.3"},"gitHead":"d51b29a9dc417dab22b11550be6f498bb5b5e476","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@1.0.8","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-hXeW/rxEB4f84wOnrAXPtLodmKxQ7kAKWhn9ZyxPSnqvwLIY72uoPxhiwXI2vbP1HvsP4Nje11Yl/Gws8BfwUA==","shasum":"d26390d8fa08204333cf4b200635fef29dae55e9","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-1.0.8.tgz","fileCount":36,"unpackedSize":69074,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhAsi7CRA9TVsSAnZWagAA3UkP/1mML/S+3ac0AZxhxsLL\nIIy4r0D97O+lx8yqC+PK99W4UrfwKFor4IOIH3Sn5n2jVuvqfO+o2y+p5flb\nKkjTHqwLpH7Sdswl4zUTw2V6AEDq4HlM52w6/bZKnDlMkG7Z5zaYA93ltVNX\neetgjxN53CIJ00WsJyxw4lsvv5I/3ooXsc+PTs7ZOlduibEHKZOGcNHGZyl0\n6qe/kFFzB+3VOHyWN2Ol4Oob6yVpbcl3ar6H2XuiuWeAa37vkOweTcVu5/eP\nZ+ApOI9B7LYjxg5Zu86tp6f2BeFvEEaGCmIdwT8nmGzfk45RQxwJtUqm2G0+\nwabn/MvOLKUpoDyQjeFybPQWO5xE8p6tfOyTJmwtbx7GoyYYZT1xzLHpmtGp\n8zdk/31tWXWYNyNnaUlpeEYy6GZbimYMomw/miFt5jJFBrEa6ntl4Py6KQl4\ngF5LWEunO0KFJq1ZoDUVZGiruUyJa++rnV++JDtrXWCk3uhNKHu6Ct8k678K\nxLDsBl+/vMsLMFF6Nfvc2W80rwY0SgVaNgWJnPog+FTKwL1Jgn6B+ezF1yyB\nTY0V0yUvVqSV+hvuhcDNIjAaY96+WgHWyPB1b4Lfo5jAiEm7le39B+DEDXNn\nFKQDJhzix3/D6IX2/8GflwP8tk8l3DkkodeVeAeudSzRnsks2lmSK8+1yQJu\nb2zR\r\n=aRxn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICnvMtBPjKs2T8D5nYHJpQ168dq2SV7T3gOoYuvjhYFPAiEAnqnTRIsE0pnanEd2kvK7fvBcf9sLFBNZtqqX2o1N+/0="}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_1.0.8_1627572411503_0.5150552497092793"},"_hasShrinkwrap":false},"1.0.9":{"name":"sg-resource","version":"1.0.9","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持Vue、React，支持 SSR。","main":"./dist/index.js","scripts":{"dev":"tsc -w","build":"tsc","link":"npm unlink && npm link","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":[],"author":"","license":"ISC","types":"./dist/index.d.ts","dependencies":{"axios":"^0.21.1","reflect-metadata":"^0.1.13"},"devDependencies":{"@types/jest":"^26.0.24","jest":"^27.0.6","ts-jest":"^27.0.3","typescript":"^4.2.3"},"gitHead":"6f2165767aa83b41cde4fdc27b09f6da1932d167","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@1.0.9","_nodeVersion":"12.22.1","_npmVersion":"7.13.0","dist":{"integrity":"sha512-Cqdaijgm9t6hSIKBaPRwvtgpgbAH6I7sMFhSigC3WbW00I02J6qj2W7hsSybP8Q7Ghv8Btus8xMI6vVTQRGBkA==","shasum":"23d6650da2e07854c82caa03f40ed300b3deac8b","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-1.0.9.tgz","fileCount":20,"unpackedSize":43114,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhA2B1CRA9TVsSAnZWagAAxg0P/i0JrcXsfP0kLz9GotoW\nXfyxAAQ7hawvnkC8Qy7cq/c37PAVDBkLEb5dFjo5rBTdQ76fnTf0x2aNa04E\n8+VP0IigLfKkoUW3mjH+dLaeaCQj4FBuyq3wRDFH6lxo035zZ9bd5u2QnPFZ\nPlKpORho8ZoP8ZCkxXFGf4nfk7TGrX3TpKDix1hePBv8Yyzhbq+o8El6Ag49\nPjylZeIp3/onMK6FZ3fnO/5qgWNrkftOZpOVbdbEIBGVng0xr+kWrCvGW+1s\nbRvyWi5q8Q7N2cNZRjlcVFze9QOB7ltcykUZ+taYHP2PK3wh2aq9Ed+4G3s4\nW5uG7zCyLKK3C/I6gr12tYCI6mpwnYepVey2HcjWeGBRKtIClhVECbgsebGI\nMPDac0iBMMUyq9glKZvYKR+xWDLo05vGOhSsZIS3n2NqUe/6OQuhb05hXoS7\nQC+6gofekbSLOsGGsQO3KdnuyunflpOHAOe3EA+6Kycce1Jws5eVSIKwO19m\n+RR+lccdHrU0GBlb0tuj/gajM1pl7N1V+iPdXlXcN22qOhPL6PVB4w8X4hKz\nSBtgLsTYdAYQliFZ+Sxd0sQ+vlz5/s4i8g3hjw6P7qNLvlP5lQsoxHzZUBsl\nFr+tdZrVtp99stO6VWbI63Gccy1WUxI3b0/57RTuStTEw9TY/NOnhZfs0LZQ\nvtMb\r\n=9op7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDvu7by0EzYXlXD7PW6pwExU9aokmPSa7+fLTIMn/FTgAiBbzlbqUOiSxt0CpK4jQL7m588bRMxB0NVu+JkSKkoeJA=="}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_1.0.9_1627611252981_0.011854614851704914"},"_hasShrinkwrap":false},"1.0.10":{"name":"sg-resource","version":"1.0.10","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持Vue、React，支持 SSR。","main":"./dist/index.js","scripts":{"dev":"tsc -w","build":"tsc","link":"npm unlink && npm link","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"ISC","types":"./dist/index.d.ts","dependencies":{"axios":"^0.21.1","reflect-metadata":"^0.1.13"},"devDependencies":{"@types/jest":"^26.0.24","jest":"^27.0.6","ts-jest":"^27.0.3","typescript":"^4.2.3"},"gitHead":"52be408b8d6e4792e64fef6c99b3cbf6dec04ad2","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@1.0.10","_nodeVersion":"12.22.1","_npmVersion":"7.13.0","dist":{"integrity":"sha512-EZuhhk3KzdIfvx4/DGW4FFfg2VWyyXv2YvoviGLLBxHwGqyQkgVqJ4xd1HKgYehSqTk515V+mbxjxpjGucWcTg==","shasum":"9203c55f41f7e2aea9dd1c97b62be038ab2fe428","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-1.0.10.tgz","fileCount":20,"unpackedSize":43140,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhA2wjCRA9TVsSAnZWagAAiIYP/iJbgsfx/glgjNLH/HZY\nARqkSjK1nJL/DtrmpoB9ArhU+Cw2yHiC5qQxvEz+I0fH5sfPxlI8mo1QdDat\n6qGMq9yJo5VtSxwbk2ksg6kfwRpawtmKcctezmh8UqhQf0+5XKXB+0xZfdap\nkvaxxzlui7aTWqf3SmstC4+43YWbSmtcbcBCj21NtyXLFFT7T8+RDKPL9UI3\nYXH8UWs6+FsFRVQ2oz/uBJdcWZGUzTb3iRr1j6zSxsR/E5aT5yWxA40VIO6d\nGbop/jBlV20+/QTSWv+33Is617vjHSDqP2lSOsyZU7s1Nibo5BulPvEgiBzX\nk0tk+FfXpQNAH441zl6qjukLGcwpgdynnXhGmtYzGVwvfM7rwPHbw+lDVTxI\nf/k8mXAWgOxMw+K7p8v4h8Pz/yYKnERmWIJihwD/r4HJtBcZ3da2j1xWHL5S\nEJKiDNhZLsY2o1KJgtkendSpphY+uoNxrLNTYQVpfvh+iWLhtDlYbHoYG7Hn\niWfjaUWhDJsUxIO6zA+kKG5TAD3HeiF49IKN4/mMmaRd2Izpzr9qqXxe2l63\nKSW0rQfGik+MwAgcnfTW6Jht444x7CwN3N6bm2GCQVnV0akVU/MCgfKw0BPQ\ngHXbdxm6ooiTHwz1pioJO1e7qrs+/x/6eO+CSaBKgVmCwyJ3b/WOGH9QbZcK\nfsFP\r\n=shTD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCPxghWcfrzfu/z3bv5NMhL04pQDV+wyLW2zobbD8lGsAIgYSQ6vGL+Mh6U9mw+GxosZe298RLzLyFvr4qd2HEJaM0="}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_1.0.10_1627614242926_0.7481849863320571"},"_hasShrinkwrap":false},"1.0.11":{"name":"sg-resource","version":"1.0.11","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持Vue、React，支持 SSR。","main":"./dist/index.js","scripts":{"dev":"tsc -w","build":"tsc","link":"npm unlink && npm link","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"ISC","types":"./dist/index.d.ts","dependencies":{"axios":"^0.21.1","reflect-metadata":"^0.1.13"},"devDependencies":{"@types/jest":"^26.0.24","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","ts-jest":"^27.0.3","typescript":"^4.2.3"},"gitHead":"5fe1a91234e7492bb4a81df8401db967bd4752b1","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@1.0.11","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-dJbYyfJW2P/JdnfFl96p9LWKcxZ6Evnqlo4n02NpnleCJWj3j5XmNYQGtL/1/Myzn/uKWD97p8peo0Uoux1hjg==","shasum":"7acdb8fa9a431b8b67ddcb8602a96261ad839bfd","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-1.0.11.tgz","fileCount":36,"unpackedSize":71701,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhBJyTCRA9TVsSAnZWagAAVRgP/0fM+NeQgYwI0lNZCBn5\nQtTQIrcMkaKcNFVwGenpfV9h08DKBugkvuRQe19nj2A5gvSQZZOgNYGk80nx\nuwSfPc+YM1+Kn4drenA1ez5i9v17O0ujfGo+EFKyY2JMv3KgyXDm3+3V0Wmt\n2SlJo5YDu4y2x5BaV1z/Wb4j27ebjqC+gzepiCEjCQN6tExfVy6PilI2IDIH\nV7rwvWi3IpE9hblqU0N7Z7TQC3FztcVjlRyJ19fJ/vKWDiZXDeaeJhHW8YDQ\nRXzsEy5th+UN2ZmuwzCzvgBO9YJV/pI+fZYEGv/l+hDL3bNPxAPKunWxGLuV\n5gmsC5YVGrA/lC249/1hNPgQedtT2UuwDpHmQ4eO1wiXXTIr2AtU+54yK2EK\nSL/ROIDjvck8lC/5TWb7aaktByOaJJfMC29TmNV6b74Uti+jqgqTb1y1IZgU\n5/lh2admbgWSbN1subK/sADlTaaBWJNtAg3jgttyopfSBTWjxRoxjBsCLAN5\nTnBAs5nB0eOwse7pRjUWRJ98wb16YsUHVZ4EamF77xYG4OKcmBaRuoAz6ODU\nzfpeUnbpwt3tUIVx4acW2euAOFF4HmgmaIA6g+l9398wl7JYE7AZBZPe1ACk\nyoYheHHZQKJy3IpfhbLiFvf0JKDkouZULfjnGWhpQVn7L3JwouOnHy5iQ1gu\neXUi\r\n=cgAE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLFvGEzLfGVtPEoELW7/iupuwl6+Ij8hDB4AE8ycpvhQIgFD+KzEyGXlJL2+ZiikwRI/XFHiUCzq3UJgcVJXSkVUQ="}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_1.0.11_1627692179130_0.3069744825674141"},"_hasShrinkwrap":false},"1.0.12":{"name":"sg-resource","version":"1.0.12","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持Vue、React，支持 SSR。","main":"./dist/index.js","scripts":{"dev":"tsc -w","build":"tsc","link":"npm unlink && npm link","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"MIT","types":"./dist/index.d.ts","dependencies":{"axios":"^0.21.1","reflect-metadata":"^0.1.13"},"devDependencies":{"@types/jest":"^26.0.24","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","ts-jest":"^27.0.3","typescript":"^4.2.3"},"gitHead":"2b54669bbbba441d6e7bc95bf9817a32b012e0e6","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@1.0.12","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-DwwygWZsul+oZ6tWl83/Sev4kTR+XPK1cv2b+ol+BAC//tsTOs8iN9Pu2WOQz0e/48Xy4oR9qvGfjJNZtXYBoQ==","shasum":"3ce9811f541384a06cad10c0b29b171b7c71b8ce","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-1.0.12.tgz","fileCount":36,"unpackedSize":71700,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhBMcICRA9TVsSAnZWagAA3ecP/jO8qLqXIbbxbDVDZjR5\nqizeHHV/8qHrUreIA7bDr7/VIJab2giM23dLSYNh3mm0qJB7KuWhmmnyDwoE\np41+dhhJPgATwyUtnnlAOILQ+iAEux7MlgsiGXGfeO1M87XxaoHdMf7PJAqT\nQ+xMDrd73+z/E3tOIPu71JdhEeEo2/QzQa86nFjnUP9t7IrJ15gKyd88FU7o\nK1ZOKP4HiZjDRYptrXTnmvqe855OGlJWbjNjV/WWnkOaE5CPGOghA8jDzqfO\nhSNFcrrJYU5dsDzMn1nwKHqG/ee2cIUlABKHibCK+RP+3DaigXbx5VFbPxPf\ng+rnZMY46LcnLlr5xM4cmIblp13rbiyqta6DBg3YQl5FHfM6m+3tMQWl+MMS\nHwA+hMH1b7aKdIRJIZAOV6oK/q0C3R226UICAAAixi1rDZLAPkrxWX2d5Om0\n7r9WqGaSmtzqUxGlTR6Ui+GrBhWTpP4UBFEGIrZJySiO3JfZkK0qc86Z3pMe\nnLolA/+p7pPrbHQAYfjGxhYl6rN8S9chZrrwFwzkmVeHtnE+8lyyXHFYer5O\n3TMsoxdgEloOZ/4HYD++iMHisDpfyujcjWIbfKZje8zqN4Gmkf8KbeKG6u+5\nX8OmNWLgLZuBFZ0UDqiJ2jvWgsOHAr73vtdcJIGvfpbXxcE6TpuITWRsiVx8\nz6nt\r\n=Td80\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQCxJPgmYHr47Zdbg5zr3Z7ec+6uRGRfpN8q8IWKjTOQIhAOYjjbM51BpcihhUtL2Nt7rkecZaV7Hrq5/Yrqvy8Bkn"}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_1.0.12_1627703048778_0.5674187701985955"},"_hasShrinkwrap":false},"1.0.14":{"name":"sg-resource","version":"1.0.14","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持Vue、React，支持 SSR。","main":"dist/cjs/index.js","module":"dist/es/index.js","scripts":{"dev":"rollup -c -w","build":"cross-env NODE_ENV=production rollup -c","link":"npm unlink && npm link","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"MIT","types":"./dist/es/index.d.ts","dependencies":{"axios":"^0.21.1","reflect-metadata":"^0.1.13"},"devDependencies":{"@types/jest":"^26.0.24","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","rollup":"^2.56.2","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.3","typescript":"^4.2.3"},"gitHead":"88e964e4617c8146c5695215a0a2cd98be6de4cf","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@1.0.14","_nodeVersion":"12.22.1","_npmVersion":"7.13.0","dist":{"integrity":"sha512-1ACyP85D+5BTZCaZn5II8UPI/B7oG2XetmTTMFqes+jnDCouxUQTxw7GEGtAO5MQ6+RRV+iP77ViGEmUYRBDVw==","shasum":"19034ff2c3441a53714032bdd960383d0bbbb1f1","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-1.0.14.tgz","fileCount":4,"unpackedSize":41686,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhFP73CRA9TVsSAnZWagAAP4YP/R+j4PwSSu7feDyLdAh/\n7wKMgoWesoUjOSXbwk7lzLdaY0hWCzRPgMX2vAHLgOnBZh+y9IAK6Nlegxci\nP56kuPAEewAQWUqbNE851WlMMh6s3wnGkt1GBQAVUEQFkwosnq3hEs7auxyC\nwqcymexyw5pfL8uuLJVfnRMJPGNP/6xgMN6r4OdHaXe8UrUcaBrx+ZljLPGc\nn/ZuGM6dEf/T9KSNZBdMbhMBFkIv1pChlLS+mPm66fofC/IXWgpEIXAfoiLG\nmgKlmdgEH8in0nEq+XqXXgmvYJJP0wfsU0ZUK5AKvNU8LqKsBErZqgZ8IFmM\nSjZbQGDZEfxrIfy2p/QNv7NwNjaStYlSsLvCi8wceAdVA4sli5u3qtT+CEDD\nr0mKh3EhUKMXG2IFeci6fNp89azjAgKYnSDKoOvP8hwDcUnXMItexCafyPsN\npVx+uPIBBXVq+ngTfmb/cjWHRIWQkT0qLMM+AUov0Gnvdgp2RS8aXlCGcGqZ\n64NBREj8AG4mJH07qCKMZlfOPQu+o5ZOvwfbfGPJXQq+5LI66rNIGlSCz5Fp\nNKIUSjzoe7sEJIVtbQsUywbBsoFHLy5MeLB1J0BOUYEgHRQ+EPR/LIXwm25Y\noN51RzUlgL48R8BXLydOUbDVvJsn00CRzAqeurkzXwJJmhacHo6Xe+mHJLfh\nMZq1\r\n=fLlP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFKsZfdleXLehHiq5zRQOLK+VFiNOPnLsdr6ThHgQyYqAiB/PaytHx2aCdqCGjsk65lx+M9K7mWjF1PPlCg9A8aXKw=="}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_1.0.14_1628765943764_0.4202538613903699"},"_hasShrinkwrap":false},"1.0.15":{"name":"sg-resource","version":"1.0.15","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持Vue、React，支持 SSR。","main":"dist/cjs/index.js","module":"dist/es/index.js","scripts":{"dev":"rollup -c -w","build":"cross-env NODE_ENV=production rollup -c","link":"npm unlink && npm link","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"MIT","types":"./dist/es/index.d.ts","dependencies":{"axios":"^0.21.1","reflect-metadata":"^0.1.13"},"devDependencies":{"@types/jest":"^26.0.24","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","rollup":"^2.56.2","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.3","typescript":"^4.2.3"},"gitHead":"88e964e4617c8146c5695215a0a2cd98be6de4cf","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@1.0.15","_nodeVersion":"12.22.1","_npmVersion":"7.13.0","dist":{"integrity":"sha512-yn4Cl/Y8QFCM0FBbVXarkxfTulrYWWHHw1fkkS0TaynYgFl19UQ3LqTuGvPHYlXj0b54J9OMogqbwO5WFVcudw==","shasum":"4dde8338c1c407e5b762926b95ffb1574520c2d7","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-1.0.15.tgz","fileCount":14,"unpackedSize":54123,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhFP/bCRA9TVsSAnZWagAAZSYP/1La9FoBkXaHUMLgAQOc\nkOEeom20kWMQJXPLq17TK9FrADVJ5oa+oOeYNt734yNSIW7so/kfjOlLfWC6\nrLOjP5GYrbuSoC3u+KlTQli81dBm3rJrKW91bkM1ir2Wrr6x1er4ubqEQ4+p\nMnXiMVxlXm91oMCKqs4NwTbewXb1WxWVR1FaiE18pXKweN0LUU9AONw37Fd6\n14jZ7m6Bj6TV12xwoQ8aigPj1idxl/+GtyWOl00tGYFYuPA2K+D/+4kDEz31\niLoZqvKeh6/plcqvj7lx1WHdXnSieWtdk+qHC9tlW9ZU/dRSlTuMHd1m8M3/\ndF0ifxWejk6PD91HhsPZPS1dK+fnNTYiENbkDaQjueJx2ZRy3I42Puv5CEDv\nAXlpnqAmgsnO3D9I/juARAqIEpGWNb//YsgxHb56nZG3IaZaB3a0HYehCUuw\n69ltHKkjPepFacdeX5Koyo34rEijhtIHcrCekaT3WO8bAyS7LU3jbKBKlFD9\nZ71zbwUz1U1gdJ0IkhtFhbVdgTg+LyRC8dbNKxLjTTrpZdVzL/bFeWbaYtAK\nnb5C14P4F/Zcrcl8cEPHn1xOp84l/o8/Vhp0ASIoBFRa68zAf3jb3uBd/Y5w\nsJTY3tJWvopMnCYtooJyChtBdczYcu7Qxka1nvCEdppf1LqLO/ergm6kx4wj\nr6uk\r\n=2evR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGpBNSatKcLnz7crhQXoHNM/bbWQlMNsflYcW+pP8qLGAiEA/GQa/OiNENz8RSbz1J0PPL5fDZukOqWyRGqTqH0tQ4U="}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_1.0.15_1628766171771_0.7754647533021704"},"_hasShrinkwrap":false},"1.0.16":{"name":"sg-resource","version":"1.0.16","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持Vue、React，支持 SSR。","main":"dist/cjs/index.js","module":"dist/es/index.js","scripts":{"dev":"rollup -c -w","build":"cross-env NODE_ENV=production rollup -c","link":"npm unlink && npm link","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"MIT","types":"./dist/es/index.d.ts","dependencies":{"axios":"^0.21.1","reflect-metadata":"^0.1.13"},"devDependencies":{"@types/jest":"^26.0.24","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","rollup":"^2.56.2","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.3","typescript":"^4.2.3"},"gitHead":"335b9e110558e1a758187091c654ebf3b79bd4e3","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@1.0.16","_nodeVersion":"12.22.1","_npmVersion":"7.13.0","dist":{"integrity":"sha512-ZSeMyulVeuaYCMjuGrkVLLnqaScsDB+DCVLDVlICErvbZWwoobfRe2pZIsm8+l77NvShUmzHaHcV63yXMAWgrA==","shasum":"9521ba0820fca145ae9429909eab576cd8a5e820","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-1.0.16.tgz","fileCount":14,"unpackedSize":54001,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhFQKgCRA9TVsSAnZWagAAQe4QAIGnw8DdqCl7m4Uc1O9O\nvc29zpfLKH7jEBWly3PyIV2RyWR9ygmvHvTbDZRUdGOeAlm0Bfrv83rUgzGl\nZdnM3+1d93j9GCqwd+TVOfGvm1dIHPblNSYF+KzvhKqbKu0wqfZJx1+tBJcY\nO5s5cJp0eBZI2Vvk/i5+PhMlykx+xVF6qisOiUzCzkdrKzTLvAeny7DmBXuY\n+2j3e1T8t15/+gKfF1TeH54fqF/d2tIwaIf8LJXxRgQdx9Sxnkz8SE6whhOE\nz7wQki5wPDiNAELqJ5u+M5t4yZLHpWs5hjJKjY5lJwZ19RZD7RTXwFS8lhY1\nZ3mp/AIOVtY5RygcH2EVIOR8FqZPZxOLoabIgE1WUCaqHDutEonw+6VYkzyw\nCPJ4RcE1N8u9FTNJMSKWCrwWLi51T+cjqi2rfit6U+hZxHrmUah+6Wp6XarD\nvBXcLhtgzwnkQT6OZMEoT7tbE8A7SrrlYEfO/f2AuncsfBCBKyNc1EyxqgxE\nQ5L60bE0ksXa7445e/tvXEmbWxkcO50eHWI9KQ5Xr6CtvQ6DMttm7qV2rKDm\nOdGNfIfUps4VJV4UUhe5TYH7nmuVmzKub1rkg9BuqK1+A9q2L+JHEX/owVJj\nH5y6ZYUxAD2jBrC4tYt4D0/nFwzTOqbYwq53l6fa1AgwS1vkmv9qChFtZ5J0\nv4SZ\r\n=NxrF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCOxMkAl1Ya+/rRUELGN04eH/zJv9icol3QbsBg0WJdRgIhAN0DcZNrsoy1LR9M6+fPtXD7pDTx71f734k3o2mAVj5l"}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_1.0.16_1628766880464_0.6998090225208649"},"_hasShrinkwrap":false},"1.0.17":{"name":"sg-resource","version":"1.0.17","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持Vue、React，支持 SSR。","main":"dist/cjs/index.js","module":"dist/es/index.js","scripts":{"dev":"rollup -c -w","build":"cross-env NODE_ENV=production rollup -c","link":"npm unlink && npm link","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"MIT","types":"./dist/es/index.d.ts","dependencies":{"axios":"^0.21.1","reflect-metadata":"^0.1.13"},"devDependencies":{"@types/jest":"^26.0.24","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","rollup":"^2.56.2","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.3","typescript":"^4.2.3"},"gitHead":"2e3a1109db23837e7cd51f3ff6221c65e92c3d70","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@1.0.17","_nodeVersion":"12.22.1","_npmVersion":"7.13.0","dist":{"integrity":"sha512-xeICLJYquQaNotdZqcwl3FtmrGYPdsEryJC8tKQVvLc38RbTpSzb14CFJeVQydu/4dxXHnEyeF4fpuR+ClnQUA==","shasum":"eae3aff65fe1efddf41fcf9717bd85f996253f99","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-1.0.17.tgz","fileCount":14,"unpackedSize":53488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhGw4NCRA9TVsSAnZWagAAmvAP/jLrja7dKRmFOE6yrjWG\nCcB2vWeJhbL9vevyTy4mTv77+Bng2qMEyuUi8ZSSy+PG1hxKn0Qe4FYBsfls\ne6wDBHdfT0ZjSi7oteryBcBOmuvZA9fMJhc1Rw0khrwtYxbl9+IwxnKrtUmS\nESjhgNZfXYKur7pCSW3ciy1pUlHhXLZ2/dRmFviJABrDfUtki7be2se2aOtQ\neMfPujMvdwbova8Uv+B5Rq/VYvbPWvLT21laQmbfyQv5TQPqpcJdTD16dmCH\nCTSUC6qoux8Y1jTI3XCSVAW+TZ5FFx2aJJ+ApgcZtuiOfsMBpdXhXvTrahBa\nXzemHGrIoPm2T6xQwFgTjRA7ov8FkZRl9SXEn08DNmInGDJLTpvNEOjlJCkv\nQQneyZmiC8JZsDrL0nmLpXqJ+ZJMhlWDSH8QoNTkBnyE3PBVNRdWF0nl5gNC\ns12/gDQN6qiiTajrpy6a1Vb8yWAAF9A+x2QgwP3uQ6oJrgqrZJcmkQwhHfoo\np0GrlrVraiyYJzwmSPA5as6xVC5bW1H71JWu8PBE+aVS3wUqPH/IXe0GkDC/\nNIkgIKSOMs8PfN1od7cFXePe7OXFrA7aB8W1MF1j4efHF/UnbLpVuAlBHeeS\nyFZkfqG6mQkKXhn3Ah+2gp591VpG3CMKEA79efTShuXWFpJaPnplI9cg4EP9\nPBu9\r\n=6M9S\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCe5Mw5E8FNwSwsgH2CuEKBZkewQ4UL9/qNL6/8Qmp3+AIhANb0zd5/DIvgTwQGB/sJFlosM3+NrYreZxRLYf57uRZR"}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_1.0.17_1629163021313_0.8785069907661753"},"_hasShrinkwrap":false},"1.0.18":{"name":"sg-resource","version":"1.0.18","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持Vue、React，支持 SSR。","main":"dist/cjs/index.js","module":"dist/es/index.js","scripts":{"dev":"rollup -c -w","build":"cross-env NODE_ENV=production rollup -c","link":"npm unlink && npm link","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"MIT","types":"./dist/es/index.d.ts","dependencies":{"axios":"^0.21.1","reflect-metadata":"^0.1.13"},"devDependencies":{"@types/jest":"^26.0.24","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","rollup":"^2.56.2","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.3","typescript":"^4.2.3"},"gitHead":"71cb704f0152361716ec90f735bd59b6696e8ea2","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@1.0.18","_nodeVersion":"12.22.1","_npmVersion":"7.13.0","dist":{"integrity":"sha512-8xLx1yGQhAOV81UoBNOCDnCtGQ2WdxOJ4973YJvAJ7bgeoclKpZt96ws0q/GIK2yCrrZIKkJOZDfk9ygadKtMQ==","shasum":"7b32be946bf99ac21bdc9e447a5e38e96f6fe564","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-1.0.18.tgz","fileCount":14,"unpackedSize":53740,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhKEp9CRA9TVsSAnZWagAA/YkQAIgc89p1gXHduocTmAEl\nnZa8ZruX3XjD54c5IvEFeoksPPrZa+NbdGY/gtCFQc3VqjParn8jAC6YvEuq\nuBoUeQsRxXVwHX5gIqmDyifhnykWc/MmtZNMC1ZrWWRzJSa64hYtjJMHFA3m\nhUzvY4yTMwmSN+rY8fkWxTpodHHoF6rBjVERioGTApelH0khrZB1xxOTZ3iL\nsSatlDAqcyC1H3zW6Qm7xVw5NJhg+FoG4PEMpsTQC/+1XhMxPAn7kzuj1oFj\ntIYLDFOJFGZhJP2BfTZ5FIwmzAuPJ1lBmtEk9udYigX86kJ6R6rDHYeSkMTu\nupZeHaMyPjov+S8LOadzPUtAmAsW2WWUPZ5qUOcV74BjD2eZtvGl4kmFGj3E\n0ITj9lli47R6mputtSHkiU3ycuBVsD0ZY1UTeI3QxRxB7gk9PuXcAPmtDpKs\nJD0Qj4hvIeuxd0F/8B6AwdXb7Rd8TSZTM+W2fCXRietPK9VcJKetXiVSYXZG\nE0xWB1q/6HfA45DJL/dcxo5USQGNAbSrOF9wgz0gbrbhcY42+uMzKhKLpaTK\nuRlpPjrCiQ2U5IETUT8O7humblA8seGsnlWNtRlZPgT4g8/5Wz0XVh8cBBmQ\nRsdz31W688N+CqDSN84+cM2+fv3hRJAm+n7U1RP1bvRHlxaRBD0UcOEJtQ51\nSH4k\r\n=opzo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCYc/kqy3/7k5AnO553jXNm9BCygEVg4fW66EgoYJCXgQIhAMatJAlki45txPfkfj0AjOoWxytOCWxJyOSsm1LXYH3o"}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_1.0.18_1630030461484_0.5608746709341077"},"_hasShrinkwrap":false},"1.0.19":{"name":"sg-resource","version":"1.0.19","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持Vue、React，支持 SSR。","main":"dist/cjs/index.js","module":"dist/es/index.js","scripts":{"dev":"rollup -c -w","build":"cross-env NODE_ENV=production rollup -c","link":"npm unlink && npm link","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"MIT","types":"./dist/es/index.d.ts","dependencies":{"axios":"^0.21.1","reflect-metadata":"^0.1.13"},"devDependencies":{"@types/jest":"^26.0.24","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","rollup":"^2.56.2","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.3","typescript":"^4.2.3"},"gitHead":"37af04ea6c65e8b4e211bcf1e48fd1d8c78055b8","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@1.0.19","_nodeVersion":"12.22.1","_npmVersion":"7.13.0","dist":{"integrity":"sha512-zsUwbg+iHBhski/jubvBA5A4MBs3Fwuq45grrG4ePaEt/Zfm9febRzvCCtWPAzyo2uuN33AvSNbYUVh80+UVqw==","shasum":"a1a66ec91aa8ce3710e2d5038b1d9cfb4796cd4f","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-1.0.19.tgz","fileCount":14,"unpackedSize":53580,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhKEwMCRA9TVsSAnZWagAAe4oP/1cqcDRaWOwWXjE+Kuuj\neYCqkxwqFrZ8UK48ElKmlYXEd6hOiJ615W54SI44PXIhHo1tlvRpPQJx314x\nnqz3a7WRd4MD81Gvu4D5zJH+yRyuSowU9AfRhPebUBWX8143mupp79LCwf2+\nhfkXq0SjmOD0m9Vcy7+CL5aTvyDTULih6zkRZnXsNHjWupGiPkWPGy53Zfh3\nYE4Gx77gtynLljRV41rVHk35CDYtqI7mfEyz6zibU1szM744X+N0LCvroDW9\nvvC+PyhzI5NaceRR0YffpXpfGGwL3UIysxrlqWC1r4fFOlYp315jsPiFzEMb\nmIjgEZSWQxLJ0NGltWyA5yQ1F/hBYTdpgVxmtnH+Fzvp3TCazTM6yTdpOsYN\nJ5xSL+6txY6UM8wLeQaSUyTuSCxe+wr3v8nglQsziz0X66FSZNVYZbzI5PyB\nw/HkPyupdrDEe7Hcb3M+DzXFdU4+E5DSQdToBbn5V66hc+psuYL8DoL6JCA5\nB/Y47POa/3w4WIlQCUXMerr9zZ/RVgpahAflqgrmorW6sMXdckWcPXI0uGMd\njPIp68gq34PfcagHF5/QRGqtYFShd/ukJeETPUtEAx97+OepPo/LwfzqowkZ\nEVuMc1p7qEx9Feqwf8EwgV0jn8wCdM6IukoGLQOs5KRVZv0TuTeMASwq4smh\nbePt\r\n=0UsF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpLROsMVEAGmjlz8iabX30BWihKV6m+rjmf2oEEPgg9QIhAOF4NxHwgI8LuV1snFuRcJQWCPQL72K1QPcn+0A4YNo8"}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_1.0.19_1630030860640_0.8047952960111626"},"_hasShrinkwrap":false},"1.0.20":{"name":"sg-resource","version":"1.0.20","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持Vue、React，支持 SSR。","main":"dist/cjs/index.js","module":"dist/es/index.js","scripts":{"dev":"rollup -c -w","build":"cross-env NODE_ENV=production rollup -c","link":"npm unlink && npm link","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"MIT","types":"./dist/es/index.d.ts","dependencies":{"axios":"^0.21.1","reflect-metadata":"^0.1.13"},"devDependencies":{"@types/jest":"^26.0.24","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","rollup":"^2.56.2","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.3","typescript":"^4.2.3"},"gitHead":"37af04ea6c65e8b4e211bcf1e48fd1d8c78055b8","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@1.0.20","_nodeVersion":"12.22.1","_npmVersion":"7.13.0","dist":{"integrity":"sha512-pUfZOikClr5SK+jEKwUZUFlI161GuQL+B5+hEZWfpZjEsJgoYzGwkO0jdNQL+bw5iCJQgUnrXPgfM5RBdOY1CA==","shasum":"88012a393cd64ed4df731de99088d76ec0c97555","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-1.0.20.tgz","fileCount":14,"unpackedSize":53582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhKFkoCRA9TVsSAnZWagAAyg4P/jRsJNIKGlOQUThcHcSl\ng0JFFDdVH2ZMtYk0+VLL251L7/LFB4UlqXZza7cS5WmGN1CX+X0ACS3MuXXj\nlV8lKl9Ac0+vz31CK49/18T/V+ja/lvHBcBKEza3nrGd9UA+Yk4/EXTWKRcu\n7b5SjJfgEOJ4dRY1kat4k0JFJ0hsdqfXfnjgJF3Vvdkb9xR9V6uLr0OHqTk0\nCTcExTQIsqdD6nNWcj6pwRL1ibndqiU0k0c0O2VrpjjH93P6zyZlAeFfEg3S\nf2vXeAgoWcnkzs2fxaRyNC1E8+9m0vLCIyasmnQ2RuB4tZN0KCHki9ouzjs0\ni1FX4s97FQuaReRoSRjp9rW/FKlM6O7+PM39xhpkh6+2mndjsvrv3Ke2TAhC\n24RmBDIHM2xbQggFP5jTuUtKn+KFF/vzzCZQmmCC/jdoU4BulpwdXJD7d77m\nM8LLGw3gSsNqDaP7pKT+7/SFUEiyW74R1iKdn3k4RASO8c24f+tkN0I8AaJG\nPNfNDMkP8g9uQsI8duQPosNKQBjc1jC+YE+w5rNejJVidZl+bo0kVK8Nomn5\nDbqSDtuyWLTyuRVwOV63fsWd3979iD07h1h/ObKIeIJeYYkHoYIz6WvOM1TZ\n8gS0cI4wM/w9jpNZ25y4Am+IvompvFPYBakb9UzctKYANOjgbY1GVXAaqDrZ\nS+HZ\r\n=2qyy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICCRHnDA/9a1ohTlhsNsF+UDF75DJlyvo1RVvfHnkzXTAiBahylk8by/hx68traiKIST1cGpBWTAugiXohKMmRMeMw=="}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_1.0.20_1630034215889_0.5323934602126819"},"_hasShrinkwrap":false},"1.0.21":{"name":"sg-resource","version":"1.0.21","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持Vue、React，支持 SSR。","main":"dist/cjs/index.js","module":"dist/es/index.js","scripts":{"dev":"rollup -c -w","build":"cross-env NODE_ENV=production rollup -c","link":"npm unlink && npm link","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"MIT","types":"./dist/es/index.d.ts","dependencies":{"axios":"^0.21.1","reflect-metadata":"^0.1.13"},"devDependencies":{"@types/jest":"^26.0.24","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","rollup":"^2.56.2","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.3","typescript":"^4.2.3"},"gitHead":"aef4118c7e5d53877aaa468eb3afc1e4b2aa8a70","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@1.0.21","_nodeVersion":"12.22.1","_npmVersion":"7.13.0","dist":{"integrity":"sha512-V1UASCaa1fLxzl2cWOkltjgX7sAxpbZ0vm/p0MI9Bm1MbqMPMQu5hyUtYKBhDi+jRjJDjW1JykOn+PhOxB6OqQ==","shasum":"b9500c604f7bd57fe56108b7a2435dcb59920efe","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-1.0.21.tgz","fileCount":14,"unpackedSize":53600,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhOG9MCRA9TVsSAnZWagAAPj0P/AsDGKda3Qu/VDRdtduJ\n2w65UjQ3F7qUUmaPmP05qadG0OAezC/qdwoFNi2/xztrjYFGAF9PZT/SWgC3\nKTwW+AXhIdadKVlGkWtSjh1V7i31fAzzRhkfR1+qiRNKq808G5HrcwQGmuT3\nRDxFoft7bT3pFyQYAvkBvnfRZG4FZy4oBaIXcyiWdhS71h+MElpSb20SESUo\njboEI5NIzaEW7lOAbJmYLiMdIz/2l+meg1ts3FMqyXgqQ6t0r2lUlcrV6iSM\nX3Tz2qXwmMV3QWbbQAh7aOJMkjerfok3Xd9BIQ+NeVp/gXx+iM3mLaaV+Uje\n3DlzJ0si4ao0lr+3kBXBeWZFJj6VdVT63S5HgDSjgyeJHJSaKXovlRN7P9qo\nL6rZr2i2uNGRMEC04LxfAuOz+Y6O3mAN5l9KvDT82+JIFFKVlHFqdTvu7Ud8\nURyyAFYdsZKCSmtK339GDnbvInLZw44d6WK4qXvUJA+LLdYrlfNQJYaroTiW\nksi1FG+M/gJUGKSfRrt0IV5uBNbLyIdWXOhgftqfL+JpEjAAM5P2GdD80TB3\nOFbJ3CSJRPK9vbFgZNnCFGfR4ahE4/ShRn2OcT1j0kRACcbHByXsFTeX+pTF\nqjtKoaJ9pkhnSlFJZaR16miOXskpqkcsgwGlMEO99ASAuUi5pseyNptatOqL\nrTG+\r\n=nhct\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCb/bPiGb/tI7Q7omuIM6pRtEzI5t5jHXnsrOhknZowaAIgWhxyARuix9t9FJLJ74mW72CGilJYrqpq7b8GXtgyWCI="}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_1.0.21_1631088460011_0.8609377671778211"},"_hasShrinkwrap":false},"2.0.0-beta.0":{"name":"sg-resource","version":"2.0.0-beta.0","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持 Vue、React，支持 SSR。","main":"dist/cjs/index.js","module":"dist/es/index.js","scripts":{"dev":"rollup -c -w","build":"cross-env NODE_ENV=production rollup -c","link":"npm unlink && npm link","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"MIT","types":"./dist/es/index.d.ts","dependencies":{"axios":"^0.21.1","md5":"^2.3.0","miniprogram-api-typings":"^3.4.4","reflect-metadata":"^0.1.13"},"devDependencies":{"@types/jest":"^26.0.24","@types/md5":"^2.3.1","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","rollup":"^2.56.2","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.3","typescript":"^4.2.3"},"readme":"# sg-resource\n\n> 一个网络资源管理工具。使用 HTTP 协议请求，支持 Vue、React，支持 SSR。\n\n## 安装\n\n```bash\nnpm i sg-resource\n```\n\n## 信息管理\n\n### 服务站点管理\n\n- system 字段可配置多个环境（DEV、SIT、UAT、PROD 等），\"env\"字段指定环境（必填），使用 runtime 字段选择其中一个环境。在每个环境里通过 hosts 字典配置多个服务地址，各环境 hosts 字典的 key 保持一致。\n\n```js\n// site.config.js\n// @ts-check\n/// <reference path=\"../typings/global.d.ts\" />\n(function () {\n  const /** @type {import(\"sg-resource\").ISiteConfig} */ SITE_CONFIG = {\n      system: [\n        {\n          env: \"DEV\",\n          remote: {\n            hosts: {\n              user: \"http://127.0.0.1:8080/web-api\",\n            },\n          },\n          local: {},\n          entrance: \"\",\n        },\n        {\n          env: \"SIT\",\n          remote: {\n            hosts: {\n              user: \"http://127.0.0.1:8080/web-api\",\n            },\n          },\n          local: {},\n          entrance: \"\",\n        },\n      ],\n      runtime: \"DEV\",\n    };\n\n  // 通过全局get方法导出\n  if (typeof window === \"object\") {\n    window.getSiteConfig = () => SITE_CONFIG;\n  }\n  if (typeof global === \"object\") {\n    global.getSiteConfig = () => SITE_CONFIG;\n  }\n  if (typeof module === \"object\") {\n    module.exports = {\n      SITE_CONFIG,\n    };\n  }\n})();\n```\n\n- 字段配置的详情\n\n```ts\n/**\n * 某一个站点配置\n */\nexport interface ISite {\n  /**\n   * 环境标识\n   */\n  env: \"DEV\" | \"SIT\" | \"UAT\" | \"PROD\";\n  /**\n   * 远端服务器配置\n   */\n  remote: {\n    /**\n     * 服务器地址列表\n     */\n    hosts: Record<string, IHost | string>;\n    /**\n     * 默认协议，服务器地址中不设置可继承该设置\n     */\n    protocol?: string;\n  };\n  /**\n   * 本地服务器配置\n   */\n  local: {\n    /**\n     * 协议\n     */\n    protocol?: string;\n    /**\n     * 主机域名或ip地址\n     */\n    hostname?: string;\n    /**\n     * 端口占用\n     */\n    port?: number;\n    /**\n     * 发布路径\n     */\n    publicPath?: string;\n    /**\n     * 附件路径，可以是本地服务目录，或远程地址\n     */\n    assetsPath?: string;\n  };\n  /**\n   * 自定义\n   */\n  custom?: Record<string, any>;\n  /**\n   * 第三方登录入口\n   */\n  entrance?: string;\n  /**\n   * 统计服务地址\n   */\n  sensor?: string;\n  /**\n   * 接口加密盐\n   */\n  salt?: string;\n}\n/**\n * 主机信息对象\n * */\ninterface IHost {\n  url: string;\n  /**\n   * 配合web server解决跨域，地址的域信息部分将被替换为客户端地址。\n   */\n  cors?: boolean;\n}\n```\n\n- site.config.js 引入方式：\n\n1. 在 CSR 当作静态资源引入\n\n```html\n<script src=\"/public/site.config.js\"></script>\n```\n\n2. 在 SSR 模块式引入\n\n```js\n// js\nconst { SITE_CONFIG } = require(\"./config/site.config\");\nconst currentConfig = SITE_CONFIG.system.find(\n  (item) => item.env === SITE_CONFIG.runtime,\n);\n```\n\n```ts\n// ts\nimport \"../config/site.config\";\nlet siteConfig: ISiteConfig = {\n  system: [],\n  runtime: \"DEV\",\n};\n\nif (getSiteConfig) {\n  siteConfig = getSiteConfig();\n}\n\nconst config = siteConfig.system.find(\n  (item) => item.env === siteConfig.runtime,\n);\n```\n\n### <a name=\"api_mgt\">接口配置管理</a>\n\n使用 host 字段选择服务目标（使用泛型约束）\n\n```ts\n// api.config.ts\nexport const apiConfig: IApiConfig<\"user\"> = {\n  post: {\n    login: { host: \"user\", path: \"/login\" },\n  },\n  get: {},\n};\n```\n\n### 启动和接口调用\n\n创建一个基础类并继承基础类\n\n- 使用 ensureInitialized 方法初始化方法初始化得到 http 代理对象，可自定义 ResultInfo 对象用来描述接口返回数据的包装类\n\n```js\n// base.serv.ts\nimport { apiConfig } from \"@/app/config/api.config\";\nimport { ISiteConfig, ProxyHttp, SGResource } from \"sg-resource\";\nimport { ResultInfo } from \"../domain/ResultInfo\";\n\nexport class BaseService {\n  proxyHttp: ProxyHttp;\n  constructor() {\n    this.proxyHttp = SGResource.ensureInitialized(getSiteConfig(), apiConfig, {\n      headers: () => {\n        const headers: any = {};\n        let token = \"88\";\n\n        if (token) {\n          headers[\"accessToken\"] = token;\n        }\n        return headers;\n      },\n      diagnoseResponse: (config) => {\n        if (config.data) {\n          const result: ResultInfo = config.data;\n\n          if (result.status === 0) {\n            config.data = result.data;\n          }\n        }\n        return config;\n      },\n    });\n  }\n}\n```\n\n- 继承基础类后使用 this.proxyHttp 对象中的方法得到调用接口能力，参数 apiKey 对应<a href=\"#api_mgt\">接口配置管理</a>中的 key 定义\n\n```ts\n// user.serv.ts\nimport { BaseService } from \"./base.serv\";\n\nexport class UserService extends BaseService {\n  constructor() {\n    super();\n  }\n  login(userName: string, password: string): Promise<any> {\n    return this.proxyHttp.post(\"login\", { userName, password });\n  }\n}\n```\n\n### 使用 service 类\n\n```ts\n// 在你需要的\nconst userService = new UserService();\nuserService\n  .login(\"sean\", \"666666\")\n  .then((data) => {\n    // store info of user and to home\n  })\n  .catch(console.log);\n```\n\n### 在 ts 中你可能需要添加类型定义\n\n```ts\n// global.d.ts\nimport { ISiteConfig } from \"sg-resource\";\n\ndeclare global {\n  interface Window {\n    getSiteConfig?: () => ISiteConfig;\n  }\n  const getSiteConfig: (() => ISiteConfig) | undefined;\n\n  namespace NodeJS {\n    interface Global {\n      getSiteConfig?: () => ISiteConfig;\n    }\n  }\n}\n```\n\n## 接口文档\n\n- 主机配置管理\n- 接口配置管理\n- 初始化方法\n- http 请求代理\n\n### 主机配置\n\n#### # remote\n\n- 类型：{ hosts: { [key: string]: string | { url: string; cors?: boolean }}; protocol?: string }\n- 详细：remote 用于配置接口服务器的访问地址、首路径。hosts 字段用于配置一组主机地址，一般对应一个服务，map 类型，其 key 用于检索识别主机，value 类型可以是字符串或对象。当为字符串时应符合 URI 规范，形式如下：\n\n```\nURI = scheme:[//authority]path\n```\n\n```\nauthority = [userinfo@]host[:port]\n```\n\n可以将 scheme:[//authority] 置空，则表示使用客户端域名和端口，用以解决 CORS。  \n当是对象时，可使用 cors 字段明确标记此地址客户端 cors 解决方案为弃用配置的域。将忽略所配置的 scheme:[//authority] 部分，也可直接不配置这部分。\nprotocol 字段可选为全局设置协议，当设置了此字段后可以不设置 host 的 url 的协议部分，会继承全局协议，如：“//10.0.0.1:8080/user-api/”\n\n- 示例：\n\n```js\n{\n  remote: {\n    hosts: {\n      user: {\n        url: \"/user-api\",\n        cors: true\n      },\n      support: \"https://10.0.0.1:8080/support-api\",\n    },\n  }\n}\n```\n\n#### # local\n\n- 类型：{ protocol?: string; hostname?: string; port?: number; publicPath: string }\n- 详细：local 为开发服务器或服务器端渲染服务器配置本地域名、端口、发布目录。\n\n### 接口配置\n\n#### # post\n\n- 类型：{ [key: string]: { host: string; path: string } }\n- 详细：post 定义为 http 的一组 post 请求。为 map 类型，key 用于检索，value 类型为对象，其 host 字段为主机配置中的 hosts 对象的 key，用于选取接口主机地址；path 字段为此接口服务内部访问路径。\n- 示例：\n\n```js\npost: {\n  login: {\n    host: \"user\",\n    path: \"/login\"\n  },\n},\n```\n\n另有 get、put、delete、form、modules 配置与 post 类似就不做赘述\n\n### 初始化方法\n\n初始化并返回一个 ProxyHttp 对象实例。\n\n#### # SGResource.ensureInitialized(apiConfig: IApiConfig, siteConfig: ISiteConfig, options?: IInterceptorsOptions): ProxyHttp;\n\n可选项定义：\n\n```js\nIInterceptorsOptions {\n  /**\n   * 自定义请求头\n   */\n  headers ? : () => Record < string, string | null > ;\n  /**\n   * 返回值拦截处理\n   */\n  diagnoseResponse ? : (config: AxiosResponse < any > ) => AxiosResponse < any > ;\n}\n```\n\n#### ProxyHttp 对象的实例方法：\n\n#### # post(apiKey: string; params?: { [key: string]: string }; pathParams?: string[]; options: { headers?: any } = {})\n\n- 示例：\n\n```js\nlogin(userName: string, password: string): Promise < any > {\n  return this.proxyHttp.post(\"login\", {\n    userName,\n    password\n  });\n}\n```\n\n- 实例方法定义\n\n```ts\n/**\n * 代理get请求\n * @param apiKey config定义的接口名\n * @param params 请求参数\n * @param pathParams 路径参数\n * @param options 可选参数，包括请求头参数\n */\nget(apiKey: string, params?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理post请求\n * @param apiKey config定义的接口\n * @param data 请求参数\n * @param pathParams 路径参数\n * @param options 可选参数，包括请求头参数\n */\npost(apiKey: string, data?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理delete请求\n * @param api config定义的接口\n * @param pathParams 请求参数\n */\ndelete(apiKey: string, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理put请求\n * @param apiKey config定义的接口名\n * @param data 请求参数\n */\nput(apiKey: string, data?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 表单提交\n * @param api 接口\n * @param form 表单对象\n */\nform(apiKey: string, form: FormData, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 通过网络协议获取一组文件对象\n * @param urls 文件url列表\n * @param options 可选参数，包括请求头参数\n */\ngetFiles(urls: string[], options?: {\n    headers?: any;\n}): Promise<File[]>;\n\n```\n\n#### 请求参数 options\n\n| 字段              | 说明                                                                                 | 默认值 | 备注     |\n| ----------------- | ------------------------------------------------------------------------------------ | ------ | -------- |\n| headers           | 请求头信息添加                                                                       | -      |\n| cancelLevel       | 放弃上一次请求等级。0 不放弃, 1 全局, 2 到域名, 3 到服务, 4 到接口, 5 到参数, 6 到值 | 0      |\n| overCancelUpLevel | 放弃上级                                                                             |        | 暂未实现 |\n\n### 重复请求时放弃上一次请求\n","readmeFilename":"README.md","gitHead":"22e66b0798a9b0b05eb42720ddd55b3900f70c9b","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@2.0.0-beta.0","_nodeVersion":"12.22.1","_npmVersion":"7.13.0","dist":{"integrity":"sha512-6POWK2Rz2Ak1CKmpjf8kMK1Abu2HV5AL8njUxb4hhSXO0qVZv9Mss9C/cRm9uMLAXVGxfNAfdVYDHffpSVtPow==","shasum":"0d7f5d7fed986178d92bf5b42dac698406ed225f","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-2.0.0-beta.0.tgz","fileCount":30,"unpackedSize":28484,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh777cCRA9TVsSAnZWagAA8MwQAIu60Z4554GsppeVyhTu\nYCIMCJhwBg66c2Ms8M+RvxiLpCXhD/qweISagdQHs9nyQU89gc1p3UGaJfKm\n1iHDbGWRXQjOe3Cgde1oV95Lo0WAe5lOD+ZrN89I87nu1OPgegKr1qXbJMjU\nD/I+IkIqh28XXmZY4JK+B1OrtiRgqW8shHJqCcXWRhed+WPmkfIab18W9jaC\nr2FaRzAE/UPEcPj36uNjChtQPYXrTHTIKWj26Iij3dIjIyCyT/7wH5qXZ5S1\nT7gODsRR1ZB/sGKFOFvTQKLJprGuM9C0AoQlYEJiPIMvzU/u5SBWttomAZv9\nJwtrnPPjkFcw6bJlIyC6nJ4hThepqY7aHwHoBxTqVXpswd8QxsDixWAsJKV8\nS2uaLWwK2pV6YnYML8Zr6VttH8AgrlaVuoGURcy9V9ux/FGmJsAL9mEb1J/e\n+vNprqF/3gkS9Vi6cpPoUVz2sdKxN6kpyXofhWaqhX2owM/+uE3D3R52MLC+\nBl/P33EI9OHtvxttwqA7G1TOOlUy3zPloF9xLfToKax48iqwXC5crANjqEVi\nDqWTJO22HtkAGlNYyeHTvemkHNfCoIRRovkmsWKpc2W7SBTvS7NKx2hLSmX4\nNU1rdNfE2hq8IqPi0YOso14WccYeEnQ/kbLmFCw63nJYRtiqSGP6wbLhy8rL\nZQW3\r\n=v1qs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEvkrp9g6aR9F/LpI4c55K89oeXe7YZpnevghOHY2usdAiEA8NBaJkH7MS/OYMSgW0h0WNEOtF86UG2yxOw+BkGrBoo="}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_2.0.0-beta.0_1643101916540_0.45540056111317906"},"_hasShrinkwrap":false},"2.0.0-beta.1":{"name":"sg-resource","version":"2.0.0-beta.1","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持 Vue、React，支持 SSR。","main":"dist/cjs/index.js","module":"dist/es/index.js","scripts":{"dev":"rollup -c -w","prebuild":"rm -rf dist","build":"cross-env NODE_ENV=production rollup -c","link":"npm unlink && npm link","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"MIT","types":"./dist/es/packages/index.d.ts","dependencies":{"axios":"^0.21.1","md5":"^2.3.0","miniprogram-api-typings":"^3.4.4","reflect-metadata":"^0.1.13","tslib":"^2.3.1"},"devDependencies":{"@types/jest":"^26.0.24","@types/md5":"^2.3.1","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","rollup":"^2.56.2","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.3","typescript":"^4.2.3"},"readme":"# sg-resource\n\n> 一个网络资源管理工具。使用 HTTP 协议请求，支持 Vue、React，支持 SSR。\n\n## 安装\n\n```bash\nnpm i sg-resource\n```\n\n## 信息管理\n\n### 服务站点管理\n\n- system 字段可配置多个环境（DEV、SIT、UAT、PROD 等），\"env\"字段指定环境（必填），使用 runtime 字段选择其中一个环境。在每个环境里通过 hosts 字典配置多个服务地址，各环境 hosts 字典的 key 保持一致。\n\n```js\n// site.config.js\n// @ts-check\n/// <reference path=\"../typings/global.d.ts\" />\n(function () {\n  const /** @type {import(\"sg-resource\").ISiteConfig} */ SITE_CONFIG = {\n      system: [\n        {\n          env: \"DEV\",\n          remote: {\n            hosts: {\n              user: \"http://127.0.0.1:8080/web-api\",\n            },\n          },\n          local: {},\n          entrance: \"\",\n        },\n        {\n          env: \"SIT\",\n          remote: {\n            hosts: {\n              user: \"http://127.0.0.1:8080/web-api\",\n            },\n          },\n          local: {},\n          entrance: \"\",\n        },\n      ],\n      runtime: \"DEV\",\n    };\n\n  // 通过全局get方法导出\n  if (typeof window === \"object\") {\n    window.getSiteConfig = () => SITE_CONFIG;\n  }\n  if (typeof global === \"object\") {\n    global.getSiteConfig = () => SITE_CONFIG;\n  }\n  if (typeof module === \"object\") {\n    module.exports = {\n      SITE_CONFIG,\n    };\n  }\n})();\n```\n\n- 字段配置的详情\n\n```ts\n/**\n * 某一个站点配置\n */\nexport interface ISite {\n  /**\n   * 环境标识\n   */\n  env: \"DEV\" | \"SIT\" | \"UAT\" | \"PROD\";\n  /**\n   * 远端服务器配置\n   */\n  remote: {\n    /**\n     * 服务器地址列表\n     */\n    hosts: Record<string, IHost | string>;\n    /**\n     * 默认协议，服务器地址中不设置可继承该设置\n     */\n    protocol?: string;\n  };\n  /**\n   * 本地服务器配置\n   */\n  local: {\n    /**\n     * 协议\n     */\n    protocol?: string;\n    /**\n     * 主机域名或ip地址\n     */\n    hostname?: string;\n    /**\n     * 端口占用\n     */\n    port?: number;\n    /**\n     * 发布路径\n     */\n    publicPath?: string;\n    /**\n     * 附件路径，可以是本地服务目录，或远程地址\n     */\n    assetsPath?: string;\n  };\n  /**\n   * 自定义\n   */\n  custom?: Record<string, any>;\n  /**\n   * 第三方登录入口\n   */\n  entrance?: string;\n  /**\n   * 统计服务地址\n   */\n  sensor?: string;\n  /**\n   * 接口加密盐\n   */\n  salt?: string;\n}\n/**\n * 主机信息对象\n * */\ninterface IHost {\n  url: string;\n  /**\n   * 配合web server解决跨域，地址的域信息部分将被替换为客户端地址。\n   */\n  cors?: boolean;\n}\n```\n\n- site.config.js 引入方式：\n\n1. 在 CSR 当作静态资源引入\n\n```html\n<script src=\"/public/site.config.js\"></script>\n```\n\n2. 在 SSR 模块式引入\n\n```js\n// js\nconst { SITE_CONFIG } = require(\"./config/site.config\");\nconst currentConfig = SITE_CONFIG.system.find(\n  (item) => item.env === SITE_CONFIG.runtime,\n);\n```\n\n```ts\n// ts\nimport \"../config/site.config\";\nlet siteConfig: ISiteConfig = {\n  system: [],\n  runtime: \"DEV\",\n};\n\nif (getSiteConfig) {\n  siteConfig = getSiteConfig();\n}\n\nconst config = siteConfig.system.find(\n  (item) => item.env === siteConfig.runtime,\n);\n```\n\n### <a name=\"api_mgt\">接口配置管理</a>\n\n使用 host 字段选择服务目标（使用泛型约束）\n\n```ts\n// api.config.ts\nexport const apiConfig: IApiConfig<\"user\"> = {\n  post: {\n    login: { host: \"user\", path: \"/login\" },\n  },\n  get: {},\n};\n```\n\n### 启动和接口调用\n\n创建一个基础类并继承基础类\n\n- 使用 ensureInitialized 方法初始化方法初始化得到 http 代理对象，可自定义 ResultInfo 对象用来描述接口返回数据的包装类\n\n```js\n// base.serv.ts\nimport { apiConfig } from \"@/app/config/api.config\";\nimport { ISiteConfig, ProxyHttp, SGResource } from \"sg-resource\";\nimport { ResultInfo } from \"../domain/ResultInfo\";\n\nexport class BaseService {\n  proxyHttp: ProxyHttp;\n  constructor() {\n    this.proxyHttp = SGResource.ensureInitialized(getSiteConfig(), apiConfig, {\n      headers: () => {\n        const headers: any = {};\n        let token = \"88\";\n\n        if (token) {\n          headers[\"accessToken\"] = token;\n        }\n        return headers;\n      },\n      diagnoseResponse: (config) => {\n        if (config.data) {\n          const result: ResultInfo = config.data;\n\n          if (result.status === 0) {\n            config.data = result.data;\n          }\n        }\n        return config;\n      },\n    });\n  }\n}\n```\n\n- 继承基础类后使用 this.proxyHttp 对象中的方法得到调用接口能力，参数 apiKey 对应<a href=\"#api_mgt\">接口配置管理</a>中的 key 定义\n\n```ts\n// user.serv.ts\nimport { BaseService } from \"./base.serv\";\n\nexport class UserService extends BaseService {\n  constructor() {\n    super();\n  }\n  login(userName: string, password: string): Promise<any> {\n    return this.proxyHttp.post(\"login\", { userName, password });\n  }\n}\n```\n\n### 使用 service 类\n\n```ts\n// 在你需要的\nconst userService = new UserService();\nuserService\n  .login(\"sean\", \"666666\")\n  .then((data) => {\n    // store info of user and to home\n  })\n  .catch(console.log);\n```\n\n### 在 ts 中你可能需要添加类型定义\n\n```ts\n// global.d.ts\nimport { ISiteConfig } from \"sg-resource\";\n\ndeclare global {\n  interface Window {\n    getSiteConfig?: () => ISiteConfig;\n  }\n  const getSiteConfig: (() => ISiteConfig) | undefined;\n\n  namespace NodeJS {\n    interface Global {\n      getSiteConfig?: () => ISiteConfig;\n    }\n  }\n}\n```\n\n## 接口文档\n\n- 主机配置管理\n- 接口配置管理\n- 初始化方法\n- http 请求代理\n\n### 主机配置\n\n#### # remote\n\n- 类型：{ hosts: { [key: string]: string | { url: string; cors?: boolean }}; protocol?: string }\n- 详细：remote 用于配置接口服务器的访问地址、首路径。hosts 字段用于配置一组主机地址，一般对应一个服务，map 类型，其 key 用于检索识别主机，value 类型可以是字符串或对象。当为字符串时应符合 URI 规范，形式如下：\n\n```\nURI = scheme:[//authority]path\n```\n\n```\nauthority = [userinfo@]host[:port]\n```\n\n可以将 scheme:[//authority] 置空，则表示使用客户端域名和端口，用以解决 CORS。  \n当是对象时，可使用 cors 字段明确标记此地址客户端 cors 解决方案为弃用配置的域。将忽略所配置的 scheme:[//authority] 部分，也可直接不配置这部分。\nprotocol 字段可选为全局设置协议，当设置了此字段后可以不设置 host 的 url 的协议部分，会继承全局协议，如：“//10.0.0.1:8080/user-api/”\n\n- 示例：\n\n```js\n{\n  remote: {\n    hosts: {\n      user: {\n        url: \"/user-api\",\n        cors: true\n      },\n      support: \"https://10.0.0.1:8080/support-api\",\n    },\n  }\n}\n```\n\n#### # local\n\n- 类型：{ protocol?: string; hostname?: string; port?: number; publicPath: string }\n- 详细：local 为开发服务器或服务器端渲染服务器配置本地域名、端口、发布目录。\n\n### 接口配置\n\n#### # post\n\n- 类型：{ [key: string]: { host: string; path: string } }\n- 详细：post 定义为 http 的一组 post 请求。为 map 类型，key 用于检索，value 类型为对象，其 host 字段为主机配置中的 hosts 对象的 key，用于选取接口主机地址；path 字段为此接口服务内部访问路径。\n- 示例：\n\n```js\npost: {\n  login: {\n    host: \"user\",\n    path: \"/login\"\n  },\n},\n```\n\n另有 get、put、delete、form、modules 配置与 post 类似就不做赘述\n\n### 初始化方法\n\n初始化并返回一个 ProxyHttp 对象实例。\n\n#### # SGResource.ensureInitialized(apiConfig: IApiConfig, siteConfig: ISiteConfig, options?: IInterceptorsOptions): ProxyHttp;\n\n可选项定义：\n\n```js\nIInterceptorsOptions {\n  /**\n   * 自定义请求头\n   */\n  headers ? : () => Record < string, string | null > ;\n  /**\n   * 返回值拦截处理\n   */\n  diagnoseResponse ? : (config: AxiosResponse < any > ) => AxiosResponse < any > ;\n}\n```\n\n#### ProxyHttp 对象的实例方法：\n\n#### # post(apiKey: string; params?: { [key: string]: string }; pathParams?: string[]; options: { headers?: any } = {})\n\n- 示例：\n\n```js\nlogin(userName: string, password: string): Promise < any > {\n  return this.proxyHttp.post(\"login\", {\n    userName,\n    password\n  });\n}\n```\n\n- 实例方法定义\n\n```ts\n/**\n * 代理get请求\n * @param apiKey config定义的接口名\n * @param params 请求参数\n * @param pathParams 路径参数\n * @param options 可选参数，包括请求头参数\n */\nget(apiKey: string, params?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理post请求\n * @param apiKey config定义的接口\n * @param data 请求参数\n * @param pathParams 路径参数\n * @param options 可选参数，包括请求头参数\n */\npost(apiKey: string, data?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理delete请求\n * @param api config定义的接口\n * @param pathParams 请求参数\n */\ndelete(apiKey: string, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理put请求\n * @param apiKey config定义的接口名\n * @param data 请求参数\n */\nput(apiKey: string, data?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 表单提交\n * @param api 接口\n * @param form 表单对象\n */\nform(apiKey: string, form: FormData, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 通过网络协议获取一组文件对象\n * @param urls 文件url列表\n * @param options 可选参数，包括请求头参数\n */\ngetFiles(urls: string[], options?: {\n    headers?: any;\n}): Promise<File[]>;\n\n```\n\n#### 请求参数 options\n\n| 字段              | 说明                                                                                 | 默认值 | 备注     |\n| ----------------- | ------------------------------------------------------------------------------------ | ------ | -------- |\n| headers           | 请求头信息添加                                                                       | -      |\n| cancelLevel       | 放弃上一次请求等级。0 不放弃, 1 全局, 2 到域名, 3 到服务, 4 到接口, 5 到参数, 6 到值 | 0      |\n| overCancelUpLevel | 放弃上级                                                                             |        | 暂未实现 |\n\n### 重复请求时放弃上一次请求\n","readmeFilename":"README.md","gitHead":"9ef34c97984891c1d71a9ade53b39bb84e8b0f2f","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@2.0.0-beta.1","_nodeVersion":"16.13.2","_npmVersion":"8.1.2","dist":{"integrity":"sha512-KKD+0MZjC+5WTPa5w9NK1aK8AdvumShaTH7tO2z+Wb1dPZh1trdI7bASqPsTL0JF2nKBlNjDMOeIPvJBSCfd4g==","shasum":"0c420dabab793b85d7bdbd7e3999b2a538ab8c81","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-2.0.0-beta.1.tgz","fileCount":34,"unpackedSize":84446,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiBSATCRA9TVsSAnZWagAAyjMP/jaN8FFeGDJFeVultYHv\n21lH2D7sAtse8yfFRV63140HqG8l+VpWLjr8cF/FiAhBzkpG0tfqM9q11LNI\nAxKp/s+EWvqP2ei0Ut6LwIfkczryvp06BxQyrMdYErrHDRsZhU0fGXQUq2sb\n7KxEerLWQKwYS+y8qJMkaYh6tvbX0UpmPPqj14Gwyrr4ySUUrOBsVY9n+Pkl\nO/IAP+EZ5O15wN3Oh4NjZIfMrI+IGjMmyIG67ku0VU7PR6SdTL+p0+UzOPIE\n59zWEaPjHfKCXkTQ4huXmZqUzPqyINpBM9T8vB3bsRA5IkmNmWNAvs925NHu\nrAJ4NQ/Z5QkcRrYVaQVpDyt9hHQzYFnorjwvzEZFxEx+2qhttNV8/eb9cTg2\nITpeBpo12SUHZYIODRh5b0CNIi3uOQb+FSY1vW0aMD8GVn9FtsVkGK5aQLaE\n4eoWcLxLqc5QRQVukFLRDqU4N9YKHJ/fVLY2VUbm+E313nowBlaH5hbn+vau\nEYDWFajLutC9BuDQhIdvzUCUcXQizgPAiECRFFD3OBXJ60NFA9vKSMY/65iN\nlB4KCGIChRZdNOvQk7X7Tnnwc+10sfLl2cDGTIaewI2ikv+U6lwPDUeyospr\n9tT2bU6no0tD5qaXec0ilnauX6ctj3exKAZERGaNDSgCfet9PMlaOjf7kKET\nfSDi\r\n=lpYv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAlJV876pDvw7imtvy3i9Z1XD4A+jpr8flLfhfriEjssAiEAmGp0SwbjGhxn+vMqBM3yfbUtBuMcgnEmKOTM5SlK1uM="}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_2.0.0-beta.1_1644503059633_0.0065379522499458"},"_hasShrinkwrap":false},"2.0.0-bata.2":{"name":"sg-resource","version":"2.0.0-bata.2","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持 Vue、React，支持 SSR。","main":"dist/cjs/index.js","module":"dist/es/index.js","scripts":{"dev":"rollup -c -w","prebuild":"rm -rf dist","build":"cross-env NODE_ENV=production rollup -c","link":"npm unlink && npm link","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"MIT","types":"./dist/es/packages/index.d.ts","dependencies":{"axios":"^0.21.1","md5":"^2.3.0","miniprogram-api-typings":"^3.4.4","reflect-metadata":"^0.1.13","tslib":"^2.3.1"},"devDependencies":{"@types/jest":"^26.0.24","@types/md5":"^2.3.1","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","rollup":"^2.56.2","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.3","typescript":"^4.2.3"},"readme":"# sg-resource\n\n> 一个网络资源管理工具。使用 HTTP 协议请求，支持 Vue、React，支持 SSR。\n\n## 安装\n\n```bash\nnpm i sg-resource\n```\n\n## 信息管理\n\n### 服务站点管理\n\n- system 字段可配置多个环境（DEV、SIT、UAT、PROD 等），\"env\"字段指定环境（必填），使用 runtime 字段选择其中一个环境。在每个环境里通过 hosts 字典配置多个服务地址，各环境 hosts 字典的 key 保持一致。\n\n```js\n// site.config.js\n// @ts-check\n/// <reference path=\"../typings/global.d.ts\" />\n(function () {\n  const /** @type {import(\"sg-resource\").ISiteConfig} */ SITE_CONFIG = {\n      system: [\n        {\n          env: \"DEV\",\n          remote: {\n            hosts: {\n              user: \"http://127.0.0.1:8080/web-api\",\n            },\n          },\n          local: {},\n          entrance: \"\",\n        },\n        {\n          env: \"SIT\",\n          remote: {\n            hosts: {\n              user: \"http://127.0.0.1:8080/web-api\",\n            },\n          },\n          local: {},\n          entrance: \"\",\n        },\n      ],\n      runtime: \"DEV\",\n    };\n\n  // 通过全局get方法导出\n  if (typeof window === \"object\") {\n    window.getSiteConfig = () => SITE_CONFIG;\n  }\n  if (typeof global === \"object\") {\n    global.getSiteConfig = () => SITE_CONFIG;\n  }\n  if (typeof module === \"object\") {\n    module.exports = {\n      SITE_CONFIG,\n    };\n  }\n})();\n```\n\n- 字段配置的详情\n\n```ts\n/**\n * 某一个站点配置\n */\nexport interface ISite {\n  /**\n   * 环境标识\n   */\n  env: \"DEV\" | \"SIT\" | \"UAT\" | \"PROD\";\n  /**\n   * 远端服务器配置\n   */\n  remote: {\n    /**\n     * 服务器地址列表\n     */\n    hosts: Record<string, IHost | string>;\n    /**\n     * 默认协议，服务器地址中不设置可继承该设置\n     */\n    protocol?: string;\n  };\n  /**\n   * 本地服务器配置\n   */\n  local: {\n    /**\n     * 协议\n     */\n    protocol?: string;\n    /**\n     * 主机域名或ip地址\n     */\n    hostname?: string;\n    /**\n     * 端口占用\n     */\n    port?: number;\n    /**\n     * 发布路径\n     */\n    publicPath?: string;\n    /**\n     * 附件路径，可以是本地服务目录，或远程地址\n     */\n    assetsPath?: string;\n  };\n  /**\n   * 自定义\n   */\n  custom?: Record<string, any>;\n  /**\n   * 第三方登录入口\n   */\n  entrance?: string;\n  /**\n   * 统计服务地址\n   */\n  sensor?: string;\n  /**\n   * 接口加密盐\n   */\n  salt?: string;\n}\n/**\n * 主机信息对象\n * */\ninterface IHost {\n  url: string;\n  /**\n   * 配合web server解决跨域，地址的域信息部分将被替换为客户端地址。\n   */\n  cors?: boolean;\n}\n```\n\n- site.config.js 引入方式：\n\n1. 在 CSR 当作静态资源引入\n\n```html\n<script src=\"/public/site.config.js\"></script>\n```\n\n2. 在 SSR 模块式引入\n\n```js\n// js\nconst { SITE_CONFIG } = require(\"./config/site.config\");\nconst currentConfig = SITE_CONFIG.system.find(\n  (item) => item.env === SITE_CONFIG.runtime,\n);\n```\n\n```ts\n// ts\nimport \"../config/site.config\";\nlet siteConfig: ISiteConfig = {\n  system: [],\n  runtime: \"DEV\",\n};\n\nif (getSiteConfig) {\n  siteConfig = getSiteConfig();\n}\n\nconst config = siteConfig.system.find(\n  (item) => item.env === siteConfig.runtime,\n);\n```\n\n### <a name=\"api_mgt\">接口配置管理</a>\n\n使用 host 字段选择服务目标（使用泛型约束）\n\n```ts\n// api.config.ts\nexport const apiConfig: IApiConfig<\"user\"> = {\n  post: {\n    login: { host: \"user\", path: \"/login\" },\n  },\n  get: {},\n};\n```\n\n### 启动和接口调用\n\n创建一个基础类并继承基础类\n\n- 使用 ensureInitialized 方法初始化方法初始化得到 http 代理对象，可自定义 ResultInfo 对象用来描述接口返回数据的包装类\n\n```js\n// base.serv.ts\nimport { apiConfig } from \"@/app/config/api.config\";\nimport { ISiteConfig, ProxyHttp, SGResource } from \"sg-resource\";\nimport { ResultInfo } from \"../domain/ResultInfo\";\n\nexport class BaseService {\n  proxyHttp: ProxyHttp;\n  constructor() {\n    this.proxyHttp = SGResource.ensureInitialized(getSiteConfig(), apiConfig, {\n      headers: () => {\n        const headers: any = {};\n        let token = \"88\";\n\n        if (token) {\n          headers[\"accessToken\"] = token;\n        }\n        return headers;\n      },\n      diagnoseResponse: (config) => {\n        if (config.data) {\n          const result: ResultInfo = config.data;\n\n          if (result.status === 0) {\n            config.data = result.data;\n          }\n        }\n        return config;\n      },\n    });\n  }\n}\n```\n\n- 继承基础类后使用 this.proxyHttp 对象中的方法得到调用接口能力，参数 apiKey 对应<a href=\"#api_mgt\">接口配置管理</a>中的 key 定义\n\n```ts\n// user.serv.ts\nimport { BaseService } from \"./base.serv\";\n\nexport class UserService extends BaseService {\n  constructor() {\n    super();\n  }\n  login(userName: string, password: string): Promise<any> {\n    return this.proxyHttp.post(\"login\", { userName, password });\n  }\n}\n```\n\n### 使用 service 类\n\n```ts\n// 在你需要的\nconst userService = new UserService();\nuserService\n  .login(\"sean\", \"666666\")\n  .then((data) => {\n    // store info of user and to home\n  })\n  .catch(console.log);\n```\n\n### 在 ts 中你可能需要添加类型定义\n\n```ts\n// global.d.ts\nimport { ISiteConfig } from \"sg-resource\";\n\ndeclare global {\n  interface Window {\n    getSiteConfig?: () => ISiteConfig;\n  }\n  const getSiteConfig: (() => ISiteConfig) | undefined;\n\n  namespace NodeJS {\n    interface Global {\n      getSiteConfig?: () => ISiteConfig;\n    }\n  }\n}\n```\n\n## 接口文档\n\n- 主机配置管理\n- 接口配置管理\n- 初始化方法\n- http 请求代理\n\n### 主机配置\n\n#### # remote\n\n- 类型：{ hosts: { [key: string]: string | { url: string; cors?: boolean }}; protocol?: string }\n- 详细：remote 用于配置接口服务器的访问地址、首路径。hosts 字段用于配置一组主机地址，一般对应一个服务，map 类型，其 key 用于检索识别主机，value 类型可以是字符串或对象。当为字符串时应符合 URI 规范，形式如下：\n\n```\nURI = scheme:[//authority]path\n```\n\n```\nauthority = [userinfo@]host[:port]\n```\n\n可以将 scheme:[//authority] 置空，则表示使用客户端域名和端口，用以解决 CORS。  \n当是对象时，可使用 cors 字段明确标记此地址客户端 cors 解决方案为弃用配置的域。将忽略所配置的 scheme:[//authority] 部分，也可直接不配置这部分。\nprotocol 字段可选为全局设置协议，当设置了此字段后可以不设置 host 的 url 的协议部分，会继承全局协议，如：“//10.0.0.1:8080/user-api/”\n\n- 示例：\n\n```js\n{\n  remote: {\n    hosts: {\n      user: {\n        url: \"/user-api\",\n        cors: true\n      },\n      support: \"https://10.0.0.1:8080/support-api\",\n    },\n  }\n}\n```\n\n#### # local\n\n- 类型：{ protocol?: string; hostname?: string; port?: number; publicPath: string }\n- 详细：local 为开发服务器或服务器端渲染服务器配置本地域名、端口、发布目录。\n\n### 接口配置\n\n#### # post\n\n- 类型：{ [key: string]: { host: string; path: string } }\n- 详细：post 定义为 http 的一组 post 请求。为 map 类型，key 用于检索，value 类型为对象，其 host 字段为主机配置中的 hosts 对象的 key，用于选取接口主机地址；path 字段为此接口服务内部访问路径。\n- 示例：\n\n```js\npost: {\n  login: {\n    host: \"user\",\n    path: \"/login\"\n  },\n},\n```\n\n另有 get、put、delete、form、modules 配置与 post 类似就不做赘述\n\n### 初始化方法\n\n初始化并返回一个 ProxyHttp 对象实例。\n\n#### # SGResource.ensureInitialized(apiConfig: IApiConfig, siteConfig: ISiteConfig, options?: IInterceptorsOptions): ProxyHttp;\n\n可选项定义：\n\n```js\nIInterceptorsOptions {\n  /**\n   * 自定义请求头\n   */\n  headers ? : () => Record < string, string | null > ;\n  /**\n   * 返回值拦截处理\n   */\n  diagnoseResponse ? : (config: AxiosResponse < any > ) => AxiosResponse < any > ;\n}\n```\n\n#### ProxyHttp 对象的实例方法：\n\n#### # post(apiKey: string; params?: { [key: string]: string }; pathParams?: string[]; options: { headers?: any } = {})\n\n- 示例：\n\n```js\nlogin(userName: string, password: string): Promise < any > {\n  return this.proxyHttp.post(\"login\", {\n    userName,\n    password\n  });\n}\n```\n\n- 实例方法定义\n\n```ts\n/**\n * 代理get请求\n * @param apiKey config定义的接口名\n * @param params 请求参数\n * @param pathParams 路径参数\n * @param options 可选参数，包括请求头参数\n */\nget(apiKey: string, params?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理post请求\n * @param apiKey config定义的接口\n * @param data 请求参数\n * @param pathParams 路径参数\n * @param options 可选参数，包括请求头参数\n */\npost(apiKey: string, data?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理delete请求\n * @param api config定义的接口\n * @param pathParams 请求参数\n */\ndelete(apiKey: string, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理put请求\n * @param apiKey config定义的接口名\n * @param data 请求参数\n */\nput(apiKey: string, data?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 表单提交\n * @param api 接口\n * @param form 表单对象\n */\nform(apiKey: string, form: FormData, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 通过网络协议获取一组文件对象\n * @param urls 文件url列表\n * @param options 可选参数，包括请求头参数\n */\ngetFiles(urls: string[], options?: {\n    headers?: any;\n}): Promise<File[]>;\n\n```\n\n#### 请求参数 options\n\n| 字段              | 说明                                                                                 | 默认值 | 备注     |\n| ----------------- | ------------------------------------------------------------------------------------ | ------ | -------- |\n| headers           | 请求头信息添加                                                                       | -      |\n| cancelLevel       | 放弃上一次请求等级。0 不放弃, 1 全局, 2 到域名, 3 到服务, 4 到接口, 5 到参数, 6 到值 | 0      |\n| overCancelUpLevel | 放弃上级                                                                             |        | 暂未实现 |\n\n### 重复请求时放弃上一次请求\n","readmeFilename":"README.md","gitHead":"be25df6fed5a523a967422fe0d1e61388ffd20ac","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@2.0.0-bata.2","_nodeVersion":"16.13.2","_npmVersion":"8.1.2","dist":{"integrity":"sha512-4dTxoKaLtrE1GO8SLHKATPLi4BLjzCldK61fgf63AQoZrxcK3XANDIFeCfY8lDGLPiJAdXrz1YZXCnLOUY2cxw==","shasum":"a7a56029cd05a682267b8d27504765dd395ac51f","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-2.0.0-bata.2.tgz","fileCount":34,"unpackedSize":84006,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiCMwKCRA9TVsSAnZWagAAC+IP/1X5pfATLKNH1jSt8sYn\nI3mkolVZ4EorrIoX18DrjDETfvgxbN3xEY4ej4R6PSrHfQXC6oiFZ+4lCFvZ\n8TVTYRD0Pl+K9bTX6yhxQq3HebpiD3hdnbZx10X8URU95ZwoW1q23t9lzU6B\ndV0bcYrF3svGOE/md06XlMUHlLlHivnnV2G91lI84MGuq5J9Y/7XbNWZLSXR\n/BUZHmiJ9RzSGTYpvtj057zTuUGkzH9f+Pr3mGVGzdkyYJv9nvNrCclXZChW\nNWMxTJ0+Q+Vx1J1t8scOo/YTREsU42J+F6O3J+WJWbzHJsk31LXrESFiGltF\n7m/CazLmddMt1XXpvxDGC47L9SJe9Y2D7VJWcQwk6NbMm1PlMlcqY0Ynr223\nXUOIf0IoNGQz7XbMZNKK/G2A6afSH7AFUCMxydXT3o1a/AVykO30bAeftdkS\n9XI0cQnQ1WnyryBcrsdleCRwNLYdZRjRVWcF4YrSuejTLnaBVN/Y7mmoret2\nENCfwoMwgBHVoVeG2KvvwHwm1gPbIlt9/UjNtabyDoR3djnlnD598+X4geXh\nFubt1ptSAkl4sWxE/LVXjVzxo7gMrE7CQ/UIl+cyyw4qut41wCQtY5CgDBap\nIAPRKhWwGMcoaw0A7htt4CErkg+rZzhihFslGCBBg0BEEn7V6UWEtJWdHX0y\nsZ4Y\r\n=SL7o\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE/r7Xpg7hmN9F3lhpwtPCHNj/TSu5zIDeVNSYRUwBfUAiEA8Y6s1SNIj78jssF1zPJoc2+rwKEmIysold1igvMmyiI="}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_2.0.0-bata.2_1644743690076_0.33746709230164096"},"_hasShrinkwrap":false},"2.0.0-beta.2":{"name":"sg-resource","version":"2.0.0-beta.2","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持 Vue、React，支持 SSR。","main":"dist/cjs/index.js","module":"dist/es/index.js","scripts":{"dev":"rollup -c -w","prebuild":"rm -rf dist","build":"cross-env NODE_ENV=production rollup -c","link":"npm unlink && npm link","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"MIT","types":"./dist/es/packages/index.d.ts","dependencies":{"axios":"^0.21.1","md5":"^2.3.0","miniprogram-api-typings":"^3.4.4","reflect-metadata":"^0.1.13","tslib":"^2.3.1"},"devDependencies":{"@types/jest":"^26.0.24","@types/md5":"^2.3.1","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","rollup":"^2.56.2","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.3","typescript":"^4.2.3"},"readme":"# sg-resource\n\n> 一个网络资源管理工具。使用 HTTP 协议请求，支持 Vue、React，支持 SSR。\n\n## 安装\n\n```bash\nnpm i sg-resource\n```\n\n## 信息管理\n\n### 服务站点管理\n\n- system 字段可配置多个环境（DEV、SIT、UAT、PROD 等），\"env\"字段指定环境（必填），使用 runtime 字段选择其中一个环境。在每个环境里通过 hosts 字典配置多个服务地址，各环境 hosts 字典的 key 保持一致。\n\n```js\n// site.config.js\n// @ts-check\n/// <reference path=\"../typings/global.d.ts\" />\n(function () {\n  const /** @type {import(\"sg-resource\").ISiteConfig} */ SITE_CONFIG = {\n      system: [\n        {\n          env: \"DEV\",\n          remote: {\n            hosts: {\n              user: \"http://127.0.0.1:8080/web-api\",\n            },\n          },\n          local: {},\n          entrance: \"\",\n        },\n        {\n          env: \"SIT\",\n          remote: {\n            hosts: {\n              user: \"http://127.0.0.1:8080/web-api\",\n            },\n          },\n          local: {},\n          entrance: \"\",\n        },\n      ],\n      runtime: \"DEV\",\n    };\n\n  // 通过全局get方法导出\n  if (typeof window === \"object\") {\n    window.getSiteConfig = () => SITE_CONFIG;\n  }\n  if (typeof global === \"object\") {\n    global.getSiteConfig = () => SITE_CONFIG;\n  }\n  if (typeof module === \"object\") {\n    module.exports = {\n      SITE_CONFIG,\n    };\n  }\n})();\n```\n\n- 字段配置的详情\n\n```ts\n/**\n * 某一个站点配置\n */\nexport interface ISite {\n  /**\n   * 环境标识\n   */\n  env: \"DEV\" | \"SIT\" | \"UAT\" | \"PROD\";\n  /**\n   * 远端服务器配置\n   */\n  remote: {\n    /**\n     * 服务器地址列表\n     */\n    hosts: Record<string, IHost | string>;\n    /**\n     * 默认协议，服务器地址中不设置可继承该设置\n     */\n    protocol?: string;\n  };\n  /**\n   * 本地服务器配置\n   */\n  local: {\n    /**\n     * 协议\n     */\n    protocol?: string;\n    /**\n     * 主机域名或ip地址\n     */\n    hostname?: string;\n    /**\n     * 端口占用\n     */\n    port?: number;\n    /**\n     * 发布路径\n     */\n    publicPath?: string;\n    /**\n     * 附件路径，可以是本地服务目录，或远程地址\n     */\n    assetsPath?: string;\n  };\n  /**\n   * 自定义\n   */\n  custom?: Record<string, any>;\n  /**\n   * 第三方登录入口\n   */\n  entrance?: string;\n  /**\n   * 统计服务地址\n   */\n  sensor?: string;\n  /**\n   * 接口加密盐\n   */\n  salt?: string;\n}\n/**\n * 主机信息对象\n * */\ninterface IHost {\n  url: string;\n  /**\n   * 配合web server解决跨域，地址的域信息部分将被替换为客户端地址。\n   */\n  cors?: boolean;\n}\n```\n\n- site.config.js 引入方式：\n\n1. 在 CSR 当作静态资源引入\n\n```html\n<script src=\"/public/site.config.js\"></script>\n```\n\n2. 在 SSR 模块式引入\n\n```js\n// js\nconst { SITE_CONFIG } = require(\"./config/site.config\");\nconst currentConfig = SITE_CONFIG.system.find(\n  (item) => item.env === SITE_CONFIG.runtime,\n);\n```\n\n```ts\n// ts\nimport \"../config/site.config\";\nlet siteConfig: ISiteConfig = {\n  system: [],\n  runtime: \"DEV\",\n};\n\nif (getSiteConfig) {\n  siteConfig = getSiteConfig();\n}\n\nconst config = siteConfig.system.find(\n  (item) => item.env === siteConfig.runtime,\n);\n```\n\n### <a name=\"api_mgt\">接口配置管理</a>\n\n使用 host 字段选择服务目标（使用泛型约束）\n\n```ts\n// api.config.ts\nexport const apiConfig: IApiConfig<\"user\"> = {\n  post: {\n    login: { host: \"user\", path: \"/login\" },\n  },\n  get: {},\n};\n```\n\n### 启动和接口调用\n\n创建一个基础类并继承基础类\n\n- 使用 ensureInitialized 方法初始化方法初始化得到 http 代理对象，可自定义 ResultInfo 对象用来描述接口返回数据的包装类\n\n```js\n// base.serv.ts\nimport { apiConfig } from \"@/app/config/api.config\";\nimport { ISiteConfig, ProxyHttp, SGResource } from \"sg-resource\";\nimport { ResultInfo } from \"../domain/ResultInfo\";\n\nexport class BaseService {\n  proxyHttp: ProxyHttp;\n  constructor() {\n    this.proxyHttp = SGResource.ensureInitialized(getSiteConfig(), apiConfig, {\n      headers: () => {\n        const headers: any = {};\n        let token = \"88\";\n\n        if (token) {\n          headers[\"accessToken\"] = token;\n        }\n        return headers;\n      },\n      diagnoseResponse: (config) => {\n        if (config.data) {\n          const result: ResultInfo = config.data;\n\n          if (result.status === 0) {\n            config.data = result.data;\n          }\n        }\n        return config;\n      },\n    });\n  }\n}\n```\n\n- 继承基础类后使用 this.proxyHttp 对象中的方法得到调用接口能力，参数 apiKey 对应<a href=\"#api_mgt\">接口配置管理</a>中的 key 定义\n\n```ts\n// user.serv.ts\nimport { BaseService } from \"./base.serv\";\n\nexport class UserService extends BaseService {\n  constructor() {\n    super();\n  }\n  login(userName: string, password: string): Promise<any> {\n    return this.proxyHttp.post(\"login\", { userName, password });\n  }\n}\n```\n\n### 使用 service 类\n\n```ts\n// 在你需要的\nconst userService = new UserService();\nuserService\n  .login(\"sean\", \"666666\")\n  .then((data) => {\n    // store info of user and to home\n  })\n  .catch(console.log);\n```\n\n### 在 ts 中你可能需要添加类型定义\n\n```ts\n// global.d.ts\nimport { ISiteConfig } from \"sg-resource\";\n\ndeclare global {\n  interface Window {\n    getSiteConfig?: () => ISiteConfig;\n  }\n  const getSiteConfig: (() => ISiteConfig) | undefined;\n\n  namespace NodeJS {\n    interface Global {\n      getSiteConfig?: () => ISiteConfig;\n    }\n  }\n}\n```\n\n## 接口文档\n\n- 主机配置管理\n- 接口配置管理\n- 初始化方法\n- http 请求代理\n\n### 主机配置\n\n#### # remote\n\n- 类型：{ hosts: { [key: string]: string | { url: string; cors?: boolean }}; protocol?: string }\n- 详细：remote 用于配置接口服务器的访问地址、首路径。hosts 字段用于配置一组主机地址，一般对应一个服务，map 类型，其 key 用于检索识别主机，value 类型可以是字符串或对象。当为字符串时应符合 URI 规范，形式如下：\n\n```\nURI = scheme:[//authority]path\n```\n\n```\nauthority = [userinfo@]host[:port]\n```\n\n可以将 scheme:[//authority] 置空，则表示使用客户端域名和端口，用以解决 CORS。  \n当是对象时，可使用 cors 字段明确标记此地址客户端 cors 解决方案为弃用配置的域。将忽略所配置的 scheme:[//authority] 部分，也可直接不配置这部分。\nprotocol 字段可选为全局设置协议，当设置了此字段后可以不设置 host 的 url 的协议部分，会继承全局协议，如：“//10.0.0.1:8080/user-api/”\n\n- 示例：\n\n```js\n{\n  remote: {\n    hosts: {\n      user: {\n        url: \"/user-api\",\n        cors: true\n      },\n      support: \"https://10.0.0.1:8080/support-api\",\n    },\n  }\n}\n```\n\n#### # local\n\n- 类型：{ protocol?: string; hostname?: string; port?: number; publicPath: string }\n- 详细：local 为开发服务器或服务器端渲染服务器配置本地域名、端口、发布目录。\n\n### 接口配置\n\n#### # post\n\n- 类型：{ [key: string]: { host: string; path: string } }\n- 详细：post 定义为 http 的一组 post 请求。为 map 类型，key 用于检索，value 类型为对象，其 host 字段为主机配置中的 hosts 对象的 key，用于选取接口主机地址；path 字段为此接口服务内部访问路径。\n- 示例：\n\n```js\npost: {\n  login: {\n    host: \"user\",\n    path: \"/login\"\n  },\n},\n```\n\n另有 get、put、delete、form、modules 配置与 post 类似就不做赘述\n\n### 初始化方法\n\n初始化并返回一个 ProxyHttp 对象实例。\n\n#### # SGResource.ensureInitialized(apiConfig: IApiConfig, siteConfig: ISiteConfig, options?: IInterceptorsOptions): ProxyHttp;\n\n可选项定义：\n\n```js\nIInterceptorsOptions {\n  /**\n   * 自定义请求头\n   */\n  headers ? : () => Record < string, string | null > ;\n  /**\n   * 返回值拦截处理\n   */\n  diagnoseResponse ? : (config: AxiosResponse < any > ) => AxiosResponse < any > ;\n}\n```\n\n#### ProxyHttp 对象的实例方法：\n\n#### # post(apiKey: string; params?: { [key: string]: string }; pathParams?: string[]; options: { headers?: any } = {})\n\n- 示例：\n\n```js\nlogin(userName: string, password: string): Promise < any > {\n  return this.proxyHttp.post(\"login\", {\n    userName,\n    password\n  });\n}\n```\n\n- 实例方法定义\n\n```ts\n/**\n * 代理get请求\n * @param apiKey config定义的接口名\n * @param params 请求参数\n * @param pathParams 路径参数\n * @param options 可选参数，包括请求头参数\n */\nget(apiKey: string, params?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理post请求\n * @param apiKey config定义的接口\n * @param data 请求参数\n * @param pathParams 路径参数\n * @param options 可选参数，包括请求头参数\n */\npost(apiKey: string, data?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理delete请求\n * @param api config定义的接口\n * @param pathParams 请求参数\n */\ndelete(apiKey: string, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理put请求\n * @param apiKey config定义的接口名\n * @param data 请求参数\n */\nput(apiKey: string, data?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 表单提交\n * @param api 接口\n * @param form 表单对象\n */\nform(apiKey: string, form: FormData, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 通过网络协议获取一组文件对象\n * @param urls 文件url列表\n * @param options 可选参数，包括请求头参数\n */\ngetFiles(urls: string[], options?: {\n    headers?: any;\n}): Promise<File[]>;\n\n```\n\n#### 请求参数 options\n\n| 字段              | 说明                                                                                 | 默认值 | 备注     |\n| ----------------- | ------------------------------------------------------------------------------------ | ------ | -------- |\n| headers           | 请求头信息添加                                                                       | -      |\n| cancelLevel       | 放弃上一次请求等级。0 不放弃, 1 全局, 2 到域名, 3 到服务, 4 到接口, 5 到参数, 6 到值 | 0      |\n| overCancelUpLevel | 放弃上级                                                                             |        | 暂未实现 |\n\n### 重复请求时放弃上一次请求\n","readmeFilename":"README.md","gitHead":"13bb0a32f6a7ade411e3feb83d9cb6d4d77b81b8","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@2.0.0-beta.2","_nodeVersion":"16.13.2","_npmVersion":"8.1.2","dist":{"integrity":"sha512-OK7Rczkgr/E8hEUEYSQM2okc8rWfdb2UlEoN1wxXHUJYtYKm/bKmoJckjtO0q874uYJ+SjFU23SX3keNzNOfEw==","shasum":"6ef9020b36f4c26fe8a0aa7b46da7ac342a1734f","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-2.0.0-beta.2.tgz","fileCount":34,"unpackedSize":84006,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiCMyyCRA9TVsSAnZWagAAOQcP/jtOWSwefrwRs7H2DcuF\nPGuFjR1XdOb7Idx/P6zfNHcVCJhIyGmMPvcXYV34FAt+7VCSjWh1Nm54/zxo\njzATYVA9wi+02dWP5TL8/5GakdF3zs1/iAyf+LhYG/ac2zRwa+p2c/bBolsY\nDVq1d0veBpNkhhDOGYsTymwVVCTd0gtmhgz91xnP4RQ3NbaWOqMs97DtuLhJ\n0pdXJj/m4CLn9oMXOB65KoPzpm8JX/TQOJvia14YXTOS9yp+A9CgBefNN1Lo\nV+fAS3k1EoMvKVrS/3GF4zs8r48eEyVDqKibz5po0PjHMlk1y3lFqHLAb1/g\nSBAwS1nPRJ5blwTHd5BQD34ec7LB6+Z26tCvJje7Rgy+M5xZvozRh5EhgphV\nz4c53+GKQtbvcHMYxMFB8eNHPfkKwC6r67DmWiaNHyzJEYfYH+wg1O+gUL2O\nS4ZQyqs/rTwp1lE5ic4XtOuOJAqEQLY8wMQm+TqCtV1L3/OuyITbZEKHMsle\nOYPtolG1adAfVVEWBfectLI9khSdkyRvPL8zw9zXUwu4wUrsApaPInVvMRoi\noK6av1/3TcidpoDcWj0xw/VgzuWpTNknVeMyXQmYiYHzV9GF4ft615W4mukZ\nIAD6N7l/dJhMbNYYSG/fthDVKuWgs3KqDZBJQrLlye1ODHm6bDDD77l1RonL\ns3y2\r\n=VI+J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDWtrDhNkZ67lNrW2xQAkEYLdjSY1Pv0zIZRUa54X9ZtAiEApkjEgOxy2XooWhL30hPfJKLAiI/Xc8Al0mRhdp9+PHQ="}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_2.0.0-beta.2_1644743858299_0.473395677933526"},"_hasShrinkwrap":false},"2.0.0-beta.3":{"name":"sg-resource","version":"2.0.0-beta.3","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持 Vue、React，支持 SSR。","main":"dist/cjs/index.js","module":"dist/es/index.js","scripts":{"dev":"rollup -c -w","prebuild":"rm -rf dist","build":"cross-env NODE_ENV=production rollup -c","link":"npm unlink && npm link","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"MIT","types":"./dist/es/packages/index.d.ts","dependencies":{"axios":"^0.21.1","md5":"^2.3.0","miniprogram-api-typings":"^3.4.4","reflect-metadata":"^0.1.13","tslib":"^2.3.1"},"devDependencies":{"@types/jest":"^26.0.24","@types/md5":"^2.3.1","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","rollup":"^2.56.2","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.3","typescript":"^4.2.3"},"readme":"# sg-resource\n\n> 一个网络资源管理工具。使用 HTTP 协议请求，支持 Vue、React，支持 SSR。\n\n## 安装\n\n```bash\nnpm i sg-resource\n```\n\n## 信息管理\n\n### 服务站点管理\n\n- system 字段可配置多个环境（DEV、SIT、UAT、PROD 等），\"env\"字段指定环境（必填），使用 runtime 字段选择其中一个环境。在每个环境里通过 hosts 字典配置多个服务地址，各环境 hosts 字典的 key 保持一致。\n\n```js\n// site.config.js\n// @ts-check\n/// <reference path=\"../typings/global.d.ts\" />\n(function () {\n  const /** @type {import(\"sg-resource\").ISiteConfig} */ SITE_CONFIG = {\n      system: [\n        {\n          env: \"DEV\",\n          remote: {\n            hosts: {\n              user: \"http://127.0.0.1:8080/web-api\",\n            },\n          },\n          local: {},\n          entrance: \"\",\n        },\n        {\n          env: \"SIT\",\n          remote: {\n            hosts: {\n              user: \"http://127.0.0.1:8080/web-api\",\n            },\n          },\n          local: {},\n          entrance: \"\",\n        },\n      ],\n      runtime: \"DEV\",\n    };\n\n  // 通过全局get方法导出\n  if (typeof window === \"object\") {\n    window.getSiteConfig = () => SITE_CONFIG;\n  }\n  if (typeof global === \"object\") {\n    global.getSiteConfig = () => SITE_CONFIG;\n  }\n  if (typeof module === \"object\") {\n    module.exports = {\n      SITE_CONFIG,\n    };\n  }\n})();\n```\n\n- 字段配置的详情\n\n```ts\n/**\n * 某一个站点配置\n */\nexport interface ISite {\n  /**\n   * 环境标识\n   */\n  env: \"DEV\" | \"SIT\" | \"UAT\" | \"PROD\";\n  /**\n   * 远端服务器配置\n   */\n  remote: {\n    /**\n     * 服务器地址列表\n     */\n    hosts: Record<string, IHost | string>;\n    /**\n     * 默认协议，服务器地址中不设置可继承该设置\n     */\n    protocol?: string;\n  };\n  /**\n   * 本地服务器配置\n   */\n  local: {\n    /**\n     * 协议\n     */\n    protocol?: string;\n    /**\n     * 主机域名或ip地址\n     */\n    hostname?: string;\n    /**\n     * 端口占用\n     */\n    port?: number;\n    /**\n     * 发布路径\n     */\n    publicPath?: string;\n    /**\n     * 附件路径，可以是本地服务目录，或远程地址\n     */\n    assetsPath?: string;\n  };\n  /**\n   * 自定义\n   */\n  custom?: Record<string, any>;\n  /**\n   * 第三方登录入口\n   */\n  entrance?: string;\n  /**\n   * 统计服务地址\n   */\n  sensor?: string;\n  /**\n   * 接口加密盐\n   */\n  salt?: string;\n}\n/**\n * 主机信息对象\n * */\ninterface IHost {\n  url: string;\n  /**\n   * 配合web server解决跨域，地址的域信息部分将被替换为客户端地址。\n   */\n  cors?: boolean;\n}\n```\n\n- site.config.js 引入方式：\n\n1. 在 CSR 当作静态资源引入\n\n```html\n<script src=\"/public/site.config.js\"></script>\n```\n\n2. 在 SSR 模块式引入\n\n```js\n// js\nconst { SITE_CONFIG } = require(\"./config/site.config\");\nconst currentConfig = SITE_CONFIG.system.find(\n  (item) => item.env === SITE_CONFIG.runtime,\n);\n```\n\n```ts\n// ts\nimport \"../config/site.config\";\nlet siteConfig: ISiteConfig = {\n  system: [],\n  runtime: \"DEV\",\n};\n\nif (getSiteConfig) {\n  siteConfig = getSiteConfig();\n}\n\nconst config = siteConfig.system.find(\n  (item) => item.env === siteConfig.runtime,\n);\n```\n\n### <a name=\"api_mgt\">接口配置管理</a>\n\n使用 host 字段选择服务目标（使用泛型约束）\n\n```ts\n// api.config.ts\nexport const apiConfig: IApiConfig<\"user\"> = {\n  post: {\n    login: { host: \"user\", path: \"/login\" },\n  },\n  get: {},\n};\n```\n\n### 启动和接口调用\n\n创建一个基础类并继承基础类\n\n- 使用 ensureInitialized 方法初始化方法初始化得到 http 代理对象，可自定义 ResultInfo 对象用来描述接口返回数据的包装类\n\n```js\n// base.serv.ts\nimport { apiConfig } from \"@/app/config/api.config\";\nimport { ISiteConfig, ProxyHttp, SGResource } from \"sg-resource\";\nimport { ResultInfo } from \"../domain/ResultInfo\";\n\nexport class BaseService {\n  proxyHttp: ProxyHttp;\n  constructor() {\n    this.proxyHttp = SGResource.ensureInitialized(getSiteConfig(), apiConfig, {\n      headers: () => {\n        const headers: any = {};\n        let token = \"88\";\n\n        if (token) {\n          headers[\"accessToken\"] = token;\n        }\n        return headers;\n      },\n      diagnoseResponse: (config) => {\n        if (config.data) {\n          const result: ResultInfo = config.data;\n\n          if (result.status === 0) {\n            config.data = result.data;\n          }\n        }\n        return config;\n      },\n    });\n  }\n}\n```\n\n- 继承基础类后使用 this.proxyHttp 对象中的方法得到调用接口能力，参数 apiKey 对应<a href=\"#api_mgt\">接口配置管理</a>中的 key 定义\n\n```ts\n// user.serv.ts\nimport { BaseService } from \"./base.serv\";\n\nexport class UserService extends BaseService {\n  constructor() {\n    super();\n  }\n  login(userName: string, password: string): Promise<any> {\n    return this.proxyHttp.post(\"login\", { userName, password });\n  }\n}\n```\n\n### 使用 service 类\n\n```ts\n// 在你需要的\nconst userService = new UserService();\nuserService\n  .login(\"sean\", \"666666\")\n  .then((data) => {\n    // store info of user and to home\n  })\n  .catch(console.log);\n```\n\n### 在 ts 中你可能需要添加类型定义\n\n```ts\n// global.d.ts\nimport { ISiteConfig } from \"sg-resource\";\n\ndeclare global {\n  interface Window {\n    getSiteConfig?: () => ISiteConfig;\n  }\n  const getSiteConfig: (() => ISiteConfig) | undefined;\n\n  namespace NodeJS {\n    interface Global {\n      getSiteConfig?: () => ISiteConfig;\n    }\n  }\n}\n```\n\n## 接口文档\n\n- 主机配置管理\n- 接口配置管理\n- 初始化方法\n- http 请求代理\n\n### 主机配置\n\n#### # remote\n\n- 类型：{ hosts: { [key: string]: string | { url: string; cors?: boolean }}; protocol?: string }\n- 详细：remote 用于配置接口服务器的访问地址、首路径。hosts 字段用于配置一组主机地址，一般对应一个服务，map 类型，其 key 用于检索识别主机，value 类型可以是字符串或对象。当为字符串时应符合 URI 规范，形式如下：\n\n```\nURI = scheme:[//authority]path\n```\n\n```\nauthority = [userinfo@]host[:port]\n```\n\n可以将 scheme:[//authority] 置空，则表示使用客户端域名和端口，用以解决 CORS。  \n当是对象时，可使用 cors 字段明确标记此地址客户端 cors 解决方案为弃用配置的域。将忽略所配置的 scheme:[//authority] 部分，也可直接不配置这部分。\nprotocol 字段可选为全局设置协议，当设置了此字段后可以不设置 host 的 url 的协议部分，会继承全局协议，如：“//10.0.0.1:8080/user-api/”\n\n- 示例：\n\n```js\n{\n  remote: {\n    hosts: {\n      user: {\n        url: \"/user-api\",\n        cors: true\n      },\n      support: \"https://10.0.0.1:8080/support-api\",\n    },\n  }\n}\n```\n\n#### # local\n\n- 类型：{ protocol?: string; hostname?: string; port?: number; publicPath: string }\n- 详细：local 为开发服务器或服务器端渲染服务器配置本地域名、端口、发布目录。\n\n### 接口配置\n\n#### # post\n\n- 类型：{ [key: string]: { host: string; path: string } }\n- 详细：post 定义为 http 的一组 post 请求。为 map 类型，key 用于检索，value 类型为对象，其 host 字段为主机配置中的 hosts 对象的 key，用于选取接口主机地址；path 字段为此接口服务内部访问路径。\n- 示例：\n\n```js\npost: {\n  login: {\n    host: \"user\",\n    path: \"/login\"\n  },\n},\n```\n\n另有 get、put、delete、form、modules 配置与 post 类似就不做赘述\n\n### 初始化方法\n\n初始化并返回一个 ProxyHttp 对象实例。\n\n#### # SGResource.ensureInitialized(apiConfig: IApiConfig, siteConfig: ISiteConfig, options?: IInterceptorsOptions): ProxyHttp;\n\n可选项定义：\n\n```js\nIInterceptorsOptions {\n  /**\n   * 自定义请求头\n   */\n  headers ? : () => Record < string, string | null > ;\n  /**\n   * 返回值拦截处理\n   */\n  diagnoseResponse ? : (config: AxiosResponse < any > ) => AxiosResponse < any > ;\n}\n```\n\n#### ProxyHttp 对象的实例方法：\n\n#### # post(apiKey: string; params?: { [key: string]: string }; pathParams?: string[]; options: { headers?: any } = {})\n\n- 示例：\n\n```js\nlogin(userName: string, password: string): Promise < any > {\n  return this.proxyHttp.post(\"login\", {\n    userName,\n    password\n  });\n}\n```\n\n- 实例方法定义\n\n```ts\n/**\n * 代理get请求\n * @param apiKey config定义的接口名\n * @param params 请求参数\n * @param pathParams 路径参数\n * @param options 可选参数，包括请求头参数\n */\nget(apiKey: string, params?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理post请求\n * @param apiKey config定义的接口\n * @param data 请求参数\n * @param pathParams 路径参数\n * @param options 可选参数，包括请求头参数\n */\npost(apiKey: string, data?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理delete请求\n * @param api config定义的接口\n * @param pathParams 请求参数\n */\ndelete(apiKey: string, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理put请求\n * @param apiKey config定义的接口名\n * @param data 请求参数\n */\nput(apiKey: string, data?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 表单提交\n * @param api 接口\n * @param form 表单对象\n */\nform(apiKey: string, form: FormData, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 通过网络协议获取一组文件对象\n * @param urls 文件url列表\n * @param options 可选参数，包括请求头参数\n */\ngetFiles(urls: string[], options?: {\n    headers?: any;\n}): Promise<File[]>;\n\n```\n\n#### 请求参数 options\n\n| 字段              | 说明                                                                                 | 默认值 | 备注     |\n| ----------------- | ------------------------------------------------------------------------------------ | ------ | -------- |\n| headers           | 请求头信息添加                                                                       | -      |\n| cancelLevel       | 放弃上一次请求等级。0 不放弃, 1 全局, 2 到域名, 3 到服务, 4 到接口, 5 到参数, 6 到值 | 0      |\n| overCancelUpLevel | 放弃上级                                                                             |        | 暂未实现 |\n\n### 重复请求时放弃上一次请求\n","readmeFilename":"README.md","gitHead":"eba79bb6aff2499e717ad9ae5a2aedd7eed5c53f","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@2.0.0-beta.3","_nodeVersion":"16.13.2","_npmVersion":"8.1.2","dist":{"integrity":"sha512-TCVirBB/1qUvZoyIgoMmXBH8J3IOa+rdpBVaZK5lvzgXBR1FzeB7L2+3HzLEzKJ74AmO15J51EvEn4CVYaA2Tg==","shasum":"fb0ebdf00743188d7ce98fa295e6935a3b66358f","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-2.0.0-beta.3.tgz","fileCount":35,"unpackedSize":85396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiCNIUCRA9TVsSAnZWagAAh14P/A9gXwn6NKXxn7lx9TYS\nM3wGN/nBGLDYswPPi4naf9ZMl2GmnBzwyMvAUdwgrHfPthlopGzEkpgsXtns\njQ1gwSrtGR5daa9zJNdlZBppcai6d9pJT0kj48AsjasmWNKqQVWbHEHqZycJ\nXEE58p4kYVq+HCZUUXoykP2hs/Mw5XwuJ6cM4DfCx0XxZztsPIPbTlJpp0c7\nJm8mlo8bO0iqwd7EajiaXdlh/5AQTqcvCaDMFsETorD7Q9PVqQTiGDQ2xCbf\nOc1NuF3Sr/FKibZdNSum67mZkbEe0yRqNMv0M90zxcZr5wP2HxLmBEr3W+/b\nFuLRTVd0vnKpVEG0+gi1PW9yjKnVAo7fchij3ZnDnV1d7qq/gT7QZbJP5mg9\n3KtgZHPyt30BubcZ33Nl091/3sPYhN7eProIVBnwOScw8n5vMZYBJ7ch9K+c\nz7NMcFw4GehCz6F3V54pnE4FYiOr1MLTyDZSQFwuiBsXQdLfp7pXoiX9mWce\nrrq1VWD/pVPsbxhakhRERWBnx+dCr7DOve2iJ5oglsVXhIqcS3+jCMG0K1mQ\nZElGkJW2JfrfAmwrplCFmKt6OKGRWHxCTk+eEMXJfvjb6EFB33z2K22zRC3E\nTm2bZp2p4oSEIX/biNlcIepWA/xiGOQRYli3fPGhfuxZLOWbcP4rCB329/ux\nwPhf\r\n=XNbX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBMoExK9nyydvSKjwPbzKAkZrmOqyHYuz73UtTf7yHXYAiB8dT+2S2lXYQsj4OVZBJUireACQahA1m0CvcxUKlrEBw=="}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_2.0.0-beta.3_1644745236619_0.059816499405815016"},"_hasShrinkwrap":false},"2.0.0-beta.4":{"name":"sg-resource","version":"2.0.0-beta.4","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持 Vue、React，支持 SSR。","main":"dist/cjs/index.js","module":"dist/es/index.js","scripts":{"dev":"rollup -c -w","prebuild":"rm -rf dist","build":"cross-env NODE_ENV=production rollup -c","link":"npm unlink && npm link","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"MIT","types":"./dist/es/packages/index.d.ts","dependencies":{"axios":"^0.21.1","md5":"^2.3.0","miniprogram-api-typings":"^3.4.4","reflect-metadata":"^0.1.13","tslib":"^2.3.1"},"devDependencies":{"@types/jest":"^26.0.24","@types/md5":"^2.3.1","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","rollup":"^2.56.2","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.3","typescript":"^4.2.3"},"readme":"# sg-resource\n\n> 一个网络资源管理工具。使用 HTTP 协议请求，支持 Vue、React，支持 SSR。\n\n## 安装\n\n```bash\nnpm i sg-resource\n```\n\n## 信息管理\n\n### 服务站点管理\n\n- system 字段可配置多个环境（DEV、SIT、UAT、PROD 等），\"env\"字段指定环境（必填），使用 runtime 字段选择其中一个环境。在每个环境里通过 hosts 字典配置多个服务地址，各环境 hosts 字典的 key 保持一致。\n\n```js\n// site.config.js\n// @ts-check\n/// <reference path=\"../typings/global.d.ts\" />\n(function () {\n  const /** @type {SiteConfig<\"DEV\" | \"SIT\" | \"UAT\" | \"PROD\", \"default\">} */ SITE_CONFIG = {\n      system: [\n        {\n          env: \"DEV\",\n          remote: {\n            hosts: {\n              user: \"http://127.0.0.1:8080/web-api\",\n            },\n          },\n          local: {},\n          entrance: \"\",\n        },\n        {\n          env: \"SIT\",\n          remote: {\n            hosts: {\n              user: \"http://127.0.0.1:8080/web-api\",\n            },\n          },\n          local: {},\n          entrance: \"\",\n        },\n      ],\n      runtime: \"DEV\",\n    };\n\n  // 通过全局get方法导出\n  if (typeof window === \"object\") {\n    window.getSiteConfig = () => SITE_CONFIG;\n  }\n  if (typeof global === \"object\") {\n    global.getSiteConfig = () => SITE_CONFIG;\n  }\n  if (typeof module === \"object\") {\n    module.exports = {\n      SITE_CONFIG,\n    };\n  }\n})();\n```\n\n- 字段配置的详情\n\n```ts\n/**\n * 某一个站点配置\n */\nexport interface ISite {\n  /**\n   * 环境标识\n   */\n  env: \"DEV\" | \"SIT\" | \"UAT\" | \"PROD\";\n  /**\n   * 远端服务器配置\n   */\n  remote: {\n    /**\n     * 服务器地址列表\n     */\n    hosts: Record<string, IHost | string>;\n    /**\n     * 默认协议，服务器地址中不设置可继承该设置\n     */\n    protocol?: string;\n  };\n  /**\n   * 本地服务器配置\n   */\n  local: {\n    /**\n     * 协议\n     */\n    protocol?: string;\n    /**\n     * 主机域名或ip地址\n     */\n    hostname?: string;\n    /**\n     * 端口占用\n     */\n    port?: number;\n    /**\n     * 发布路径\n     */\n    publicPath?: string;\n    /**\n     * 附件路径，可以是本地服务目录，或远程地址\n     */\n    assetsPath?: string;\n  };\n  /**\n   * 自定义\n   */\n  custom?: Record<string, any>;\n  /**\n   * 第三方登录入口\n   */\n  entrance?: string;\n  /**\n   * 统计服务地址\n   */\n  sensor?: string;\n  /**\n   * 接口加密盐\n   */\n  salt?: string;\n}\n/**\n * 主机信息对象\n * */\ninterface IHost {\n  url: string;\n  /**\n   * 配合web server解决跨域，地址的域信息部分将被替换为客户端地址。\n   */\n  cors?: boolean;\n}\n```\n\n- site.config.js 引入方式：\n\n1. 在 CSR 当作静态资源引入\n\n```html\n<script src=\"/public/site.config.js\"></script>\n```\n\n2. 在 SSR 模块式引入\n\n```js\n// js\nconst { SITE_CONFIG } = require(\"./config/site.config\");\nconst currentConfig = SITE_CONFIG.system.find(\n  (item) => item.env === SITE_CONFIG.runtime,\n);\n```\n\n```ts\n// ts\nimport \"../config/site.config\";\nlet siteConfig: ISiteConfig = {\n  system: [],\n  runtime: \"DEV\",\n};\n\nif (getSiteConfig) {\n  siteConfig = getSiteConfig();\n}\n\nconst config = siteConfig.system.find(\n  (item) => item.env === siteConfig.runtime,\n);\n```\n\n### <a name=\"api_mgt\">接口配置管理</a>\n\n使用 host 字段选择服务目标（使用泛型约束）\n\n```ts\n// api.config.ts\nexport const apiConfig: IApiConfig<\"user\"> = {\n  post: {\n    login: { host: \"user\", path: \"/login\" },\n  },\n  get: {},\n};\n```\n\n### 启动和接口调用\n\n创建一个基础类并继承基础类\n\n- 使用 ensureInitialized 方法初始化方法初始化得到 http 代理对象，可自定义 ResultInfo 对象用来描述接口返回数据的包装类\n\n```js\n// base.serv.ts\nimport { apiConfig } from \"@/app/config/api.config\";\nimport { ISiteConfig, ProxyHttp, SGResource } from \"sg-resource\";\nimport { ResultInfo } from \"../domain/ResultInfo\";\n\nexport class BaseService {\n  proxyHttp: ProxyHttp;\n  constructor() {\n    this.proxyHttp = SGResource.ensureInitialized(getSiteConfig(), apiConfig, {\n      headers: () => {\n        const headers: any = {};\n        let token = \"88\";\n\n        if (token) {\n          headers[\"accessToken\"] = token;\n        }\n        return headers;\n      },\n      diagnoseResponse: (config) => {\n        if (config.data) {\n          const result: ResultInfo = config.data;\n\n          if (result.status === 0) {\n            config.data = result.data;\n          }\n        }\n        return config;\n      },\n    });\n  }\n}\n```\n\n- 继承基础类后使用 this.proxyHttp 对象中的方法得到调用接口能力，参数 apiKey 对应<a href=\"#api_mgt\">接口配置管理</a>中的 key 定义\n\n```ts\n// user.serv.ts\nimport { BaseService } from \"./base.serv\";\n\nexport class UserService extends BaseService {\n  constructor() {\n    super();\n  }\n  login(userName: string, password: string): Promise<any> {\n    return this.proxyHttp.post(\"login\", { userName, password });\n  }\n}\n```\n\n### 使用 service 类\n\n```ts\n// 在你需要的\nconst userService = new UserService();\nuserService\n  .login(\"sean\", \"666666\")\n  .then((data) => {\n    // store info of user and to home\n  })\n  .catch(console.log);\n```\n\n### 在 ts 中你可能需要添加类型定义\n\n```ts\n// global.d.ts\nimport { ISiteConfig } from \"sg-resource\";\n\ndeclare global {\n  interface Window {\n    getSiteConfig?: () => ISiteConfig;\n  }\n  const getSiteConfig: (() => ISiteConfig) | undefined;\n\n  namespace NodeJS {\n    interface Global {\n      getSiteConfig?: () => ISiteConfig;\n    }\n  }\n}\n```\n\n## 接口文档\n\n- 主机配置管理\n- 接口配置管理\n- 初始化方法\n- http 请求代理\n\n### 主机配置\n\n#### # remote\n\n- 类型：{ hosts: { [key: string]: string | { url: string; cors?: boolean }}; protocol?: string }\n- 详细：remote 用于配置接口服务器的访问地址、首路径。hosts 字段用于配置一组主机地址，一般对应一个服务，map 类型，其 key 用于检索识别主机，value 类型可以是字符串或对象。当为字符串时应符合 URI 规范，形式如下：\n\n```\nURI = scheme:[//authority]path\n```\n\n```\nauthority = [userinfo@]host[:port]\n```\n\n可以将 scheme:[//authority] 置空，则表示使用客户端域名和端口，用以解决 CORS。  \n当是对象时，可使用 cors 字段明确标记此地址客户端 cors 解决方案为弃用配置的域。将忽略所配置的 scheme:[//authority] 部分，也可直接不配置这部分。\nprotocol 字段可选为全局设置协议，当设置了此字段后可以不设置 host 的 url 的协议部分，会继承全局协议，如：“//10.0.0.1:8080/user-api/”\n\n- 示例：\n\n```js\n{\n  remote: {\n    hosts: {\n      user: {\n        url: \"/user-api\",\n        cors: true\n      },\n      support: \"https://10.0.0.1:8080/support-api\",\n    },\n  }\n}\n```\n\n#### # local\n\n- 类型：{ protocol?: string; hostname?: string; port?: number; publicPath: string }\n- 详细：local 为开发服务器或服务器端渲染服务器配置本地域名、端口、发布目录。\n\n### 接口配置\n\n#### # post\n\n- 类型：{ [key: string]: { host: string; path: string } }\n- 详细：post 定义为 http 的一组 post 请求。为 map 类型，key 用于检索，value 类型为对象，其 host 字段为主机配置中的 hosts 对象的 key，用于选取接口主机地址；path 字段为此接口服务内部访问路径。\n- 示例：\n\n```js\npost: {\n  login: {\n    host: \"user\",\n    path: \"/login\"\n  },\n},\n```\n\n另有 get、put、delete、form、modules 配置与 post 类似就不做赘述\n\n### 初始化方法\n\n初始化并返回一个 ProxyHttp 对象实例。\n\n#### # SGResource.ensureInitialized(apiConfig: IApiConfig, siteConfig: ISiteConfig, options?: IInterceptorsOptions): ProxyHttp;\n\n可选项定义：\n\n```js\nIInterceptorsOptions {\n  /**\n   * 自定义请求头\n   */\n  headers ? : () => Record < string, string | null > ;\n  /**\n   * 返回值拦截处理\n   */\n  diagnoseResponse ? : (config: AxiosResponse < any > ) => AxiosResponse < any > ;\n}\n```\n\n#### ProxyHttp 对象的实例方法：\n\n#### # post(apiKey: string; params?: { [key: string]: string }; pathParams?: string[]; options: { headers?: any } = {})\n\n- 示例：\n\n```js\nlogin(userName: string, password: string): Promise < any > {\n  return this.proxyHttp.post(\"login\", {\n    userName,\n    password\n  });\n}\n```\n\n- 实例方法定义\n\n```ts\n/**\n * 代理get请求\n * @param apiKey config定义的接口名\n * @param params 请求参数\n * @param pathParams 路径参数\n * @param options 可选参数，包括请求头参数\n */\nget(apiKey: string, params?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理post请求\n * @param apiKey config定义的接口\n * @param data 请求参数\n * @param pathParams 路径参数\n * @param options 可选参数，包括请求头参数\n */\npost(apiKey: string, data?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理delete请求\n * @param api config定义的接口\n * @param pathParams 请求参数\n */\ndelete(apiKey: string, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理put请求\n * @param apiKey config定义的接口名\n * @param data 请求参数\n */\nput(apiKey: string, data?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 表单提交\n * @param api 接口\n * @param form 表单对象\n */\nform(apiKey: string, form: FormData, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 通过网络协议获取一组文件对象\n * @param urls 文件url列表\n * @param options 可选参数，包括请求头参数\n */\ngetFiles(urls: string[], options?: {\n    headers?: any;\n}): Promise<File[]>;\n\n```\n\n#### 请求参数 options\n\n| 字段              | 说明                                                                                 | 默认值 | 备注     |\n| ----------------- | ------------------------------------------------------------------------------------ | ------ | -------- |\n| headers           | 请求头信息添加                                                                       | -      |\n| cancelLevel       | 放弃上一次请求等级。0 不放弃, 1 全局, 2 到域名, 3 到服务, 4 到接口, 5 到参数, 6 到值 | 0      |\n| overCancelUpLevel | 放弃上级                                                                             |        | 暂未实现 |\n\n### 重复请求时放弃上一次请求\n","readmeFilename":"README.md","gitHead":"3bd8674d0185569c58ddb604802ded8b334a2bd7","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@2.0.0-beta.4","_nodeVersion":"16.13.2","_npmVersion":"8.1.2","dist":{"integrity":"sha512-e9JP/CjOccEqDPzGlA3jpzD1cfGrriz4hO2uREfk6NCM8Tmfw9mtVB240Knk+t5FK0jHpYV0mV9FJKxgG4am2w==","shasum":"3e442d7ecc92be6d8fd219de8df901379e34c720","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-2.0.0-beta.4.tgz","fileCount":35,"unpackedSize":85414,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiCN+qCRA9TVsSAnZWagAALRgP/iG94fspbcgFcmJmTzGL\nz+vxGrCd49jTszg2t0N5p99QXSsxJjdfIatnCOvHotqlVBaH3wTOeiVWQIgm\n3dmjsOtqrjFFGLlyTynNBgl10RPj7OqH2BBYY1M66uAXsOy3Pv0Zec3KMd+o\nOtdjON0ZDdIsrdbbBl+Ine87kNhTJq3yauJLl+tNk93upzv/l53naOBdlVIf\nF7rGfxLCpaJJoB0i36LsPtrr0Hl/n81Om4I+8f+j51N1GDdbmfsTsZQNjmvk\n+tk/MAMOmvzBvW5l2KKHZzq12LhF0dHfyg14OZDTWiUmeRPY4d+7m/uPR5x/\nsq3MGVwQUxJ3J82+9OTpEFGbrCVpV+7kA8OntANfsOpnXgTPkIv+SiDeiUXB\nVU8LQkLnIiaXXrpxDmzi0mvo6G0hshnF2E+bupGgj5Bu86htJHah4teMYmDl\nHlsmO0Nq9hTdfpE2RdNha/ECodM6MWyFLvkmSymv7/q5RIKtQUN2expJjDIS\n5OvFlUEL/ZM8yvJaUCc1zjlZ3P/peYk+OcNjfzluD2hQh1q6pw6edTBjPT5W\nDkVljlv/iNiY2/HNFomCJarF5VURzFpNalUtzUZedqSgJ5qsnfIl4NekHc+n\naSsWTG6+snCsfrceg+PvQtHWPvQ+IF1uge8ux5wjrTeAkjqrWV0KPtmxGYGd\nTeID\r\n=P/mP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCE+N6dfqP/8HQGQsIJWR3Z1TfEEUghwEQkEJJGo+bWFAIgD+RzS7d7arlJthjZ6DVzPRK5qctkls8CydejU3XAR0E="}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_2.0.0-beta.4_1644748714550_0.7190075838710299"},"_hasShrinkwrap":false},"2.0.0-beta.5":{"name":"sg-resource","version":"2.0.0-beta.5","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持 Vue、React，支持 SSR。","main":"dist/cjs/index.js","module":"dist/es/index.js","scripts":{"dev":"rollup -c -w","prebuild":"rm -rf dist","build":"cross-env NODE_ENV=production rollup -c","link":"npm unlink && npm link","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"MIT","types":"./dist/es/packages/index.d.ts","dependencies":{"axios":"^0.21.1","md5":"^2.3.0","miniprogram-api-typings":"^3.4.4","reflect-metadata":"^0.1.13","tslib":"^2.3.1"},"devDependencies":{"@types/jest":"^26.0.24","@types/md5":"^2.3.1","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","rollup":"^2.56.2","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.3","typescript":"^4.2.3"},"readme":"# sg-resource\n\n> 一个网络资源管理工具。使用 HTTP 协议请求，支持 Vue、React，支持 SSR。\n\n## 安装\n\n```bash\nnpm i sg-resource\n```\n\n## 信息管理\n\n### 服务站点管理\n\n- system 字段可配置多个环境（DEV、SIT、UAT、PROD 等），\"env\"字段指定环境（必填），使用 runtime 字段选择其中一个环境。在每个环境里通过 hosts 字典配置多个服务地址，各环境 hosts 字典的 key 保持一致。\n\n```js\n// site.config.js\n// @ts-check\n/// <reference path=\"../typings/global.d.ts\" />\n(function () {\n  const /** @type {SiteConfig<\"DEV\" | \"SIT\" | \"UAT\" | \"PROD\", \"default\">} */ SITE_CONFIG = {\n      system: [\n        {\n          env: \"DEV\",\n          remote: {\n            hosts: {\n              user: \"http://127.0.0.1:8080/web-api\",\n            },\n          },\n          local: {},\n          entrance: \"\",\n        },\n        {\n          env: \"SIT\",\n          remote: {\n            hosts: {\n              user: \"http://127.0.0.1:8080/web-api\",\n            },\n          },\n          local: {},\n          entrance: \"\",\n        },\n      ],\n      runtime: \"DEV\",\n    };\n\n  // 通过全局get方法导出\n  if (typeof window === \"object\") {\n    window.getSiteConfig = () => SITE_CONFIG;\n  }\n  if (typeof global === \"object\") {\n    global.getSiteConfig = () => SITE_CONFIG;\n  }\n  if (typeof module === \"object\") {\n    module.exports = {\n      SITE_CONFIG,\n    };\n  }\n})();\n```\n\n- 字段配置的详情\n\n```ts\n/**\n * 某一个站点配置\n */\nexport interface ISite {\n  /**\n   * 环境标识\n   */\n  env: \"DEV\" | \"SIT\" | \"UAT\" | \"PROD\";\n  /**\n   * 远端服务器配置\n   */\n  remote: {\n    /**\n     * 服务器地址列表\n     */\n    hosts: Record<string, IHost | string>;\n    /**\n     * 默认协议，服务器地址中不设置可继承该设置\n     */\n    protocol?: string;\n  };\n  /**\n   * 本地服务器配置\n   */\n  local: {\n    /**\n     * 协议\n     */\n    protocol?: string;\n    /**\n     * 主机域名或ip地址\n     */\n    hostname?: string;\n    /**\n     * 端口占用\n     */\n    port?: number;\n    /**\n     * 发布路径\n     */\n    publicPath?: string;\n    /**\n     * 附件路径，可以是本地服务目录，或远程地址\n     */\n    assetsPath?: string;\n  };\n  /**\n   * 自定义\n   */\n  custom?: Record<string, any>;\n  /**\n   * 第三方登录入口\n   */\n  entrance?: string;\n  /**\n   * 统计服务地址\n   */\n  sensor?: string;\n  /**\n   * 接口加密盐\n   */\n  salt?: string;\n}\n/**\n * 主机信息对象\n * */\ninterface IHost {\n  url: string;\n  /**\n   * 配合web server解决跨域，地址的域信息部分将被替换为客户端地址。\n   */\n  cors?: boolean;\n}\n```\n\n- site.config.js 引入方式：\n\n1. 在 CSR 当作静态资源引入\n\n```html\n<script src=\"/public/site.config.js\"></script>\n```\n\n2. 在 SSR 模块式引入\n\n```js\n// js\nconst { SITE_CONFIG } = require(\"./config/site.config\");\nconst currentConfig = SITE_CONFIG.system.find(\n  (item) => item.env === SITE_CONFIG.runtime,\n);\n```\n\n```ts\n// ts\nimport \"../config/site.config\";\nlet siteConfig: ISiteConfig = {\n  system: [],\n  runtime: \"DEV\",\n};\n\nif (getSiteConfig) {\n  siteConfig = getSiteConfig();\n}\n\nconst config = siteConfig.system.find(\n  (item) => item.env === siteConfig.runtime,\n);\n```\n\n### <a name=\"api_mgt\">接口配置管理</a>\n\n使用 host 字段选择服务目标（使用泛型约束）\n\n```ts\n// api.config.ts\nexport const apiConfig: IApiConfig<\"user\"> = {\n  post: {\n    login: { host: \"user\", path: \"/login\" },\n  },\n  get: {},\n};\n```\n\n### 启动和接口调用\n\n创建一个基础类并继承基础类\n\n- 使用 ensureInitialized 方法初始化方法初始化得到 http 代理对象，可自定义 ResultInfo 对象用来描述接口返回数据的包装类\n\n```js\n// base.serv.ts\nimport { apiConfig } from \"@/app/config/api.config\";\nimport { ISiteConfig, ProxyHttp, SGResource } from \"sg-resource\";\nimport { ResultInfo } from \"../domain/ResultInfo\";\n\nexport class BaseService {\n  proxyHttp: ProxyHttp;\n  constructor() {\n    this.proxyHttp = SGResource.ensureInitialized(getSiteConfig(), apiConfig, {\n      headers: () => {\n        const headers: any = {};\n        let token = \"88\";\n\n        if (token) {\n          headers[\"accessToken\"] = token;\n        }\n        return headers;\n      },\n      diagnoseResponse: (config) => {\n        if (config.data) {\n          const result: ResultInfo = config.data;\n\n          if (result.status === 0) {\n            config.data = result.data;\n          }\n        }\n        return config;\n      },\n    });\n  }\n}\n```\n\n- 继承基础类后使用 this.proxyHttp 对象中的方法得到调用接口能力，参数 apiKey 对应<a href=\"#api_mgt\">接口配置管理</a>中的 key 定义\n\n```ts\n// user.serv.ts\nimport { BaseService } from \"./base.serv\";\n\nexport class UserService extends BaseService {\n  constructor() {\n    super();\n  }\n  login(userName: string, password: string): Promise<any> {\n    return this.proxyHttp.post(\"login\", { userName, password });\n  }\n}\n```\n\n### 使用 service 类\n\n```ts\n// 在你需要的\nconst userService = new UserService();\nuserService\n  .login(\"sean\", \"666666\")\n  .then((data) => {\n    // store info of user and to home\n  })\n  .catch(console.log);\n```\n\n### 在 ts 中你可能需要添加类型定义\n\n```ts\n// global.d.ts\nimport { ISiteConfig } from \"sg-resource\";\n\ndeclare global {\n  interface Window {\n    getSiteConfig?: () => ISiteConfig;\n  }\n  const getSiteConfig: (() => ISiteConfig) | undefined;\n\n  namespace NodeJS {\n    interface Global {\n      getSiteConfig?: () => ISiteConfig;\n    }\n  }\n}\n```\n\n## 接口文档\n\n- 主机配置管理\n- 接口配置管理\n- 初始化方法\n- http 请求代理\n\n### 主机配置\n\n#### # remote\n\n- 类型：{ hosts: { [key: string]: string | { url: string; cors?: boolean }}; protocol?: string }\n- 详细：remote 用于配置接口服务器的访问地址、首路径。hosts 字段用于配置一组主机地址，一般对应一个服务，map 类型，其 key 用于检索识别主机，value 类型可以是字符串或对象。当为字符串时应符合 URI 规范，形式如下：\n\n```\nURI = scheme:[//authority]path\n```\n\n```\nauthority = [userinfo@]host[:port]\n```\n\n可以将 scheme:[//authority] 置空，则表示使用客户端域名和端口，用以解决 CORS。  \n当是对象时，可使用 cors 字段明确标记此地址客户端 cors 解决方案为弃用配置的域。将忽略所配置的 scheme:[//authority] 部分，也可直接不配置这部分。\nprotocol 字段可选为全局设置协议，当设置了此字段后可以不设置 host 的 url 的协议部分，会继承全局协议，如：“//10.0.0.1:8080/user-api/”\n\n- 示例：\n\n```js\n{\n  remote: {\n    hosts: {\n      user: {\n        url: \"/user-api\",\n        cors: true\n      },\n      support: \"https://10.0.0.1:8080/support-api\",\n    },\n  }\n}\n```\n\n#### # local\n\n- 类型：{ protocol?: string; hostname?: string; port?: number; publicPath: string }\n- 详细：local 为开发服务器或服务器端渲染服务器配置本地域名、端口、发布目录。\n\n### 接口配置\n\n#### # post\n\n- 类型：{ [key: string]: { host: string; path: string } }\n- 详细：post 定义为 http 的一组 post 请求。为 map 类型，key 用于检索，value 类型为对象，其 host 字段为主机配置中的 hosts 对象的 key，用于选取接口主机地址；path 字段为此接口服务内部访问路径。\n- 示例：\n\n```js\npost: {\n  login: {\n    host: \"user\",\n    path: \"/login\"\n  },\n},\n```\n\n另有 get、put、delete、form、modules 配置与 post 类似就不做赘述\n\n### 初始化方法\n\n初始化并返回一个 ProxyHttp 对象实例。\n\n#### # SGResource.ensureInitialized(apiConfig: IApiConfig, siteConfig: ISiteConfig, options?: IInterceptorsOptions): ProxyHttp;\n\n可选项定义：\n\n```js\nIInterceptorsOptions {\n  /**\n   * 自定义请求头\n   */\n  headers ? : () => Record < string, string | null > ;\n  /**\n   * 返回值拦截处理\n   */\n  diagnoseResponse ? : (config: AxiosResponse < any > ) => AxiosResponse < any > ;\n}\n```\n\n#### ProxyHttp 对象的实例方法：\n\n#### # post(apiKey: string; params?: { [key: string]: string }; pathParams?: string[]; options: { headers?: any } = {})\n\n- 示例：\n\n```js\nlogin(userName: string, password: string): Promise < any > {\n  return this.proxyHttp.post(\"login\", {\n    userName,\n    password\n  });\n}\n```\n\n- 实例方法定义\n\n```ts\n/**\n * 代理get请求\n * @param apiKey config定义的接口名\n * @param params 请求参数\n * @param pathParams 路径参数\n * @param options 可选参数，包括请求头参数\n */\nget(apiKey: string, params?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理post请求\n * @param apiKey config定义的接口\n * @param data 请求参数\n * @param pathParams 路径参数\n * @param options 可选参数，包括请求头参数\n */\npost(apiKey: string, data?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理delete请求\n * @param api config定义的接口\n * @param pathParams 请求参数\n */\ndelete(apiKey: string, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理put请求\n * @param apiKey config定义的接口名\n * @param data 请求参数\n */\nput(apiKey: string, data?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 表单提交\n * @param api 接口\n * @param form 表单对象\n */\nform(apiKey: string, form: FormData, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 通过网络协议获取一组文件对象\n * @param urls 文件url列表\n * @param options 可选参数，包括请求头参数\n */\ngetFiles(urls: string[], options?: {\n    headers?: any;\n}): Promise<File[]>;\n\n```\n\n#### 请求参数 options\n\n| 字段              | 说明                                                                                 | 默认值 | 备注     |\n| ----------------- | ------------------------------------------------------------------------------------ | ------ | -------- |\n| headers           | 请求头信息添加                                                                       | -      |\n| cancelLevel       | 放弃上一次请求等级。0 不放弃, 1 全局, 2 到域名, 3 到服务, 4 到接口, 5 到参数, 6 到值 | 0      |\n| overCancelUpLevel | 放弃上级                                                                             |        | 暂未实现 |\n\n### 重复请求时放弃上一次请求\n","readmeFilename":"README.md","gitHead":"266714df9cec87e17e468ee0ae711482e39e7ff9","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@2.0.0-beta.5","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-igvKFGbtR6v8iCkqLtM8SKM0WjRKxLNO95ygAZkiuNE5klnkRo/TL9GdjXY1sKMz2Y9oBspMnNifni3vp4KwXA==","shasum":"abffcbd7a81c0f3afad25c306844c3926dbdcd45","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-2.0.0-beta.5.tgz","fileCount":35,"unpackedSize":85552,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiC5ojCRA9TVsSAnZWagAAsYAP/39L6o12MIgpyHyB8bMc\n/GJEQZVeCqRMalUxy64ZEZmkETtvxjk+7kN2DcJMYeHDU7bPMZZbG1vE4Ipj\nAoyKhFnP+SHElpPxW8L7PruntxfxfzD+IiTzCzd3/8tqlUF1DJsdmS4WFUxT\nXi2Cag66ll4GyVpyMDvpwJ2mxHVQ7jPMomoY5iPBKAtdRBuJi7A1Y6a6Opwb\ntc+/QolGFnQm9wlCXnbnmSKjri0W7ETcprcrMjSnLQ1cJpvOLp/l3FV5+l9D\nQAIKRK7NdyGaMYu44foVBr4nFD10QbWtPy5qZ9wSNxUOmCjT/3DoMc1DSR6o\nw0VpAaBvsJANfjfqwbQyawzAjrnEYvEaIW0UwOqOIXH+eWBj8cxsMvBAsLdZ\nvrnpELLOQqYp+SCcOPnP6yoRFMW8uFqR0HlZoO5C4xNNalhvfUy8vyW0u1Z6\n7i8kiEtBRYlp6U+X7Zgeh2aDKzoBhS0NCSR5drYa7ReKLquQfdE3xqVZugS4\nk3XPX85mGR5CvXTGpYVCqw0AkV6zcNFgwQhJ/1ryrO5VvYP8Oa9jjmnG5+wi\n90r5vS1VqKygGrSDVWue/jVI3BeTWpSdhVk2E/MYxGsBbXSzR/tWvz0qAskW\nZ0ilgfe/2kMexCSdi7k835XY8fw093qymDFxo+sS1Dx5idy4PEprYBs9HSRA\nwUSG\r\n=6z/3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICvt7dSxYKQgspTc2KxkcfCmBfOq0XWp6Jh988cOvitHAiEA1SUkUvMTlidegwS6OzhwVD1OAhbLUOQGIcUo84MU180="}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_2.0.0-beta.5_1644927523822_0.07565385301606775"},"_hasShrinkwrap":false},"2.0.0-beta.6":{"name":"sg-resource","version":"2.0.0-beta.6","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持 Vue、React，支持 SSR。","main":"dist/cjs/index.js","module":"dist/es/index.js","scripts":{"dev":"rollup -c -w","prebuild":"rm -rf dist","build":"cross-env NODE_ENV=production rollup -c","link":"npm unlink && npm link","prepublish":"npm run build","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"MIT","types":"./dist/es/packages/index.d.ts","dependencies":{"axios":"^0.21.1","md5":"^2.3.0","miniprogram-api-typings":"^3.4.4","reflect-metadata":"^0.1.13","tslib":"^2.3.1"},"devDependencies":{"@types/jest":"^26.0.24","@types/md5":"^2.3.1","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","rollup":"^2.56.2","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.3","typescript":"^4.2.3"},"readme":"# sg-resource\n\n> 一个网络资源管理工具。使用 HTTP 协议请求，支持 Vue、React，支持 SSR。\n\n## 安装\n\n```bash\nnpm i sg-resource\n```\n\n## 信息管理\n\n### 服务站点管理\n\n- system 字段可配置多个环境（DEV、SIT、UAT、PROD 等），\"env\"字段指定环境（必填），使用 runtime 字段选择其中一个环境。在每个环境里通过 hosts 字典配置多个服务地址，各环境 hosts 字典的 key 保持一致。\n\n```js\n// site.config.js\n// @ts-check\n/// <reference path=\"../typings/global.d.ts\" />\n(function () {\n  const /** @type {SiteConfig<\"DEV\" | \"SIT\" | \"UAT\" | \"PROD\", \"default\">} */ SITE_CONFIG = {\n      system: [\n        {\n          env: \"DEV\",\n          remote: {\n            hosts: {\n              user: \"http://127.0.0.1:8080/web-api\",\n            },\n          },\n          local: {},\n          entrance: \"\",\n        },\n        {\n          env: \"SIT\",\n          remote: {\n            hosts: {\n              user: \"http://127.0.0.1:8080/web-api\",\n            },\n          },\n          local: {},\n          entrance: \"\",\n        },\n      ],\n      runtime: \"DEV\",\n    };\n\n  // 通过全局get方法导出\n  if (typeof window === \"object\") {\n    window.getSiteConfig = () => SITE_CONFIG;\n  }\n  if (typeof global === \"object\") {\n    global.getSiteConfig = () => SITE_CONFIG;\n  }\n  if (typeof module === \"object\") {\n    module.exports = {\n      SITE_CONFIG,\n    };\n  }\n})();\n```\n\n- 字段配置的详情\n\n```ts\n/**\n * 某一个站点配置\n */\nexport interface ISite {\n  /**\n   * 环境标识\n   */\n  env: \"DEV\" | \"SIT\" | \"UAT\" | \"PROD\";\n  /**\n   * 远端服务器配置\n   */\n  remote: {\n    /**\n     * 服务器地址列表\n     */\n    hosts: Record<string, IHost | string>;\n    /**\n     * 默认协议，服务器地址中不设置可继承该设置\n     */\n    protocol?: string;\n  };\n  /**\n   * 本地服务器配置\n   */\n  local: {\n    /**\n     * 协议\n     */\n    protocol?: string;\n    /**\n     * 主机域名或ip地址\n     */\n    hostname?: string;\n    /**\n     * 端口占用\n     */\n    port?: number;\n    /**\n     * 发布路径\n     */\n    publicPath?: string;\n    /**\n     * 附件路径，可以是本地服务目录，或远程地址\n     */\n    assetsPath?: string;\n  };\n  /**\n   * 自定义\n   */\n  custom?: Record<string, any>;\n  /**\n   * 第三方登录入口\n   */\n  entrance?: string;\n  /**\n   * 统计服务地址\n   */\n  sensor?: string;\n  /**\n   * 接口加密盐\n   */\n  salt?: string;\n}\n/**\n * 主机信息对象\n * */\ninterface IHost {\n  url: string;\n  /**\n   * 配合web server解决跨域，地址的域信息部分将被替换为客户端地址。\n   */\n  cors?: boolean;\n}\n```\n\n- site.config.js 引入方式：\n\n1. 在 CSR 当作静态资源引入\n\n```html\n<script src=\"/public/site.config.js\"></script>\n```\n\n2. 在 SSR 模块式引入\n\n```js\n// js\nconst { SITE_CONFIG } = require(\"./config/site.config\");\nconst currentConfig = SITE_CONFIG.system.find(\n  (item) => item.env === SITE_CONFIG.runtime,\n);\n```\n\n```ts\n// ts\nimport \"../config/site.config\";\nlet siteConfig: ISiteConfig = {\n  system: [],\n  runtime: \"DEV\",\n};\n\nif (getSiteConfig) {\n  siteConfig = getSiteConfig();\n}\n\nconst config = siteConfig.system.find(\n  (item) => item.env === siteConfig.runtime,\n);\n```\n\n### <a name=\"api_mgt\">接口配置管理</a>\n\n使用 host 字段选择服务目标（使用泛型约束）\n\n```ts\n// api.config.ts\nexport const apiConfig: IApiConfig<\"user\"> = {\n  post: {\n    login: { host: \"user\", path: \"/login\" },\n  },\n  get: {},\n};\n```\n\n### 启动和接口调用\n\n创建一个基础类并继承基础类\n\n- 使用 ensureInitialized 方法初始化方法初始化得到 http 代理对象，可自定义 ResultInfo 对象用来描述接口返回数据的包装类\n\n```js\n// base.serv.ts\nimport { apiConfig } from \"@/app/config/api.config\";\nimport { ISiteConfig, ProxyHttp, SGResource } from \"sg-resource\";\nimport { ResultInfo } from \"../domain/ResultInfo\";\n\nexport class BaseService {\n  proxyHttp: ProxyHttp;\n  constructor() {\n    this.proxyHttp = SGResource.ensureInitialized(getSiteConfig(), apiConfig, {\n      headers: () => {\n        const headers: any = {};\n        let token = \"88\";\n\n        if (token) {\n          headers[\"accessToken\"] = token;\n        }\n        return headers;\n      },\n      diagnoseResponse: (config) => {\n        if (config.data) {\n          const result: ResultInfo = config.data;\n\n          if (result.status === 0) {\n            config.data = result.data;\n          }\n        }\n        return config;\n      },\n    });\n  }\n}\n```\n\n- 继承基础类后使用 this.proxyHttp 对象中的方法得到调用接口能力，参数 apiKey 对应<a href=\"#api_mgt\">接口配置管理</a>中的 key 定义\n\n```ts\n// user.serv.ts\nimport { BaseService } from \"./base.serv\";\n\nexport class UserService extends BaseService {\n  constructor() {\n    super();\n  }\n  login(userName: string, password: string): Promise<any> {\n    return this.proxyHttp.post(\"login\", { userName, password });\n  }\n}\n```\n\n### 使用 service 类\n\n```ts\n// 在你需要的\nconst userService = new UserService();\nuserService\n  .login(\"sean\", \"666666\")\n  .then((data) => {\n    // store info of user and to home\n  })\n  .catch(console.log);\n```\n\n### 在 ts 中你可能需要添加类型定义\n\n```ts\n// global.d.ts\nimport { ISiteConfig } from \"sg-resource\";\n\ndeclare global {\n  interface Window {\n    getSiteConfig?: () => ISiteConfig;\n  }\n  const getSiteConfig: (() => ISiteConfig) | undefined;\n\n  namespace NodeJS {\n    interface Global {\n      getSiteConfig?: () => ISiteConfig;\n    }\n  }\n}\n```\n\n## 接口文档\n\n- 主机配置管理\n- 接口配置管理\n- 初始化方法\n- http 请求代理\n\n### 主机配置\n\n#### # remote\n\n- 类型：{ hosts: { [key: string]: string | { url: string; cors?: boolean }}; protocol?: string }\n- 详细：remote 用于配置接口服务器的访问地址、首路径。hosts 字段用于配置一组主机地址，一般对应一个服务，map 类型，其 key 用于检索识别主机，value 类型可以是字符串或对象。当为字符串时应符合 URI 规范，形式如下：\n\n```\nURI = scheme:[//authority]path\n```\n\n```\nauthority = [userinfo@]host[:port]\n```\n\n可以将 scheme:[//authority] 置空，则表示使用客户端域名和端口，用以解决 CORS。  \n当是对象时，可使用 cors 字段明确标记此地址客户端 cors 解决方案为弃用配置的域。将忽略所配置的 scheme:[//authority] 部分，也可直接不配置这部分。\nprotocol 字段可选为全局设置协议，当设置了此字段后可以不设置 host 的 url 的协议部分，会继承全局协议，如：“//10.0.0.1:8080/user-api/”\n\n- 示例：\n\n```js\n{\n  remote: {\n    hosts: {\n      user: {\n        url: \"/user-api\",\n        cors: true\n      },\n      support: \"https://10.0.0.1:8080/support-api\",\n    },\n  }\n}\n```\n\n#### # local\n\n- 类型：{ protocol?: string; hostname?: string; port?: number; publicPath: string }\n- 详细：local 为开发服务器或服务器端渲染服务器配置本地域名、端口、发布目录。\n\n### 接口配置\n\n#### # post\n\n- 类型：{ [key: string]: { host: string; path: string } }\n- 详细：post 定义为 http 的一组 post 请求。为 map 类型，key 用于检索，value 类型为对象，其 host 字段为主机配置中的 hosts 对象的 key，用于选取接口主机地址；path 字段为此接口服务内部访问路径。\n- 示例：\n\n```js\npost: {\n  login: {\n    host: \"user\",\n    path: \"/login\"\n  },\n},\n```\n\n另有 get、put、delete、form、modules 配置与 post 类似就不做赘述\n\n### 初始化方法\n\n初始化并返回一个 ProxyHttp 对象实例。\n\n#### # SGResource.ensureInitialized(apiConfig: IApiConfig, siteConfig: ISiteConfig, options?: IInterceptorsOptions): ProxyHttp;\n\n可选项定义：\n\n```js\nIInterceptorsOptions {\n  /**\n   * 自定义请求头\n   */\n  headers ? : () => Record < string, string | null > ;\n  /**\n   * 返回值拦截处理\n   */\n  diagnoseResponse ? : (config: AxiosResponse < any > ) => AxiosResponse < any > ;\n}\n```\n\n#### ProxyHttp 对象的实例方法：\n\n#### # post(apiKey: string; params?: { [key: string]: string }; pathParams?: string[]; options: { headers?: any } = {})\n\n- 示例：\n\n```js\nlogin(userName: string, password: string): Promise < any > {\n  return this.proxyHttp.post(\"login\", {\n    userName,\n    password\n  });\n}\n```\n\n- 实例方法定义\n\n```ts\n/**\n * 代理get请求\n * @param apiKey config定义的接口名\n * @param params 请求参数\n * @param pathParams 路径参数\n * @param options 可选参数，包括请求头参数\n */\nget(apiKey: string, params?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理post请求\n * @param apiKey config定义的接口\n * @param data 请求参数\n * @param pathParams 路径参数\n * @param options 可选参数，包括请求头参数\n */\npost(apiKey: string, data?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理delete请求\n * @param api config定义的接口\n * @param pathParams 请求参数\n */\ndelete(apiKey: string, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理put请求\n * @param apiKey config定义的接口名\n * @param data 请求参数\n */\nput(apiKey: string, data?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 表单提交\n * @param api 接口\n * @param form 表单对象\n */\nform(apiKey: string, form: FormData, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 通过网络协议获取一组文件对象\n * @param urls 文件url列表\n * @param options 可选参数，包括请求头参数\n */\ngetFiles(urls: string[], options?: {\n    headers?: any;\n}): Promise<File[]>;\n\n```\n\n#### 请求参数 options\n\n| 字段              | 说明                                                                                 | 默认值 | 备注     |\n| ----------------- | ------------------------------------------------------------------------------------ | ------ | -------- |\n| headers           | 请求头信息添加                                                                       | -      |\n| cancelLevel       | 放弃上一次请求等级。0 不放弃, 1 全局, 2 到域名, 3 到服务, 4 到接口, 5 到参数, 6 到值 | 0      |\n| overCancelUpLevel | 放弃上级                                                                             |        | 暂未实现 |\n\n### 重复请求时放弃上一次请求\n","readmeFilename":"README.md","gitHead":"36a8c0ec3c1fe87c4835f10fae60d673c309ffc0","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@2.0.0-beta.6","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-Bl90Bkw6urnbk38z4aHpqkwDD03N0++th+2PX/JEJwjjvYM1UTnziGAA89XDQ+24sZT8/iM2wwXFtJUEMApBlw==","shasum":"aca2dca96336e8a5b279b8703891a6fc35b0deb0","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-2.0.0-beta.6.tgz","fileCount":35,"unpackedSize":85583,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiC5rnCRA9TVsSAnZWagAAHeYP/1Goq+kk7WkaucXgiDim\nkWmU7OOc0ggwVoCAkg6l+YuuZmA3Jyw2fTYRaQShv9Oex5rJdimellLbAnny\nOaXYFCL4Kn9ToBfvuYkaui7KKKjkGGH97u+kw9EE9hA68t4Xy08syt3BT/BP\nDmy8i7nVxdDnFTk1GQMnNeeYd2P1Hq/k0fao1CU7jumn3OHbJA7eaBhHWxfG\nRSzyW5UOob+bcoGioI4elIt/+Aqrk+DyN73o/evX0uIwwU9FtTDy90hiDsEh\nLteBcNTKHLytpvCBUN+071RKR4tWeNk7RynLQfJ61UeOMxsNT7DxhM2OLFJn\nDUvMFQoUW3i3S1A+QJJgLeFOin6CjGSu0vy6N3b+CBhKcahIOYNtE4XWRasg\nYUll5Eqte7fzTCxBBTaiuYOYJB+EJfGBI6c6nMe7cc1Pc+/7czM/EdhUF3b5\n2EriOKNGDOl6rvOj5NqYvIWy1j7myVATWIZIEWf2L2DeU6GsHMPg2MLh0S66\nQ+jfB/OefCbsKiIsltil8PToKvvk+VAAJ33eEmTrrz5a6NyGxHz8l5jfnbhU\n64eBm1QpsVKywAFAbSHAAf2pMBkpYT90UprMshF+jXeGAk4pGE7OqXO37sAC\ngHYtoDrUMofg2P8d3yYJvUZmBzsCwHg6FjkQBSeagjyfEBOKLv5n/jIuSbpi\ncYsG\r\n=Xrof\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDyAddYyx3o8tFw7991lz8hNYmff45j7wzNYp/SeKyZngIhAJUkUBPgkXH3TIjdTzCSML/ABpciTAkKJeYhWCptG5tv"}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_2.0.0-beta.6_1644927719593_0.6047954671297882"},"_hasShrinkwrap":false},"2.0.0-beta.7":{"name":"sg-resource","version":"2.0.0-beta.7","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持 Vue、React，支持 SSR。","main":"dist/cjs/index.js","module":"dist/es/index.js","scripts":{"dev":"rollup -c -w","prebuild":"rm -rf dist","build":"cross-env NODE_ENV=production rollup -c","link":"npm unlink && npm link","prepublish":"npm run build","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"MIT","types":"./dist/es/packages/index.d.ts","dependencies":{"axios":"^0.21.1","md5":"^2.3.0","miniprogram-api-typings":"^3.4.4","reflect-metadata":"^0.1.13","tslib":"^2.3.1"},"devDependencies":{"@types/jest":"^26.0.24","@types/md5":"^2.3.1","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","rollup":"^2.56.2","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.3","typescript":"^4.2.3"},"readme":"# sg-resource\n\n> 一个网络资源管理工具。使用 HTTP 协议请求，支持 Vue、React，支持 SSR。\n\n## 安装\n\n```bash\nnpm i sg-resource\n```\n\n## 信息管理\n\n### 服务站点管理\n\n- system 字段可配置多个环境（DEV、SIT、UAT、PROD 等），\"env\"字段指定环境（必填），使用 runtime 字段选择其中一个环境。在每个环境里通过 hosts 字典配置多个服务地址，各环境 hosts 字典的 key 保持一致。\n\n```js\n// site.config.js\n// @ts-check\n/// <reference path=\"../typings/global.d.ts\" />\n(function () {\n  const /** @type {SiteConfig<\"DEV\" | \"SIT\" | \"UAT\" | \"PROD\", \"default\">} */ SITE_CONFIG = {\n      system: [\n        {\n          env: \"DEV\",\n          remote: {\n            hosts: {\n              user: \"http://127.0.0.1:8080/web-api\",\n            },\n          },\n          local: {},\n          entrance: \"\",\n        },\n        {\n          env: \"SIT\",\n          remote: {\n            hosts: {\n              user: \"http://127.0.0.1:8080/web-api\",\n            },\n          },\n          local: {},\n          entrance: \"\",\n        },\n      ],\n      runtime: \"DEV\",\n    };\n\n  // 通过全局get方法导出\n  if (typeof window === \"object\") {\n    window.getSiteConfig = () => SITE_CONFIG;\n  }\n  if (typeof global === \"object\") {\n    global.getSiteConfig = () => SITE_CONFIG;\n  }\n  if (typeof module === \"object\") {\n    module.exports = {\n      SITE_CONFIG,\n    };\n  }\n})();\n```\n\n- 字段配置的详情\n\n```ts\n/**\n * 某一个站点配置\n */\nexport interface ISite {\n  /**\n   * 环境标识\n   */\n  env: \"DEV\" | \"SIT\" | \"UAT\" | \"PROD\";\n  /**\n   * 远端服务器配置\n   */\n  remote: {\n    /**\n     * 服务器地址列表\n     */\n    hosts: Record<string, IHost | string>;\n    /**\n     * 默认协议，服务器地址中不设置可继承该设置\n     */\n    protocol?: string;\n  };\n  /**\n   * 本地服务器配置\n   */\n  local: {\n    /**\n     * 协议\n     */\n    protocol?: string;\n    /**\n     * 主机域名或ip地址\n     */\n    hostname?: string;\n    /**\n     * 端口占用\n     */\n    port?: number;\n    /**\n     * 发布路径\n     */\n    publicPath?: string;\n    /**\n     * 附件路径，可以是本地服务目录，或远程地址\n     */\n    assetsPath?: string;\n  };\n  /**\n   * 自定义\n   */\n  custom?: Record<string, any>;\n  /**\n   * 第三方登录入口\n   */\n  entrance?: string;\n  /**\n   * 统计服务地址\n   */\n  sensor?: string;\n  /**\n   * 接口加密盐\n   */\n  salt?: string;\n}\n/**\n * 主机信息对象\n * */\ninterface IHost {\n  url: string;\n  /**\n   * 配合web server解决跨域，地址的域信息部分将被替换为客户端地址。\n   */\n  cors?: boolean;\n}\n```\n\n- site.config.js 引入方式：\n\n1. 在 CSR 当作静态资源引入\n\n```html\n<script src=\"/public/site.config.js\"></script>\n```\n\n2. 在 SSR 模块式引入\n\n```js\n// js\nconst { SITE_CONFIG } = require(\"./config/site.config\");\nconst currentConfig = SITE_CONFIG.system.find(\n  (item) => item.env === SITE_CONFIG.runtime,\n);\n```\n\n```ts\n// ts\nimport \"../config/site.config\";\nlet siteConfig: ISiteConfig = {\n  system: [],\n  runtime: \"DEV\",\n};\n\nif (getSiteConfig) {\n  siteConfig = getSiteConfig();\n}\n\nconst config = siteConfig.system.find(\n  (item) => item.env === siteConfig.runtime,\n);\n```\n\n### <a name=\"api_mgt\">接口配置管理</a>\n\n使用 host 字段选择服务目标（使用泛型约束）\n\n```ts\n// api.config.ts\nexport const apiConfig: IApiConfig<\"user\"> = {\n  post: {\n    login: { host: \"user\", path: \"/login\" },\n  },\n  get: {},\n};\n```\n\n### 启动和接口调用\n\n创建一个基础类并继承基础类\n\n- 使用 ensureInitialized 方法初始化方法初始化得到 http 代理对象，可自定义 ResultInfo 对象用来描述接口返回数据的包装类\n\n```js\n// base.serv.ts\nimport { apiConfig } from \"@/app/config/api.config\";\nimport { ISiteConfig, ProxyHttp, SGResource } from \"sg-resource\";\nimport { ResultInfo } from \"../domain/ResultInfo\";\n\nexport class BaseService {\n  proxyHttp: ProxyHttp;\n  constructor() {\n    this.proxyHttp = SGResource.ensureInitialized(getSiteConfig(), apiConfig, {\n      headers: () => {\n        const headers: any = {};\n        let token = \"88\";\n\n        if (token) {\n          headers[\"accessToken\"] = token;\n        }\n        return headers;\n      },\n      diagnoseResponse: (config) => {\n        if (config.data) {\n          const result: ResultInfo = config.data;\n\n          if (result.status === 0) {\n            config.data = result.data;\n          }\n        }\n        return config;\n      },\n    });\n  }\n}\n```\n\n- 继承基础类后使用 this.proxyHttp 对象中的方法得到调用接口能力，参数 apiKey 对应<a href=\"#api_mgt\">接口配置管理</a>中的 key 定义\n\n```ts\n// user.serv.ts\nimport { BaseService } from \"./base.serv\";\n\nexport class UserService extends BaseService {\n  constructor() {\n    super();\n  }\n  login(userName: string, password: string): Promise<any> {\n    return this.proxyHttp.post(\"login\", { userName, password });\n  }\n}\n```\n\n### 使用 service 类\n\n```ts\n// 在你需要的\nconst userService = new UserService();\nuserService\n  .login(\"sean\", \"666666\")\n  .then((data) => {\n    // store info of user and to home\n  })\n  .catch(console.log);\n```\n\n### 在 ts 中你可能需要添加类型定义\n\n```ts\n// global.d.ts\nimport { ISiteConfig } from \"sg-resource\";\n\ndeclare global {\n  interface Window {\n    getSiteConfig?: () => ISiteConfig;\n  }\n  const getSiteConfig: (() => ISiteConfig) | undefined;\n\n  namespace NodeJS {\n    interface Global {\n      getSiteConfig?: () => ISiteConfig;\n    }\n  }\n}\n```\n\n## 接口文档\n\n- 主机配置管理\n- 接口配置管理\n- 初始化方法\n- http 请求代理\n\n### 主机配置\n\n#### # remote\n\n- 类型：{ hosts: { [key: string]: string | { url: string; cors?: boolean }}; protocol?: string }\n- 详细：remote 用于配置接口服务器的访问地址、首路径。hosts 字段用于配置一组主机地址，一般对应一个服务，map 类型，其 key 用于检索识别主机，value 类型可以是字符串或对象。当为字符串时应符合 URI 规范，形式如下：\n\n```\nURI = scheme:[//authority]path\n```\n\n```\nauthority = [userinfo@]host[:port]\n```\n\n可以将 scheme:[//authority] 置空，则表示使用客户端域名和端口，用以解决 CORS。  \n当是对象时，可使用 cors 字段明确标记此地址客户端 cors 解决方案为弃用配置的域。将忽略所配置的 scheme:[//authority] 部分，也可直接不配置这部分。\nprotocol 字段可选为全局设置协议，当设置了此字段后可以不设置 host 的 url 的协议部分，会继承全局协议，如：“//10.0.0.1:8080/user-api/”\n\n- 示例：\n\n```js\n{\n  remote: {\n    hosts: {\n      user: {\n        url: \"/user-api\",\n        cors: true\n      },\n      support: \"https://10.0.0.1:8080/support-api\",\n    },\n  }\n}\n```\n\n#### # local\n\n- 类型：{ protocol?: string; hostname?: string; port?: number; publicPath: string }\n- 详细：local 为开发服务器或服务器端渲染服务器配置本地域名、端口、发布目录。\n\n### 接口配置\n\n#### # post\n\n- 类型：{ [key: string]: { host: string; path: string } }\n- 详细：post 定义为 http 的一组 post 请求。为 map 类型，key 用于检索，value 类型为对象，其 host 字段为主机配置中的 hosts 对象的 key，用于选取接口主机地址；path 字段为此接口服务内部访问路径。\n- 示例：\n\n```js\npost: {\n  login: {\n    host: \"user\",\n    path: \"/login\"\n  },\n},\n```\n\n另有 get、put、delete、form、modules 配置与 post 类似就不做赘述\n\n### 初始化方法\n\n初始化并返回一个 ProxyHttp 对象实例。\n\n#### # SGResource.ensureInitialized(apiConfig: IApiConfig, siteConfig: ISiteConfig, options?: IInterceptorsOptions): ProxyHttp;\n\n可选项定义：\n\n```js\nIInterceptorsOptions {\n  /**\n   * 自定义请求头\n   */\n  headers ? : () => Record < string, string | null > ;\n  /**\n   * 返回值拦截处理\n   */\n  diagnoseResponse ? : (config: AxiosResponse < any > ) => AxiosResponse < any > ;\n}\n```\n\n#### ProxyHttp 对象的实例方法：\n\n#### # post(apiKey: string; params?: { [key: string]: string }; pathParams?: string[]; options: { headers?: any } = {})\n\n- 示例：\n\n```js\nlogin(userName: string, password: string): Promise < any > {\n  return this.proxyHttp.post(\"login\", {\n    userName,\n    password\n  });\n}\n```\n\n- 实例方法定义\n\n```ts\n/**\n * 代理get请求\n * @param apiKey config定义的接口名\n * @param params 请求参数\n * @param pathParams 路径参数\n * @param options 可选参数，包括请求头参数\n */\nget(apiKey: string, params?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理post请求\n * @param apiKey config定义的接口\n * @param data 请求参数\n * @param pathParams 路径参数\n * @param options 可选参数，包括请求头参数\n */\npost(apiKey: string, data?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理delete请求\n * @param api config定义的接口\n * @param pathParams 请求参数\n */\ndelete(apiKey: string, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理put请求\n * @param apiKey config定义的接口名\n * @param data 请求参数\n */\nput(apiKey: string, data?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 表单提交\n * @param api 接口\n * @param form 表单对象\n */\nform(apiKey: string, form: FormData, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 通过网络协议获取一组文件对象\n * @param urls 文件url列表\n * @param options 可选参数，包括请求头参数\n */\ngetFiles(urls: string[], options?: {\n    headers?: any;\n}): Promise<File[]>;\n\n```\n\n#### 请求参数 options\n\n| 字段              | 说明                                                                                 | 默认值 | 备注     |\n| ----------------- | ------------------------------------------------------------------------------------ | ------ | -------- |\n| headers           | 请求头信息添加                                                                       | -      |\n| cancelLevel       | 放弃上一次请求等级。0 不放弃, 1 全局, 2 到域名, 3 到服务, 4 到接口, 5 到参数, 6 到值 | 0      |\n| overCancelUpLevel | 放弃上级                                                                             |        | 暂未实现 |\n\n### 重复请求时放弃上一次请求\n","readmeFilename":"README.md","gitHead":"61426e91a10b49c000a32ef80db408a61ac6274a","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@2.0.0-beta.7","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-NWbTzXxey8b6mHHyYBD6fPZCqEWeBdu3hr07S8L38gACL6dDRIYRH2aS9/N/EqyqPY00Yal+mstCPTyLm5HchQ==","shasum":"405ab48efc1053730cc134bc6e6c72dd7e204a5a","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-2.0.0-beta.7.tgz","fileCount":35,"unpackedSize":85793,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiDc9BCRA9TVsSAnZWagAAargQAIaFNsQD7xyZWtMww0Nb\nrBBCsWchJA9uNilZFqyKP5eYo+OHyo5qmSo0jBYA6YhYm2l7eQ4kBlFX2xWw\nHIv1GAOguxhqoz8yiD19v8w2QOFTYCGe1I3+sGfL5jQwmcPSliaSrFKsmLAT\nIfxhZuV6hrOrbTMYkFo6/vXTh8A6UTp+b6NPzoI6fmN3aFLnDRfP1jhmQf2C\niTsvS5dwNHTWc+vm7dCD3ZSAAPL1l9S2NQQ7u9Gl5gEfELmQST3KxlUFhVmE\npbwpztUNaEa4DArH5ghrVEVbIrha5YJI2EiJ3ZdqDu5nsYDvU0er5+EuKn/Y\nCvS9wDhN6sKzljZtmI13hCJsbjGwSk/fkYhLt5W/OOrlWxkICiP77U/tbbbu\nMiY7zBDLPkfnm30R9CVfi/SAdk95b3DVp2SjxwybYelKXuPCuTk4cUEDILkJ\nOXrOSHn87hGkLEc+s+J1SMkXj3WHmg/qdVp9XR1XbcX+nNdaFJF0R/ZHdzgx\nDaZ7y8wGwT7v4tZglEpENfAdT8dh49myEKnsAm+f1dG3Af0Q6pRNq0tW0HF2\nzG/PbogVoJlgjNWqp37p1VvXEtuPUHll0BLB1VcOtMcNRZZgbg3FPMsuwdmy\nAgWloSXx0dyq+vtOBsEt+d1AX/XAgBnL/s/6BGw3c8QAE18BvEhCYscdsSxu\nCqsb\r\n=44Ky\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBLpRZobUh4J3ui46mw2uxnRIN22BGLSQAeUI55duGmjAiBdmi5gGUcuJDAGfNOxBjMlVWO/TH8gylbqCZxHnyGYeA=="}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_2.0.0-beta.7_1645072193747_0.4117784037363703"},"_hasShrinkwrap":false},"2.0.0-beta.8":{"name":"sg-resource","version":"2.0.0-beta.8","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持 Vue、React，支持 SSR。","main":"dist/cjs/index.js","module":"dist/es/index.js","scripts":{"dev":"rollup -c -w","prebuild":"rm -rf dist","build":"cross-env NODE_ENV=production rollup -c","link":"npm unlink && npm link","prepublish":"npm run build","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"MIT","types":"./dist/es/packages/index.d.ts","dependencies":{"axios":"^0.21.1","md5":"^2.3.0","miniprogram-api-typings":"^3.4.4","reflect-metadata":"^0.1.13","tslib":"^2.3.1"},"devDependencies":{"@types/jest":"^26.0.24","@types/md5":"^2.3.1","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","rollup":"^2.56.2","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.3","typescript":"^4.2.3"},"readme":"# sg-resource\n\n> 一个网络资源管理工具。使用 HTTP 协议请求，支持 Vue、React，支持 SSR。\n\n## 安装\n\n```bash\nnpm i sg-resource\n```\n\n## 信息管理\n\n### 服务站点管理\n\n- system 字段可配置多个环境（DEV、SIT、UAT、PROD 等），\"env\"字段指定环境（必填），使用 runtime 字段选择其中一个环境。在每个环境里通过 hosts 字典配置多个服务地址，各环境 hosts 字典的 key 保持一致。\n\n```js\n// site.config.js\n// @ts-check\n/// <reference path=\"../typings/global.d.ts\" />\n(function () {\n  const /** @type {SiteConfig<\"DEV\" | \"SIT\" | \"UAT\" | \"PROD\", \"default\">} */ SITE_CONFIG = {\n      system: [\n        {\n          env: \"DEV\",\n          remote: {\n            hosts: {\n              user: \"http://127.0.0.1:8080/web-api\",\n            },\n          },\n          local: {},\n          entrance: \"\",\n        },\n        {\n          env: \"SIT\",\n          remote: {\n            hosts: {\n              user: \"http://127.0.0.1:8080/web-api\",\n            },\n          },\n          local: {},\n          entrance: \"\",\n        },\n      ],\n      runtime: \"DEV\",\n    };\n\n  // 通过全局get方法导出\n  if (typeof window === \"object\") {\n    window.getSiteConfig = () => SITE_CONFIG;\n  }\n  if (typeof global === \"object\") {\n    global.getSiteConfig = () => SITE_CONFIG;\n  }\n  if (typeof module === \"object\") {\n    module.exports = {\n      SITE_CONFIG,\n    };\n  }\n})();\n```\n\n- 字段配置的详情\n\n```ts\n/**\n * 某一个站点配置\n */\nexport interface ISite {\n  /**\n   * 环境标识\n   */\n  env: \"DEV\" | \"SIT\" | \"UAT\" | \"PROD\";\n  /**\n   * 远端服务器配置\n   */\n  remote: {\n    /**\n     * 服务器地址列表\n     */\n    hosts: Record<string, IHost | string>;\n    /**\n     * 默认协议，服务器地址中不设置可继承该设置\n     */\n    protocol?: string;\n  };\n  /**\n   * 本地服务器配置\n   */\n  local: {\n    /**\n     * 协议\n     */\n    protocol?: string;\n    /**\n     * 主机域名或ip地址\n     */\n    hostname?: string;\n    /**\n     * 端口占用\n     */\n    port?: number;\n    /**\n     * 发布路径\n     */\n    publicPath?: string;\n    /**\n     * 附件路径，可以是本地服务目录，或远程地址\n     */\n    assetsPath?: string;\n  };\n  /**\n   * 自定义\n   */\n  custom?: Record<string, any>;\n  /**\n   * 第三方登录入口\n   */\n  entrance?: string;\n  /**\n   * 统计服务地址\n   */\n  sensor?: string;\n  /**\n   * 接口加密盐\n   */\n  salt?: string;\n}\n/**\n * 主机信息对象\n * */\ninterface IHost {\n  url: string;\n  /**\n   * 配合web server解决跨域，地址的域信息部分将被替换为客户端地址。\n   */\n  cors?: boolean;\n}\n```\n\n- site.config.js 引入方式：\n\n1. 在 CSR 当作静态资源引入\n\n```html\n<script src=\"/public/site.config.js\"></script>\n```\n\n2. 在 SSR 模块式引入\n\n```js\n// js\nconst { SITE_CONFIG } = require(\"./config/site.config\");\nconst currentConfig = SITE_CONFIG.system.find(\n  (item) => item.env === SITE_CONFIG.runtime,\n);\n```\n\n```ts\n// ts\nimport \"../config/site.config\";\nlet siteConfig: ISiteConfig = {\n  system: [],\n  runtime: \"DEV\",\n};\n\nif (getSiteConfig) {\n  siteConfig = getSiteConfig();\n}\n\nconst config = siteConfig.system.find(\n  (item) => item.env === siteConfig.runtime,\n);\n```\n\n### <a name=\"api_mgt\">接口配置管理</a>\n\n使用 host 字段选择服务目标（使用泛型约束）\n\n```ts\n// api.config.ts\nexport const apiConfig: IApiConfig<\"user\"> = {\n  post: {\n    login: { host: \"user\", path: \"/login\" },\n  },\n  get: {},\n};\n```\n\n### 启动和接口调用\n\n创建一个基础类并继承基础类\n\n- 使用 ensureInitialized 方法初始化方法初始化得到 http 代理对象，可自定义 ResultInfo 对象用来描述接口返回数据的包装类\n\n```js\n// base.serv.ts\nimport { apiConfig } from \"@/app/config/api.config\";\nimport { ISiteConfig, ProxyHttp, SGResource } from \"sg-resource\";\nimport { ResultInfo } from \"../domain/ResultInfo\";\n\nexport class BaseService {\n  proxyHttp: ProxyHttp;\n  constructor() {\n    this.proxyHttp = SGResource.ensureInitialized(getSiteConfig(), apiConfig, {\n      headers: () => {\n        const headers: any = {};\n        let token = \"88\";\n\n        if (token) {\n          headers[\"accessToken\"] = token;\n        }\n        return headers;\n      },\n      diagnoseResponse: (config) => {\n        if (config.data) {\n          const result: ResultInfo = config.data;\n\n          if (result.status === 0) {\n            config.data = result.data;\n          }\n        }\n        return config;\n      },\n    });\n  }\n}\n```\n\n- 继承基础类后使用 this.proxyHttp 对象中的方法得到调用接口能力，参数 apiKey 对应<a href=\"#api_mgt\">接口配置管理</a>中的 key 定义\n\n```ts\n// user.serv.ts\nimport { BaseService } from \"./base.serv\";\n\nexport class UserService extends BaseService {\n  constructor() {\n    super();\n  }\n  login(userName: string, password: string): Promise<any> {\n    return this.proxyHttp.post(\"login\", { userName, password });\n  }\n}\n```\n\n### 使用 service 类\n\n```ts\n// 在你需要的\nconst userService = new UserService();\nuserService\n  .login(\"sean\", \"666666\")\n  .then((data) => {\n    // store info of user and to home\n  })\n  .catch(console.log);\n```\n\n### 在 ts 中你可能需要添加类型定义\n\n```ts\n// global.d.ts\nimport { ISiteConfig } from \"sg-resource\";\n\ndeclare global {\n  interface Window {\n    getSiteConfig?: () => ISiteConfig;\n  }\n  const getSiteConfig: (() => ISiteConfig) | undefined;\n\n  namespace NodeJS {\n    interface Global {\n      getSiteConfig?: () => ISiteConfig;\n    }\n  }\n}\n```\n\n## 接口文档\n\n- 主机配置管理\n- 接口配置管理\n- 初始化方法\n- http 请求代理\n\n### 主机配置\n\n#### # remote\n\n- 类型：{ hosts: { [key: string]: string | { url: string; cors?: boolean }}; protocol?: string }\n- 详细：remote 用于配置接口服务器的访问地址、首路径。hosts 字段用于配置一组主机地址，一般对应一个服务，map 类型，其 key 用于检索识别主机，value 类型可以是字符串或对象。当为字符串时应符合 URI 规范，形式如下：\n\n```\nURI = scheme:[//authority]path\n```\n\n```\nauthority = [userinfo@]host[:port]\n```\n\n可以将 scheme:[//authority] 置空，则表示使用客户端域名和端口，用以解决 CORS。  \n当是对象时，可使用 cors 字段明确标记此地址客户端 cors 解决方案为弃用配置的域。将忽略所配置的 scheme:[//authority] 部分，也可直接不配置这部分。\nprotocol 字段可选为全局设置协议，当设置了此字段后可以不设置 host 的 url 的协议部分，会继承全局协议，如：“//10.0.0.1:8080/user-api/”\n\n- 示例：\n\n```js\n{\n  remote: {\n    hosts: {\n      user: {\n        url: \"/user-api\",\n        cors: true\n      },\n      support: \"https://10.0.0.1:8080/support-api\",\n    },\n  }\n}\n```\n\n#### # local\n\n- 类型：{ protocol?: string; hostname?: string; port?: number; publicPath: string }\n- 详细：local 为开发服务器或服务器端渲染服务器配置本地域名、端口、发布目录。\n\n### 接口配置\n\n#### # post\n\n- 类型：{ [key: string]: { host: string; path: string } }\n- 详细：post 定义为 http 的一组 post 请求。为 map 类型，key 用于检索，value 类型为对象，其 host 字段为主机配置中的 hosts 对象的 key，用于选取接口主机地址；path 字段为此接口服务内部访问路径。\n- 示例：\n\n```js\npost: {\n  login: {\n    host: \"user\",\n    path: \"/login\"\n  },\n},\n```\n\n另有 get、put、delete、form、modules 配置与 post 类似就不做赘述\n\n### 初始化方法\n\n初始化并返回一个 ProxyHttp 对象实例。\n\n#### # SGResource.ensureInitialized(apiConfig: IApiConfig, siteConfig: ISiteConfig, options?: IInterceptorsOptions): ProxyHttp;\n\n可选项定义：\n\n```js\nIInterceptorsOptions {\n  /**\n   * 自定义请求头\n   */\n  headers ? : () => Record < string, string | null > ;\n  /**\n   * 返回值拦截处理\n   */\n  diagnoseResponse ? : (config: AxiosResponse < any > ) => AxiosResponse < any > ;\n}\n```\n\n#### ProxyHttp 对象的实例方法：\n\n#### # post(apiKey: string; params?: { [key: string]: string }; pathParams?: string[]; options: { headers?: any } = {})\n\n- 示例：\n\n```js\nlogin(userName: string, password: string): Promise < any > {\n  return this.proxyHttp.post(\"login\", {\n    userName,\n    password\n  });\n}\n```\n\n- 实例方法定义\n\n```ts\n/**\n * 代理get请求\n * @param apiKey config定义的接口名\n * @param params 请求参数\n * @param pathParams 路径参数\n * @param options 可选参数，包括请求头参数\n */\nget(apiKey: string, params?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理post请求\n * @param apiKey config定义的接口\n * @param data 请求参数\n * @param pathParams 路径参数\n * @param options 可选参数，包括请求头参数\n */\npost(apiKey: string, data?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理delete请求\n * @param api config定义的接口\n * @param pathParams 请求参数\n */\ndelete(apiKey: string, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理put请求\n * @param apiKey config定义的接口名\n * @param data 请求参数\n */\nput(apiKey: string, data?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 表单提交\n * @param api 接口\n * @param form 表单对象\n */\nform(apiKey: string, form: FormData, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 通过网络协议获取一组文件对象\n * @param urls 文件url列表\n * @param options 可选参数，包括请求头参数\n */\ngetFiles(urls: string[], options?: {\n    headers?: any;\n}): Promise<File[]>;\n\n```\n\n#### 请求参数 options\n\n| 字段              | 说明                                                                                 | 默认值 | 备注     |\n| ----------------- | ------------------------------------------------------------------------------------ | ------ | -------- |\n| headers           | 请求头信息添加                                                                       | -      |\n| cancelLevel       | 放弃上一次请求等级。0 不放弃, 1 全局, 2 到域名, 3 到服务, 4 到接口, 5 到参数, 6 到值 | 0      |\n| overCancelUpLevel | 放弃上级                                                                             |        | 暂未实现 |\n\n### 重复请求时放弃上一次请求\n","readmeFilename":"README.md","gitHead":"d10b4bc86e9ec9cba001ddded3323d4972e97434","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@2.0.0-beta.8","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-N85Cjw7RX/miMRibLCFDLBVDna62Ki6EPy7MZ/Rcbv5226jmklhhA2llxOhu+SARsQ37xUhgpRMqB0TkEaFbHQ==","shasum":"db7fa817786dc053a39fd475a25cfb8f83e23898","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-2.0.0-beta.8.tgz","fileCount":35,"unpackedSize":85793,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiDfrGACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpbTQ/9FjC+Q54B0Ut/26ZNbdFn9Do8LF5qrL6rjtdzd9x7TUEcKCSq\r\niSDagrmjuxueJ7WXpzq1SksyHpI1YhlP6pEMiO5eID832ulzxEJLbCBFSX++\r\nfvJGobZpZvI2o4bm7R8nBqwsZrMnEhhDF/W72K1bhCcPnARrBdRJb0wFpR2p\r\n9SBDdFbFa1BGJ3BJBxX2EycHZybHFeMGdg/+0KnlXve36MRYCessoZDiLXfY\r\nyAzCmQf1Yk/Po70J4A5jW/PQ9OF8X66I9slDNewaFM1wKiVEWCUpigKId4gd\r\nxpODV8AZIEIKNeu/UX9GSPTeoKMVVJyx3EdUtFf1BqH6WsOLnucxb4K7A5uc\r\nlOXrywfCml15uIZUTX3jSzlOithSjluST8AKdViDDra0NTVR0bbRFDlEDP5j\r\nAgHWGvOHT89ua1oeS/QxjMyVd5qyBLE+kluK40H3hXAfBANPK1iKqaniLrEp\r\nmyBhn5AyU2drTTDJ94tcW3me3KOzAcXuk1dsHPLvfcGh0x0KznGX/srlG4Z6\r\nopFufdDzk4BSKfVSWPR8FdfteUSTd8Z9rs3R/V3NEB1bDARW/nFGGJtDR1OX\r\n65GS3Dd773h0dfbmEukc3Jb0Ryd25YKb29rKEsb+e56iyTu+LA0lZoCEL+qV\r\nzTcEXZOl1hJpoC6RheWsrC7oSafdmqgbONA=\r\n=wf+a\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVFhRPMqC7Y7gQTW2y/dUwI7u4U0roXhSLG9W5aer+YAIhAI/MPJj9IRL00DrfmDJAwhgZAUykUgcx72MubBiRjWOe"}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_2.0.0-beta.8_1645083334202_0.6788952984757473"},"_hasShrinkwrap":false},"2.0.0-beta.9":{"name":"sg-resource","version":"2.0.0-beta.9","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持 Vue、React，支持 SSR。","main":"dist/cjs/index.js","module":"dist/es/index.js","scripts":{"dev":"rollup -c -w","prebuild":"rm -rf dist","build":"cross-env NODE_ENV=production rollup -c","link":"npm unlink && npm link","prepublish":"npm run build","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"MIT","types":"./dist/es/packages/index.d.ts","dependencies":{"axios":"^0.21.1","md5":"^2.3.0","miniprogram-api-typings":"^3.4.4","reflect-metadata":"^0.1.13","tslib":"^2.3.1"},"devDependencies":{"@types/jest":"^26.0.24","@types/md5":"^2.3.1","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","rollup":"^2.56.2","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.3","typescript":"^4.2.3"},"readme":"# sg-resource\n\n> 一个网络资源管理工具。使用 HTTP 协议请求，支持 Vue、React，支持 SSR。\n\n## 安装\n\n```bash\nnpm i sg-resource\n```\n\n## 信息管理\n\n### 服务站点管理\n\n- system 字段可配置多个环境（DEV、SIT、UAT、PROD 等），\"env\"字段指定环境（必填），使用 runtime 字段选择其中一个环境。在每个环境里通过 hosts 字典配置多个服务地址，各环境 hosts 字典的 key 保持一致。\n\n```js\n// site.config.js\n// @ts-check\n/// <reference path=\"../typings/global.d.ts\" />\n(function () {\n  const /** @type {SiteConfig<\"DEV\" | \"SIT\" | \"UAT\" | \"PROD\", \"default\">} */ SITE_CONFIG = {\n      system: [\n        {\n          env: \"DEV\",\n          remote: {\n            hosts: {\n              user: \"http://127.0.0.1:8080/web-api\",\n            },\n          },\n          local: {},\n          entrance: \"\",\n        },\n        {\n          env: \"SIT\",\n          remote: {\n            hosts: {\n              user: \"http://127.0.0.1:8080/web-api\",\n            },\n          },\n          local: {},\n          entrance: \"\",\n        },\n      ],\n      runtime: \"DEV\",\n    };\n\n  // 通过全局get方法导出\n  if (typeof window === \"object\") {\n    window.getSiteConfig = () => SITE_CONFIG;\n  }\n  if (typeof global === \"object\") {\n    global.getSiteConfig = () => SITE_CONFIG;\n  }\n  if (typeof module === \"object\") {\n    module.exports = {\n      SITE_CONFIG,\n    };\n  }\n})();\n```\n\n- 字段配置的详情\n\n```ts\n/**\n * 某一个站点配置\n */\nexport interface ISite {\n  /**\n   * 环境标识\n   */\n  env: \"DEV\" | \"SIT\" | \"UAT\" | \"PROD\";\n  /**\n   * 远端服务器配置\n   */\n  remote: {\n    /**\n     * 服务器地址列表\n     */\n    hosts: Record<string, IHost | string>;\n    /**\n     * 默认协议，服务器地址中不设置可继承该设置\n     */\n    protocol?: string;\n  };\n  /**\n   * 本地服务器配置\n   */\n  local: {\n    /**\n     * 协议\n     */\n    protocol?: string;\n    /**\n     * 主机域名或ip地址\n     */\n    hostname?: string;\n    /**\n     * 端口占用\n     */\n    port?: number;\n    /**\n     * 发布路径\n     */\n    publicPath?: string;\n    /**\n     * 附件路径，可以是本地服务目录，或远程地址\n     */\n    assetsPath?: string;\n  };\n  /**\n   * 自定义\n   */\n  custom?: Record<string, any>;\n  /**\n   * 第三方登录入口\n   */\n  entrance?: string;\n  /**\n   * 统计服务地址\n   */\n  sensor?: string;\n  /**\n   * 接口加密盐\n   */\n  salt?: string;\n}\n/**\n * 主机信息对象\n * */\ninterface IHost {\n  url: string;\n  /**\n   * 配合web server解决跨域，地址的域信息部分将被替换为客户端地址。\n   */\n  cors?: boolean;\n}\n```\n\n- site.config.js 引入方式：\n\n1. 在 CSR 当作静态资源引入\n\n```html\n<script src=\"/public/site.config.js\"></script>\n```\n\n2. 在 SSR 模块式引入\n\n```js\n// js\nconst { SITE_CONFIG } = require(\"./config/site.config\");\nconst currentConfig = SITE_CONFIG.system.find(\n  (item) => item.env === SITE_CONFIG.runtime,\n);\n```\n\n```ts\n// ts\nimport \"../config/site.config\";\nlet siteConfig: ISiteConfig = {\n  system: [],\n  runtime: \"DEV\",\n};\n\nif (getSiteConfig) {\n  siteConfig = getSiteConfig();\n}\n\nconst config = siteConfig.system.find(\n  (item) => item.env === siteConfig.runtime,\n);\n```\n\n### <a name=\"api_mgt\">接口配置管理</a>\n\n使用 host 字段选择服务目标（使用泛型约束）\n\n```ts\n// api.config.ts\nexport const apiConfig: IApiConfig<\"user\"> = {\n  post: {\n    login: { host: \"user\", path: \"/login\" },\n  },\n  get: {},\n};\n```\n\n### 启动和接口调用\n\n创建一个基础类并继承基础类\n\n- 使用 ensureInitialized 方法初始化方法初始化得到 http 代理对象，可自定义 ResultInfo 对象用来描述接口返回数据的包装类\n\n```js\n// base.serv.ts\nimport { apiConfig } from \"@/app/config/api.config\";\nimport { ISiteConfig, ProxyHttp, SGResource } from \"sg-resource\";\nimport { ResultInfo } from \"../domain/ResultInfo\";\n\nexport class BaseService {\n  proxyHttp: ProxyHttp;\n  constructor() {\n    this.proxyHttp = SGResource.ensureInitialized(getSiteConfig(), apiConfig, {\n      headers: () => {\n        const headers: any = {};\n        let token = \"88\";\n\n        if (token) {\n          headers[\"accessToken\"] = token;\n        }\n        return headers;\n      },\n      diagnoseResponse: (config) => {\n        if (config.data) {\n          const result: ResultInfo = config.data;\n\n          if (result.status === 0) {\n            config.data = result.data;\n          }\n        }\n        return config;\n      },\n    });\n  }\n}\n```\n\n- 继承基础类后使用 this.proxyHttp 对象中的方法得到调用接口能力，参数 apiKey 对应<a href=\"#api_mgt\">接口配置管理</a>中的 key 定义\n\n```ts\n// user.serv.ts\nimport { BaseService } from \"./base.serv\";\n\nexport class UserService extends BaseService {\n  constructor() {\n    super();\n  }\n  login(userName: string, password: string): Promise<any> {\n    return this.proxyHttp.post(\"login\", { userName, password });\n  }\n}\n```\n\n### 使用 service 类\n\n```ts\n// 在你需要的\nconst userService = new UserService();\nuserService\n  .login(\"sean\", \"666666\")\n  .then((data) => {\n    // store info of user and to home\n  })\n  .catch(console.log);\n```\n\n### 在 ts 中你可能需要添加类型定义\n\n```ts\n// global.d.ts\nimport { ISiteConfig } from \"sg-resource\";\n\ndeclare global {\n  interface Window {\n    getSiteConfig?: () => ISiteConfig;\n  }\n  const getSiteConfig: (() => ISiteConfig) | undefined;\n\n  namespace NodeJS {\n    interface Global {\n      getSiteConfig?: () => ISiteConfig;\n    }\n  }\n}\n```\n\n## 接口文档\n\n- 主机配置管理\n- 接口配置管理\n- 初始化方法\n- http 请求代理\n\n### 主机配置\n\n#### # remote\n\n- 类型：{ hosts: { [key: string]: string | { url: string; cors?: boolean }}; protocol?: string }\n- 详细：remote 用于配置接口服务器的访问地址、首路径。hosts 字段用于配置一组主机地址，一般对应一个服务，map 类型，其 key 用于检索识别主机，value 类型可以是字符串或对象。当为字符串时应符合 URI 规范，形式如下：\n\n```\nURI = scheme:[//authority]path\n```\n\n```\nauthority = [userinfo@]host[:port]\n```\n\n可以将 scheme:[//authority] 置空，则表示使用客户端域名和端口，用以解决 CORS。  \n当是对象时，可使用 cors 字段明确标记此地址客户端 cors 解决方案为弃用配置的域。将忽略所配置的 scheme:[//authority] 部分，也可直接不配置这部分。\nprotocol 字段可选为全局设置协议，当设置了此字段后可以不设置 host 的 url 的协议部分，会继承全局协议，如：“//10.0.0.1:8080/user-api/”\n\n- 示例：\n\n```js\n{\n  remote: {\n    hosts: {\n      user: {\n        url: \"/user-api\",\n        cors: true\n      },\n      support: \"https://10.0.0.1:8080/support-api\",\n    },\n  }\n}\n```\n\n#### # local\n\n- 类型：{ protocol?: string; hostname?: string; port?: number; publicPath: string }\n- 详细：local 为开发服务器或服务器端渲染服务器配置本地域名、端口、发布目录。\n\n### 接口配置\n\n#### # post\n\n- 类型：{ [key: string]: { host: string; path: string } }\n- 详细：post 定义为 http 的一组 post 请求。为 map 类型，key 用于检索，value 类型为对象，其 host 字段为主机配置中的 hosts 对象的 key，用于选取接口主机地址；path 字段为此接口服务内部访问路径。\n- 示例：\n\n```js\npost: {\n  login: {\n    host: \"user\",\n    path: \"/login\"\n  },\n},\n```\n\n另有 get、put、delete、form、modules 配置与 post 类似就不做赘述\n\n### 初始化方法\n\n初始化并返回一个 ProxyHttp 对象实例。\n\n#### # SGResource.ensureInitialized(apiConfig: IApiConfig, siteConfig: ISiteConfig, options?: IInterceptorsOptions): ProxyHttp;\n\n可选项定义：\n\n```js\nIInterceptorsOptions {\n  /**\n   * 自定义请求头\n   */\n  headers ? : () => Record < string, string | null > ;\n  /**\n   * 返回值拦截处理\n   */\n  diagnoseResponse ? : (config: AxiosResponse < any > ) => AxiosResponse < any > ;\n}\n```\n\n#### ProxyHttp 对象的实例方法：\n\n#### # post(apiKey: string; params?: { [key: string]: string }; pathParams?: string[]; options: { headers?: any } = {})\n\n- 示例：\n\n```js\nlogin(userName: string, password: string): Promise < any > {\n  return this.proxyHttp.post(\"login\", {\n    userName,\n    password\n  });\n}\n```\n\n- 实例方法定义\n\n```ts\n/**\n * 代理get请求\n * @param apiKey config定义的接口名\n * @param params 请求参数\n * @param pathParams 路径参数\n * @param options 可选参数，包括请求头参数\n */\nget(apiKey: string, params?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理post请求\n * @param apiKey config定义的接口\n * @param data 请求参数\n * @param pathParams 路径参数\n * @param options 可选参数，包括请求头参数\n */\npost(apiKey: string, data?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理delete请求\n * @param api config定义的接口\n * @param pathParams 请求参数\n */\ndelete(apiKey: string, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理put请求\n * @param apiKey config定义的接口名\n * @param data 请求参数\n */\nput(apiKey: string, data?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 表单提交\n * @param api 接口\n * @param form 表单对象\n */\nform(apiKey: string, form: FormData, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 通过网络协议获取一组文件对象\n * @param urls 文件url列表\n * @param options 可选参数，包括请求头参数\n */\ngetFiles(urls: string[], options?: {\n    headers?: any;\n}): Promise<File[]>;\n\n```\n\n#### 请求参数 options\n\n| 字段              | 说明                                                                                 | 默认值 | 备注     |\n| ----------------- | ------------------------------------------------------------------------------------ | ------ | -------- |\n| headers           | 请求头信息添加                                                                       | -      |\n| cancelLevel       | 放弃上一次请求等级。0 不放弃, 1 全局, 2 到域名, 3 到服务, 4 到接口, 5 到参数, 6 到值 | 0      |\n| overCancelUpLevel | 放弃上级                                                                             |        | 暂未实现 |\n\n### 重复请求时放弃上一次请求\n","readmeFilename":"README.md","gitHead":"9ed94c685304976861a900501e8c9f94cfe376a7","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@2.0.0-beta.9","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-nM2gtzh35SvSQ1NfR4mkhJXK3Z6xHgqbupR1nJXBpKe41kRnJVtOLtyGf9kaCjjHZW9o13QmYyChQZLlaxQJLA==","shasum":"d1cde48a32d5cf0ef2fe0bf1802fd2e06f53a32d","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-2.0.0-beta.9.tgz","fileCount":35,"unpackedSize":85595,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiDftrACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoCzg/7BBJNBtY9dKIkrFAmRfAeP7jL6lOB+szaMz+wqrbwpjAbXi+X\r\nHTUPMXCw2sgraTpzR4sqmGPhCymqauyWNCNqMzs9a4JZ/mVZPvILkqNpoRop\r\n9qO6g14Mm+9RK3r7EZW/6locrltF2aFmsZn7/e5DsLkCp9Ts88u62mxlHJK0\r\nFz60LtWmbW2p+a6uc4Pmnb1QwBQi0wic7OoAB0ZumROGKfhwOLZkhQGtscYF\r\n/40EFLLESsKepwVN/dryGM7E2Q+GNYir7wfHJdBxRSJ9NDnpbEI7QI0eChVx\r\nYOm8QiLHyCoy+uXepFP0O9+6mcy2ihlRFIJZ4a4+hgRMyfhv2dlC1x9jef2G\r\nhuHf40t75dPkh8rFFNjgdE1QudRhAYvaIDFxvWfwidQFLaEQHTXVLvDE+zqr\r\nSr5n6hK5w+yyx0D2hrMHfqoUcXbg/f47pInwrDDVjJd8wUtQ7hernt9drQYA\r\nT2zhg8PzhdksU2u5eE0gdUPmEs9+J0jePqNj0rkRChgjRhNfLSmDA49LzTHp\r\n50rcIzYK5byAWsjq0BnD+0vbfIGs+juaR7HnMCl6Uhfha9LuPQxCz6A16nL/\r\nTf2qEV4//8YYm5tHIc39P/VM3kh9OG7o+Q86ASUhHNKr1z+FGSFzrul3FMLP\r\nCZxF7mR+9natIDV3u7QB3XclIVuObyFtVnA=\r\n=6+rk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB4rDXJj3JEhdLtim0Od1Og+F/iy/YKsvdSv9Vhox8YbAiEAsITsXahxjJeqpweSGqNXn0vu/9AZEa1eTpabC7cPJIQ="}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_2.0.0-beta.9_1645083498857_0.6219434981531644"},"_hasShrinkwrap":false},"2.0.0":{"name":"sg-resource","version":"2.0.0","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持 Vue、React，支持 SSR。","main":"dist/cjs/index.js","module":"dist/es/index.js","scripts":{"dev":"rollup -c -w","prebuild":"rm -rf dist","build":"cross-env NODE_ENV=production rollup -c","link":"npm unlink && npm link","prepublish":"npm run build","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"MIT","types":"./dist/es/packages/index.d.ts","dependencies":{"axios":"^0.21.1","md5":"^2.3.0","miniprogram-api-typings":"^3.4.4","reflect-metadata":"^0.1.13","tslib":"^2.3.1"},"devDependencies":{"@types/jest":"^26.0.24","@types/md5":"^2.3.1","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","rollup":"^2.56.2","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.3","typescript":"^4.2.3"},"gitHead":"95669278c6914b262aa2414756cd2f610cc3f7be","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@2.0.0","_nodeVersion":"16.13.2","_npmVersion":"8.1.2","dist":{"integrity":"sha512-5AeIh5g6ZCWfIAsboWtO51ADFKaDeH1Zt6CKakY97RqO+L7QBsO6GHxA7mVbvUpupvCjz5DI7AmN7osq/Xhg+w==","shasum":"116fcfcd9abf1574720bc13a354fb9e45b21c452","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-2.0.0.tgz","fileCount":37,"unpackedSize":85936,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiEKt/ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqlWw//VpoINJo0ulLd72X+Fz0nRkzIWww/VBIiEQNx9ROp56kfO5vv\r\n2GCaCegzFIp1BHqGoxBEMLnYWN1b+zXkZxHXUSlH8rxVn2iIjx+mGKkYRmzG\r\nz9DPKcJ6e1V1caBx+SGyuyiibFvj1wyy52mm/4+TUiBALf665ffoWZpzsaZ3\r\niaasPF2WV5SXKYnMS6ybiB/3Jhtcldc2PCvWyVLCt6ikZdt+SvImqXyii9ox\r\nmoSUAYucjEmhYKNC3MDoTsByCwhnkhYLJUHlaqx+pkAIP2YRNIsKnfn6+ghb\r\nIkyxQDTPL43B3dk5v6Z1PXn8sWp7kgjESXvyP5iI0IXbqc5J5KKLCtlDHzCc\r\nWGuU46tzYkZEkAkLCqCfSO3PTalJaaj3zBBrM94p08mq+j8nAt0rCcD/IG1I\r\nP0c5iU8fvS4BCC4MilqzSC+t7adYOtpW79N9aYOhKkUc/SfJxSmHGSiaa5Fp\r\nByQGSbNoQlr1LotQ0ZDlTs39WVF07N5qZtL/bMbQduI32DdqLHoRiWx2YBED\r\nmLV0x+Gu8TBy1yJDKNQCdd5TTTTAFm76hpjewmgSlBNZaxqCtWZdhQBsi4Mf\r\nJcqxndFLuqeYMFJiUB5zVlTzh4Oaf8wQ69ysjymsGcjcEDUF5uiOyk+TtxFF\r\nqw+hbnVz82vswFVrlj9qrgTs2etJqSGAjSQ=\r\n=v3Z2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAHwMfLo1oofp99Q0iLEQKHykLIcbHyNS8VYRzXZNAxoAiEAy5EC8NNkK5WAqvLl2JQp58SXNUgjceTiJa8d//sQ6iQ="}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_2.0.0_1645259647447_0.5020580124741643"},"_hasShrinkwrap":false},"2.0.1":{"name":"sg-resource","version":"2.0.1","description":"> 前端网络资源管理工具。","main":"dist/cjs/index.js","module":"dist/es/index.js","scripts":{"dev":"rollup -c -w","prebuild":"rm -rf dist","build":"cross-env NODE_ENV=production rollup -c","link":"npm unlink && npm link","prepublish":"npm run build","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"MIT","types":"./dist/es/packages/index.d.ts","dependencies":{"axios":"^0.21.1","md5":"^2.3.0","miniprogram-api-typings":"^3.4.4","reflect-metadata":"^0.1.13","tslib":"^2.3.1"},"devDependencies":{"@types/jest":"^26.0.24","@types/md5":"^2.3.1","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","rollup":"^2.56.2","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.3","typescript":"^4.2.3"},"gitHead":"a8200607da5c15d96b97e92e02c4a8b32b24c592","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@2.0.1","_nodeVersion":"16.13.2","_npmVersion":"8.1.2","dist":{"integrity":"sha512-2PCj/o9axOizEJP6zZKvVwNb3oSf/D7e0+EktNMD1eppxKYY3W5mqFD7OASQQ+Abg+fnTXeRP39TIwBpkExbJQ==","shasum":"8a2c72fe9993367130802ef96b435c54024de9e5","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-2.0.1.tgz","fileCount":37,"unpackedSize":82929,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiFa6sACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpS6Q/+NY1G7vwmunUo2eN98fafBBOx3EkA0otP8AlvITGQjJMxW9pd\r\nalU3XZDqwPPjDPsr1Rti4tA2iGrmqe9Adr0RKiOoSRxHX5HddUyLa29MW9Wk\r\nJ5yCiHLz2HGF9zstNyKGA1j5LHnEAwOPJ4nQHtfQIXsT8mP97czrv7P735tB\r\nmYHIiBhTez14qAqf4dn8zKAVzYypf0gKXvU7gMK8obV85Og2Ztx9+oNxQRyN\r\nc0sKbIgItVoRFTLSEL/BaJbsYJYJ5jgORv/6GzKMpW7nkj6Rweg4HAjdBA/Q\r\n1C1ll/SpK8HxxC7pQBQfgUopCmvrEb+Bs8PdRPMwtyNwqid6yWD0a1/+bMOZ\r\nbtDBzb4OWJHXkNh5a2EWGFnDFlJsIJN/qddH4DxRf0ahcYhirfRy9XItMDHa\r\nKmSB5DBr1gG2Z7WxcWEVKn9tPy7v1BE16eC3/2NhfScRb0yE1KMJ3uhysbPt\r\nTqd/Q/gcfqGmrPNmJ3mKIOgu+VWpH9h2Xl7T7hO9OXmqzwgZ1PqdtNLmAkhL\r\niSf/1xyP9pKE2GP4S/hjsrEC/RFS0Lo/CBmGqoBNHqSwYd07vZHdKgY3tCoa\r\n5tcpKKC9kXe/xgrwSEGt4LcLfGmFw0HaY4CVG9a7AkTrqPSded7SnmotyG1Z\r\nDw//gHn4/gL8zMO5hD0BdxP0BHZOeMNSBQo=\r\n=nDN8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG39kfya3BHEhgKeORTEgd8MZa74sszizqTbILNa7MjlAiEA5IQiHDSFdcavSlBMqr71TzIRdVWYnl2c3MJbGfP5/yQ="}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_2.0.1_1645588139944_0.4766596826057192"},"_hasShrinkwrap":false},"2.0.2":{"name":"sg-resource","version":"2.0.2","description":"> 前端网络资源管理工具。","main":"dist/cjs/index.js","module":"dist/es/index.js","scripts":{"dev":"rollup -c -w","prebuild":"rm -rf dist","build":"cross-env NODE_ENV=production rollup -c","link":"npm unlink && npm link","prepublish":"npm run build","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"MIT","types":"./dist/es/packages/index.d.ts","dependencies":{"axios":"^0.21.1","md5":"^2.3.0","miniprogram-api-typings":"^3.4.4","reflect-metadata":"^0.1.13","tslib":"^2.3.1"},"devDependencies":{"@types/jest":"^26.0.24","@types/md5":"^2.3.1","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","rollup":"^2.56.2","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.3","typescript":"^4.2.3"},"gitHead":"9be472c060a6aa768f5efad95bab5866227886a2","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@2.0.2","_nodeVersion":"16.13.2","_npmVersion":"8.1.2","dist":{"integrity":"sha512-1FPLbBIGYVGLcDmks1SSWVola64UKe2SRn6zhhHs+6V1vXpPDZoUI2sY5ERLTrVzWbNXARQ6V5AkJpmLPdw95g==","shasum":"f6443ccd653380d94d024b138f9cebb3299d7ea4","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-2.0.2.tgz","fileCount":37,"unpackedSize":83124,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiFbTUACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmreig//e/TYUyqL5sLR0drnYDhNO8qpxTyaiICUZKtlj24FPvG/juBa\r\nEROLBEiNFVY9/U/Vs1KTL/vJZqiZbugFHROd2y5uKmlMmyp0DDDV0YIEJpTU\r\nNW2rJcdPvOAu5NMNduezAfG9jTM3LilKVNWCzPG1REIi44wf+TgZnbek15Gg\r\nFS1oHBnkZfvw3bJ5hmTPH0eGgsB9SYI0s1By3/fx3FCOn4Q0wDWGB3nXmFXZ\r\nZ4WvBiudxwpQ6VKSGb58NqJmJEHHc+oGaog69/jgiA6txtCcol/U0xbHwns8\r\nPnspCimEEOkUeKe2bfzL/KQtcAbhudq4pwmo5FhOyFx3ESWM+8GwU5Wi6bjZ\r\niMmKt4oJbd0U+HwZdeFGzsFGhY3dWzLNWivABOaOX1XuGcb2Ny6shVwy8lcE\r\njd/88Ngb+j7vtZ6BxgCaOLg7G4u6A0jbNAedR+BLRAfxPrwSdPMRHYPWlgJL\r\nBxIOdFuYU0eSACBQ7i+leV6UzfUUg0H3TlQl19h2x6g1sD7f17c7aSoAShBi\r\nbNwhYmwJeBvbVt+5qsyQCcABaciL6jKWTnvJY1rvelOwl3aJox/7NI4cQuZ9\r\ngQhoAE6d0jPBzcHEvyyCvF3xsGbR2W87h7ibeGayaGP9wUBq0gy73PROlKXh\r\nAfcAp2MmqzdMQDZ1mEIoHV3m7bpSF3klye0=\r\n=C5Ml\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGZpCBkT6OFIitfAquWhmK0XCDXnTHBV+SO46d45OlSEAiEAnp4YTPtntIOfp4OikU5CZfuH6dRTVcir4c7oenTQaXg="}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_2.0.2_1645589716160_0.31433125186049904"},"_hasShrinkwrap":false},"2.0.3":{"name":"sg-resource","version":"2.0.3","description":"> Front-end network resource management tool.","main":"dist/cjs/index.js","module":"dist/es/index.js","scripts":{"dev":"rollup -c -w","prebuild":"rm -rf dist","build":"cross-env NODE_ENV=production rollup -c","link":"npm unlink && npm link","prepublish":"npm run build","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"MIT","types":"./dist/es/packages/index.d.ts","dependencies":{"axios":"^0.21.1","md5":"^2.3.0","miniprogram-api-typings":"^3.4.4","reflect-metadata":"^0.1.13","tslib":"^2.3.1"},"devDependencies":{"@types/jest":"^26.0.24","@types/md5":"^2.3.1","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","rollup":"^2.56.2","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.3","typescript":"^4.2.3"},"gitHead":"7dd24b75698f31b63b08c210823b178910818bd4","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@2.0.3","_nodeVersion":"16.13.2","_npmVersion":"8.1.2","dist":{"integrity":"sha512-IDTkCCdQAv5CA7YHtDXV6J72nsFUUVmSfLoE79dAT5NTGjU4sWslD9VEBIBAnLwy4dtg6hgz3MzSB26g3LLCGw==","shasum":"662a37d13054694fda96c0fe30ef9b458f825837","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-2.0.3.tgz","fileCount":37,"unpackedSize":83705,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiFv0BACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmprGw//dxxGaNmCQxAHJ2q/BqbSLA8K3bvBBXZUBna1JSbotY/KmtwE\r\nTRXU0D9KeIaKbTuiddQMNzYuFHu4lxdRD7AmGimbRk/9o0KIaAkBkWVrxhd8\r\nAb/tCVPG/fy4pyFWKabDARKGOCFaytZCPVU7oRpDGKNJ+M7bj/9BsOgLq3rP\r\ni/tLGH1D2zf9n6ticOX9xe0l8QOrl6J6dm4ZoHq6IrOwJXQWYuPJG3tGEzDi\r\nuJZrJ4rqw2gygpFaF72E8z149Xnyk4N4DDKE7KMPRQtynsnwm2WB6zgk5QTM\r\n6FORHekMSIYBXSqLfIL3Yf3Xj5Hr75TXFh4gwF4SsBBZU5gObWy5aeIIPef1\r\n2/dMVKq2GinLPGfPvJx+qlQBe0773zQXHP90VMeXWo409pg9vG/TcwbcEwes\r\nJGaCB7eoVEsIV1LYokZ/R1HNHoaypORcFWkvt5g4K8eJvccyuYKEWZ4yS9vl\r\nHhaZRz+RvcAxal5aqI34GpbOXzM8Ud2YaoOSf07MFL/f5PZ9ubOaGunl5KBf\r\nDQ4a1118SHYFHUTPGhaAYhFMbF49MoGcVRmI7eaJWT5hag9l/N7/QcjVug1X\r\nBakSlyhSXpLT4EosDc4KYEQ/FQ0rgoKK1uKRbEFEEKaVu8uVG42HM5Vvhxhu\r\nnnXHgwtIBTl0uCpCzayqKldJbueuSOelznA=\r\n=Slmj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQClrRc0cIrvQA5JIaU3Vf5sfuq+yuZT/U/o9CCys+0YkAIhAPSWCQMWOtUY3UvbzTtB8hr58Y0+pdg0LhcYaTr2lBGA"}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_2.0.3_1645673728992_0.16144474241980977"},"_hasShrinkwrap":false},"2.0.4":{"name":"sg-resource","version":"2.0.4","description":"> Front-end network resource management tool.","main":"dist/cjs/index.js","module":"dist/es/index.js","scripts":{"dev":"rollup -c -w","prebuild":"rm -rf dist","build":"cross-env NODE_ENV=production rollup -c","link":"npm unlink && npm link","prepublish":"npm run build","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"MIT","types":"./dist/es/packages/index.d.ts","dependencies":{"axios":"^0.21.1","md5":"^2.3.0","miniprogram-api-typings":"^3.4.4","reflect-metadata":"^0.1.13","tslib":"^2.3.1"},"devDependencies":{"@types/jest":"^26.0.24","@types/md5":"^2.3.1","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","rollup":"^2.56.2","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.3","typescript":"^4.2.3"},"gitHead":"2b0a27712f390ab7ecf21dfa1c2190e8fa151001","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@2.0.4","_nodeVersion":"16.13.2","_npmVersion":"8.1.2","dist":{"integrity":"sha512-C/XrrYxCGvyfZBwv5UyZt9eOUGoP19D16p/F6SMlCFBGsdnuUj76N0j9eKMh0LCKv6WqfcsbbI8yo6RbfCJ3ig==","shasum":"10c7f516a1d0611ba0e08f2580adce3fdf75835a","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-2.0.4.tgz","fileCount":37,"unpackedSize":83618,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiFv6xACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq20RAAhKqzNfKKKral8bFWMaIu5NeABDNeifdrb44/gyIsu2Kx3fZl\r\n4fIvMfYEgpFyykVeGWUdeVUtlBolavRywXcisnsHxqyQgq9aso7a0wqiA1bb\r\nSdI/JZ3hp2V2cCy/TVHv22LG9xN8Gu6XyjetuOfTepg4Rth8uvb2XP2cNUts\r\nvDV6bFQTuE9xNKbbB9rJ2urUZw3QfFkPCzVRjCcXbosgehLIbGDPkMihnOYb\r\nUUma0eO39u/gSQZV/pQSnQm9NTBSivucZ0xFttf4V/mGNraoIqqt1Vl755cH\r\nup2t6yGZsC2dVtaF7S1X1R5wxV65SFWMadSOuGSdQ0ZWDfyD8pwqTiZQb3XC\r\nQy3vUYBHAtDCdg0eG5B58GlalpZHPtF2AgXjxCzztjW4ccF0e3W5ol2GXDtl\r\nfrWWLZapvCKjTww7aI097l7JftHt1jh3TI/sHj8bSewlJfBnFWP9TVQTN3br\r\neKMmfuHL/baoERKBjaut+lcRTnMYjNIuZsZH8zZmS13IqrC4nwV7QSBGciIA\r\nP9epyeaJHkLQVJEightBTcVAEvxVi2IKK3jigVvepHc1MlvcqgFOUUfBhIDy\r\nzIVcYl1k/oLqIqcqOtUs7BfHKdPdmI/1Sic68mS1ELIRYmWd5TEydcY5jdL7\r\nhOCmCYMFj297OrbcGhG259ZMuf0EHwcaDSg=\r\n=Qxfz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCWUg8ngwAvo0NBO54jEiQWnvTcN5J3YqfCaw1Llgnw/QIgRMztNiK51bgnGGmERlvy5xu46stlL99nhhHkesH+qgw="}]},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_2.0.4_1645674161741_0.0073979789877240965"},"_hasShrinkwrap":false},"1.0.22":{"name":"sg-resource","version":"1.0.22","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持Vue、React，支持 SSR。","main":"dist/cjs/index.js","module":"dist/es/index.js","scripts":{"dev":"rollup -c -w","build":"cross-env NODE_ENV=production rollup -c","link":"npm unlink && npm link","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"MIT","types":"./dist/es/index.d.ts","dependencies":{"axios":"^0.21.1","reflect-metadata":"^0.1.13"},"devDependencies":{"@types/jest":"^26.0.24","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","rollup":"^2.56.2","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.3","typescript":"^4.2.3"},"gitHead":"b1b7dcdca8afe4fcbd2750ec95f3db0d8b117166","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@1.0.22","_nodeVersion":"16.13.2","_npmVersion":"8.1.2","dist":{"integrity":"sha512-Yntb/MlF69aKt6uuYwaSFhzzeY4s91OPbahdV3+JXIxXFeyrIIW4PRboO9g5SRdNeiqULLJfEv0CZsjuX3SRrA==","shasum":"713c283f1f468dd2c46b8d3fa7c17a82bb57b496","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-1.0.22.tgz","fileCount":36,"unpackedSize":83500,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCDLZJtJ/+2O6wcghVKADwiU6mzRqux1+HJ+jNYgEdy5gIhAKRZ2wOjkRj7/WTL9MxzWCfbQ1ocdVsgeLOroU30dt9a"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJihN4TACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr8ahAAhZdX6thg6ReQ0Ac2P9XxwYPcRUZrR+LtUp6WaUXoIf2dUrnq\r\nEWB/QNgTS+vYHHc++2ROXPLLCoWDs1qZbGkofb6MVx4TleRptAklEYkXtPKx\r\nexAe2yopLnMSBKyK32eDtW44ktmHsGjzf5+0NqDOxx41HeAE0/O5kc8TgtkG\r\naD+28oLhBH+7tGOXMAMy17jKbgfwGD1pCgIQTKyQxcxD/j0nwBkk3/vab9gt\r\nmDoiT+A4ogZXnaRwxw4g6AGIVXhd9B+Pn9NjM1i5uz6R0RCblW4gZKSaTgFg\r\n7ybIzddhXBTWg04ojPYx+MH65VAPDu+gkSFbKwEOEmzTou3aoCspHwZ1ZvUU\r\n5t/0R/ah2auWyqf4MsCpSfe6oG46XJEO6LiOvOLWUolIZJ/sVtVvHzDZ4asV\r\nC9uWybmMWGJqO6WASx+NsGwXIBDfKS032qvngbqsSEubvmBP020hfp1C4Wtd\r\nnyKNj2qT7c5QM149SYrkV+RxqaCEuw5YgByEfzedcVPekDiryi6Ab2Gz/+8h\r\nwm5rS2kvZO0dXJfg0NPzZT0lIgQGPiMZogxnevyxu2wtxmgbHBYGF9FKvJTT\r\n3YOKU2vMY5JKjOAilamUkn2aiJJF3W4Z22TBM8N8CXHuMVqdtf8JWbIJgGf9\r\nbAQfIP3VDKs0YX7OnFnR2JRCd2pSqGqXMWo=\r\n=D40y\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_1.0.22_1652874770930_0.29022656924255763"},"_hasShrinkwrap":false},"1.0.23":{"name":"sg-resource","version":"1.0.23","description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持Vue、React，支持 SSR。","main":"dist/cjs/index.js","module":"dist/es/index.js","scripts":{"dev":"rollup -c -w","build":"cross-env NODE_ENV=production rollup -c","link":"npm unlink && npm link","test":"jest"},"repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"keywords":["service","http","resource","network","web"],"author":"","license":"MIT","types":"./dist/es/index.d.ts","dependencies":{"axios":"^0.21.1","reflect-metadata":"^0.1.13"},"devDependencies":{"@types/jest":"^26.0.24","@types/node":"^16.4.7","@typescript-eslint/eslint-plugin":"^4.28.5","@typescript-eslint/parser":"^4.28.5","eslint":"^7.31.0","eslint-config-airbnb":"^18.2.1","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","jest":"^27.0.6","prettier":"^2.3.2","rollup":"^2.56.2","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.3","typescript":"^4.2.3"},"gitHead":"b1b7dcdca8afe4fcbd2750ec95f3db0d8b117166","bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"},"homepage":"https://github.com/seanyujc/sg-resource#readme","_id":"sg-resource@1.0.23","_nodeVersion":"16.13.2","_npmVersion":"8.1.2","dist":{"integrity":"sha512-YYqg3BzGbVK7N95UYNzZolz5W/V9Xl3e90nev99hoygxTeJ0jtKrEDBIMKOEHSKWZYzFG1LGGajLQ+n6ETWWeQ==","shasum":"a853bc03d84aea030256af684231d7533a5cda23","tarball":"https://registry.npmjs.org/sg-resource/-/sg-resource-1.0.23.tgz","fileCount":14,"unpackedSize":53718,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID5Fy1zbjqxPDSFcyO4M15Yyb3ANsG52HhJqH5EalYmqAiBEbqYahDuav7sTBfV+QGoAsA+N98abBnwxT7PadYZ9fg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJihOKMACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrloRAAm1aV1pj1jy2DLJ9NwUIoye5Q50g7HEHMVsgqvzIwylE4AyVs\r\nOo+FYF1rQ9MlSmaMXOd3rHY4ww+7XYa/yvswcBTRtMEqNlV3oGa3yKzHwvoK\r\niVuBi0rBXmU8lCEtFZm5ErldKGBmV/BSsYBIa55hNipc0mGV9Usag6LJPfl8\r\nQw5CZ4qqTTHqr/ojG08M14euwFny5T37PJ+zvTXc9/JXrO9AK0QWvKUe1HzW\r\nnJgQ/73soRpVKxBoF+RZ6UtjIdMmFa6Mt3I9HM663y/HOE8VOp0GRcuao4wc\r\nA48FOW2FgkAdlZatwSebzS5H0B3Bn4XNdsZZjywvGkIys1w56rXyA7RtpS5W\r\n6td1/cPTF4Ny1gm5mdZ58B0eJwqXdXCATkrMQEHKeElmNSzbB6SI9SwS4azP\r\nKR88erhOR9LW4jQNwgWW/cJUfbrGhB1w5f76rLzOwsXtOLL5rr43RJwgYr9P\r\nPbEM6m2mWmz05BxqcAtQga62ky2eFqaFaS6tABiU+U6JVhfq089WB4k8JwFD\r\nY27nyodkCMNeXwRblRdhVlWu/aAVSvr9jdPQQsMk4xTleflJs4uEXqvbFu7c\r\nTXQgkj5U+WHWR07KkmxnAalQvrn7w1UVVJ7ANa4pypIZJAQFtsv4klaBFbK4\r\nWtyp41M8B6K4FSDOQr3AP7kG3+ZWosFC4Wc=\r\n=RoMU\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"seage","email":"sean@seage.net"},"directories":{},"maintainers":[{"name":"seage","email":"sean@seage.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sg-resource_1.0.23_1652875916260_0.7469942030243211"},"_hasShrinkwrap":false}},"maintainers":[{"email":"sean@seage.net","name":"jcyu"}],"description":"> 一个网络资源管理工具。使用 HTTP 协议请求，支持Vue、React，支持 SSR。","keywords":["service","http","resource","network","web"],"license":"MIT","readme":"# sg-resource\n\n> 一个网络资源管理工具。使用 HTTP 协议请求，支持Vue、React，支持 SSR。\n\n## 安装\n\n```bash\nnpm i sg-resource\n```\n\n## 信息管理\n\n### 服务站点管理\n\n* system字段可配置多个环境（DEV、SIT、UAT、PROD等），\"env\"字段指定环境（必填），使用 runtime 字段选择其中一个环境。在每个环境里通过hosts字典配置多个服务地址，各环境hosts字典的key保持一致。\n\n```js\n// site.config.js\n// @ts-check\n/// <reference path=\"../typings/global.d.ts\" />\n(function() {\n  const /** @type {import(\"sg-resource\").ISiteConfig} */ SITE_CONFIG = {\n    system: [{\n      env: \"DEV\",\n      remote: {\n        hosts: {\n          user: \"http://127.0.0.1:8080/web-api\",\n        },\n      },\n      local: {},\n      entrance: \"\",\n    }, {\n      env: \"SIT\",\n      remote: {\n        hosts: {\n          user: \"http://127.0.0.1:8080/web-api\",\n        },\n      },\n      local: {},\n      entrance: \"\",\n    }, ],\n    runtime: \"DEV\",\n  };\n\n  // 通过全局get方法导出\n  if (typeof window === \"object\") {\n    window.getSiteConfig = () => SITE_CONFIG;\n  }\n  if (typeof global === \"object\") {\n    global.getSiteConfig = () => SITE_CONFIG;\n  }\n  if (typeof module === \"object\") {\n    module.exports = {\n      SITE_CONFIG\n    };\n  }\n\n})();\n```\n\n* system元素各字段配置的详情\n\n```ts\n/**\n * 某一个站点配置\n */\nexport interface ISite {\n  /**\n   * 环境标识\n   */\n  env: \"DEV\" | \"SIT\" | \"UAT\" | \"PROD\";\n  /**\n   * 远端服务器配置\n   */\n  remote: {\n    /**\n     * 服务器地址列表\n     */\n    hosts: Record<string, IHost | string>;\n    /**\n     * 默认协议，服务器地址中不设置可继承该设置\n     */\n    protocol?: string;\n  };\n  /**\n   * 本地服务器配置\n   */\n  local: {\n    /**\n     * 协议\n     */\n    protocol?: string;\n    /**\n     * 主机域名或ip地址\n     */\n    hostname?: string;\n    /**\n     * 端口占用\n     */\n    port?: number;\n    /**\n     * 发布路径\n     */\n    publicPath?: string;\n    /**\n     * 附件路径，可以是本地服务目录，或远程地址\n     */\n    assetsPath?: string;\n  };\n  /**\n   * 自定义\n   */\n  custom?: Record<string, any>;\n  /**\n   * 第三方登录入口\n   */\n  entrance?: string;\n  /**\n   * 统计服务地址\n   */\n  sensor?: string;\n  /**\n   * 接口加密盐\n   */\n  salt?: string;\n}\n/**\n * 主机信息对象\n * */\ninterface IHost {\n  url: string;\n  /**\n   * 配合web server解决跨域，地址的域信息部分将被替换为客户端地址。\n   */\n  cors?: boolean;\n}\n```\n\n* site.config.js引入方式：\n1) 在CSR当作静态资源引入\n\n```html\n<script src=\"/public/site.config.js\"></script>\n```\n\n2) 在SSR模块式引入\n\n```js\n// js\nconst {\n  SITE_CONFIG\n} = require(\"./config/site.config\");\nconst currentConfig = SITE_CONFIG.system.find(\n  (item) => item.env === SITE_CONFIG.runtime,\n);\n```\n\n```ts\n// ts\nimport \"../config/site.config\";\nlet siteConfig: ISiteConfig = {\n  system: [],\n  runtime: \"DEV\"\n};\n\nif (getSiteConfig) {\n  siteConfig = getSiteConfig();\n}\n\nconst config = siteConfig.system.find(\n  (item) => item.env === siteConfig.runtime,\n);\n\n```\n\n### <a name=\"api_mgt\">接口配置管理</a>\n\n使用 host 字段选择服务目标（使用泛型约束）\n\n```ts\n// api.config.ts\nexport const apiConfig: IApiConfig<\"user\"> = {\n  post: {\n    login: { host: \"user\", path: \"/login\" },\n  },\n  get: {},\n};\n```\n\n### 访问接口\n\n创建一个基础类并继承基础类\n\n* 创建基础类在构造方法中调用初始化方法初始化 sg-resource，自定义 ResultInfo 对象用来描述接口返回数据的包装类 \n\n```js\n// base.serv.ts\nimport {\n  apiConfig\n} from \"@/app/config/api.config\";\nimport {\n  ISiteConfig,\n  ProxyHttp,\n  SGResource\n} from \"sg-resource\";\nimport {\n  ResultInfo\n} from \"../domain/ResultInfo\";\n\nexport class BaseService {\n  proxyHttp: ProxyHttp;\n  constructor() {\n    this.proxyHttp = SGResource.ensureInitialized(getSiteConfig(), apiConfig, {\n      headers: () => {\n        const headers: any = {};\n        let token = \"88\";\n\n        if (token) {\n          headers[\"accessToken\"] = token;\n        }\n        return headers;\n      },\n      diagnoseResponse: (config) => {\n        if (config.data) {\n          const result: ResultInfo = config.data;\n\n          if (result.status === 0) {\n            config.data = result.data;\n          }\n        }\n        return config;\n      },\n    });\n  }\n}\n```\n\n* 继承基础类后使用this.proxyHttp对象中的方法得到服务能力，参数apiKey对应<a href=\"#api_mgt\">接口配置管理</a>中的key定义\n\n```ts\n// user.serv.ts\nimport { BaseService } from \"./base.serv\";\n\nexport class UserService extends BaseService {\n  constructor() {\n    super();\n  }\n  login(userName: string, password: string): Promise<any> {\n    return this.proxyHttp.post(\"login\", { userName, password });\n  }\n}\n```\n\n### 使用service类\n\n```ts\n// 在你需要的\nconst userService = new UserService();\nuserService.login(\"sean\", \"666666\").then(data=>{\n  // store info of user and to home\n}).catch(console.log);\n```\n\n### 在ts中你可能需要添加类型定义\n\n```ts\n// global.d.ts\nimport { ISiteConfig } from \"sg-resource\";\n\ndeclare global {\n  interface Window {\n    getSiteConfig?: () => ISiteConfig;\n  }\n  const getSiteConfig: (() => ISiteConfig) | undefined;  \n\n   namespace NodeJS {\n    interface Global {\n        getSiteConfig?: () => ISiteConfig;\n    }\n  }\n}\n\n```\n\n## 接口文档\n\n* 主机配置管理\n* 接口配置管理\n* 初始化方法\n* http 请求代理\n\n### 主机配置\n\n#### # remote\n\n* 类型：{ hosts: { [key: string]: string | { url: string; cors?: boolean }}; protocol?: string }\n* 详细：remote 用于配置接口服务器的访问地址、首路径。hosts 字段用于配置一组主机地址，一般对应一个服务，map 类型，其 key 用于检索识别主机，value 类型可以是字符串或对象。当为字符串时应符合 URI 规范，形式如下：\n\n```\nURI = scheme:[//authority]path\n```\n\n```\nauthority = [userinfo@]host[:port]\n```\n\n可以将 authority 置空，仅保留“//”，则表示使用客户端域名和端口，用以解决 CORS。  \n当是对象时，可使用 cors 字段明确标记此地址客户端 cors 解决方案为弃用配置的域，改为本地域，url 可写全，在符合规范的前提下 authority 内容可随意填充。  \nprotocol 字段可选为全局设置协议，当设置了此字段后可以不设置 host 的 url 的协议部分，会继承全局协议，如：“//10.0.0.1:8080/user-api/”\n\n* 示例：\n\n```js\n{\n  remote: {\n    hosts: {\n      user: {\n        url: \"//10.0.0.1:8080/user-api\",\n        cors: true\n      },\n      support: \"https://10.0.0.1:8080/support-api\",\n    },\n  }\n}\n```\n\n#### # local\n\n* 类型：{ protocol?: string; hostname?: string; port?: number; publicPath: string }\n* 详细：local 为开发服务器或服务器端渲染服务器配置本地域名、端口、发布目录。\n\n### 接口配置\n\n#### # post\n\n* 类型：{ [key: string]: { host: string; path: string } }\n* 详细：post 定义为 http 的一组 post 请求。为 map 类型，key 用于检索，value 类型为对象，其 host 字段为主机配置中的 hosts 对象的 key，用于选取接口主机地址；path 字段为此接口服务内部访问路径。\n* 示例：\n\n```js\npost: {\n  login: {\n    host: \"user\",\n    path: \"/login\"\n  },\n},\n```\n\n另有 get、put、delete、form、modules 配置与 post 类似就不做赘述\n\n### 初始化方法\n\n初始化并返回一个 ProxyHttp 对象实例。\n\n#### # SGResource.ensureInitialized(apiConfig: IApiConfig, siteConfig: ISiteConfig, options?: IInterceptorsOptions): ProxyHttp; \n\n可选项定义：\n\n```js\nIInterceptorsOptions {\n  /**\n   * 自定义请求头\n   */\n  headers ? : () => Record < string, string | null > ;\n  /**\n   * 返回值拦截处理\n   */\n  diagnoseResponse ? : (config: AxiosResponse < any > ) => AxiosResponse < any > ;\n}\n```\n\n#### ProxyHttp 对象的实例方法：\n\n#### # post(apiKey: string; params?: { [key: string]: string }; pathParams?: string[]; options: { headers?: any } = {})\n\n* 示例：\n\n```js\nlogin(userName: string, password: string): Promise < any > {\n  return this.proxyHttp.post(\"login\", {\n    userName,\n    password\n  });\n}\n```\n\n* 实例方法定义\n\n```ts\n/**\n * 代理get请求\n * @param apiKey config定义的接口名\n * @param params 请求参数\n * @param pathParams 路径参数\n * @param options 可选参数，包括请求头参数\n */\nget(apiKey: string, params?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理post请求\n * @param apiKey config定义的接口\n * @param data 请求参数\n * @param pathParams 路径参数\n * @param options 可选参数，包括请求头参数\n */\npost(apiKey: string, data?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理delete请求\n * @param api config定义的接口\n * @param pathParams 请求参数\n */\ndelete(apiKey: string, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 代理put请求\n * @param apiKey config定义的接口名\n * @param data 请求参数\n */\nput(apiKey: string, data?: any, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 表单提交\n * @param api 接口\n * @param form 表单对象\n */\nform(apiKey: string, form: FormData, pathParams?: string[], options?: {\n    headers?: any;\n}): Promise<any>;\n/**\n * 通过网络协议获取一组文件对象\n * @param urls 文件url列表\n * @param options 可选参数，包括请求头参数\n */\ngetFiles(urls: string[], options?: {\n    headers?: any;\n}): Promise<File[]>;\n\n```\n","readmeFilename":"README.md","homepage":"https://github.com/seanyujc/sg-resource#readme","repository":{"type":"git","url":"git+https://github.com/seanyujc/sg-resource.git"},"bugs":{"url":"https://github.com/seanyujc/sg-resource/issues"}}