feat: Added predictions from Peter Wildeford
- Wildeford, née Hurford - Also removed node_modules from tracking
This commit is contained in:
parent
c573c1a2a6
commit
d1c41f4c01
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,5 +1,6 @@
|
||||||
## Node modules
|
## Node modules
|
||||||
node_modules/
|
node_modules/
|
||||||
|
node_modules/*
|
||||||
|
|
||||||
## Security
|
## Security
|
||||||
**/betfaircertificates/
|
**/betfaircertificates/
|
||||||
|
|
1
node_modules/.bin/is-docker
generated
vendored
1
node_modules/.bin/is-docker
generated
vendored
|
@ -1 +0,0 @@
|
||||||
../is-docker/cli.js
|
|
1
node_modules/.bin/json2csv
generated
vendored
1
node_modules/.bin/json2csv
generated
vendored
|
@ -1 +0,0 @@
|
||||||
../json2csv/bin/json2csv.js
|
|
936
node_modules/.package-lock.json
generated
vendored
936
node_modules/.package-lock.json
generated
vendored
|
@ -1,936 +0,0 @@
|
||||||
{
|
|
||||||
"name": "metaforecasts",
|
|
||||||
"version": "0.3.0",
|
|
||||||
"lockfileVersion": 2,
|
|
||||||
"requires": true,
|
|
||||||
"packages": {
|
|
||||||
"node_modules/@algolia/cache-browser-local-storage": {
|
|
||||||
"version": "4.10.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.10.3.tgz",
|
|
||||||
"integrity": "sha512-TD1N7zg5lb56/PLjjD4bBl2eccEvVHhC7yfgFu2r9k5tf+gvbGxEZ3NhRZVKu2MObUIcEy2VR4LVLxOQu45Hlg==",
|
|
||||||
"dependencies": {
|
|
||||||
"@algolia/cache-common": "4.10.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@algolia/cache-common": {
|
|
||||||
"version": "4.10.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.10.3.tgz",
|
|
||||||
"integrity": "sha512-q13cPPUmtf8a2suBC4kySSr97EyulSXuxUkn7l1tZUCX/k1y5KNheMp8npBy8Kc8gPPmHpacxddRSfOncjiKFw=="
|
|
||||||
},
|
|
||||||
"node_modules/@algolia/cache-in-memory": {
|
|
||||||
"version": "4.10.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.10.3.tgz",
|
|
||||||
"integrity": "sha512-JhPajhOXAjUP+TZrZTh6KJpF5VKTKyWK2aR1cD8NtrcVHwfGS7fTyfXfVm5BqBqkD9U0gVvufUt/mVyI80aZww==",
|
|
||||||
"dependencies": {
|
|
||||||
"@algolia/cache-common": "4.10.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@algolia/client-account": {
|
|
||||||
"version": "4.10.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.10.3.tgz",
|
|
||||||
"integrity": "sha512-S/IsJB4s+e1xYctdpW3nAbwrR2y3pjSo9X21fJGoiGeIpTRdvQG7nydgsLkhnhcgAdLnmqBapYyAqMGmlcyOkg==",
|
|
||||||
"dependencies": {
|
|
||||||
"@algolia/client-common": "4.10.3",
|
|
||||||
"@algolia/client-search": "4.10.3",
|
|
||||||
"@algolia/transporter": "4.10.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@algolia/client-analytics": {
|
|
||||||
"version": "4.10.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.10.3.tgz",
|
|
||||||
"integrity": "sha512-vlHTbBqJktRgclh3v7bPQLfZvFIqY4erNFIZA5C7nisCj9oLeTgzefoUrr+R90+I+XjfoLxnmoeigS1Z1yg1vw==",
|
|
||||||
"dependencies": {
|
|
||||||
"@algolia/client-common": "4.10.3",
|
|
||||||
"@algolia/client-search": "4.10.3",
|
|
||||||
"@algolia/requester-common": "4.10.3",
|
|
||||||
"@algolia/transporter": "4.10.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@algolia/client-common": {
|
|
||||||
"version": "4.10.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.10.3.tgz",
|
|
||||||
"integrity": "sha512-uFyP2Z14jG2hsFRbAoavna6oJf4NTXaSDAZgouZUZlHlBp5elM38sjNeA5HR9/D9J/GjwaB1SgB7iUiIWYBB4w==",
|
|
||||||
"dependencies": {
|
|
||||||
"@algolia/requester-common": "4.10.3",
|
|
||||||
"@algolia/transporter": "4.10.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@algolia/client-personalization": {
|
|
||||||
"version": "4.10.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.10.3.tgz",
|
|
||||||
"integrity": "sha512-NS7Nx8EJ/nduGXT8CFo5z7kLF0jnFehTP3eC+z+GOEESH3rrs7uR12IZHxv5QhQswZa9vl925zCOZDcDVoENCg==",
|
|
||||||
"dependencies": {
|
|
||||||
"@algolia/client-common": "4.10.3",
|
|
||||||
"@algolia/requester-common": "4.10.3",
|
|
||||||
"@algolia/transporter": "4.10.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@algolia/client-search": {
|
|
||||||
"version": "4.10.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.10.3.tgz",
|
|
||||||
"integrity": "sha512-Zwnp2G94IrNFKWCG/k7epI5UswRkPvL9FCt7/slXe2bkjP2y/HA37gzRn+9tXoLVRwd7gBzrtOA4jFKIyjrtVw==",
|
|
||||||
"dependencies": {
|
|
||||||
"@algolia/client-common": "4.10.3",
|
|
||||||
"@algolia/requester-common": "4.10.3",
|
|
||||||
"@algolia/transporter": "4.10.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@algolia/logger-common": {
|
|
||||||
"version": "4.10.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.10.3.tgz",
|
|
||||||
"integrity": "sha512-M6xi+qov2bkgg1H9e1Qtvq/E/eKsGcgz8RBbXNzqPIYoDGZNkv+b3b8YMo3dxd4Wd6M24HU1iqF3kmr1LaXndg=="
|
|
||||||
},
|
|
||||||
"node_modules/@algolia/logger-console": {
|
|
||||||
"version": "4.10.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.10.3.tgz",
|
|
||||||
"integrity": "sha512-vVgRI7b4PHjgBdRkv/cRz490twvkLoGdpC4VYzIouSrKj8SIVLRhey3qgXk7oQXi3xoxVAv6NrklHfpO8Bpx0w==",
|
|
||||||
"dependencies": {
|
|
||||||
"@algolia/logger-common": "4.10.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@algolia/requester-browser-xhr": {
|
|
||||||
"version": "4.10.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.10.3.tgz",
|
|
||||||
"integrity": "sha512-4WIk1zreFbc1EF6+gsfBTQvwSNjWc20zJAAExRWql/Jq5yfVHmwOqi/CajA53/cXKFBqo80DAMRvOiwP+hOLYw==",
|
|
||||||
"dependencies": {
|
|
||||||
"@algolia/requester-common": "4.10.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@algolia/requester-common": {
|
|
||||||
"version": "4.10.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.10.3.tgz",
|
|
||||||
"integrity": "sha512-PNfLHmg0Hujugs3rx55uz/ifv7b9HVdSFQDb2hj0O5xZaBEuQCNOXC6COrXR8+9VEfqp2swpg7zwgtqFxh+BtQ=="
|
|
||||||
},
|
|
||||||
"node_modules/@algolia/requester-node-http": {
|
|
||||||
"version": "4.10.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.10.3.tgz",
|
|
||||||
"integrity": "sha512-A9ZcGfEvgqf0luJApdNcIhsRh6MShn2zn2tbjwjGG1joF81w+HUY+BWuLZn56vGwAA9ZB9n00IoJJpxibbfofg==",
|
|
||||||
"dependencies": {
|
|
||||||
"@algolia/requester-common": "4.10.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@algolia/transporter": {
|
|
||||||
"version": "4.10.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.10.3.tgz",
|
|
||||||
"integrity": "sha512-n1lRyKDbrckbMEgm7QXtj3nEWUuzA3aKLzVQ43/F/RCFib15j4IwtmYhXR6OIBRSc7+T0Hm48S0J6F+HeYCQkw==",
|
|
||||||
"dependencies": {
|
|
||||||
"@algolia/cache-common": "4.10.3",
|
|
||||||
"@algolia/logger-common": "4.10.3",
|
|
||||||
"@algolia/requester-common": "4.10.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@sindresorhus/is": {
|
|
||||||
"version": "2.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-2.1.1.tgz",
|
|
||||||
"integrity": "sha512-/aPsuoj/1Dw/kzhkgz+ES6TxG0zfTMGLwuK2ZG00k/iJzYHTLCE8mVU8EPqEOp/lmxPoq1C1C9RYToRKb2KEfg==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@szmarczak/http-timer": {
|
|
||||||
"version": "4.0.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz",
|
|
||||||
"integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==",
|
|
||||||
"dependencies": {
|
|
||||||
"defer-to-connect": "^2.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@types/cacheable-request": {
|
|
||||||
"version": "6.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz",
|
|
||||||
"integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==",
|
|
||||||
"dependencies": {
|
|
||||||
"@types/http-cache-semantics": "*",
|
|
||||||
"@types/keyv": "*",
|
|
||||||
"@types/node": "*",
|
|
||||||
"@types/responselike": "*"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@types/http-cache-semantics": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz",
|
|
||||||
"integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A=="
|
|
||||||
},
|
|
||||||
"node_modules/@types/keyv": {
|
|
||||||
"version": "3.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz",
|
|
||||||
"integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==",
|
|
||||||
"dependencies": {
|
|
||||||
"@types/node": "*"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@types/node": {
|
|
||||||
"version": "14.14.28",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.28.tgz",
|
|
||||||
"integrity": "sha512-lg55ArB+ZiHHbBBttLpzD07akz0QPrZgUODNakeC09i62dnrywr9mFErHuaPlB6I7z+sEbK+IYmplahvplCj2g=="
|
|
||||||
},
|
|
||||||
"node_modules/@types/responselike": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
|
|
||||||
"integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==",
|
|
||||||
"dependencies": {
|
|
||||||
"@types/node": "*"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/algoliasearch": {
|
|
||||||
"version": "4.10.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.10.3.tgz",
|
|
||||||
"integrity": "sha512-OLY0AWlPKGLbSaw14ivMB7BT5fPdp8VdzY4L8FtzZnqmLKsyes24cltGlf7/X96ACkYEcT390SReCDt/9SUIRg==",
|
|
||||||
"dependencies": {
|
|
||||||
"@algolia/cache-browser-local-storage": "4.10.3",
|
|
||||||
"@algolia/cache-common": "4.10.3",
|
|
||||||
"@algolia/cache-in-memory": "4.10.3",
|
|
||||||
"@algolia/client-account": "4.10.3",
|
|
||||||
"@algolia/client-analytics": "4.10.3",
|
|
||||||
"@algolia/client-common": "4.10.3",
|
|
||||||
"@algolia/client-personalization": "4.10.3",
|
|
||||||
"@algolia/client-search": "4.10.3",
|
|
||||||
"@algolia/logger-common": "4.10.3",
|
|
||||||
"@algolia/logger-console": "4.10.3",
|
|
||||||
"@algolia/requester-browser-xhr": "4.10.3",
|
|
||||||
"@algolia/requester-common": "4.10.3",
|
|
||||||
"@algolia/requester-node-http": "4.10.3",
|
|
||||||
"@algolia/transporter": "4.10.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/axios": {
|
|
||||||
"version": "0.21.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
|
|
||||||
"integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
|
|
||||||
"dependencies": {
|
|
||||||
"follow-redirects": "^1.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/bl": {
|
|
||||||
"version": "2.2.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz",
|
|
||||||
"integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==",
|
|
||||||
"dependencies": {
|
|
||||||
"readable-stream": "^2.3.5",
|
|
||||||
"safe-buffer": "^5.1.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/boolbase": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
|
|
||||||
},
|
|
||||||
"node_modules/bson": {
|
|
||||||
"version": "1.1.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz",
|
|
||||||
"integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.6.19"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/cacheable-lookup": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-2.0.1.tgz",
|
|
||||||
"integrity": "sha512-EMMbsiOTcdngM/K6gV/OxF2x0t07+vMOWxZNSCRQMjO2MY2nhZQ6OYhOOpyQrbhqsgtvKGI7hcq6xjnA92USjg==",
|
|
||||||
"dependencies": {
|
|
||||||
"@types/keyv": "^3.1.1",
|
|
||||||
"keyv": "^4.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/cacheable-request": {
|
|
||||||
"version": "7.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz",
|
|
||||||
"integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==",
|
|
||||||
"dependencies": {
|
|
||||||
"clone-response": "^1.0.2",
|
|
||||||
"get-stream": "^5.1.0",
|
|
||||||
"http-cache-semantics": "^4.0.0",
|
|
||||||
"keyv": "^4.0.0",
|
|
||||||
"lowercase-keys": "^2.0.0",
|
|
||||||
"normalize-url": "^4.1.0",
|
|
||||||
"responselike": "^2.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/cheerio": {
|
|
||||||
"version": "1.0.0-rc.10",
|
|
||||||
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz",
|
|
||||||
"integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==",
|
|
||||||
"dependencies": {
|
|
||||||
"cheerio-select": "^1.5.0",
|
|
||||||
"dom-serializer": "^1.3.2",
|
|
||||||
"domhandler": "^4.2.0",
|
|
||||||
"htmlparser2": "^6.1.0",
|
|
||||||
"parse5": "^6.0.1",
|
|
||||||
"parse5-htmlparser2-tree-adapter": "^6.0.1",
|
|
||||||
"tslib": "^2.2.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 6"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/cheeriojs/cheerio?sponsor=1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/cheerio-select": {
|
|
||||||
"version": "1.5.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz",
|
|
||||||
"integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==",
|
|
||||||
"dependencies": {
|
|
||||||
"css-select": "^4.1.3",
|
|
||||||
"css-what": "^5.0.1",
|
|
||||||
"domelementtype": "^2.2.0",
|
|
||||||
"domhandler": "^4.2.0",
|
|
||||||
"domutils": "^2.7.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/fb55"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/clone-response": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
|
|
||||||
"integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
|
|
||||||
"dependencies": {
|
|
||||||
"mimic-response": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/clone-response/node_modules/mimic-response": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
|
|
||||||
"integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=4"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/commander": {
|
|
||||||
"version": "6.2.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
|
|
||||||
"integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/core-util-is": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
|
||||||
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
|
|
||||||
},
|
|
||||||
"node_modules/css-select": {
|
|
||||||
"version": "4.1.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz",
|
|
||||||
"integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==",
|
|
||||||
"dependencies": {
|
|
||||||
"boolbase": "^1.0.0",
|
|
||||||
"css-what": "^5.0.0",
|
|
||||||
"domhandler": "^4.2.0",
|
|
||||||
"domutils": "^2.6.0",
|
|
||||||
"nth-check": "^2.0.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/fb55"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/css-what": {
|
|
||||||
"version": "5.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz",
|
|
||||||
"integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 6"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/fb55"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/decompress-response": {
|
|
||||||
"version": "5.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-5.0.0.tgz",
|
|
||||||
"integrity": "sha512-TLZWWybuxWgoW7Lykv+gq9xvzOsUjQ9tF09Tj6NSTYGMTCHNXzrPnD6Hi+TgZq19PyTAGH4Ll/NIM/eTGglnMw==",
|
|
||||||
"dependencies": {
|
|
||||||
"mimic-response": "^2.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/defer-to-connect": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.0.tgz",
|
|
||||||
"integrity": "sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/denque": {
|
|
||||||
"version": "1.5.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz",
|
|
||||||
"integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/dom-serializer": {
|
|
||||||
"version": "1.3.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz",
|
|
||||||
"integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==",
|
|
||||||
"dependencies": {
|
|
||||||
"domelementtype": "^2.0.1",
|
|
||||||
"domhandler": "^4.2.0",
|
|
||||||
"entities": "^2.0.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/domelementtype": {
|
|
||||||
"version": "2.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
|
|
||||||
"integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==",
|
|
||||||
"funding": [
|
|
||||||
{
|
|
||||||
"type": "github",
|
|
||||||
"url": "https://github.com/sponsors/fb55"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"node_modules/domhandler": {
|
|
||||||
"version": "4.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz",
|
|
||||||
"integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==",
|
|
||||||
"dependencies": {
|
|
||||||
"domelementtype": "^2.2.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 4"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/fb55/domhandler?sponsor=1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/domutils": {
|
|
||||||
"version": "2.7.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz",
|
|
||||||
"integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==",
|
|
||||||
"dependencies": {
|
|
||||||
"dom-serializer": "^1.0.1",
|
|
||||||
"domelementtype": "^2.2.0",
|
|
||||||
"domhandler": "^4.2.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/fb55/domutils?sponsor=1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/duplexer3": {
|
|
||||||
"version": "0.1.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
|
|
||||||
"integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
|
|
||||||
},
|
|
||||||
"node_modules/end-of-stream": {
|
|
||||||
"version": "1.4.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
|
|
||||||
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
|
|
||||||
"dependencies": {
|
|
||||||
"once": "^1.4.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/entities": {
|
|
||||||
"version": "2.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
|
|
||||||
"integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/fb55/entities?sponsor=1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/follow-redirects": {
|
|
||||||
"version": "1.13.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz",
|
|
||||||
"integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=4.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/fs": {
|
|
||||||
"version": "0.0.1-security",
|
|
||||||
"resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz",
|
|
||||||
"integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ="
|
|
||||||
},
|
|
||||||
"node_modules/get-stream": {
|
|
||||||
"version": "5.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
|
|
||||||
"integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
|
|
||||||
"dependencies": {
|
|
||||||
"pump": "^3.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/got": {
|
|
||||||
"version": "10.7.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/got/-/got-10.7.0.tgz",
|
|
||||||
"integrity": "sha512-aWTDeNw9g+XqEZNcTjMMZSy7B7yE9toWOFYip7ofFTLleJhvZwUxxTxkTpKvF+p1SAA4VHmuEy7PiHTHyq8tJg==",
|
|
||||||
"dependencies": {
|
|
||||||
"@sindresorhus/is": "^2.0.0",
|
|
||||||
"@szmarczak/http-timer": "^4.0.0",
|
|
||||||
"@types/cacheable-request": "^6.0.1",
|
|
||||||
"cacheable-lookup": "^2.0.0",
|
|
||||||
"cacheable-request": "^7.0.1",
|
|
||||||
"decompress-response": "^5.0.0",
|
|
||||||
"duplexer3": "^0.1.4",
|
|
||||||
"get-stream": "^5.0.0",
|
|
||||||
"lowercase-keys": "^2.0.0",
|
|
||||||
"mimic-response": "^2.1.0",
|
|
||||||
"p-cancelable": "^2.0.0",
|
|
||||||
"p-event": "^4.0.0",
|
|
||||||
"responselike": "^2.0.0",
|
|
||||||
"to-readable-stream": "^2.0.0",
|
|
||||||
"type-fest": "^0.10.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/htmlparser2": {
|
|
||||||
"version": "6.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz",
|
|
||||||
"integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==",
|
|
||||||
"funding": [
|
|
||||||
"https://github.com/fb55/htmlparser2?sponsor=1",
|
|
||||||
{
|
|
||||||
"type": "github",
|
|
||||||
"url": "https://github.com/sponsors/fb55"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"dependencies": {
|
|
||||||
"domelementtype": "^2.0.1",
|
|
||||||
"domhandler": "^4.0.0",
|
|
||||||
"domutils": "^2.5.2",
|
|
||||||
"entities": "^2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/http-cache-semantics": {
|
|
||||||
"version": "4.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
|
|
||||||
"integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ=="
|
|
||||||
},
|
|
||||||
"node_modules/https": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-PDfHrhqO65ZpBKKtHpdaGUt+06Q="
|
|
||||||
},
|
|
||||||
"node_modules/inherits": {
|
|
||||||
"version": "2.0.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
|
||||||
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
|
|
||||||
},
|
|
||||||
"node_modules/is-docker": {
|
|
||||||
"version": "2.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz",
|
|
||||||
"integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==",
|
|
||||||
"bin": {
|
|
||||||
"is-docker": "cli.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/is-wsl": {
|
|
||||||
"version": "2.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
|
|
||||||
"integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
|
|
||||||
"dependencies": {
|
|
||||||
"is-docker": "^2.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/isarray": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
|
|
||||||
},
|
|
||||||
"node_modules/isomorphic-fetch": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz",
|
|
||||||
"integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==",
|
|
||||||
"dependencies": {
|
|
||||||
"node-fetch": "^2.6.1",
|
|
||||||
"whatwg-fetch": "^3.4.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/json-buffer": {
|
|
||||||
"version": "3.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
|
|
||||||
"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
|
|
||||||
},
|
|
||||||
"node_modules/json2csv": {
|
|
||||||
"version": "5.0.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/json2csv/-/json2csv-5.0.5.tgz",
|
|
||||||
"integrity": "sha512-/UyvnfuUghRM+C/AiQ02X0LS+/AKfugcwaWo/gAz1pi203v29sUMrMSNEC088i+h0EG39eSsmeL9Z0iK+9MM0A==",
|
|
||||||
"dependencies": {
|
|
||||||
"commander": "^6.1.0",
|
|
||||||
"jsonparse": "^1.3.1",
|
|
||||||
"lodash.get": "^4.4.2"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"json2csv": "bin/json2csv.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10",
|
|
||||||
"npm": ">= 6.13.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/jsonparse": {
|
|
||||||
"version": "1.3.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
|
|
||||||
"integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
|
|
||||||
"engines": [
|
|
||||||
"node >= 0.2.0"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"node_modules/keyv": {
|
|
||||||
"version": "4.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz",
|
|
||||||
"integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==",
|
|
||||||
"dependencies": {
|
|
||||||
"json-buffer": "3.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/lodash.get": {
|
|
||||||
"version": "4.4.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
|
|
||||||
"integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
|
|
||||||
},
|
|
||||||
"node_modules/lowercase-keys": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
|
|
||||||
"integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/memory-pager": {
|
|
||||||
"version": "1.5.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
|
|
||||||
"integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"node_modules/mimic-response": {
|
|
||||||
"version": "2.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz",
|
|
||||||
"integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/mongodb": {
|
|
||||||
"version": "3.6.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.6.tgz",
|
|
||||||
"integrity": "sha512-WlirMiuV1UPbej5JeCMqE93JRfZ/ZzqE7nJTwP85XzjAF4rRSeq2bGCb1cjfoHLOF06+HxADaPGqT0g3SbVT1w==",
|
|
||||||
"dependencies": {
|
|
||||||
"bl": "^2.2.1",
|
|
||||||
"bson": "^1.1.4",
|
|
||||||
"denque": "^1.4.1",
|
|
||||||
"optional-require": "^1.0.2",
|
|
||||||
"safe-buffer": "^5.1.2"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=4"
|
|
||||||
},
|
|
||||||
"optionalDependencies": {
|
|
||||||
"saslprep": "^1.0.0"
|
|
||||||
},
|
|
||||||
"peerDependenciesMeta": {
|
|
||||||
"aws4": {
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"bson-ext": {
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"kerberos": {
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"mongodb-client-encryption": {
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"mongodb-extjson": {
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"snappy": {
|
|
||||||
"optional": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/node-fetch": {
|
|
||||||
"version": "2.6.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
|
|
||||||
"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==",
|
|
||||||
"engines": {
|
|
||||||
"node": "4.x || >=6.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/normalize-url": {
|
|
||||||
"version": "4.5.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz",
|
|
||||||
"integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/nth-check": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz",
|
|
||||||
"integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==",
|
|
||||||
"dependencies": {
|
|
||||||
"boolbase": "^1.0.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/fb55/nth-check?sponsor=1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/once": {
|
|
||||||
"version": "1.4.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
|
||||||
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
|
||||||
"dependencies": {
|
|
||||||
"wrappy": "1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/open": {
|
|
||||||
"version": "7.3.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/open/-/open-7.3.1.tgz",
|
|
||||||
"integrity": "sha512-f2wt9DCBKKjlFbjzGb8MOAW8LH8F0mrs1zc7KTjAJ9PZNQbfenzWbNP1VZJvw6ICMG9r14Ah6yfwPn7T7i646A==",
|
|
||||||
"dependencies": {
|
|
||||||
"is-docker": "^2.0.0",
|
|
||||||
"is-wsl": "^2.1.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/optional-require": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.0.2.tgz",
|
|
||||||
"integrity": "sha512-HZubVd6IfHsbnpdNF/ICaSAzBUEW1TievpkjY3tB4Jnk8L7+pJ3conPzUt3Mn/6OZx9uzTDOHYPGA8/AxYHBOg==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=4"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/p-cancelable": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz",
|
|
||||||
"integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/p-event": {
|
|
||||||
"version": "4.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz",
|
|
||||||
"integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==",
|
|
||||||
"dependencies": {
|
|
||||||
"p-timeout": "^3.1.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/p-finally": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=4"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/p-timeout": {
|
|
||||||
"version": "3.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz",
|
|
||||||
"integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==",
|
|
||||||
"dependencies": {
|
|
||||||
"p-finally": "^1.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/papaparse": {
|
|
||||||
"version": "5.3.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.3.0.tgz",
|
|
||||||
"integrity": "sha512-Lb7jN/4bTpiuGPrYy4tkKoUS8sTki8zacB5ke1p5zolhcSE4TlWgrlsxjrDTbG/dFVh07ck7X36hUf/b5V68pg=="
|
|
||||||
},
|
|
||||||
"node_modules/parse5": {
|
|
||||||
"version": "6.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
|
|
||||||
"integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
|
|
||||||
},
|
|
||||||
"node_modules/parse5-htmlparser2-tree-adapter": {
|
|
||||||
"version": "6.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz",
|
|
||||||
"integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==",
|
|
||||||
"dependencies": {
|
|
||||||
"parse5": "^6.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/process-nextick-args": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
|
|
||||||
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
|
|
||||||
},
|
|
||||||
"node_modules/pump": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
|
|
||||||
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
|
|
||||||
"dependencies": {
|
|
||||||
"end-of-stream": "^1.1.0",
|
|
||||||
"once": "^1.3.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/readable-stream": {
|
|
||||||
"version": "2.3.7",
|
|
||||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
|
|
||||||
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
|
|
||||||
"dependencies": {
|
|
||||||
"core-util-is": "~1.0.0",
|
|
||||||
"inherits": "~2.0.3",
|
|
||||||
"isarray": "~1.0.0",
|
|
||||||
"process-nextick-args": "~2.0.0",
|
|
||||||
"safe-buffer": "~5.1.1",
|
|
||||||
"string_decoder": "~1.1.1",
|
|
||||||
"util-deprecate": "~1.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/readable-stream/node_modules/safe-buffer": {
|
|
||||||
"version": "5.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
|
||||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
|
||||||
},
|
|
||||||
"node_modules/responselike": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz",
|
|
||||||
"integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==",
|
|
||||||
"dependencies": {
|
|
||||||
"lowercase-keys": "^2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/safe-buffer": {
|
|
||||||
"version": "5.2.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
|
||||||
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
|
|
||||||
"funding": [
|
|
||||||
{
|
|
||||||
"type": "github",
|
|
||||||
"url": "https://github.com/sponsors/feross"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "patreon",
|
|
||||||
"url": "https://www.patreon.com/feross"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "consulting",
|
|
||||||
"url": "https://feross.org/support"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"node_modules/saslprep": {
|
|
||||||
"version": "1.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz",
|
|
||||||
"integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==",
|
|
||||||
"optional": true,
|
|
||||||
"dependencies": {
|
|
||||||
"sparse-bitfield": "^3.0.3"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/sparse-bitfield": {
|
|
||||||
"version": "3.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
|
|
||||||
"integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=",
|
|
||||||
"optional": true,
|
|
||||||
"dependencies": {
|
|
||||||
"memory-pager": "^1.0.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/string_decoder": {
|
|
||||||
"version": "1.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
|
|
||||||
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
|
|
||||||
"dependencies": {
|
|
||||||
"safe-buffer": "~5.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/string_decoder/node_modules/safe-buffer": {
|
|
||||||
"version": "5.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
|
||||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
|
||||||
},
|
|
||||||
"node_modules/tabletojson": {
|
|
||||||
"version": "2.0.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/tabletojson/-/tabletojson-2.0.4.tgz",
|
|
||||||
"integrity": "sha512-5dDbixNflxrU93MPKfJni1QHO2e6d2UP6Ve6kHyxxZy6wpLTcUAsJzUf+H7Yg08eQOpJsnevJ2olrMYIH09Zsw==",
|
|
||||||
"dependencies": {
|
|
||||||
"cheerio": "^1.0.0-rc.3",
|
|
||||||
"got": "^10.7.0",
|
|
||||||
"tunnel": "0.0.6"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "*"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/textversionjs": {
|
|
||||||
"version": "1.1.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/textversionjs/-/textversionjs-1.1.3.tgz",
|
|
||||||
"integrity": "sha1-G3AK73gEZ3hoguKKsSb3fKMmoeg="
|
|
||||||
},
|
|
||||||
"node_modules/to-readable-stream": {
|
|
||||||
"version": "2.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-2.1.0.tgz",
|
|
||||||
"integrity": "sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/tslib": {
|
|
||||||
"version": "2.3.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
|
|
||||||
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
|
|
||||||
},
|
|
||||||
"node_modules/tunnel": {
|
|
||||||
"version": "0.0.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
|
|
||||||
"integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.6.11 <=0.7.0 || >=0.7.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/type-fest": {
|
|
||||||
"version": "0.10.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.10.0.tgz",
|
|
||||||
"integrity": "sha512-EUV9jo4sffrwlg8s0zDhP0T2WD3pru5Xi0+HTE3zTUmBaZNhfkite9PdSJwdXLwPVW0jnAHT56pZHIOYckPEiw==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/util-deprecate": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
|
||||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
|
|
||||||
},
|
|
||||||
"node_modules/whatwg-fetch": {
|
|
||||||
"version": "3.6.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz",
|
|
||||||
"integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA=="
|
|
||||||
},
|
|
||||||
"node_modules/wrappy": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
|
||||||
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
685
node_modules/axios/CHANGELOG.md
generated
vendored
685
node_modules/axios/CHANGELOG.md
generated
vendored
|
@ -1,685 +0,0 @@
|
||||||
# Changelog
|
|
||||||
|
|
||||||
### 0.21.1 (December 21, 2020)
|
|
||||||
|
|
||||||
Fixes and Functionality:
|
|
||||||
|
|
||||||
- Hotfix: Prevent SSRF (#3410)
|
|
||||||
- Protocol not parsed when setting proxy config from env vars (#3070)
|
|
||||||
- Updating axios in types to be lower case (#2797)
|
|
||||||
- Adding a type guard for `AxiosError` (#2949)
|
|
||||||
|
|
||||||
Internal and Tests:
|
|
||||||
|
|
||||||
- Remove the skipping of the `socket` http test (#3364)
|
|
||||||
- Use different socket for Win32 test (#3375)
|
|
||||||
|
|
||||||
Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:
|
|
||||||
|
|
||||||
- Daniel Lopretto <timemachine3030@users.noreply.github.com>
|
|
||||||
- Jason Kwok <JasonHK@users.noreply.github.com>
|
|
||||||
- Jay <jasonsaayman@gmail.com>
|
|
||||||
- Jonathan Foster <jonathan@jonathanfoster.io>
|
|
||||||
- Remco Haszing <remcohaszing@gmail.com>
|
|
||||||
- Xianming Zhong <chinesedfan@qq.com>
|
|
||||||
|
|
||||||
### 0.21.0 (October 23, 2020)
|
|
||||||
|
|
||||||
Fixes and Functionality:
|
|
||||||
|
|
||||||
- Fixing requestHeaders.Authorization ([#3287](https://github.com/axios/axios/pull/3287))
|
|
||||||
- Fixing node types ([#3237](https://github.com/axios/axios/pull/3237))
|
|
||||||
- Fixing axios.delete ignores config.data ([#3282](https://github.com/axios/axios/pull/3282))
|
|
||||||
- Revert "Fixing overwrite Blob/File type as Content-Type in browser. (#1773)" ([#3289](https://github.com/axios/axios/pull/3289))
|
|
||||||
- Fixing an issue that type 'null' and 'undefined' is not assignable to validateStatus when typescript strict option is enabled ([#3200](https://github.com/axios/axios/pull/3200))
|
|
||||||
|
|
||||||
Internal and Tests:
|
|
||||||
|
|
||||||
- Lock travis to not use node v15 ([#3361](https://github.com/axios/axios/pull/3361))
|
|
||||||
|
|
||||||
Documentation:
|
|
||||||
|
|
||||||
- Fixing simple typo, existant -> existent ([#3252](https://github.com/axios/axios/pull/3252))
|
|
||||||
- Fixing typos ([#3309](https://github.com/axios/axios/pull/3309))
|
|
||||||
|
|
||||||
Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:
|
|
||||||
|
|
||||||
- Allan Cruz <57270969+Allanbcruz@users.noreply.github.com>
|
|
||||||
- George Cheng <Gerhut@GMail.com>
|
|
||||||
- Jay <jasonsaayman@gmail.com>
|
|
||||||
- Kevin Kirsche <Kev.Kirsche+GitHub@gmail.com>
|
|
||||||
- Remco Haszing <remcohaszing@gmail.com>
|
|
||||||
- Taemin Shin <cprayer13@gmail.com>
|
|
||||||
- Tim Gates <tim.gates@iress.com>
|
|
||||||
- Xianming Zhong <chinesedfan@qq.com>
|
|
||||||
|
|
||||||
### 0.20.0 (August 20, 2020)
|
|
||||||
|
|
||||||
Release of 0.20.0-pre as a full release with no other changes.
|
|
||||||
|
|
||||||
### 0.20.0-pre (July 15, 2020)
|
|
||||||
|
|
||||||
Fixes and Functionality:
|
|
||||||
|
|
||||||
- Fixing response with utf-8 BOM can not parse to json ([#2419](https://github.com/axios/axios/pull/2419))
|
|
||||||
- fix: remove byte order marker (UTF-8 BOM) when transform response
|
|
||||||
- fix: remove BOM only utf-8
|
|
||||||
- test: utf-8 BOM
|
|
||||||
- fix: incorrect param name
|
|
||||||
- Refactor mergeConfig without utils.deepMerge ([#2844](https://github.com/axios/axios/pull/2844))
|
|
||||||
- Adding failing test
|
|
||||||
- Fixing #2587 default custom config persisting
|
|
||||||
- Adding Concat keys and filter duplicates
|
|
||||||
- Fixed value from CPE
|
|
||||||
- update for review feedbacks
|
|
||||||
- no deepMerge
|
|
||||||
- only merge between plain objects
|
|
||||||
- fix rename
|
|
||||||
- always merge config by mergeConfig
|
|
||||||
- extract function mergeDeepProperties
|
|
||||||
- refactor mergeConfig with all keys, and add special logic for validateStatus
|
|
||||||
- add test for resetting headers
|
|
||||||
- add lots of tests and fix a bug
|
|
||||||
- should not inherit `data`
|
|
||||||
- use simple toString
|
|
||||||
- Fixing overwrite Blob/File type as Content-Type in browser. ([#1773](https://github.com/axios/axios/pull/1773))
|
|
||||||
- Fixing an issue that type 'null' is not assignable to validateStatus ([#2773](https://github.com/axios/axios/pull/2773))
|
|
||||||
- Fixing special char encoding ([#1671](https://github.com/axios/axios/pull/1671))
|
|
||||||
- removing @ character from replacement list since it is a reserved character
|
|
||||||
- Updating buildURL test to not include the @ character
|
|
||||||
- Removing console logs
|
|
||||||
- Fixing password encoding with special characters in basic authentication ([#1492](https://github.com/axios/axios/pull/1492))
|
|
||||||
- Fixing password encoding with special characters in basic authentication
|
|
||||||
- Adding test to check if password with non-Latin1 characters pass
|
|
||||||
- Fixing 'Network Error' in react native android ([#1487](https://github.com/axios/axios/pull/1487))
|
|
||||||
There is a bug in react native Android platform when using get method. It will trigger a 'Network Error' when passing the requestData which is an empty string to request.send function. So if the requestData is an empty string we can set it to null as well to fix the bug.
|
|
||||||
- Fixing Cookie Helper with Asyc Components ([#1105](https://github.com/axios/axios/pull/1105)) ([#1107](https://github.com/axios/axios/pull/1107))
|
|
||||||
- Fixing 'progressEvent' type ([#2851](https://github.com/axios/axios/pull/2851))
|
|
||||||
- Fix 'progressEvent' type
|
|
||||||
- Update axios.ts
|
|
||||||
- Fixing getting local files (file://) failed ([#2470](https://github.com/axios/axios/pull/2470))
|
|
||||||
- fix issue #2416, #2396
|
|
||||||
- fix Eslint warn
|
|
||||||
- Modify judgment conditions
|
|
||||||
- add unit test
|
|
||||||
- update unit test
|
|
||||||
- update unit test
|
|
||||||
- Allow PURGE method in typings ([#2191](https://github.com/axios/axios/pull/2191))
|
|
||||||
- Adding option to disable automatic decompression ([#2661](https://github.com/axios/axios/pull/2661))
|
|
||||||
- Adding ability to disable auto decompression
|
|
||||||
- Updating decompress documentation in README
|
|
||||||
- Fixing test\unit\adapters\http.js lint errors
|
|
||||||
- Adding test for disabling auto decompression
|
|
||||||
- Removing changes that fixed lint errors in tests
|
|
||||||
- Removing formatting change to unit test
|
|
||||||
- Add independent `maxBodyLength` option ([#2781](https://github.com/axios/axios/pull/2781))
|
|
||||||
- Add independent option to set the maximum size of the request body
|
|
||||||
- Remove maxBodyLength check
|
|
||||||
- Update README
|
|
||||||
- Assert for error code and message
|
|
||||||
- Adding responseEncoding to mergeConfig ([#1745](https://github.com/axios/axios/pull/1745))
|
|
||||||
- Compatible with follow-redirect aborts the request ([#2689](https://github.com/axios/axios/pull/2689))
|
|
||||||
- Compatible with follow-redirect aborts the request
|
|
||||||
- Use the error code
|
|
||||||
- Fix merging of params ([#2656](https://github.com/axios/axios/pull/2656))
|
|
||||||
- Name function to avoid ESLint func-names warning
|
|
||||||
- Switch params config to merge list and update tests
|
|
||||||
- Restore testing of both false and null
|
|
||||||
- Restore test cases for keys without defaults
|
|
||||||
- Include test for non-object values that aren't false-y.
|
|
||||||
- Revert `finally` as `then` ([#2683](https://github.com/axios/axios/pull/2683))
|
|
||||||
|
|
||||||
Internal and Tests:
|
|
||||||
|
|
||||||
- Fix stale bot config ([#3049](https://github.com/axios/axios/pull/3049))
|
|
||||||
- fix stale bot config
|
|
||||||
- fix multiple lines
|
|
||||||
- Add days and change name to work ([#3035](https://github.com/axios/axios/pull/3035))
|
|
||||||
- Update close-issues.yml ([#3031](https://github.com/axios/axios/pull/3031))
|
|
||||||
- Update close-issues.yml
|
|
||||||
Update close message to read better 😄
|
|
||||||
- Fix use of quotations
|
|
||||||
Use single quotes as per other .yml files
|
|
||||||
- Remove user name form message
|
|
||||||
- Add GitHub actions to close stale issues/prs ([#3029](https://github.com/axios/axios/pull/3029))
|
|
||||||
- prepare stale actions
|
|
||||||
- update messages
|
|
||||||
- Add exempt labels and lighten up comments
|
|
||||||
- Add GitHub actions to close invalid issues ([#3022](https://github.com/axios/axios/pull/3022))
|
|
||||||
- add close actions
|
|
||||||
- fix with checkout
|
|
||||||
- update issue templates
|
|
||||||
- add reminder
|
|
||||||
- update close message
|
|
||||||
- Add test with Node.js 12 ([#2860](https://github.com/axios/axios/pull/2860))
|
|
||||||
- test with Node.js 12
|
|
||||||
- test with latest
|
|
||||||
- Adding console log on sandbox server startup ([#2210](https://github.com/axios/axios/pull/2210))
|
|
||||||
- Adding console log on sandbox server startup
|
|
||||||
- Update server.js
|
|
||||||
Add server error handling
|
|
||||||
- Update server.js
|
|
||||||
Better error message, remove retry.
|
|
||||||
- Adding tests for method `options` type definitions ([#1996](https://github.com/axios/axios/pull/1996))
|
|
||||||
Update tests.
|
|
||||||
- Add test for redirecting with too large response ([#2695](https://github.com/axios/axios/pull/2695))
|
|
||||||
- Fixing unit test failure in Windows OS ([#2601](https://github.com/axios/axios/pull/2601))
|
|
||||||
- Fixing issue for HEAD method and gzipped response ([#2666](https://github.com/axios/axios/pull/2666))
|
|
||||||
- Fix tests in browsers ([#2748](https://github.com/axios/axios/pull/2748))
|
|
||||||
- chore: add `jsdelivr` and `unpkg` support ([#2443](https://github.com/axios/axios/pull/2443))
|
|
||||||
|
|
||||||
Documentation:
|
|
||||||
|
|
||||||
- Adding support for URLSearchParams in node ([#1900](https://github.com/axios/axios/pull/1900))
|
|
||||||
- Adding support for URLSearchParams in node
|
|
||||||
- Remove un-needed code
|
|
||||||
- Update utils.js
|
|
||||||
- Make changes as suggested
|
|
||||||
- Adding table of content (preview) ([#3050](https://github.com/axios/axios/pull/3050))
|
|
||||||
- add toc (preview)
|
|
||||||
- remove toc in toc
|
|
||||||
Signed-off-by: Moni <usmoni@gmail.com>
|
|
||||||
- fix sublinks
|
|
||||||
- fix indentation
|
|
||||||
- remove redundant table links
|
|
||||||
- update caps and indent
|
|
||||||
- remove axios
|
|
||||||
- Replace 'blacklist' with 'blocklist' ([#3006](https://github.com/axios/axios/pull/3006))
|
|
||||||
- docs(): Detailed config options environment. ([#2088](https://github.com/axios/axios/pull/2088))
|
|
||||||
- docs(): Detailed config options environment.
|
|
||||||
- Update README.md
|
|
||||||
- Include axios-data-unpacker in ECOSYSTEM.md ([#2080](https://github.com/axios/axios/pull/2080))
|
|
||||||
- Allow opening examples in Gitpod ([#1958](https://github.com/axios/axios/pull/1958))
|
|
||||||
- Remove axios.all() and axios.spread() from Readme.md ([#2727](https://github.com/axios/axios/pull/2727))
|
|
||||||
- remove axios.all(), axios.spread()
|
|
||||||
- replace example
|
|
||||||
- axios.all() -> Promise.all()
|
|
||||||
- axios.spread(function (acct, perms)) -> function (acct, perms)
|
|
||||||
- add deprecated mark
|
|
||||||
- Update README.md ([#2887](https://github.com/axios/axios/pull/2887))
|
|
||||||
Small change to the data attribute doc of the config. A request body can also be set for DELETE methods but this wasn't mentioned in the documentation (it only mentioned POST, PUT and PATCH). Took my some 10-20 minutes until I realized that I don't need to manipulate the request body with transformRequest in the case of DELETE.
|
|
||||||
- Include swagger-taxos-codegen in ECOSYSTEM.md ([#2162](https://github.com/axios/axios/pull/2162))
|
|
||||||
- Add CDNJS version badge in README.md ([#878](https://github.com/axios/axios/pull/878))
|
|
||||||
This badge will show the version on CDNJS!
|
|
||||||
- Documentation update to clear up ambiguity in code examples ([#2928](https://github.com/axios/axios/pull/2928))
|
|
||||||
- Made an adjustment to the documentation to clear up any ambiguity around the use of "fs". This should help clear up that the code examples with "fs" cannot be used on the client side.
|
|
||||||
- Update README.md about validateStatus ([#2912](https://github.com/axios/axios/pull/2912))
|
|
||||||
Rewrote the comment from "Reject only if the status code is greater than or equal to 500" to "Resolve only if the status code is less than 500"
|
|
||||||
- Updating documentation for usage form-data ([#2805](https://github.com/axios/axios/pull/2805))
|
|
||||||
Closes #2049
|
|
||||||
- Fixing CHANGELOG.md issue link ([#2784](https://github.com/axios/axios/pull/2784))
|
|
||||||
- Include axios-hooks in ECOSYSTEM.md ([#2003](https://github.com/axios/axios/pull/2003))
|
|
||||||
- Added Response header access instructions ([#1901](https://github.com/axios/axios/pull/1901))
|
|
||||||
- Added Response header access instructions
|
|
||||||
- Added note about using bracket notation
|
|
||||||
- Add `onUploadProgress` and `onDownloadProgress` are browser only ([#2763](https://github.com/axios/axios/pull/2763))
|
|
||||||
Saw in #928 and #1966 that `onUploadProgress` and `onDownloadProgress` only work in the browser and was missing that from the README.
|
|
||||||
- Update ' sign to ` in proxy spec ([#2778](https://github.com/axios/axios/pull/2778))
|
|
||||||
- Adding jsDelivr link in README ([#1110](https://github.com/axios/axios/pull/1110))
|
|
||||||
- Adding jsDelivr link
|
|
||||||
- Add SRI
|
|
||||||
- Remove SRI
|
|
||||||
|
|
||||||
Huge thanks to everyone who contributed to this release via code (authors listed
|
|
||||||
below) or via reviews and triaging on GitHub:
|
|
||||||
|
|
||||||
- Alan Wang <wp_scut@163.com>
|
|
||||||
- Alexandru Ungureanu <khakcarot@gmail.com>
|
|
||||||
- Anubhav Srivastava <anubhav.srivastava00@gmail.com>
|
|
||||||
- Benny Neugebauer <bn@bennyn.de>
|
|
||||||
- Cr <631807682@qq.com>
|
|
||||||
- David <cygnidavid@gmail.com>
|
|
||||||
- David Ko <david.ko@pvtmethod.com>
|
|
||||||
- David Tanner <david.tanner@lifeomic.com>
|
|
||||||
- Emily Morehouse <emilyemorehouse@gmail.com>
|
|
||||||
- Felipe Martins <felipewmartins@gmail.com>
|
|
||||||
- Fonger <5862369+Fonger@users.noreply.github.com>
|
|
||||||
- Frostack <soulburn007@gmail.com>
|
|
||||||
- George Cheng <Gerhut@GMail.com>
|
|
||||||
- grumblerchester <grumblerchester@users.noreply.github.com>
|
|
||||||
- Gustavo López <gualopezb@gmail.com>
|
|
||||||
- hexaez <45806662+hexaez@users.noreply.github.com>
|
|
||||||
- huangzuizui <huangzuizui@gmail.com>
|
|
||||||
- Ian Wijma <ian@wij.ma>
|
|
||||||
- Jay <jasonsaayman@gmail.com>
|
|
||||||
- jeffjing <zgayjjf@qq.com>
|
|
||||||
- jennynju <46782518+jennynju@users.noreply.github.com>
|
|
||||||
- Jimmy Liao <52391190+jimmy-liao-gogoro@users.noreply.github.com>
|
|
||||||
- Jonathan Sharpe <j.r.sharpe@gmail.com>
|
|
||||||
- JounQin <admin@1stg.me>
|
|
||||||
- Justin Beckwith <justin.beckwith@gmail.com>
|
|
||||||
- Kamil Posiadała <3dcreator.pl@gmail.com>
|
|
||||||
- Lukas Drgon <lukas.drgon@gmail.com>
|
|
||||||
- marcinx <mail@marcinx.com>
|
|
||||||
- Martti Laine <martti@codeclown.net>
|
|
||||||
- Michał Zarach <michal.m.zarach@gmail.com>
|
|
||||||
- Moni <usmoni@gmail.com>
|
|
||||||
- Motonori Iwata <121048+iwata@users.noreply.github.com>
|
|
||||||
- Nikita Galkin <nikita@galk.in>
|
|
||||||
- Petr Mares <petr@mares.tw>
|
|
||||||
- Philippe Recto <precto1285@gmal.com>
|
|
||||||
- Remco Haszing <remcohaszing@gmail.com>
|
|
||||||
- rockcs1992 <chengshi1219@gmail.com>
|
|
||||||
- Ryan Bown <rbown@niftee.com.au>
|
|
||||||
- Samina Fu <sufuf3@gmail.com>
|
|
||||||
- Simone Busoli <simone.busoli@gmail.com>
|
|
||||||
- Spencer von der Ohe <s.vonderohe40@gmail.com>
|
|
||||||
- Sven Efftinge <sven.efftinge@typefox.io>
|
|
||||||
- Taegyeoung Oh <otk1090@naver.com>
|
|
||||||
- Taemin Shin <cprayer13@gmail.com>
|
|
||||||
- Thibault Ehrhart <1208424+ehrhart@users.noreply.github.com>
|
|
||||||
- Xianming Zhong <chinesedfan@qq.com>
|
|
||||||
- Yasu Flores <carlosyasu91@gmail.com>
|
|
||||||
- Zac Delventhal <delventhalz@gmail.com>
|
|
||||||
|
|
||||||
### 0.19.2 (Jan 20, 2020)
|
|
||||||
|
|
||||||
- Remove unnecessary XSS check ([#2679](https://github.com/axios/axios/pull/2679)) (see ([#2646](https://github.com/axios/axios/issues/2646)) for discussion)
|
|
||||||
|
|
||||||
### 0.19.1 (Jan 7, 2020)
|
|
||||||
|
|
||||||
Fixes and Functionality:
|
|
||||||
|
|
||||||
- Fixing invalid agent issue ([#1904](https://github.com/axios/axios/pull/1904))
|
|
||||||
- Fix ignore set withCredentials false ([#2582](https://github.com/axios/axios/pull/2582))
|
|
||||||
- Delete useless default to hash ([#2458](https://github.com/axios/axios/pull/2458))
|
|
||||||
- Fix HTTP/HTTPs agents passing to follow-redirect ([#1904](https://github.com/axios/axios/pull/1904))
|
|
||||||
- Fix ignore set withCredentials false ([#2582](https://github.com/axios/axios/pull/2582))
|
|
||||||
- Fix CI build failure ([#2570](https://github.com/axios/axios/pull/2570))
|
|
||||||
- Remove dependency on is-buffer from package.json ([#1816](https://github.com/axios/axios/pull/1816))
|
|
||||||
- Adding options typings ([#2341](https://github.com/axios/axios/pull/2341))
|
|
||||||
- Adding Typescript HTTP method definition for LINK and UNLINK. ([#2444](https://github.com/axios/axios/pull/2444))
|
|
||||||
- Update dist with newest changes, fixes Custom Attributes issue
|
|
||||||
- Change syntax to see if build passes ([#2488](https://github.com/axios/axios/pull/2488))
|
|
||||||
- Update Webpack + deps, remove now unnecessary polyfills ([#2410](https://github.com/axios/axios/pull/2410))
|
|
||||||
- Fix to prevent XSS, throw an error when the URL contains a JS script ([#2464](https://github.com/axios/axios/pull/2464))
|
|
||||||
- Add custom timeout error copy in config ([#2275](https://github.com/axios/axios/pull/2275))
|
|
||||||
- Add error toJSON example ([#2466](https://github.com/axios/axios/pull/2466))
|
|
||||||
- Fixing Vulnerability A Fortify Scan finds a critical Cross-Site Scrip… ([#2451](https://github.com/axios/axios/pull/2451))
|
|
||||||
- Fixing subdomain handling on no_proxy ([#2442](https://github.com/axios/axios/pull/2442))
|
|
||||||
- Make redirection from HTTP to HTTPS work ([#2426](https://github.com/axios/axios/pull/2426)) and ([#2547](https://github.com/axios/axios/pull/2547))
|
|
||||||
- Add toJSON property to AxiosError type ([#2427](https://github.com/axios/axios/pull/2427))
|
|
||||||
- Fixing socket hang up error on node side for slow response. ([#1752](https://github.com/axios/axios/pull/1752))
|
|
||||||
- Alternative syntax to send data into the body ([#2317](https://github.com/axios/axios/pull/2317))
|
|
||||||
- Fixing custom config options ([#2207](https://github.com/axios/axios/pull/2207))
|
|
||||||
- Fixing set `config.method` after mergeConfig for Axios.prototype.request ([#2383](https://github.com/axios/axios/pull/2383))
|
|
||||||
- Axios create url bug ([#2290](https://github.com/axios/axios/pull/2290))
|
|
||||||
- Do not modify config.url when using a relative baseURL (resolves [#1628](https://github.com/axios/axios/issues/1098)) ([#2391](https://github.com/axios/axios/pull/2391))
|
|
||||||
- Add typescript HTTP method definition for LINK and UNLINK ([#2444](https://github.com/axios/axios/pull/2444))
|
|
||||||
|
|
||||||
Internal:
|
|
||||||
|
|
||||||
- Revert "Update Webpack + deps, remove now unnecessary polyfills" ([#2479](https://github.com/axios/axios/pull/2479))
|
|
||||||
- Order of if/else blocks is causing unit tests mocking XHR. ([#2201](https://github.com/axios/axios/pull/2201))
|
|
||||||
- Add license badge ([#2446](https://github.com/axios/axios/pull/2446))
|
|
||||||
- Fix travis CI build [#2386](https://github.com/axios/axios/pull/2386)
|
|
||||||
- Fix cancellation error on build master. #2290 #2207 ([#2407](https://github.com/axios/axios/pull/2407))
|
|
||||||
|
|
||||||
Documentation:
|
|
||||||
|
|
||||||
- Fixing typo in CHANGELOG.md: s/Functionallity/Functionality ([#2639](https://github.com/axios/axios/pull/2639))
|
|
||||||
- Fix badge, use master branch ([#2538](https://github.com/axios/axios/pull/2538))
|
|
||||||
- Fix typo in changelog [#2193](https://github.com/axios/axios/pull/2193)
|
|
||||||
- Document fix ([#2514](https://github.com/axios/axios/pull/2514))
|
|
||||||
- Update docs with no_proxy change, issue #2484 ([#2513](https://github.com/axios/axios/pull/2513))
|
|
||||||
- Fixing missing words in docs template ([#2259](https://github.com/axios/axios/pull/2259))
|
|
||||||
- 🐛Fix request finally documentation in README ([#2189](https://github.com/axios/axios/pull/2189))
|
|
||||||
- updating spelling and adding link to docs ([#2212](https://github.com/axios/axios/pull/2212))
|
|
||||||
- docs: minor tweak ([#2404](https://github.com/axios/axios/pull/2404))
|
|
||||||
- Update response interceptor docs ([#2399](https://github.com/axios/axios/pull/2399))
|
|
||||||
- Update README.md ([#2504](https://github.com/axios/axios/pull/2504))
|
|
||||||
- Fix word 'sintaxe' to 'syntax' in README.md ([#2432](https://github.com/axios/axios/pull/2432))
|
|
||||||
- updating README: notes on CommonJS autocomplete ([#2256](https://github.com/axios/axios/pull/2256))
|
|
||||||
- Fix grammar in README.md ([#2271](https://github.com/axios/axios/pull/2271))
|
|
||||||
- Doc fixes, minor examples cleanup ([#2198](https://github.com/axios/axios/pull/2198))
|
|
||||||
|
|
||||||
### 0.19.0 (May 30, 2019)
|
|
||||||
|
|
||||||
Fixes and Functionality:
|
|
||||||
|
|
||||||
- Added support for no_proxy env variable ([#1693](https://github.com/axios/axios/pull/1693/files)) - Chance Dickson
|
|
||||||
- Unzip response body only for statuses != 204 ([#1129](https://github.com/axios/axios/pull/1129)) - drawski
|
|
||||||
- Destroy stream on exceeding maxContentLength (fixes [#1098](https://github.com/axios/axios/issues/1098)) ([#1485](https://github.com/axios/axios/pull/1485)) - Gadzhi Gadzhiev
|
|
||||||
- Makes Axios error generic to use AxiosResponse ([#1738](https://github.com/axios/axios/pull/1738)) - Suman Lama
|
|
||||||
- Fixing Mocha tests by locking follow-redirects version to 1.5.10 ([#1993](https://github.com/axios/axios/pull/1993)) - grumblerchester
|
|
||||||
- Allow uppercase methods in typings. ([#1781](https://github.com/axios/axios/pull/1781)) - Ken Powers
|
|
||||||
- Fixing building url with hash mark ([#1771](https://github.com/axios/axios/pull/1771)) - Anatoly Ryabov
|
|
||||||
- This commit fix building url with hash map (fragment identifier) when parameters are present: they must not be added after `#`, because client cut everything after `#`
|
|
||||||
- Preserve HTTP method when following redirect ([#1758](https://github.com/axios/axios/pull/1758)) - Rikki Gibson
|
|
||||||
- Add `getUri` signature to TypeScript definition. ([#1736](https://github.com/axios/axios/pull/1736)) - Alexander Trauzzi
|
|
||||||
- Adding isAxiosError flag to errors thrown by axios ([#1419](https://github.com/axios/axios/pull/1419)) - Ayush Gupta
|
|
||||||
|
|
||||||
Internal:
|
|
||||||
|
|
||||||
- Fixing .eslintrc without extension ([#1789](https://github.com/axios/axios/pull/1789)) - Manoel
|
|
||||||
- Fix failing SauceLabs tests by updating configuration - Emily Morehouse
|
|
||||||
- Add issue templates - Emily Morehouse
|
|
||||||
|
|
||||||
Documentation:
|
|
||||||
|
|
||||||
- Consistent coding style in README ([#1787](https://github.com/axios/axios/pull/1787)) - Ali Servet Donmez
|
|
||||||
- Add information about auth parameter to README ([#2166](https://github.com/axios/axios/pull/2166)) - xlaguna
|
|
||||||
- Add DELETE to list of methods that allow data as a config option ([#2169](https://github.com/axios/axios/pull/2169)) - Daniela Borges Matos de Carvalho
|
|
||||||
- Update ECOSYSTEM.md - Add Axios Endpoints ([#2176](https://github.com/axios/axios/pull/2176)) - Renan
|
|
||||||
- Add r2curl in ECOSYSTEM ([#2141](https://github.com/axios/axios/pull/2141)) - 유용우 / CX
|
|
||||||
- Update README.md - Add instructions for installing with yarn ([#2036](https://github.com/axios/axios/pull/2036)) - Victor Hermes
|
|
||||||
- Fixing spacing for README.md ([#2066](https://github.com/axios/axios/pull/2066)) - Josh McCarty
|
|
||||||
- Update README.md. - Change `.then` to `.finally` in example code ([#2090](https://github.com/axios/axios/pull/2090)) - Omar Cai
|
|
||||||
- Clarify what values responseType can have in Node ([#2121](https://github.com/axios/axios/pull/2121)) - Tyler Breisacher
|
|
||||||
- docs(ECOSYSTEM): add axios-api-versioning ([#2020](https://github.com/axios/axios/pull/2020)) - Weffe
|
|
||||||
- It seems that `responseType: 'blob'` doesn't actually work in Node (when I tried using it, response.data was a string, not a Blob, since Node doesn't have Blobs), so this clarifies that this option should only be used in the browser
|
|
||||||
- Update README.md. - Add Querystring library note ([#1896](https://github.com/axios/axios/pull/1896)) - Dmitriy Eroshenko
|
|
||||||
- Add react-hooks-axios to Libraries section of ECOSYSTEM.md ([#1925](https://github.com/axios/axios/pull/1925)) - Cody Chan
|
|
||||||
- Clarify in README that default timeout is 0 (no timeout) ([#1750](https://github.com/axios/axios/pull/1750)) - Ben Standefer
|
|
||||||
|
|
||||||
### 0.19.0-beta.1 (Aug 9, 2018)
|
|
||||||
|
|
||||||
**NOTE:** This is a beta version of this release. There may be functionality that is broken in
|
|
||||||
certain browsers, though we suspect that builds are hanging and not erroring. See
|
|
||||||
https://saucelabs.com/u/axios for the most up-to-date information.
|
|
||||||
|
|
||||||
New Functionality:
|
|
||||||
|
|
||||||
- Add getUri method ([#1712](https://github.com/axios/axios/issues/1712))
|
|
||||||
- Add support for no_proxy env variable ([#1693](https://github.com/axios/axios/issues/1693))
|
|
||||||
- Add toJSON to decorated Axios errors to facilitate serialization ([#1625](https://github.com/axios/axios/issues/1625))
|
|
||||||
- Add second then on axios call ([#1623](https://github.com/axios/axios/issues/1623))
|
|
||||||
- Typings: allow custom return types
|
|
||||||
- Add option to specify character set in responses (with http adapter)
|
|
||||||
|
|
||||||
Fixes:
|
|
||||||
|
|
||||||
- Fix Keep defaults local to instance ([#385](https://github.com/axios/axios/issues/385))
|
|
||||||
- Correctly catch exception in http test ([#1475](https://github.com/axios/axios/issues/1475))
|
|
||||||
- Fix accept header normalization ([#1698](https://github.com/axios/axios/issues/1698))
|
|
||||||
- Fix http adapter to allow HTTPS connections via HTTP ([#959](https://github.com/axios/axios/issues/959))
|
|
||||||
- Fix Removes usage of deprecated Buffer constructor. ([#1555](https://github.com/axios/axios/issues/1555), [#1622](https://github.com/axios/axios/issues/1622))
|
|
||||||
- Fix defaults to use httpAdapter if available ([#1285](https://github.com/axios/axios/issues/1285))
|
|
||||||
- Fixing defaults to use httpAdapter if available
|
|
||||||
- Use a safer, cross-platform method to detect the Node environment
|
|
||||||
- Fix Reject promise if request is cancelled by the browser ([#537](https://github.com/axios/axios/issues/537))
|
|
||||||
- [Typescript] Fix missing type parameters on delete/head methods
|
|
||||||
- [NS]: Send `false` flag isStandardBrowserEnv for Nativescript
|
|
||||||
- Fix missing type parameters on delete/head
|
|
||||||
- Fix Default method for an instance always overwritten by get
|
|
||||||
- Fix type error when socketPath option in AxiosRequestConfig
|
|
||||||
- Capture errors on request data streams
|
|
||||||
- Decorate resolve and reject to clear timeout in all cases
|
|
||||||
|
|
||||||
Huge thanks to everyone who contributed to this release via code (authors listed
|
|
||||||
below) or via reviews and triaging on GitHub:
|
|
||||||
|
|
||||||
- Andrew Scott <ascott18@gmail.com>
|
|
||||||
- Anthony Gauthier <antho325@hotmail.com>
|
|
||||||
- arpit <arpit2438735@gmail.com>
|
|
||||||
- ascott18
|
|
||||||
- Benedikt Rötsch <axe312ger@users.noreply.github.com>
|
|
||||||
- Chance Dickson <me@chancedickson.com>
|
|
||||||
- Dave Stewart <info@davestewart.co.uk>
|
|
||||||
- Deric Cain <deric.cain@gmail.com>
|
|
||||||
- Guillaume Briday <guillaumebriday@gmail.com>
|
|
||||||
- Jacob Wejendorp <jacob@wejendorp.dk>
|
|
||||||
- Jim Lynch <mrdotjim@gmail.com>
|
|
||||||
- johntron
|
|
||||||
- Justin Beckwith <beckwith@google.com>
|
|
||||||
- Justin Beckwith <justin.beckwith@gmail.com>
|
|
||||||
- Khaled Garbaya <khaledgarbaya@gmail.com>
|
|
||||||
- Lim Jing Rong <jjingrong@users.noreply.github.com>
|
|
||||||
- Mark van den Broek <mvdnbrk@gmail.com>
|
|
||||||
- Martti Laine <martti@codeclown.net>
|
|
||||||
- mattridley
|
|
||||||
- mattridley <matt.r@joinblink.com>
|
|
||||||
- Nicolas Del Valle <nicolas.delvalle@gmail.com>
|
|
||||||
- Nilegfx
|
|
||||||
- pbarbiero
|
|
||||||
- Rikki Gibson <rikkigibson@gmail.com>
|
|
||||||
- Sako Hartounian <sakohartounian@yahoo.com>
|
|
||||||
- Shane Fitzpatrick <fitzpasd@gmail.com>
|
|
||||||
- Stephan Schneider <stephanschndr@gmail.com>
|
|
||||||
- Steven <steven@ceriously.com>
|
|
||||||
- Tim Garthwaite <tim.garthwaite@jibo.com>
|
|
||||||
- Tim Johns <timjohns@yahoo.com>
|
|
||||||
- Yutaro Miyazaki <yutaro@studio-rubbish.com>
|
|
||||||
|
|
||||||
### 0.18.0 (Feb 19, 2018)
|
|
||||||
|
|
||||||
- Adding support for UNIX Sockets when running with Node.js ([#1070](https://github.com/axios/axios/pull/1070))
|
|
||||||
- Fixing typings ([#1177](https://github.com/axios/axios/pull/1177)):
|
|
||||||
- AxiosRequestConfig.proxy: allows type false
|
|
||||||
- AxiosProxyConfig: added auth field
|
|
||||||
- Adding function signature in AxiosInstance interface so AxiosInstance can be invoked ([#1192](https://github.com/axios/axios/pull/1192), [#1254](https://github.com/axios/axios/pull/1254))
|
|
||||||
- Allowing maxContentLength to pass through to redirected calls as maxBodyLength in follow-redirects config ([#1287](https://github.com/axios/axios/pull/1287))
|
|
||||||
- Fixing configuration when using an instance - method can now be set ([#1342](https://github.com/axios/axios/pull/1342))
|
|
||||||
|
|
||||||
### 0.17.1 (Nov 11, 2017)
|
|
||||||
|
|
||||||
- Fixing issue with web workers ([#1160](https://github.com/axios/axios/pull/1160))
|
|
||||||
- Allowing overriding transport ([#1080](https://github.com/axios/axios/pull/1080))
|
|
||||||
- Updating TypeScript typings ([#1165](https://github.com/axios/axios/pull/1165), [#1125](https://github.com/axios/axios/pull/1125), [#1131](https://github.com/axios/axios/pull/1131))
|
|
||||||
|
|
||||||
### 0.17.0 (Oct 21, 2017)
|
|
||||||
|
|
||||||
- **BREAKING** Fixing issue with `baseURL` and interceptors ([#950](https://github.com/axios/axios/pull/950))
|
|
||||||
- **BREAKING** Improving handing of duplicate headers ([#874](https://github.com/axios/axios/pull/874))
|
|
||||||
- Adding support for disabling proxies ([#691](https://github.com/axios/axios/pull/691))
|
|
||||||
- Updating TypeScript typings with generic type parameters ([#1061](https://github.com/axios/axios/pull/1061))
|
|
||||||
|
|
||||||
### 0.16.2 (Jun 3, 2017)
|
|
||||||
|
|
||||||
- Fixing issue with including `buffer` in bundle ([#887](https://github.com/axios/axios/pull/887))
|
|
||||||
- Including underlying request in errors ([#830](https://github.com/axios/axios/pull/830))
|
|
||||||
- Convert `method` to lowercase ([#930](https://github.com/axios/axios/pull/930))
|
|
||||||
|
|
||||||
### 0.16.1 (Apr 8, 2017)
|
|
||||||
|
|
||||||
- Improving HTTP adapter to return last request in case of redirects ([#828](https://github.com/axios/axios/pull/828))
|
|
||||||
- Updating `follow-redirects` dependency ([#829](https://github.com/axios/axios/pull/829))
|
|
||||||
- Adding support for passing `Buffer` in node ([#773](https://github.com/axios/axios/pull/773))
|
|
||||||
|
|
||||||
### 0.16.0 (Mar 31, 2017)
|
|
||||||
|
|
||||||
- **BREAKING** Removing `Promise` from axios typings in favor of built-in type declarations ([#480](https://github.com/axios/axios/issues/480))
|
|
||||||
- Adding `options` shortcut method ([#461](https://github.com/axios/axios/pull/461))
|
|
||||||
- Fixing issue with using `responseType: 'json'` in browsers incompatible with XHR Level 2 ([#654](https://github.com/axios/axios/pull/654))
|
|
||||||
- Improving React Native detection ([#731](https://github.com/axios/axios/pull/731))
|
|
||||||
- Fixing `combineURLs` to support empty `relativeURL` ([#581](https://github.com/axios/axios/pull/581))
|
|
||||||
- Removing `PROTECTION_PREFIX` support ([#561](https://github.com/axios/axios/pull/561))
|
|
||||||
|
|
||||||
### 0.15.3 (Nov 27, 2016)
|
|
||||||
|
|
||||||
- Fixing issue with custom instances and global defaults ([#443](https://github.com/axios/axios/issues/443))
|
|
||||||
- Renaming `axios.d.ts` to `index.d.ts` ([#519](https://github.com/axios/axios/issues/519))
|
|
||||||
- Adding `get`, `head`, and `delete` to `defaults.headers` ([#509](https://github.com/axios/axios/issues/509))
|
|
||||||
- Fixing issue with `btoa` and IE ([#507](https://github.com/axios/axios/issues/507))
|
|
||||||
- Adding support for proxy authentication ([#483](https://github.com/axios/axios/pull/483))
|
|
||||||
- Improving HTTP adapter to use `http` protocol by default ([#493](https://github.com/axios/axios/pull/493))
|
|
||||||
- Fixing proxy issues ([#491](https://github.com/axios/axios/pull/491))
|
|
||||||
|
|
||||||
### 0.15.2 (Oct 17, 2016)
|
|
||||||
|
|
||||||
- Fixing issue with calling `cancel` after response has been received ([#482](https://github.com/axios/axios/issues/482))
|
|
||||||
|
|
||||||
### 0.15.1 (Oct 14, 2016)
|
|
||||||
|
|
||||||
- Fixing issue with UMD ([#485](https://github.com/axios/axios/issues/485))
|
|
||||||
|
|
||||||
### 0.15.0 (Oct 10, 2016)
|
|
||||||
|
|
||||||
- Adding cancellation support ([#452](https://github.com/axios/axios/pull/452))
|
|
||||||
- Moving default adapter to global defaults ([#437](https://github.com/axios/axios/pull/437))
|
|
||||||
- Fixing issue with `file` URI scheme ([#440](https://github.com/axios/axios/pull/440))
|
|
||||||
- Fixing issue with `params` objects that have no prototype ([#445](https://github.com/axios/axios/pull/445))
|
|
||||||
|
|
||||||
### 0.14.0 (Aug 27, 2016)
|
|
||||||
|
|
||||||
- **BREAKING** Updating TypeScript definitions ([#419](https://github.com/axios/axios/pull/419))
|
|
||||||
- **BREAKING** Replacing `agent` option with `httpAgent` and `httpsAgent` ([#387](https://github.com/axios/axios/pull/387))
|
|
||||||
- **BREAKING** Splitting `progress` event handlers into `onUploadProgress` and `onDownloadProgress` ([#423](https://github.com/axios/axios/pull/423))
|
|
||||||
- Adding support for `http_proxy` and `https_proxy` environment variables ([#366](https://github.com/axios/axios/pull/366))
|
|
||||||
- Fixing issue with `auth` config option and `Authorization` header ([#397](https://github.com/axios/axios/pull/397))
|
|
||||||
- Don't set XSRF header if `xsrfCookieName` is `null` ([#406](https://github.com/axios/axios/pull/406))
|
|
||||||
|
|
||||||
### 0.13.1 (Jul 16, 2016)
|
|
||||||
|
|
||||||
- Fixing issue with response data not being transformed on error ([#378](https://github.com/axios/axios/issues/378))
|
|
||||||
|
|
||||||
### 0.13.0 (Jul 13, 2016)
|
|
||||||
|
|
||||||
- **BREAKING** Improved error handling ([#345](https://github.com/axios/axios/pull/345))
|
|
||||||
- **BREAKING** Response transformer now invoked in dispatcher not adapter ([10eb238](https://github.com/axios/axios/commit/10eb23865101f9347570552c04e9d6211376e25e))
|
|
||||||
- **BREAKING** Request adapters now return a `Promise` ([157efd5](https://github.com/axios/axios/commit/157efd5615890301824e3121cc6c9d2f9b21f94a))
|
|
||||||
- Fixing issue with `withCredentials` not being overwritten ([#343](https://github.com/axios/axios/issues/343))
|
|
||||||
- Fixing regression with request transformer being called before request interceptor ([#352](https://github.com/axios/axios/issues/352))
|
|
||||||
- Fixing custom instance defaults ([#341](https://github.com/axios/axios/issues/341))
|
|
||||||
- Fixing instances created from `axios.create` to have same API as default axios ([#217](https://github.com/axios/axios/issues/217))
|
|
||||||
|
|
||||||
### 0.12.0 (May 31, 2016)
|
|
||||||
|
|
||||||
- Adding support for `URLSearchParams` ([#317](https://github.com/axios/axios/pull/317))
|
|
||||||
- Adding `maxRedirects` option ([#307](https://github.com/axios/axios/pull/307))
|
|
||||||
|
|
||||||
### 0.11.1 (May 17, 2016)
|
|
||||||
|
|
||||||
- Fixing IE CORS support ([#313](https://github.com/axios/axios/pull/313))
|
|
||||||
- Fixing detection of `FormData` ([#325](https://github.com/axios/axios/pull/325))
|
|
||||||
- Adding `Axios` class to exports ([#321](https://github.com/axios/axios/pull/321))
|
|
||||||
|
|
||||||
### 0.11.0 (Apr 26, 2016)
|
|
||||||
|
|
||||||
- Adding support for Stream with HTTP adapter ([#296](https://github.com/axios/axios/pull/296))
|
|
||||||
- Adding support for custom HTTP status code error ranges ([#308](https://github.com/axios/axios/pull/308))
|
|
||||||
- Fixing issue with ArrayBuffer ([#299](https://github.com/axios/axios/pull/299))
|
|
||||||
|
|
||||||
### 0.10.0 (Apr 20, 2016)
|
|
||||||
|
|
||||||
- Fixing issue with some requests sending `undefined` instead of `null` ([#250](https://github.com/axios/axios/pull/250))
|
|
||||||
- Fixing basic auth for HTTP adapter ([#252](https://github.com/axios/axios/pull/252))
|
|
||||||
- Fixing request timeout for XHR adapter ([#227](https://github.com/axios/axios/pull/227))
|
|
||||||
- Fixing IE8 support by using `onreadystatechange` instead of `onload` ([#249](https://github.com/axios/axios/pull/249))
|
|
||||||
- Fixing IE9 cross domain requests ([#251](https://github.com/axios/axios/pull/251))
|
|
||||||
- Adding `maxContentLength` option ([#275](https://github.com/axios/axios/pull/275))
|
|
||||||
- Fixing XHR support for WebWorker environment ([#279](https://github.com/axios/axios/pull/279))
|
|
||||||
- Adding request instance to response ([#200](https://github.com/axios/axios/pull/200))
|
|
||||||
|
|
||||||
### 0.9.1 (Jan 24, 2016)
|
|
||||||
|
|
||||||
- Improving handling of request timeout in node ([#124](https://github.com/axios/axios/issues/124))
|
|
||||||
- Fixing network errors not rejecting ([#205](https://github.com/axios/axios/pull/205))
|
|
||||||
- Fixing issue with IE rejecting on HTTP 204 ([#201](https://github.com/axios/axios/issues/201))
|
|
||||||
- Fixing host/port when following redirects ([#198](https://github.com/axios/axios/pull/198))
|
|
||||||
|
|
||||||
### 0.9.0 (Jan 18, 2016)
|
|
||||||
|
|
||||||
- Adding support for custom adapters
|
|
||||||
- Fixing Content-Type header being removed when data is false ([#195](https://github.com/axios/axios/pull/195))
|
|
||||||
- Improving XDomainRequest implementation ([#185](https://github.com/axios/axios/pull/185))
|
|
||||||
- Improving config merging and order of precedence ([#183](https://github.com/axios/axios/pull/183))
|
|
||||||
- Fixing XDomainRequest support for only <= IE9 ([#182](https://github.com/axios/axios/pull/182))
|
|
||||||
|
|
||||||
### 0.8.1 (Dec 14, 2015)
|
|
||||||
|
|
||||||
- Adding support for passing XSRF token for cross domain requests when using `withCredentials` ([#168](https://github.com/axios/axios/pull/168))
|
|
||||||
- Fixing error with format of basic auth header ([#178](https://github.com/axios/axios/pull/173))
|
|
||||||
- Fixing error with JSON payloads throwing `InvalidStateError` in some cases ([#174](https://github.com/axios/axios/pull/174))
|
|
||||||
|
|
||||||
### 0.8.0 (Dec 11, 2015)
|
|
||||||
|
|
||||||
- Adding support for creating instances of axios ([#123](https://github.com/axios/axios/pull/123))
|
|
||||||
- Fixing http adapter to use `Buffer` instead of `String` in case of `responseType === 'arraybuffer'` ([#128](https://github.com/axios/axios/pull/128))
|
|
||||||
- Adding support for using custom parameter serializer with `paramsSerializer` option ([#121](https://github.com/axios/axios/pull/121))
|
|
||||||
- Fixing issue in IE8 caused by `forEach` on `arguments` ([#127](https://github.com/axios/axios/pull/127))
|
|
||||||
- Adding support for following redirects in node ([#146](https://github.com/axios/axios/pull/146))
|
|
||||||
- Adding support for transparent decompression if `content-encoding` is set ([#149](https://github.com/axios/axios/pull/149))
|
|
||||||
- Adding support for transparent XDomainRequest to handle cross domain requests in IE9 ([#140](https://github.com/axios/axios/pull/140))
|
|
||||||
- Adding support for HTTP basic auth via Authorization header ([#167](https://github.com/axios/axios/pull/167))
|
|
||||||
- Adding support for baseURL option ([#160](https://github.com/axios/axios/pull/160))
|
|
||||||
|
|
||||||
### 0.7.0 (Sep 29, 2015)
|
|
||||||
|
|
||||||
- Fixing issue with minified bundle in IE8 ([#87](https://github.com/axios/axios/pull/87))
|
|
||||||
- Adding support for passing agent in node ([#102](https://github.com/axios/axios/pull/102))
|
|
||||||
- Adding support for returning result from `axios.spread` for chaining ([#106](https://github.com/axios/axios/pull/106))
|
|
||||||
- Fixing typescript definition ([#105](https://github.com/axios/axios/pull/105))
|
|
||||||
- Fixing default timeout config for node ([#112](https://github.com/axios/axios/pull/112))
|
|
||||||
- Adding support for use in web workers, and react-native ([#70](https://github.com/axios/axios/issue/70)), ([#98](https://github.com/axios/axios/pull/98))
|
|
||||||
- Adding support for fetch like API `axios(url[, config])` ([#116](https://github.com/axios/axios/issues/116))
|
|
||||||
|
|
||||||
### 0.6.0 (Sep 21, 2015)
|
|
||||||
|
|
||||||
- Removing deprecated success/error aliases
|
|
||||||
- Fixing issue with array params not being properly encoded ([#49](https://github.com/axios/axios/pull/49))
|
|
||||||
- Fixing issue with User-Agent getting overridden ([#69](https://github.com/axios/axios/issues/69))
|
|
||||||
- Adding support for timeout config ([#56](https://github.com/axios/axios/issues/56))
|
|
||||||
- Removing es6-promise dependency
|
|
||||||
- Fixing issue preventing `length` to be used as a parameter ([#91](https://github.com/axios/axios/pull/91))
|
|
||||||
- Fixing issue with IE8 ([#85](https://github.com/axios/axios/pull/85))
|
|
||||||
- Converting build to UMD
|
|
||||||
|
|
||||||
### 0.5.4 (Apr 08, 2015)
|
|
||||||
|
|
||||||
- Fixing issue with FormData not being sent ([#53](https://github.com/axios/axios/issues/53))
|
|
||||||
|
|
||||||
### 0.5.3 (Apr 07, 2015)
|
|
||||||
|
|
||||||
- Using JSON.parse unconditionally when transforming response string ([#55](https://github.com/axios/axios/issues/55))
|
|
||||||
|
|
||||||
### 0.5.2 (Mar 13, 2015)
|
|
||||||
|
|
||||||
- Adding support for `statusText` in response ([#46](https://github.com/axios/axios/issues/46))
|
|
||||||
|
|
||||||
### 0.5.1 (Mar 10, 2015)
|
|
||||||
|
|
||||||
- Fixing issue using strict mode ([#45](https://github.com/axios/axios/issues/45))
|
|
||||||
- Fixing issue with standalone build ([#47](https://github.com/axios/axios/issues/47))
|
|
||||||
|
|
||||||
### 0.5.0 (Jan 23, 2015)
|
|
||||||
|
|
||||||
- Adding support for intercepetors ([#14](https://github.com/axios/axios/issues/14))
|
|
||||||
- Updating es6-promise dependency
|
|
||||||
|
|
||||||
### 0.4.2 (Dec 10, 2014)
|
|
||||||
|
|
||||||
- Fixing issue with `Content-Type` when using `FormData` ([#22](https://github.com/axios/axios/issues/22))
|
|
||||||
- Adding support for TypeScript ([#25](https://github.com/axios/axios/issues/25))
|
|
||||||
- Fixing issue with standalone build ([#29](https://github.com/axios/axios/issues/29))
|
|
||||||
- Fixing issue with verbs needing to be capitalized in some browsers ([#30](https://github.com/axios/axios/issues/30))
|
|
||||||
|
|
||||||
### 0.4.1 (Oct 15, 2014)
|
|
||||||
|
|
||||||
- Adding error handling to request for node.js ([#18](https://github.com/axios/axios/issues/18))
|
|
||||||
|
|
||||||
### 0.4.0 (Oct 03, 2014)
|
|
||||||
|
|
||||||
- Adding support for `ArrayBuffer` and `ArrayBufferView` ([#10](https://github.com/axios/axios/issues/10))
|
|
||||||
- Adding support for utf-8 for node.js ([#13](https://github.com/axios/axios/issues/13))
|
|
||||||
- Adding support for SSL for node.js ([#12](https://github.com/axios/axios/issues/12))
|
|
||||||
- Fixing incorrect `Content-Type` header ([#9](https://github.com/axios/axios/issues/9))
|
|
||||||
- Adding standalone build without bundled es6-promise ([#11](https://github.com/axios/axios/issues/11))
|
|
||||||
- Deprecating `success`/`error` in favor of `then`/`catch`
|
|
||||||
|
|
||||||
### 0.3.1 (Sep 16, 2014)
|
|
||||||
|
|
||||||
- Fixing missing post body when using node.js ([#3](https://github.com/axios/axios/issues/3))
|
|
||||||
|
|
||||||
### 0.3.0 (Sep 16, 2014)
|
|
||||||
|
|
||||||
- Fixing `success` and `error` to properly receive response data as individual arguments ([#8](https://github.com/axios/axios/issues/8))
|
|
||||||
- Updating `then` and `catch` to receive response data as a single object ([#6](https://github.com/axios/axios/issues/6))
|
|
||||||
- Fixing issue with `all` not working ([#7](https://github.com/axios/axios/issues/7))
|
|
||||||
|
|
||||||
### 0.2.2 (Sep 14, 2014)
|
|
||||||
|
|
||||||
- Fixing bundling with browserify ([#4](https://github.com/axios/axios/issues/4))
|
|
||||||
|
|
||||||
### 0.2.1 (Sep 12, 2014)
|
|
||||||
|
|
||||||
- Fixing build problem causing ridiculous file sizes
|
|
||||||
|
|
||||||
### 0.2.0 (Sep 12, 2014)
|
|
||||||
|
|
||||||
- Adding support for `all` and `spread`
|
|
||||||
- Adding support for node.js ([#1](https://github.com/axios/axios/issues/1))
|
|
||||||
|
|
||||||
### 0.1.0 (Aug 29, 2014)
|
|
||||||
|
|
||||||
- Initial release
|
|
19
node_modules/axios/LICENSE
generated
vendored
19
node_modules/axios/LICENSE
generated
vendored
|
@ -1,19 +0,0 @@
|
||||||
Copyright (c) 2014-present Matt Zabriskie
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
|
||||||
all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
THE SOFTWARE.
|
|
800
node_modules/axios/README.md
generated
vendored
800
node_modules/axios/README.md
generated
vendored
|
@ -1,800 +0,0 @@
|
||||||
# axios
|
|
||||||
|
|
||||||
[![npm version](https://img.shields.io/npm/v/axios.svg?style=flat-square)](https://www.npmjs.org/package/axios)
|
|
||||||
[![CDNJS](https://img.shields.io/cdnjs/v/axios.svg?style=flat-square)](https://cdnjs.com/libraries/axios)
|
|
||||||
[![build status](https://img.shields.io/travis/axios/axios/master.svg?style=flat-square)](https://travis-ci.org/axios/axios)
|
|
||||||
[![code coverage](https://img.shields.io/coveralls/mzabriskie/axios.svg?style=flat-square)](https://coveralls.io/r/mzabriskie/axios)
|
|
||||||
[![install size](https://packagephobia.now.sh/badge?p=axios)](https://packagephobia.now.sh/result?p=axios)
|
|
||||||
[![npm downloads](https://img.shields.io/npm/dm/axios.svg?style=flat-square)](http://npm-stat.com/charts.html?package=axios)
|
|
||||||
[![gitter chat](https://img.shields.io/gitter/room/mzabriskie/axios.svg?style=flat-square)](https://gitter.im/mzabriskie/axios)
|
|
||||||
[![code helpers](https://www.codetriage.com/axios/axios/badges/users.svg)](https://www.codetriage.com/axios/axios)
|
|
||||||
|
|
||||||
Promise based HTTP client for the browser and node.js
|
|
||||||
## Table of Contents
|
|
||||||
|
|
||||||
- [Features](#features)
|
|
||||||
- [Browser Support](#browser-support)
|
|
||||||
- [Installing](#installing)
|
|
||||||
- [Example](#example)
|
|
||||||
- [Axios API](#axios-api)
|
|
||||||
- [Request method aliases](#request-method-aliases)
|
|
||||||
- [Concurrency (Deprecated)](#concurrency-deprecated)
|
|
||||||
- [Creating an instance](#creating-an-instance)
|
|
||||||
- [Instance methods](#instance-methods)
|
|
||||||
- [Request Config](#request-config)
|
|
||||||
- [Response Schema](#response-schema)
|
|
||||||
- [Config Defaults](#config-defaults)
|
|
||||||
- [Global axios defaults](#global-axios-defaults)
|
|
||||||
- [Custom instance defaults](#custom-instance-defaults)
|
|
||||||
- [Config order of precedence](#config-order-of-precedence)
|
|
||||||
- [Interceptors](#interceptors)
|
|
||||||
- [Handling Errors](#handling-errors)
|
|
||||||
- [Cancellation](#cancellation)
|
|
||||||
- [Using application/x-www-form-urlencoded format](#using-applicationx-www-form-urlencoded-format)
|
|
||||||
- [Browser](#browser)
|
|
||||||
- [Node.js](#nodejs)
|
|
||||||
- [Query string](#query-string)
|
|
||||||
- [Form data](#form-data)
|
|
||||||
- [Semver](#semver)
|
|
||||||
- [Promises](#promises)
|
|
||||||
- [TypeScript](#typescript)
|
|
||||||
- [Resources](#resources)
|
|
||||||
- [Credits](#credits)
|
|
||||||
- [License](#license)
|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
- Make [XMLHttpRequests](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) from the browser
|
|
||||||
- Make [http](http://nodejs.org/api/http.html) requests from node.js
|
|
||||||
- Supports the [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) API
|
|
||||||
- Intercept request and response
|
|
||||||
- Transform request and response data
|
|
||||||
- Cancel requests
|
|
||||||
- Automatic transforms for JSON data
|
|
||||||
- Client side support for protecting against [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery)
|
|
||||||
|
|
||||||
## Browser Support
|
|
||||||
|
|
||||||
![Chrome](https://raw.github.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png) | ![Firefox](https://raw.github.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png) | ![Safari](https://raw.github.com/alrra/browser-logos/master/src/safari/safari_48x48.png) | ![Opera](https://raw.github.com/alrra/browser-logos/master/src/opera/opera_48x48.png) | ![Edge](https://raw.github.com/alrra/browser-logos/master/src/edge/edge_48x48.png) | ![IE](https://raw.github.com/alrra/browser-logos/master/src/archive/internet-explorer_9-11/internet-explorer_9-11_48x48.png) |
|
|
||||||
--- | --- | --- | --- | --- | --- |
|
|
||||||
Latest ✔ | Latest ✔ | Latest ✔ | Latest ✔ | Latest ✔ | 11 ✔ |
|
|
||||||
|
|
||||||
[![Browser Matrix](https://saucelabs.com/open_sauce/build_matrix/axios.svg)](https://saucelabs.com/u/axios)
|
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
Using npm:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ npm install axios
|
|
||||||
```
|
|
||||||
|
|
||||||
Using bower:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ bower install axios
|
|
||||||
```
|
|
||||||
|
|
||||||
Using yarn:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ yarn add axios
|
|
||||||
```
|
|
||||||
|
|
||||||
Using jsDelivr CDN:
|
|
||||||
|
|
||||||
```html
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
|
||||||
```
|
|
||||||
|
|
||||||
Using unpkg CDN:
|
|
||||||
|
|
||||||
```html
|
|
||||||
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
|
|
||||||
```
|
|
||||||
|
|
||||||
## Example
|
|
||||||
|
|
||||||
### note: CommonJS usage
|
|
||||||
In order to gain the TypeScript typings (for intellisense / autocomplete) while using CommonJS imports with `require()` use the following approach:
|
|
||||||
|
|
||||||
```js
|
|
||||||
const axios = require('axios').default;
|
|
||||||
|
|
||||||
// axios.<method> will now provide autocomplete and parameter typings
|
|
||||||
```
|
|
||||||
|
|
||||||
Performing a `GET` request
|
|
||||||
|
|
||||||
```js
|
|
||||||
const axios = require('axios');
|
|
||||||
|
|
||||||
// Make a request for a user with a given ID
|
|
||||||
axios.get('/user?ID=12345')
|
|
||||||
.then(function (response) {
|
|
||||||
// handle success
|
|
||||||
console.log(response);
|
|
||||||
})
|
|
||||||
.catch(function (error) {
|
|
||||||
// handle error
|
|
||||||
console.log(error);
|
|
||||||
})
|
|
||||||
.then(function () {
|
|
||||||
// always executed
|
|
||||||
});
|
|
||||||
|
|
||||||
// Optionally the request above could also be done as
|
|
||||||
axios.get('/user', {
|
|
||||||
params: {
|
|
||||||
ID: 12345
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.then(function (response) {
|
|
||||||
console.log(response);
|
|
||||||
})
|
|
||||||
.catch(function (error) {
|
|
||||||
console.log(error);
|
|
||||||
})
|
|
||||||
.then(function () {
|
|
||||||
// always executed
|
|
||||||
});
|
|
||||||
|
|
||||||
// Want to use async/await? Add the `async` keyword to your outer function/method.
|
|
||||||
async function getUser() {
|
|
||||||
try {
|
|
||||||
const response = await axios.get('/user?ID=12345');
|
|
||||||
console.log(response);
|
|
||||||
} catch (error) {
|
|
||||||
console.error(error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
> **NOTE:** `async/await` is part of ECMAScript 2017 and is not supported in Internet
|
|
||||||
> Explorer and older browsers, so use with caution.
|
|
||||||
|
|
||||||
Performing a `POST` request
|
|
||||||
|
|
||||||
```js
|
|
||||||
axios.post('/user', {
|
|
||||||
firstName: 'Fred',
|
|
||||||
lastName: 'Flintstone'
|
|
||||||
})
|
|
||||||
.then(function (response) {
|
|
||||||
console.log(response);
|
|
||||||
})
|
|
||||||
.catch(function (error) {
|
|
||||||
console.log(error);
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
Performing multiple concurrent requests
|
|
||||||
|
|
||||||
```js
|
|
||||||
function getUserAccount() {
|
|
||||||
return axios.get('/user/12345');
|
|
||||||
}
|
|
||||||
|
|
||||||
function getUserPermissions() {
|
|
||||||
return axios.get('/user/12345/permissions');
|
|
||||||
}
|
|
||||||
|
|
||||||
Promise.all([getUserAccount(), getUserPermissions()])
|
|
||||||
.then(function (results) {
|
|
||||||
const acct = results[0];
|
|
||||||
const perm = results[1];
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
## axios API
|
|
||||||
|
|
||||||
Requests can be made by passing the relevant config to `axios`.
|
|
||||||
|
|
||||||
##### axios(config)
|
|
||||||
|
|
||||||
```js
|
|
||||||
// Send a POST request
|
|
||||||
axios({
|
|
||||||
method: 'post',
|
|
||||||
url: '/user/12345',
|
|
||||||
data: {
|
|
||||||
firstName: 'Fred',
|
|
||||||
lastName: 'Flintstone'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
```js
|
|
||||||
// GET request for remote image in node.js
|
|
||||||
axios({
|
|
||||||
method: 'get',
|
|
||||||
url: 'http://bit.ly/2mTM3nY',
|
|
||||||
responseType: 'stream'
|
|
||||||
})
|
|
||||||
.then(function (response) {
|
|
||||||
response.data.pipe(fs.createWriteStream('ada_lovelace.jpg'))
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
##### axios(url[, config])
|
|
||||||
|
|
||||||
```js
|
|
||||||
// Send a GET request (default method)
|
|
||||||
axios('/user/12345');
|
|
||||||
```
|
|
||||||
|
|
||||||
### Request method aliases
|
|
||||||
|
|
||||||
For convenience aliases have been provided for all supported request methods.
|
|
||||||
|
|
||||||
##### axios.request(config)
|
|
||||||
##### axios.get(url[, config])
|
|
||||||
##### axios.delete(url[, config])
|
|
||||||
##### axios.head(url[, config])
|
|
||||||
##### axios.options(url[, config])
|
|
||||||
##### axios.post(url[, data[, config]])
|
|
||||||
##### axios.put(url[, data[, config]])
|
|
||||||
##### axios.patch(url[, data[, config]])
|
|
||||||
|
|
||||||
###### NOTE
|
|
||||||
When using the alias methods `url`, `method`, and `data` properties don't need to be specified in config.
|
|
||||||
|
|
||||||
### Concurrency (Deprecated)
|
|
||||||
Please use `Promise.all` to replace the below functions.
|
|
||||||
|
|
||||||
Helper functions for dealing with concurrent requests.
|
|
||||||
|
|
||||||
axios.all(iterable)
|
|
||||||
axios.spread(callback)
|
|
||||||
|
|
||||||
### Creating an instance
|
|
||||||
|
|
||||||
You can create a new instance of axios with a custom config.
|
|
||||||
|
|
||||||
##### axios.create([config])
|
|
||||||
|
|
||||||
```js
|
|
||||||
const instance = axios.create({
|
|
||||||
baseURL: 'https://some-domain.com/api/',
|
|
||||||
timeout: 1000,
|
|
||||||
headers: {'X-Custom-Header': 'foobar'}
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
### Instance methods
|
|
||||||
|
|
||||||
The available instance methods are listed below. The specified config will be merged with the instance config.
|
|
||||||
|
|
||||||
##### axios#request(config)
|
|
||||||
##### axios#get(url[, config])
|
|
||||||
##### axios#delete(url[, config])
|
|
||||||
##### axios#head(url[, config])
|
|
||||||
##### axios#options(url[, config])
|
|
||||||
##### axios#post(url[, data[, config]])
|
|
||||||
##### axios#put(url[, data[, config]])
|
|
||||||
##### axios#patch(url[, data[, config]])
|
|
||||||
##### axios#getUri([config])
|
|
||||||
|
|
||||||
## Request Config
|
|
||||||
|
|
||||||
These are the available config options for making requests. Only the `url` is required. Requests will default to `GET` if `method` is not specified.
|
|
||||||
|
|
||||||
```js
|
|
||||||
{
|
|
||||||
// `url` is the server URL that will be used for the request
|
|
||||||
url: '/user',
|
|
||||||
|
|
||||||
// `method` is the request method to be used when making the request
|
|
||||||
method: 'get', // default
|
|
||||||
|
|
||||||
// `baseURL` will be prepended to `url` unless `url` is absolute.
|
|
||||||
// It can be convenient to set `baseURL` for an instance of axios to pass relative URLs
|
|
||||||
// to methods of that instance.
|
|
||||||
baseURL: 'https://some-domain.com/api/',
|
|
||||||
|
|
||||||
// `transformRequest` allows changes to the request data before it is sent to the server
|
|
||||||
// This is only applicable for request methods 'PUT', 'POST', 'PATCH' and 'DELETE'
|
|
||||||
// The last function in the array must return a string or an instance of Buffer, ArrayBuffer,
|
|
||||||
// FormData or Stream
|
|
||||||
// You may modify the headers object.
|
|
||||||
transformRequest: [function (data, headers) {
|
|
||||||
// Do whatever you want to transform the data
|
|
||||||
|
|
||||||
return data;
|
|
||||||
}],
|
|
||||||
|
|
||||||
// `transformResponse` allows changes to the response data to be made before
|
|
||||||
// it is passed to then/catch
|
|
||||||
transformResponse: [function (data) {
|
|
||||||
// Do whatever you want to transform the data
|
|
||||||
|
|
||||||
return data;
|
|
||||||
}],
|
|
||||||
|
|
||||||
// `headers` are custom headers to be sent
|
|
||||||
headers: {'X-Requested-With': 'XMLHttpRequest'},
|
|
||||||
|
|
||||||
// `params` are the URL parameters to be sent with the request
|
|
||||||
// Must be a plain object or a URLSearchParams object
|
|
||||||
params: {
|
|
||||||
ID: 12345
|
|
||||||
},
|
|
||||||
|
|
||||||
// `paramsSerializer` is an optional function in charge of serializing `params`
|
|
||||||
// (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/)
|
|
||||||
paramsSerializer: function (params) {
|
|
||||||
return Qs.stringify(params, {arrayFormat: 'brackets'})
|
|
||||||
},
|
|
||||||
|
|
||||||
// `data` is the data to be sent as the request body
|
|
||||||
// Only applicable for request methods 'PUT', 'POST', 'DELETE , and 'PATCH'
|
|
||||||
// When no `transformRequest` is set, must be of one of the following types:
|
|
||||||
// - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams
|
|
||||||
// - Browser only: FormData, File, Blob
|
|
||||||
// - Node only: Stream, Buffer
|
|
||||||
data: {
|
|
||||||
firstName: 'Fred'
|
|
||||||
},
|
|
||||||
|
|
||||||
// syntax alternative to send data into the body
|
|
||||||
// method post
|
|
||||||
// only the value is sent, not the key
|
|
||||||
data: 'Country=Brasil&City=Belo Horizonte',
|
|
||||||
|
|
||||||
// `timeout` specifies the number of milliseconds before the request times out.
|
|
||||||
// If the request takes longer than `timeout`, the request will be aborted.
|
|
||||||
timeout: 1000, // default is `0` (no timeout)
|
|
||||||
|
|
||||||
// `withCredentials` indicates whether or not cross-site Access-Control requests
|
|
||||||
// should be made using credentials
|
|
||||||
withCredentials: false, // default
|
|
||||||
|
|
||||||
// `adapter` allows custom handling of requests which makes testing easier.
|
|
||||||
// Return a promise and supply a valid response (see lib/adapters/README.md).
|
|
||||||
adapter: function (config) {
|
|
||||||
/* ... */
|
|
||||||
},
|
|
||||||
|
|
||||||
// `auth` indicates that HTTP Basic auth should be used, and supplies credentials.
|
|
||||||
// This will set an `Authorization` header, overwriting any existing
|
|
||||||
// `Authorization` custom headers you have set using `headers`.
|
|
||||||
// Please note that only HTTP Basic auth is configurable through this parameter.
|
|
||||||
// For Bearer tokens and such, use `Authorization` custom headers instead.
|
|
||||||
auth: {
|
|
||||||
username: 'janedoe',
|
|
||||||
password: 's00pers3cret'
|
|
||||||
},
|
|
||||||
|
|
||||||
// `responseType` indicates the type of data that the server will respond with
|
|
||||||
// options are: 'arraybuffer', 'document', 'json', 'text', 'stream'
|
|
||||||
// browser only: 'blob'
|
|
||||||
responseType: 'json', // default
|
|
||||||
|
|
||||||
// `responseEncoding` indicates encoding to use for decoding responses (Node.js only)
|
|
||||||
// Note: Ignored for `responseType` of 'stream' or client-side requests
|
|
||||||
responseEncoding: 'utf8', // default
|
|
||||||
|
|
||||||
// `xsrfCookieName` is the name of the cookie to use as a value for xsrf token
|
|
||||||
xsrfCookieName: 'XSRF-TOKEN', // default
|
|
||||||
|
|
||||||
// `xsrfHeaderName` is the name of the http header that carries the xsrf token value
|
|
||||||
xsrfHeaderName: 'X-XSRF-TOKEN', // default
|
|
||||||
|
|
||||||
// `onUploadProgress` allows handling of progress events for uploads
|
|
||||||
// browser only
|
|
||||||
onUploadProgress: function (progressEvent) {
|
|
||||||
// Do whatever you want with the native progress event
|
|
||||||
},
|
|
||||||
|
|
||||||
// `onDownloadProgress` allows handling of progress events for downloads
|
|
||||||
// browser only
|
|
||||||
onDownloadProgress: function (progressEvent) {
|
|
||||||
// Do whatever you want with the native progress event
|
|
||||||
},
|
|
||||||
|
|
||||||
// `maxContentLength` defines the max size of the http response content in bytes allowed in node.js
|
|
||||||
maxContentLength: 2000,
|
|
||||||
|
|
||||||
// `maxBodyLength` (Node only option) defines the max size of the http request content in bytes allowed
|
|
||||||
maxBodyLength: 2000,
|
|
||||||
|
|
||||||
// `validateStatus` defines whether to resolve or reject the promise for a given
|
|
||||||
// HTTP response status code. If `validateStatus` returns `true` (or is set to `null`
|
|
||||||
// or `undefined`), the promise will be resolved; otherwise, the promise will be
|
|
||||||
// rejected.
|
|
||||||
validateStatus: function (status) {
|
|
||||||
return status >= 200 && status < 300; // default
|
|
||||||
},
|
|
||||||
|
|
||||||
// `maxRedirects` defines the maximum number of redirects to follow in node.js.
|
|
||||||
// If set to 0, no redirects will be followed.
|
|
||||||
maxRedirects: 5, // default
|
|
||||||
|
|
||||||
// `socketPath` defines a UNIX Socket to be used in node.js.
|
|
||||||
// e.g. '/var/run/docker.sock' to send requests to the docker daemon.
|
|
||||||
// Only either `socketPath` or `proxy` can be specified.
|
|
||||||
// If both are specified, `socketPath` is used.
|
|
||||||
socketPath: null, // default
|
|
||||||
|
|
||||||
// `httpAgent` and `httpsAgent` define a custom agent to be used when performing http
|
|
||||||
// and https requests, respectively, in node.js. This allows options to be added like
|
|
||||||
// `keepAlive` that are not enabled by default.
|
|
||||||
httpAgent: new http.Agent({ keepAlive: true }),
|
|
||||||
httpsAgent: new https.Agent({ keepAlive: true }),
|
|
||||||
|
|
||||||
// `proxy` defines the hostname, port, and protocol of the proxy server.
|
|
||||||
// You can also define your proxy using the conventional `http_proxy` and
|
|
||||||
// `https_proxy` environment variables. If you are using environment variables
|
|
||||||
// for your proxy configuration, you can also define a `no_proxy` environment
|
|
||||||
// variable as a comma-separated list of domains that should not be proxied.
|
|
||||||
// Use `false` to disable proxies, ignoring environment variables.
|
|
||||||
// `auth` indicates that HTTP Basic auth should be used to connect to the proxy, and
|
|
||||||
// supplies credentials.
|
|
||||||
// This will set an `Proxy-Authorization` header, overwriting any existing
|
|
||||||
// `Proxy-Authorization` custom headers you have set using `headers`.
|
|
||||||
// If the proxy server uses HTTPS, then you must set the protocol to `https`.
|
|
||||||
proxy: {
|
|
||||||
protocol: 'https',
|
|
||||||
host: '127.0.0.1',
|
|
||||||
port: 9000,
|
|
||||||
auth: {
|
|
||||||
username: 'mikeymike',
|
|
||||||
password: 'rapunz3l'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
// `cancelToken` specifies a cancel token that can be used to cancel the request
|
|
||||||
// (see Cancellation section below for details)
|
|
||||||
cancelToken: new CancelToken(function (cancel) {
|
|
||||||
}),
|
|
||||||
|
|
||||||
// `decompress` indicates whether or not the response body should be decompressed
|
|
||||||
// automatically. If set to `true` will also remove the 'content-encoding' header
|
|
||||||
// from the responses objects of all decompressed responses
|
|
||||||
// - Node only (XHR cannot turn off decompression)
|
|
||||||
decompress: true // default
|
|
||||||
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Response Schema
|
|
||||||
|
|
||||||
The response for a request contains the following information.
|
|
||||||
|
|
||||||
```js
|
|
||||||
{
|
|
||||||
// `data` is the response that was provided by the server
|
|
||||||
data: {},
|
|
||||||
|
|
||||||
// `status` is the HTTP status code from the server response
|
|
||||||
status: 200,
|
|
||||||
|
|
||||||
// `statusText` is the HTTP status message from the server response
|
|
||||||
statusText: 'OK',
|
|
||||||
|
|
||||||
// `headers` the HTTP headers that the server responded with
|
|
||||||
// All header names are lower cased and can be accessed using the bracket notation.
|
|
||||||
// Example: `response.headers['content-type']`
|
|
||||||
headers: {},
|
|
||||||
|
|
||||||
// `config` is the config that was provided to `axios` for the request
|
|
||||||
config: {},
|
|
||||||
|
|
||||||
// `request` is the request that generated this response
|
|
||||||
// It is the last ClientRequest instance in node.js (in redirects)
|
|
||||||
// and an XMLHttpRequest instance in the browser
|
|
||||||
request: {}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
When using `then`, you will receive the response as follows:
|
|
||||||
|
|
||||||
```js
|
|
||||||
axios.get('/user/12345')
|
|
||||||
.then(function (response) {
|
|
||||||
console.log(response.data);
|
|
||||||
console.log(response.status);
|
|
||||||
console.log(response.statusText);
|
|
||||||
console.log(response.headers);
|
|
||||||
console.log(response.config);
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
When using `catch`, or passing a [rejection callback](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then) as second parameter of `then`, the response will be available through the `error` object as explained in the [Handling Errors](#handling-errors) section.
|
|
||||||
|
|
||||||
## Config Defaults
|
|
||||||
|
|
||||||
You can specify config defaults that will be applied to every request.
|
|
||||||
|
|
||||||
### Global axios defaults
|
|
||||||
|
|
||||||
```js
|
|
||||||
axios.defaults.baseURL = 'https://api.example.com';
|
|
||||||
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
|
|
||||||
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
|
|
||||||
```
|
|
||||||
|
|
||||||
### Custom instance defaults
|
|
||||||
|
|
||||||
```js
|
|
||||||
// Set config defaults when creating the instance
|
|
||||||
const instance = axios.create({
|
|
||||||
baseURL: 'https://api.example.com'
|
|
||||||
});
|
|
||||||
|
|
||||||
// Alter defaults after instance has been created
|
|
||||||
instance.defaults.headers.common['Authorization'] = AUTH_TOKEN;
|
|
||||||
```
|
|
||||||
|
|
||||||
### Config order of precedence
|
|
||||||
|
|
||||||
Config will be merged with an order of precedence. The order is library defaults found in [lib/defaults.js](https://github.com/axios/axios/blob/master/lib/defaults.js#L28), then `defaults` property of the instance, and finally `config` argument for the request. The latter will take precedence over the former. Here's an example.
|
|
||||||
|
|
||||||
```js
|
|
||||||
// Create an instance using the config defaults provided by the library
|
|
||||||
// At this point the timeout config value is `0` as is the default for the library
|
|
||||||
const instance = axios.create();
|
|
||||||
|
|
||||||
// Override timeout default for the library
|
|
||||||
// Now all requests using this instance will wait 2.5 seconds before timing out
|
|
||||||
instance.defaults.timeout = 2500;
|
|
||||||
|
|
||||||
// Override timeout for this request as it's known to take a long time
|
|
||||||
instance.get('/longRequest', {
|
|
||||||
timeout: 5000
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
## Interceptors
|
|
||||||
|
|
||||||
You can intercept requests or responses before they are handled by `then` or `catch`.
|
|
||||||
|
|
||||||
```js
|
|
||||||
// Add a request interceptor
|
|
||||||
axios.interceptors.request.use(function (config) {
|
|
||||||
// Do something before request is sent
|
|
||||||
return config;
|
|
||||||
}, function (error) {
|
|
||||||
// Do something with request error
|
|
||||||
return Promise.reject(error);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Add a response interceptor
|
|
||||||
axios.interceptors.response.use(function (response) {
|
|
||||||
// Any status code that lie within the range of 2xx cause this function to trigger
|
|
||||||
// Do something with response data
|
|
||||||
return response;
|
|
||||||
}, function (error) {
|
|
||||||
// Any status codes that falls outside the range of 2xx cause this function to trigger
|
|
||||||
// Do something with response error
|
|
||||||
return Promise.reject(error);
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
If you need to remove an interceptor later you can.
|
|
||||||
|
|
||||||
```js
|
|
||||||
const myInterceptor = axios.interceptors.request.use(function () {/*...*/});
|
|
||||||
axios.interceptors.request.eject(myInterceptor);
|
|
||||||
```
|
|
||||||
|
|
||||||
You can add interceptors to a custom instance of axios.
|
|
||||||
|
|
||||||
```js
|
|
||||||
const instance = axios.create();
|
|
||||||
instance.interceptors.request.use(function () {/*...*/});
|
|
||||||
```
|
|
||||||
|
|
||||||
## Handling Errors
|
|
||||||
|
|
||||||
```js
|
|
||||||
axios.get('/user/12345')
|
|
||||||
.catch(function (error) {
|
|
||||||
if (error.response) {
|
|
||||||
// The request was made and the server responded with a status code
|
|
||||||
// that falls out of the range of 2xx
|
|
||||||
console.log(error.response.data);
|
|
||||||
console.log(error.response.status);
|
|
||||||
console.log(error.response.headers);
|
|
||||||
} else if (error.request) {
|
|
||||||
// The request was made but no response was received
|
|
||||||
// `error.request` is an instance of XMLHttpRequest in the browser and an instance of
|
|
||||||
// http.ClientRequest in node.js
|
|
||||||
console.log(error.request);
|
|
||||||
} else {
|
|
||||||
// Something happened in setting up the request that triggered an Error
|
|
||||||
console.log('Error', error.message);
|
|
||||||
}
|
|
||||||
console.log(error.config);
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
Using the `validateStatus` config option, you can define HTTP code(s) that should throw an error.
|
|
||||||
|
|
||||||
```js
|
|
||||||
axios.get('/user/12345', {
|
|
||||||
validateStatus: function (status) {
|
|
||||||
return status < 500; // Resolve only if the status code is less than 500
|
|
||||||
}
|
|
||||||
})
|
|
||||||
```
|
|
||||||
|
|
||||||
Using `toJSON` you get an object with more information about the HTTP error.
|
|
||||||
|
|
||||||
```js
|
|
||||||
axios.get('/user/12345')
|
|
||||||
.catch(function (error) {
|
|
||||||
console.log(error.toJSON());
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
## Cancellation
|
|
||||||
|
|
||||||
You can cancel a request using a *cancel token*.
|
|
||||||
|
|
||||||
> The axios cancel token API is based on the withdrawn [cancelable promises proposal](https://github.com/tc39/proposal-cancelable-promises).
|
|
||||||
|
|
||||||
You can create a cancel token using the `CancelToken.source` factory as shown below:
|
|
||||||
|
|
||||||
```js
|
|
||||||
const CancelToken = axios.CancelToken;
|
|
||||||
const source = CancelToken.source();
|
|
||||||
|
|
||||||
axios.get('/user/12345', {
|
|
||||||
cancelToken: source.token
|
|
||||||
}).catch(function (thrown) {
|
|
||||||
if (axios.isCancel(thrown)) {
|
|
||||||
console.log('Request canceled', thrown.message);
|
|
||||||
} else {
|
|
||||||
// handle error
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
axios.post('/user/12345', {
|
|
||||||
name: 'new name'
|
|
||||||
}, {
|
|
||||||
cancelToken: source.token
|
|
||||||
})
|
|
||||||
|
|
||||||
// cancel the request (the message parameter is optional)
|
|
||||||
source.cancel('Operation canceled by the user.');
|
|
||||||
```
|
|
||||||
|
|
||||||
You can also create a cancel token by passing an executor function to the `CancelToken` constructor:
|
|
||||||
|
|
||||||
```js
|
|
||||||
const CancelToken = axios.CancelToken;
|
|
||||||
let cancel;
|
|
||||||
|
|
||||||
axios.get('/user/12345', {
|
|
||||||
cancelToken: new CancelToken(function executor(c) {
|
|
||||||
// An executor function receives a cancel function as a parameter
|
|
||||||
cancel = c;
|
|
||||||
})
|
|
||||||
});
|
|
||||||
|
|
||||||
// cancel the request
|
|
||||||
cancel();
|
|
||||||
```
|
|
||||||
|
|
||||||
> Note: you can cancel several requests with the same cancel token.
|
|
||||||
|
|
||||||
## Using application/x-www-form-urlencoded format
|
|
||||||
|
|
||||||
By default, axios serializes JavaScript objects to `JSON`. To send data in the `application/x-www-form-urlencoded` format instead, you can use one of the following options.
|
|
||||||
|
|
||||||
### Browser
|
|
||||||
|
|
||||||
In a browser, you can use the [`URLSearchParams`](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams) API as follows:
|
|
||||||
|
|
||||||
```js
|
|
||||||
const params = new URLSearchParams();
|
|
||||||
params.append('param1', 'value1');
|
|
||||||
params.append('param2', 'value2');
|
|
||||||
axios.post('/foo', params);
|
|
||||||
```
|
|
||||||
|
|
||||||
> Note that `URLSearchParams` is not supported by all browsers (see [caniuse.com](http://www.caniuse.com/#feat=urlsearchparams)), but there is a [polyfill](https://github.com/WebReflection/url-search-params) available (make sure to polyfill the global environment).
|
|
||||||
|
|
||||||
Alternatively, you can encode data using the [`qs`](https://github.com/ljharb/qs) library:
|
|
||||||
|
|
||||||
```js
|
|
||||||
const qs = require('qs');
|
|
||||||
axios.post('/foo', qs.stringify({ 'bar': 123 }));
|
|
||||||
```
|
|
||||||
|
|
||||||
Or in another way (ES6),
|
|
||||||
|
|
||||||
```js
|
|
||||||
import qs from 'qs';
|
|
||||||
const data = { 'bar': 123 };
|
|
||||||
const options = {
|
|
||||||
method: 'POST',
|
|
||||||
headers: { 'content-type': 'application/x-www-form-urlencoded' },
|
|
||||||
data: qs.stringify(data),
|
|
||||||
url,
|
|
||||||
};
|
|
||||||
axios(options);
|
|
||||||
```
|
|
||||||
|
|
||||||
### Node.js
|
|
||||||
|
|
||||||
#### Query string
|
|
||||||
|
|
||||||
In node.js, you can use the [`querystring`](https://nodejs.org/api/querystring.html) module as follows:
|
|
||||||
|
|
||||||
```js
|
|
||||||
const querystring = require('querystring');
|
|
||||||
axios.post('http://something.com/', querystring.stringify({ foo: 'bar' }));
|
|
||||||
```
|
|
||||||
|
|
||||||
or ['URLSearchParams'](https://nodejs.org/api/url.html#url_class_urlsearchparams) from ['url module'](https://nodejs.org/api/url.html) as follows:
|
|
||||||
|
|
||||||
```js
|
|
||||||
const url = require('url');
|
|
||||||
const params = new url.URLSearchParams({ foo: 'bar' });
|
|
||||||
axios.post('http://something.com/', params.toString());
|
|
||||||
```
|
|
||||||
|
|
||||||
You can also use the [`qs`](https://github.com/ljharb/qs) library.
|
|
||||||
|
|
||||||
###### NOTE
|
|
||||||
The `qs` library is preferable if you need to stringify nested objects, as the `querystring` method has known issues with that use case (https://github.com/nodejs/node-v0.x-archive/issues/1665).
|
|
||||||
|
|
||||||
#### Form data
|
|
||||||
|
|
||||||
In node.js, you can use the [`form-data`](https://github.com/form-data/form-data) library as follows:
|
|
||||||
|
|
||||||
```js
|
|
||||||
const FormData = require('form-data');
|
|
||||||
|
|
||||||
const form = new FormData();
|
|
||||||
form.append('my_field', 'my value');
|
|
||||||
form.append('my_buffer', new Buffer(10));
|
|
||||||
form.append('my_file', fs.createReadStream('/foo/bar.jpg'));
|
|
||||||
|
|
||||||
axios.post('https://example.com', form, { headers: form.getHeaders() })
|
|
||||||
```
|
|
||||||
|
|
||||||
Alternatively, use an interceptor:
|
|
||||||
|
|
||||||
```js
|
|
||||||
axios.interceptors.request.use(config => {
|
|
||||||
if (config.data instanceof FormData) {
|
|
||||||
Object.assign(config.headers, config.data.getHeaders());
|
|
||||||
}
|
|
||||||
return config;
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
## Semver
|
|
||||||
|
|
||||||
Until axios reaches a `1.0` release, breaking changes will be released with a new minor version. For example `0.5.1`, and `0.5.4` will have the same API, but `0.6.0` will have breaking changes.
|
|
||||||
|
|
||||||
## Promises
|
|
||||||
|
|
||||||
axios depends on a native ES6 Promise implementation to be [supported](http://caniuse.com/promises).
|
|
||||||
If your environment doesn't support ES6 Promises, you can [polyfill](https://github.com/jakearchibald/es6-promise).
|
|
||||||
|
|
||||||
## TypeScript
|
|
||||||
axios includes [TypeScript](http://typescriptlang.org) definitions.
|
|
||||||
```typescript
|
|
||||||
import axios from 'axios';
|
|
||||||
axios.get('/user?ID=12345');
|
|
||||||
```
|
|
||||||
|
|
||||||
## Resources
|
|
||||||
|
|
||||||
* [Changelog](https://github.com/axios/axios/blob/master/CHANGELOG.md)
|
|
||||||
* [Upgrade Guide](https://github.com/axios/axios/blob/master/UPGRADE_GUIDE.md)
|
|
||||||
* [Ecosystem](https://github.com/axios/axios/blob/master/ECOSYSTEM.md)
|
|
||||||
* [Contributing Guide](https://github.com/axios/axios/blob/master/CONTRIBUTING.md)
|
|
||||||
* [Code of Conduct](https://github.com/axios/axios/blob/master/CODE_OF_CONDUCT.md)
|
|
||||||
|
|
||||||
## Credits
|
|
||||||
|
|
||||||
axios is heavily inspired by the [$http service](https://docs.angularjs.org/api/ng/service/$http) provided in [Angular](https://angularjs.org/). Ultimately axios is an effort to provide a standalone `$http`-like service for use outside of Angular.
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
[MIT](LICENSE)
|
|
162
node_modules/axios/UPGRADE_GUIDE.md
generated
vendored
162
node_modules/axios/UPGRADE_GUIDE.md
generated
vendored
|
@ -1,162 +0,0 @@
|
||||||
# Upgrade Guide
|
|
||||||
|
|
||||||
### 0.15.x -> 0.16.0
|
|
||||||
|
|
||||||
#### `Promise` Type Declarations
|
|
||||||
|
|
||||||
The `Promise` type declarations have been removed from the axios typings in favor of the built-in type declarations. If you use axios in a TypeScript project that targets `ES5`, please make sure to include the `es2015.promise` lib. Please see [this post](https://blog.mariusschulz.com/2016/11/25/typescript-2-0-built-in-type-declarations) for details.
|
|
||||||
|
|
||||||
### 0.13.x -> 0.14.0
|
|
||||||
|
|
||||||
#### TypeScript Definitions
|
|
||||||
|
|
||||||
The axios TypeScript definitions have been updated to match the axios API and use the ES2015 module syntax.
|
|
||||||
|
|
||||||
Please use the following `import` statement to import axios in TypeScript:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
import axios from 'axios';
|
|
||||||
|
|
||||||
axios.get('/foo')
|
|
||||||
.then(response => console.log(response))
|
|
||||||
.catch(error => console.log(error));
|
|
||||||
```
|
|
||||||
|
|
||||||
#### `agent` Config Option
|
|
||||||
|
|
||||||
The `agent` config option has been replaced with two new options: `httpAgent` and `httpsAgent`. Please use them instead.
|
|
||||||
|
|
||||||
```js
|
|
||||||
{
|
|
||||||
// Define a custom agent for HTTP
|
|
||||||
httpAgent: new http.Agent({ keepAlive: true }),
|
|
||||||
// Define a custom agent for HTTPS
|
|
||||||
httpsAgent: new https.Agent({ keepAlive: true })
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### `progress` Config Option
|
|
||||||
|
|
||||||
The `progress` config option has been replaced with the `onUploadProgress` and `onDownloadProgress` options.
|
|
||||||
|
|
||||||
```js
|
|
||||||
{
|
|
||||||
// Define a handler for upload progress events
|
|
||||||
onUploadProgress: function (progressEvent) {
|
|
||||||
// ...
|
|
||||||
},
|
|
||||||
|
|
||||||
// Define a handler for download progress events
|
|
||||||
onDownloadProgress: function (progressEvent) {
|
|
||||||
// ...
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### 0.12.x -> 0.13.0
|
|
||||||
|
|
||||||
The `0.13.0` release contains several changes to custom adapters and error handling.
|
|
||||||
|
|
||||||
#### Error Handling
|
|
||||||
|
|
||||||
Previous to this release an error could either be a server response with bad status code or an actual `Error`. With this release Promise will always reject with an `Error`. In the case that a response was received, the `Error` will also include the response.
|
|
||||||
|
|
||||||
```js
|
|
||||||
axios.get('/user/12345')
|
|
||||||
.catch((error) => {
|
|
||||||
console.log(error.message);
|
|
||||||
console.log(error.code); // Not always specified
|
|
||||||
console.log(error.config); // The config that was used to make the request
|
|
||||||
console.log(error.response); // Only available if response was received from the server
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Request Adapters
|
|
||||||
|
|
||||||
This release changes a few things about how request adapters work. Please take note if you are using your own custom adapter.
|
|
||||||
|
|
||||||
1. Response transformer is now called outside of adapter.
|
|
||||||
2. Request adapter returns a `Promise`.
|
|
||||||
|
|
||||||
This means that you no longer need to invoke `transformData` on response data. You will also no longer receive `resolve` and `reject` as arguments in your adapter.
|
|
||||||
|
|
||||||
Previous code:
|
|
||||||
|
|
||||||
```js
|
|
||||||
function myAdapter(resolve, reject, config) {
|
|
||||||
var response = {
|
|
||||||
data: transformData(
|
|
||||||
responseData,
|
|
||||||
responseHeaders,
|
|
||||||
config.transformResponse
|
|
||||||
),
|
|
||||||
status: request.status,
|
|
||||||
statusText: request.statusText,
|
|
||||||
headers: responseHeaders
|
|
||||||
};
|
|
||||||
settle(resolve, reject, response);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
New code:
|
|
||||||
|
|
||||||
```js
|
|
||||||
function myAdapter(config) {
|
|
||||||
return new Promise(function (resolve, reject) {
|
|
||||||
var response = {
|
|
||||||
data: responseData,
|
|
||||||
status: request.status,
|
|
||||||
statusText: request.statusText,
|
|
||||||
headers: responseHeaders
|
|
||||||
};
|
|
||||||
settle(resolve, reject, response);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
See the related commits for more details:
|
|
||||||
- [Response transformers](https://github.com/axios/axios/commit/10eb23865101f9347570552c04e9d6211376e25e)
|
|
||||||
- [Request adapter Promise](https://github.com/axios/axios/commit/157efd5615890301824e3121cc6c9d2f9b21f94a)
|
|
||||||
|
|
||||||
### 0.5.x -> 0.6.0
|
|
||||||
|
|
||||||
The `0.6.0` release contains mostly bug fixes, but there are a couple things to be aware of when upgrading.
|
|
||||||
|
|
||||||
#### ES6 Promise Polyfill
|
|
||||||
|
|
||||||
Up until the `0.6.0` release ES6 `Promise` was being polyfilled using [es6-promise](https://github.com/jakearchibald/es6-promise). With this release, the polyfill has been removed, and you will need to supply it yourself if your environment needs it.
|
|
||||||
|
|
||||||
```js
|
|
||||||
require('es6-promise').polyfill();
|
|
||||||
var axios = require('axios');
|
|
||||||
```
|
|
||||||
|
|
||||||
This will polyfill the global environment, and only needs to be done once.
|
|
||||||
|
|
||||||
#### `axios.success`/`axios.error`
|
|
||||||
|
|
||||||
The `success`, and `error` aliases were deprecated in [0.4.0](https://github.com/axios/axios/blob/master/CHANGELOG.md#040-oct-03-2014). As of this release they have been removed entirely. Instead please use `axios.then`, and `axios.catch` respectively.
|
|
||||||
|
|
||||||
```js
|
|
||||||
axios.get('some/url')
|
|
||||||
.then(function (res) {
|
|
||||||
/* ... */
|
|
||||||
})
|
|
||||||
.catch(function (err) {
|
|
||||||
/* ... */
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
#### UMD
|
|
||||||
|
|
||||||
Previous versions of axios shipped with an AMD, CommonJS, and Global build. This has all been rolled into a single UMD build.
|
|
||||||
|
|
||||||
```js
|
|
||||||
// AMD
|
|
||||||
require(['bower_components/axios/dist/axios'], function (axios) {
|
|
||||||
/* ... */
|
|
||||||
});
|
|
||||||
|
|
||||||
// CommonJS
|
|
||||||
var axios = require('axios/dist/axios');
|
|
||||||
```
|
|
1756
node_modules/axios/dist/axios.js
generated
vendored
1756
node_modules/axios/dist/axios.js
generated
vendored
File diff suppressed because it is too large
Load Diff
1
node_modules/axios/dist/axios.map
generated
vendored
1
node_modules/axios/dist/axios.map
generated
vendored
File diff suppressed because one or more lines are too long
3
node_modules/axios/dist/axios.min.js
generated
vendored
3
node_modules/axios/dist/axios.min.js
generated
vendored
File diff suppressed because one or more lines are too long
1
node_modules/axios/dist/axios.min.map
generated
vendored
1
node_modules/axios/dist/axios.min.map
generated
vendored
File diff suppressed because one or more lines are too long
161
node_modules/axios/index.d.ts
generated
vendored
161
node_modules/axios/index.d.ts
generated
vendored
|
@ -1,161 +0,0 @@
|
||||||
export interface AxiosTransformer {
|
|
||||||
(data: any, headers?: any): any;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface AxiosAdapter {
|
|
||||||
(config: AxiosRequestConfig): AxiosPromise<any>;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface AxiosBasicCredentials {
|
|
||||||
username: string;
|
|
||||||
password: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface AxiosProxyConfig {
|
|
||||||
host: string;
|
|
||||||
port: number;
|
|
||||||
auth?: {
|
|
||||||
username: string;
|
|
||||||
password:string;
|
|
||||||
};
|
|
||||||
protocol?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export type Method =
|
|
||||||
| 'get' | 'GET'
|
|
||||||
| 'delete' | 'DELETE'
|
|
||||||
| 'head' | 'HEAD'
|
|
||||||
| 'options' | 'OPTIONS'
|
|
||||||
| 'post' | 'POST'
|
|
||||||
| 'put' | 'PUT'
|
|
||||||
| 'patch' | 'PATCH'
|
|
||||||
| 'purge' | 'PURGE'
|
|
||||||
| 'link' | 'LINK'
|
|
||||||
| 'unlink' | 'UNLINK'
|
|
||||||
|
|
||||||
export type ResponseType =
|
|
||||||
| 'arraybuffer'
|
|
||||||
| 'blob'
|
|
||||||
| 'document'
|
|
||||||
| 'json'
|
|
||||||
| 'text'
|
|
||||||
| 'stream'
|
|
||||||
|
|
||||||
export interface AxiosRequestConfig {
|
|
||||||
url?: string;
|
|
||||||
method?: Method;
|
|
||||||
baseURL?: string;
|
|
||||||
transformRequest?: AxiosTransformer | AxiosTransformer[];
|
|
||||||
transformResponse?: AxiosTransformer | AxiosTransformer[];
|
|
||||||
headers?: any;
|
|
||||||
params?: any;
|
|
||||||
paramsSerializer?: (params: any) => string;
|
|
||||||
data?: any;
|
|
||||||
timeout?: number;
|
|
||||||
timeoutErrorMessage?: string;
|
|
||||||
withCredentials?: boolean;
|
|
||||||
adapter?: AxiosAdapter;
|
|
||||||
auth?: AxiosBasicCredentials;
|
|
||||||
responseType?: ResponseType;
|
|
||||||
xsrfCookieName?: string;
|
|
||||||
xsrfHeaderName?: string;
|
|
||||||
onUploadProgress?: (progressEvent: any) => void;
|
|
||||||
onDownloadProgress?: (progressEvent: any) => void;
|
|
||||||
maxContentLength?: number;
|
|
||||||
validateStatus?: ((status: number) => boolean) | null;
|
|
||||||
maxBodyLength?: number;
|
|
||||||
maxRedirects?: number;
|
|
||||||
socketPath?: string | null;
|
|
||||||
httpAgent?: any;
|
|
||||||
httpsAgent?: any;
|
|
||||||
proxy?: AxiosProxyConfig | false;
|
|
||||||
cancelToken?: CancelToken;
|
|
||||||
decompress?: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface AxiosResponse<T = any> {
|
|
||||||
data: T;
|
|
||||||
status: number;
|
|
||||||
statusText: string;
|
|
||||||
headers: any;
|
|
||||||
config: AxiosRequestConfig;
|
|
||||||
request?: any;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface AxiosError<T = any> extends Error {
|
|
||||||
config: AxiosRequestConfig;
|
|
||||||
code?: string;
|
|
||||||
request?: any;
|
|
||||||
response?: AxiosResponse<T>;
|
|
||||||
isAxiosError: boolean;
|
|
||||||
toJSON: () => object;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface AxiosPromise<T = any> extends Promise<AxiosResponse<T>> {
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface CancelStatic {
|
|
||||||
new (message?: string): Cancel;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface Cancel {
|
|
||||||
message: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface Canceler {
|
|
||||||
(message?: string): void;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface CancelTokenStatic {
|
|
||||||
new (executor: (cancel: Canceler) => void): CancelToken;
|
|
||||||
source(): CancelTokenSource;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface CancelToken {
|
|
||||||
promise: Promise<Cancel>;
|
|
||||||
reason?: Cancel;
|
|
||||||
throwIfRequested(): void;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface CancelTokenSource {
|
|
||||||
token: CancelToken;
|
|
||||||
cancel: Canceler;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface AxiosInterceptorManager<V> {
|
|
||||||
use(onFulfilled?: (value: V) => V | Promise<V>, onRejected?: (error: any) => any): number;
|
|
||||||
eject(id: number): void;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface AxiosInstance {
|
|
||||||
(config: AxiosRequestConfig): AxiosPromise;
|
|
||||||
(url: string, config?: AxiosRequestConfig): AxiosPromise;
|
|
||||||
defaults: AxiosRequestConfig;
|
|
||||||
interceptors: {
|
|
||||||
request: AxiosInterceptorManager<AxiosRequestConfig>;
|
|
||||||
response: AxiosInterceptorManager<AxiosResponse>;
|
|
||||||
};
|
|
||||||
getUri(config?: AxiosRequestConfig): string;
|
|
||||||
request<T = any, R = AxiosResponse<T>> (config: AxiosRequestConfig): Promise<R>;
|
|
||||||
get<T = any, R = AxiosResponse<T>>(url: string, config?: AxiosRequestConfig): Promise<R>;
|
|
||||||
delete<T = any, R = AxiosResponse<T>>(url: string, config?: AxiosRequestConfig): Promise<R>;
|
|
||||||
head<T = any, R = AxiosResponse<T>>(url: string, config?: AxiosRequestConfig): Promise<R>;
|
|
||||||
options<T = any, R = AxiosResponse<T>>(url: string, config?: AxiosRequestConfig): Promise<R>;
|
|
||||||
post<T = any, R = AxiosResponse<T>>(url: string, data?: any, config?: AxiosRequestConfig): Promise<R>;
|
|
||||||
put<T = any, R = AxiosResponse<T>>(url: string, data?: any, config?: AxiosRequestConfig): Promise<R>;
|
|
||||||
patch<T = any, R = AxiosResponse<T>>(url: string, data?: any, config?: AxiosRequestConfig): Promise<R>;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface AxiosStatic extends AxiosInstance {
|
|
||||||
create(config?: AxiosRequestConfig): AxiosInstance;
|
|
||||||
Cancel: CancelStatic;
|
|
||||||
CancelToken: CancelTokenStatic;
|
|
||||||
isCancel(value: any): boolean;
|
|
||||||
all<T>(values: (T | Promise<T>)[]): Promise<T[]>;
|
|
||||||
spread<T, R>(callback: (...args: T[]) => R): (array: T[]) => R;
|
|
||||||
isAxiosError(payload: any): payload is AxiosError;
|
|
||||||
}
|
|
||||||
|
|
||||||
declare const axios: AxiosStatic;
|
|
||||||
|
|
||||||
export default axios;
|
|
1
node_modules/axios/index.js
generated
vendored
1
node_modules/axios/index.js
generated
vendored
|
@ -1 +0,0 @@
|
||||||
module.exports = require('./lib/axios');
|
|
37
node_modules/axios/lib/adapters/README.md
generated
vendored
37
node_modules/axios/lib/adapters/README.md
generated
vendored
|
@ -1,37 +0,0 @@
|
||||||
# axios // adapters
|
|
||||||
|
|
||||||
The modules under `adapters/` are modules that handle dispatching a request and settling a returned `Promise` once a response is received.
|
|
||||||
|
|
||||||
## Example
|
|
||||||
|
|
||||||
```js
|
|
||||||
var settle = require('./../core/settle');
|
|
||||||
|
|
||||||
module.exports = function myAdapter(config) {
|
|
||||||
// At this point:
|
|
||||||
// - config has been merged with defaults
|
|
||||||
// - request transformers have already run
|
|
||||||
// - request interceptors have already run
|
|
||||||
|
|
||||||
// Make the request using config provided
|
|
||||||
// Upon response settle the Promise
|
|
||||||
|
|
||||||
return new Promise(function(resolve, reject) {
|
|
||||||
|
|
||||||
var response = {
|
|
||||||
data: responseData,
|
|
||||||
status: request.status,
|
|
||||||
statusText: request.statusText,
|
|
||||||
headers: responseHeaders,
|
|
||||||
config: config,
|
|
||||||
request: request
|
|
||||||
};
|
|
||||||
|
|
||||||
settle(resolve, reject, response);
|
|
||||||
|
|
||||||
// From here:
|
|
||||||
// - response transformers will run
|
|
||||||
// - response interceptors will run
|
|
||||||
});
|
|
||||||
}
|
|
||||||
```
|
|
303
node_modules/axios/lib/adapters/http.js
generated
vendored
303
node_modules/axios/lib/adapters/http.js
generated
vendored
|
@ -1,303 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var utils = require('./../utils');
|
|
||||||
var settle = require('./../core/settle');
|
|
||||||
var buildFullPath = require('../core/buildFullPath');
|
|
||||||
var buildURL = require('./../helpers/buildURL');
|
|
||||||
var http = require('http');
|
|
||||||
var https = require('https');
|
|
||||||
var httpFollow = require('follow-redirects').http;
|
|
||||||
var httpsFollow = require('follow-redirects').https;
|
|
||||||
var url = require('url');
|
|
||||||
var zlib = require('zlib');
|
|
||||||
var pkg = require('./../../package.json');
|
|
||||||
var createError = require('../core/createError');
|
|
||||||
var enhanceError = require('../core/enhanceError');
|
|
||||||
|
|
||||||
var isHttps = /https:?/;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param {http.ClientRequestArgs} options
|
|
||||||
* @param {AxiosProxyConfig} proxy
|
|
||||||
* @param {string} location
|
|
||||||
*/
|
|
||||||
function setProxy(options, proxy, location) {
|
|
||||||
options.hostname = proxy.host;
|
|
||||||
options.host = proxy.host;
|
|
||||||
options.port = proxy.port;
|
|
||||||
options.path = location;
|
|
||||||
|
|
||||||
// Basic proxy authorization
|
|
||||||
if (proxy.auth) {
|
|
||||||
var base64 = Buffer.from(proxy.auth.username + ':' + proxy.auth.password, 'utf8').toString('base64');
|
|
||||||
options.headers['Proxy-Authorization'] = 'Basic ' + base64;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If a proxy is used, any redirects must also pass through the proxy
|
|
||||||
options.beforeRedirect = function beforeRedirect(redirection) {
|
|
||||||
redirection.headers.host = redirection.host;
|
|
||||||
setProxy(redirection, proxy, redirection.href);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/*eslint consistent-return:0*/
|
|
||||||
module.exports = function httpAdapter(config) {
|
|
||||||
return new Promise(function dispatchHttpRequest(resolvePromise, rejectPromise) {
|
|
||||||
var resolve = function resolve(value) {
|
|
||||||
resolvePromise(value);
|
|
||||||
};
|
|
||||||
var reject = function reject(value) {
|
|
||||||
rejectPromise(value);
|
|
||||||
};
|
|
||||||
var data = config.data;
|
|
||||||
var headers = config.headers;
|
|
||||||
|
|
||||||
// Set User-Agent (required by some servers)
|
|
||||||
// Only set header if it hasn't been set in config
|
|
||||||
// See https://github.com/axios/axios/issues/69
|
|
||||||
if (!headers['User-Agent'] && !headers['user-agent']) {
|
|
||||||
headers['User-Agent'] = 'axios/' + pkg.version;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data && !utils.isStream(data)) {
|
|
||||||
if (Buffer.isBuffer(data)) {
|
|
||||||
// Nothing to do...
|
|
||||||
} else if (utils.isArrayBuffer(data)) {
|
|
||||||
data = Buffer.from(new Uint8Array(data));
|
|
||||||
} else if (utils.isString(data)) {
|
|
||||||
data = Buffer.from(data, 'utf-8');
|
|
||||||
} else {
|
|
||||||
return reject(createError(
|
|
||||||
'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream',
|
|
||||||
config
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add Content-Length header if data exists
|
|
||||||
headers['Content-Length'] = data.length;
|
|
||||||
}
|
|
||||||
|
|
||||||
// HTTP basic authentication
|
|
||||||
var auth = undefined;
|
|
||||||
if (config.auth) {
|
|
||||||
var username = config.auth.username || '';
|
|
||||||
var password = config.auth.password || '';
|
|
||||||
auth = username + ':' + password;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Parse url
|
|
||||||
var fullPath = buildFullPath(config.baseURL, config.url);
|
|
||||||
var parsed = url.parse(fullPath);
|
|
||||||
var protocol = parsed.protocol || 'http:';
|
|
||||||
|
|
||||||
if (!auth && parsed.auth) {
|
|
||||||
var urlAuth = parsed.auth.split(':');
|
|
||||||
var urlUsername = urlAuth[0] || '';
|
|
||||||
var urlPassword = urlAuth[1] || '';
|
|
||||||
auth = urlUsername + ':' + urlPassword;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (auth) {
|
|
||||||
delete headers.Authorization;
|
|
||||||
}
|
|
||||||
|
|
||||||
var isHttpsRequest = isHttps.test(protocol);
|
|
||||||
var agent = isHttpsRequest ? config.httpsAgent : config.httpAgent;
|
|
||||||
|
|
||||||
var options = {
|
|
||||||
path: buildURL(parsed.path, config.params, config.paramsSerializer).replace(/^\?/, ''),
|
|
||||||
method: config.method.toUpperCase(),
|
|
||||||
headers: headers,
|
|
||||||
agent: agent,
|
|
||||||
agents: { http: config.httpAgent, https: config.httpsAgent },
|
|
||||||
auth: auth
|
|
||||||
};
|
|
||||||
|
|
||||||
if (config.socketPath) {
|
|
||||||
options.socketPath = config.socketPath;
|
|
||||||
} else {
|
|
||||||
options.hostname = parsed.hostname;
|
|
||||||
options.port = parsed.port;
|
|
||||||
}
|
|
||||||
|
|
||||||
var proxy = config.proxy;
|
|
||||||
if (!proxy && proxy !== false) {
|
|
||||||
var proxyEnv = protocol.slice(0, -1) + '_proxy';
|
|
||||||
var proxyUrl = process.env[proxyEnv] || process.env[proxyEnv.toUpperCase()];
|
|
||||||
if (proxyUrl) {
|
|
||||||
var parsedProxyUrl = url.parse(proxyUrl);
|
|
||||||
var noProxyEnv = process.env.no_proxy || process.env.NO_PROXY;
|
|
||||||
var shouldProxy = true;
|
|
||||||
|
|
||||||
if (noProxyEnv) {
|
|
||||||
var noProxy = noProxyEnv.split(',').map(function trim(s) {
|
|
||||||
return s.trim();
|
|
||||||
});
|
|
||||||
|
|
||||||
shouldProxy = !noProxy.some(function proxyMatch(proxyElement) {
|
|
||||||
if (!proxyElement) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (proxyElement === '*') {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (proxyElement[0] === '.' &&
|
|
||||||
parsed.hostname.substr(parsed.hostname.length - proxyElement.length) === proxyElement) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return parsed.hostname === proxyElement;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (shouldProxy) {
|
|
||||||
proxy = {
|
|
||||||
host: parsedProxyUrl.hostname,
|
|
||||||
port: parsedProxyUrl.port,
|
|
||||||
protocol: parsedProxyUrl.protocol
|
|
||||||
};
|
|
||||||
|
|
||||||
if (parsedProxyUrl.auth) {
|
|
||||||
var proxyUrlAuth = parsedProxyUrl.auth.split(':');
|
|
||||||
proxy.auth = {
|
|
||||||
username: proxyUrlAuth[0],
|
|
||||||
password: proxyUrlAuth[1]
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (proxy) {
|
|
||||||
options.headers.host = parsed.hostname + (parsed.port ? ':' + parsed.port : '');
|
|
||||||
setProxy(options, proxy, protocol + '//' + parsed.hostname + (parsed.port ? ':' + parsed.port : '') + options.path);
|
|
||||||
}
|
|
||||||
|
|
||||||
var transport;
|
|
||||||
var isHttpsProxy = isHttpsRequest && (proxy ? isHttps.test(proxy.protocol) : true);
|
|
||||||
if (config.transport) {
|
|
||||||
transport = config.transport;
|
|
||||||
} else if (config.maxRedirects === 0) {
|
|
||||||
transport = isHttpsProxy ? https : http;
|
|
||||||
} else {
|
|
||||||
if (config.maxRedirects) {
|
|
||||||
options.maxRedirects = config.maxRedirects;
|
|
||||||
}
|
|
||||||
transport = isHttpsProxy ? httpsFollow : httpFollow;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (config.maxBodyLength > -1) {
|
|
||||||
options.maxBodyLength = config.maxBodyLength;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create the request
|
|
||||||
var req = transport.request(options, function handleResponse(res) {
|
|
||||||
if (req.aborted) return;
|
|
||||||
|
|
||||||
// uncompress the response body transparently if required
|
|
||||||
var stream = res;
|
|
||||||
|
|
||||||
// return the last request in case of redirects
|
|
||||||
var lastRequest = res.req || req;
|
|
||||||
|
|
||||||
|
|
||||||
// if no content, is HEAD request or decompress disabled we should not decompress
|
|
||||||
if (res.statusCode !== 204 && lastRequest.method !== 'HEAD' && config.decompress !== false) {
|
|
||||||
switch (res.headers['content-encoding']) {
|
|
||||||
/*eslint default-case:0*/
|
|
||||||
case 'gzip':
|
|
||||||
case 'compress':
|
|
||||||
case 'deflate':
|
|
||||||
// add the unzipper to the body stream processing pipeline
|
|
||||||
stream = stream.pipe(zlib.createUnzip());
|
|
||||||
|
|
||||||
// remove the content-encoding in order to not confuse downstream operations
|
|
||||||
delete res.headers['content-encoding'];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var response = {
|
|
||||||
status: res.statusCode,
|
|
||||||
statusText: res.statusMessage,
|
|
||||||
headers: res.headers,
|
|
||||||
config: config,
|
|
||||||
request: lastRequest
|
|
||||||
};
|
|
||||||
|
|
||||||
if (config.responseType === 'stream') {
|
|
||||||
response.data = stream;
|
|
||||||
settle(resolve, reject, response);
|
|
||||||
} else {
|
|
||||||
var responseBuffer = [];
|
|
||||||
stream.on('data', function handleStreamData(chunk) {
|
|
||||||
responseBuffer.push(chunk);
|
|
||||||
|
|
||||||
// make sure the content length is not over the maxContentLength if specified
|
|
||||||
if (config.maxContentLength > -1 && Buffer.concat(responseBuffer).length > config.maxContentLength) {
|
|
||||||
stream.destroy();
|
|
||||||
reject(createError('maxContentLength size of ' + config.maxContentLength + ' exceeded',
|
|
||||||
config, null, lastRequest));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
stream.on('error', function handleStreamError(err) {
|
|
||||||
if (req.aborted) return;
|
|
||||||
reject(enhanceError(err, config, null, lastRequest));
|
|
||||||
});
|
|
||||||
|
|
||||||
stream.on('end', function handleStreamEnd() {
|
|
||||||
var responseData = Buffer.concat(responseBuffer);
|
|
||||||
if (config.responseType !== 'arraybuffer') {
|
|
||||||
responseData = responseData.toString(config.responseEncoding);
|
|
||||||
if (!config.responseEncoding || config.responseEncoding === 'utf8') {
|
|
||||||
responseData = utils.stripBOM(responseData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
response.data = responseData;
|
|
||||||
settle(resolve, reject, response);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Handle errors
|
|
||||||
req.on('error', function handleRequestError(err) {
|
|
||||||
if (req.aborted && err.code !== 'ERR_FR_TOO_MANY_REDIRECTS') return;
|
|
||||||
reject(enhanceError(err, config, null, req));
|
|
||||||
});
|
|
||||||
|
|
||||||
// Handle request timeout
|
|
||||||
if (config.timeout) {
|
|
||||||
// Sometime, the response will be very slow, and does not respond, the connect event will be block by event loop system.
|
|
||||||
// And timer callback will be fired, and abort() will be invoked before connection, then get "socket hang up" and code ECONNRESET.
|
|
||||||
// At this time, if we have a large number of request, nodejs will hang up some socket on background. and the number will up and up.
|
|
||||||
// And then these socket which be hang up will devoring CPU little by little.
|
|
||||||
// ClientRequest.setTimeout will be fired on the specify milliseconds, and can make sure that abort() will be fired after connect.
|
|
||||||
req.setTimeout(config.timeout, function handleRequestTimeout() {
|
|
||||||
req.abort();
|
|
||||||
reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED', req));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (config.cancelToken) {
|
|
||||||
// Handle cancellation
|
|
||||||
config.cancelToken.promise.then(function onCanceled(cancel) {
|
|
||||||
if (req.aborted) return;
|
|
||||||
|
|
||||||
req.abort();
|
|
||||||
reject(cancel);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Send the request
|
|
||||||
if (utils.isStream(data)) {
|
|
||||||
data.on('error', function handleStreamError(err) {
|
|
||||||
reject(enhanceError(err, config, null, req));
|
|
||||||
}).pipe(req);
|
|
||||||
} else {
|
|
||||||
req.end(data);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
179
node_modules/axios/lib/adapters/xhr.js
generated
vendored
179
node_modules/axios/lib/adapters/xhr.js
generated
vendored
|
@ -1,179 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var utils = require('./../utils');
|
|
||||||
var settle = require('./../core/settle');
|
|
||||||
var cookies = require('./../helpers/cookies');
|
|
||||||
var buildURL = require('./../helpers/buildURL');
|
|
||||||
var buildFullPath = require('../core/buildFullPath');
|
|
||||||
var parseHeaders = require('./../helpers/parseHeaders');
|
|
||||||
var isURLSameOrigin = require('./../helpers/isURLSameOrigin');
|
|
||||||
var createError = require('../core/createError');
|
|
||||||
|
|
||||||
module.exports = function xhrAdapter(config) {
|
|
||||||
return new Promise(function dispatchXhrRequest(resolve, reject) {
|
|
||||||
var requestData = config.data;
|
|
||||||
var requestHeaders = config.headers;
|
|
||||||
|
|
||||||
if (utils.isFormData(requestData)) {
|
|
||||||
delete requestHeaders['Content-Type']; // Let the browser set it
|
|
||||||
}
|
|
||||||
|
|
||||||
var request = new XMLHttpRequest();
|
|
||||||
|
|
||||||
// HTTP basic authentication
|
|
||||||
if (config.auth) {
|
|
||||||
var username = config.auth.username || '';
|
|
||||||
var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';
|
|
||||||
requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);
|
|
||||||
}
|
|
||||||
|
|
||||||
var fullPath = buildFullPath(config.baseURL, config.url);
|
|
||||||
request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);
|
|
||||||
|
|
||||||
// Set the request timeout in MS
|
|
||||||
request.timeout = config.timeout;
|
|
||||||
|
|
||||||
// Listen for ready state
|
|
||||||
request.onreadystatechange = function handleLoad() {
|
|
||||||
if (!request || request.readyState !== 4) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The request errored out and we didn't get a response, this will be
|
|
||||||
// handled by onerror instead
|
|
||||||
// With one exception: request that using file: protocol, most browsers
|
|
||||||
// will return status as 0 even though it's a successful request
|
|
||||||
if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Prepare the response
|
|
||||||
var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;
|
|
||||||
var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;
|
|
||||||
var response = {
|
|
||||||
data: responseData,
|
|
||||||
status: request.status,
|
|
||||||
statusText: request.statusText,
|
|
||||||
headers: responseHeaders,
|
|
||||||
config: config,
|
|
||||||
request: request
|
|
||||||
};
|
|
||||||
|
|
||||||
settle(resolve, reject, response);
|
|
||||||
|
|
||||||
// Clean up request
|
|
||||||
request = null;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Handle browser request cancellation (as opposed to a manual cancellation)
|
|
||||||
request.onabort = function handleAbort() {
|
|
||||||
if (!request) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
reject(createError('Request aborted', config, 'ECONNABORTED', request));
|
|
||||||
|
|
||||||
// Clean up request
|
|
||||||
request = null;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Handle low level network errors
|
|
||||||
request.onerror = function handleError() {
|
|
||||||
// Real errors are hidden from us by the browser
|
|
||||||
// onerror should only fire if it's a network error
|
|
||||||
reject(createError('Network Error', config, null, request));
|
|
||||||
|
|
||||||
// Clean up request
|
|
||||||
request = null;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Handle timeout
|
|
||||||
request.ontimeout = function handleTimeout() {
|
|
||||||
var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';
|
|
||||||
if (config.timeoutErrorMessage) {
|
|
||||||
timeoutErrorMessage = config.timeoutErrorMessage;
|
|
||||||
}
|
|
||||||
reject(createError(timeoutErrorMessage, config, 'ECONNABORTED',
|
|
||||||
request));
|
|
||||||
|
|
||||||
// Clean up request
|
|
||||||
request = null;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Add xsrf header
|
|
||||||
// This is only done if running in a standard browser environment.
|
|
||||||
// Specifically not if we're in a web worker, or react-native.
|
|
||||||
if (utils.isStandardBrowserEnv()) {
|
|
||||||
// Add xsrf header
|
|
||||||
var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?
|
|
||||||
cookies.read(config.xsrfCookieName) :
|
|
||||||
undefined;
|
|
||||||
|
|
||||||
if (xsrfValue) {
|
|
||||||
requestHeaders[config.xsrfHeaderName] = xsrfValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add headers to the request
|
|
||||||
if ('setRequestHeader' in request) {
|
|
||||||
utils.forEach(requestHeaders, function setRequestHeader(val, key) {
|
|
||||||
if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
|
|
||||||
// Remove Content-Type if data is undefined
|
|
||||||
delete requestHeaders[key];
|
|
||||||
} else {
|
|
||||||
// Otherwise add header to the request
|
|
||||||
request.setRequestHeader(key, val);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add withCredentials to request if needed
|
|
||||||
if (!utils.isUndefined(config.withCredentials)) {
|
|
||||||
request.withCredentials = !!config.withCredentials;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add responseType to request if needed
|
|
||||||
if (config.responseType) {
|
|
||||||
try {
|
|
||||||
request.responseType = config.responseType;
|
|
||||||
} catch (e) {
|
|
||||||
// Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.
|
|
||||||
// But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.
|
|
||||||
if (config.responseType !== 'json') {
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle progress if needed
|
|
||||||
if (typeof config.onDownloadProgress === 'function') {
|
|
||||||
request.addEventListener('progress', config.onDownloadProgress);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Not all browsers support upload events
|
|
||||||
if (typeof config.onUploadProgress === 'function' && request.upload) {
|
|
||||||
request.upload.addEventListener('progress', config.onUploadProgress);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (config.cancelToken) {
|
|
||||||
// Handle cancellation
|
|
||||||
config.cancelToken.promise.then(function onCanceled(cancel) {
|
|
||||||
if (!request) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
request.abort();
|
|
||||||
reject(cancel);
|
|
||||||
// Clean up request
|
|
||||||
request = null;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!requestData) {
|
|
||||||
requestData = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Send the request
|
|
||||||
request.send(requestData);
|
|
||||||
});
|
|
||||||
};
|
|
56
node_modules/axios/lib/axios.js
generated
vendored
56
node_modules/axios/lib/axios.js
generated
vendored
|
@ -1,56 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var utils = require('./utils');
|
|
||||||
var bind = require('./helpers/bind');
|
|
||||||
var Axios = require('./core/Axios');
|
|
||||||
var mergeConfig = require('./core/mergeConfig');
|
|
||||||
var defaults = require('./defaults');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an instance of Axios
|
|
||||||
*
|
|
||||||
* @param {Object} defaultConfig The default config for the instance
|
|
||||||
* @return {Axios} A new instance of Axios
|
|
||||||
*/
|
|
||||||
function createInstance(defaultConfig) {
|
|
||||||
var context = new Axios(defaultConfig);
|
|
||||||
var instance = bind(Axios.prototype.request, context);
|
|
||||||
|
|
||||||
// Copy axios.prototype to instance
|
|
||||||
utils.extend(instance, Axios.prototype, context);
|
|
||||||
|
|
||||||
// Copy context to instance
|
|
||||||
utils.extend(instance, context);
|
|
||||||
|
|
||||||
return instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create the default instance to be exported
|
|
||||||
var axios = createInstance(defaults);
|
|
||||||
|
|
||||||
// Expose Axios class to allow class inheritance
|
|
||||||
axios.Axios = Axios;
|
|
||||||
|
|
||||||
// Factory for creating new instances
|
|
||||||
axios.create = function create(instanceConfig) {
|
|
||||||
return createInstance(mergeConfig(axios.defaults, instanceConfig));
|
|
||||||
};
|
|
||||||
|
|
||||||
// Expose Cancel & CancelToken
|
|
||||||
axios.Cancel = require('./cancel/Cancel');
|
|
||||||
axios.CancelToken = require('./cancel/CancelToken');
|
|
||||||
axios.isCancel = require('./cancel/isCancel');
|
|
||||||
|
|
||||||
// Expose all/spread
|
|
||||||
axios.all = function all(promises) {
|
|
||||||
return Promise.all(promises);
|
|
||||||
};
|
|
||||||
axios.spread = require('./helpers/spread');
|
|
||||||
|
|
||||||
// Expose isAxiosError
|
|
||||||
axios.isAxiosError = require('./helpers/isAxiosError');
|
|
||||||
|
|
||||||
module.exports = axios;
|
|
||||||
|
|
||||||
// Allow use of default import syntax in TypeScript
|
|
||||||
module.exports.default = axios;
|
|
19
node_modules/axios/lib/cancel/Cancel.js
generated
vendored
19
node_modules/axios/lib/cancel/Cancel.js
generated
vendored
|
@ -1,19 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A `Cancel` is an object that is thrown when an operation is canceled.
|
|
||||||
*
|
|
||||||
* @class
|
|
||||||
* @param {string=} message The message.
|
|
||||||
*/
|
|
||||||
function Cancel(message) {
|
|
||||||
this.message = message;
|
|
||||||
}
|
|
||||||
|
|
||||||
Cancel.prototype.toString = function toString() {
|
|
||||||
return 'Cancel' + (this.message ? ': ' + this.message : '');
|
|
||||||
};
|
|
||||||
|
|
||||||
Cancel.prototype.__CANCEL__ = true;
|
|
||||||
|
|
||||||
module.exports = Cancel;
|
|
57
node_modules/axios/lib/cancel/CancelToken.js
generated
vendored
57
node_modules/axios/lib/cancel/CancelToken.js
generated
vendored
|
@ -1,57 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var Cancel = require('./Cancel');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A `CancelToken` is an object that can be used to request cancellation of an operation.
|
|
||||||
*
|
|
||||||
* @class
|
|
||||||
* @param {Function} executor The executor function.
|
|
||||||
*/
|
|
||||||
function CancelToken(executor) {
|
|
||||||
if (typeof executor !== 'function') {
|
|
||||||
throw new TypeError('executor must be a function.');
|
|
||||||
}
|
|
||||||
|
|
||||||
var resolvePromise;
|
|
||||||
this.promise = new Promise(function promiseExecutor(resolve) {
|
|
||||||
resolvePromise = resolve;
|
|
||||||
});
|
|
||||||
|
|
||||||
var token = this;
|
|
||||||
executor(function cancel(message) {
|
|
||||||
if (token.reason) {
|
|
||||||
// Cancellation has already been requested
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
token.reason = new Cancel(message);
|
|
||||||
resolvePromise(token.reason);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Throws a `Cancel` if cancellation has been requested.
|
|
||||||
*/
|
|
||||||
CancelToken.prototype.throwIfRequested = function throwIfRequested() {
|
|
||||||
if (this.reason) {
|
|
||||||
throw this.reason;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns an object that contains a new `CancelToken` and a function that, when called,
|
|
||||||
* cancels the `CancelToken`.
|
|
||||||
*/
|
|
||||||
CancelToken.source = function source() {
|
|
||||||
var cancel;
|
|
||||||
var token = new CancelToken(function executor(c) {
|
|
||||||
cancel = c;
|
|
||||||
});
|
|
||||||
return {
|
|
||||||
token: token,
|
|
||||||
cancel: cancel
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports = CancelToken;
|
|
5
node_modules/axios/lib/cancel/isCancel.js
generated
vendored
5
node_modules/axios/lib/cancel/isCancel.js
generated
vendored
|
@ -1,5 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = function isCancel(value) {
|
|
||||||
return !!(value && value.__CANCEL__);
|
|
||||||
};
|
|
95
node_modules/axios/lib/core/Axios.js
generated
vendored
95
node_modules/axios/lib/core/Axios.js
generated
vendored
|
@ -1,95 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var utils = require('./../utils');
|
|
||||||
var buildURL = require('../helpers/buildURL');
|
|
||||||
var InterceptorManager = require('./InterceptorManager');
|
|
||||||
var dispatchRequest = require('./dispatchRequest');
|
|
||||||
var mergeConfig = require('./mergeConfig');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new instance of Axios
|
|
||||||
*
|
|
||||||
* @param {Object} instanceConfig The default config for the instance
|
|
||||||
*/
|
|
||||||
function Axios(instanceConfig) {
|
|
||||||
this.defaults = instanceConfig;
|
|
||||||
this.interceptors = {
|
|
||||||
request: new InterceptorManager(),
|
|
||||||
response: new InterceptorManager()
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Dispatch a request
|
|
||||||
*
|
|
||||||
* @param {Object} config The config specific for this request (merged with this.defaults)
|
|
||||||
*/
|
|
||||||
Axios.prototype.request = function request(config) {
|
|
||||||
/*eslint no-param-reassign:0*/
|
|
||||||
// Allow for axios('example/url'[, config]) a la fetch API
|
|
||||||
if (typeof config === 'string') {
|
|
||||||
config = arguments[1] || {};
|
|
||||||
config.url = arguments[0];
|
|
||||||
} else {
|
|
||||||
config = config || {};
|
|
||||||
}
|
|
||||||
|
|
||||||
config = mergeConfig(this.defaults, config);
|
|
||||||
|
|
||||||
// Set config.method
|
|
||||||
if (config.method) {
|
|
||||||
config.method = config.method.toLowerCase();
|
|
||||||
} else if (this.defaults.method) {
|
|
||||||
config.method = this.defaults.method.toLowerCase();
|
|
||||||
} else {
|
|
||||||
config.method = 'get';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Hook up interceptors middleware
|
|
||||||
var chain = [dispatchRequest, undefined];
|
|
||||||
var promise = Promise.resolve(config);
|
|
||||||
|
|
||||||
this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
|
|
||||||
chain.unshift(interceptor.fulfilled, interceptor.rejected);
|
|
||||||
});
|
|
||||||
|
|
||||||
this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
|
|
||||||
chain.push(interceptor.fulfilled, interceptor.rejected);
|
|
||||||
});
|
|
||||||
|
|
||||||
while (chain.length) {
|
|
||||||
promise = promise.then(chain.shift(), chain.shift());
|
|
||||||
}
|
|
||||||
|
|
||||||
return promise;
|
|
||||||
};
|
|
||||||
|
|
||||||
Axios.prototype.getUri = function getUri(config) {
|
|
||||||
config = mergeConfig(this.defaults, config);
|
|
||||||
return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\?/, '');
|
|
||||||
};
|
|
||||||
|
|
||||||
// Provide aliases for supported request methods
|
|
||||||
utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {
|
|
||||||
/*eslint func-names:0*/
|
|
||||||
Axios.prototype[method] = function(url, config) {
|
|
||||||
return this.request(mergeConfig(config || {}, {
|
|
||||||
method: method,
|
|
||||||
url: url,
|
|
||||||
data: (config || {}).data
|
|
||||||
}));
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
|
|
||||||
/*eslint func-names:0*/
|
|
||||||
Axios.prototype[method] = function(url, data, config) {
|
|
||||||
return this.request(mergeConfig(config || {}, {
|
|
||||||
method: method,
|
|
||||||
url: url,
|
|
||||||
data: data
|
|
||||||
}));
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
module.exports = Axios;
|
|
52
node_modules/axios/lib/core/InterceptorManager.js
generated
vendored
52
node_modules/axios/lib/core/InterceptorManager.js
generated
vendored
|
@ -1,52 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var utils = require('./../utils');
|
|
||||||
|
|
||||||
function InterceptorManager() {
|
|
||||||
this.handlers = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a new interceptor to the stack
|
|
||||||
*
|
|
||||||
* @param {Function} fulfilled The function to handle `then` for a `Promise`
|
|
||||||
* @param {Function} rejected The function to handle `reject` for a `Promise`
|
|
||||||
*
|
|
||||||
* @return {Number} An ID used to remove interceptor later
|
|
||||||
*/
|
|
||||||
InterceptorManager.prototype.use = function use(fulfilled, rejected) {
|
|
||||||
this.handlers.push({
|
|
||||||
fulfilled: fulfilled,
|
|
||||||
rejected: rejected
|
|
||||||
});
|
|
||||||
return this.handlers.length - 1;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove an interceptor from the stack
|
|
||||||
*
|
|
||||||
* @param {Number} id The ID that was returned by `use`
|
|
||||||
*/
|
|
||||||
InterceptorManager.prototype.eject = function eject(id) {
|
|
||||||
if (this.handlers[id]) {
|
|
||||||
this.handlers[id] = null;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Iterate over all the registered interceptors
|
|
||||||
*
|
|
||||||
* This method is particularly useful for skipping over any
|
|
||||||
* interceptors that may have become `null` calling `eject`.
|
|
||||||
*
|
|
||||||
* @param {Function} fn The function to call for each interceptor
|
|
||||||
*/
|
|
||||||
InterceptorManager.prototype.forEach = function forEach(fn) {
|
|
||||||
utils.forEach(this.handlers, function forEachHandler(h) {
|
|
||||||
if (h !== null) {
|
|
||||||
fn(h);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports = InterceptorManager;
|
|
7
node_modules/axios/lib/core/README.md
generated
vendored
7
node_modules/axios/lib/core/README.md
generated
vendored
|
@ -1,7 +0,0 @@
|
||||||
# axios // core
|
|
||||||
|
|
||||||
The modules found in `core/` should be modules that are specific to the domain logic of axios. These modules would most likely not make sense to be consumed outside of the axios module, as their logic is too specific. Some examples of core modules are:
|
|
||||||
|
|
||||||
- Dispatching requests
|
|
||||||
- Managing interceptors
|
|
||||||
- Handling config
|
|
20
node_modules/axios/lib/core/buildFullPath.js
generated
vendored
20
node_modules/axios/lib/core/buildFullPath.js
generated
vendored
|
@ -1,20 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var isAbsoluteURL = require('../helpers/isAbsoluteURL');
|
|
||||||
var combineURLs = require('../helpers/combineURLs');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new URL by combining the baseURL with the requestedURL,
|
|
||||||
* only when the requestedURL is not already an absolute URL.
|
|
||||||
* If the requestURL is absolute, this function returns the requestedURL untouched.
|
|
||||||
*
|
|
||||||
* @param {string} baseURL The base URL
|
|
||||||
* @param {string} requestedURL Absolute or relative URL to combine
|
|
||||||
* @returns {string} The combined full path
|
|
||||||
*/
|
|
||||||
module.exports = function buildFullPath(baseURL, requestedURL) {
|
|
||||||
if (baseURL && !isAbsoluteURL(requestedURL)) {
|
|
||||||
return combineURLs(baseURL, requestedURL);
|
|
||||||
}
|
|
||||||
return requestedURL;
|
|
||||||
};
|
|
18
node_modules/axios/lib/core/createError.js
generated
vendored
18
node_modules/axios/lib/core/createError.js
generated
vendored
|
@ -1,18 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var enhanceError = require('./enhanceError');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an Error with the specified message, config, error code, request and response.
|
|
||||||
*
|
|
||||||
* @param {string} message The error message.
|
|
||||||
* @param {Object} config The config.
|
|
||||||
* @param {string} [code] The error code (for example, 'ECONNABORTED').
|
|
||||||
* @param {Object} [request] The request.
|
|
||||||
* @param {Object} [response] The response.
|
|
||||||
* @returns {Error} The created error.
|
|
||||||
*/
|
|
||||||
module.exports = function createError(message, config, code, request, response) {
|
|
||||||
var error = new Error(message);
|
|
||||||
return enhanceError(error, config, code, request, response);
|
|
||||||
};
|
|
79
node_modules/axios/lib/core/dispatchRequest.js
generated
vendored
79
node_modules/axios/lib/core/dispatchRequest.js
generated
vendored
|
@ -1,79 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var utils = require('./../utils');
|
|
||||||
var transformData = require('./transformData');
|
|
||||||
var isCancel = require('../cancel/isCancel');
|
|
||||||
var defaults = require('../defaults');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Throws a `Cancel` if cancellation has been requested.
|
|
||||||
*/
|
|
||||||
function throwIfCancellationRequested(config) {
|
|
||||||
if (config.cancelToken) {
|
|
||||||
config.cancelToken.throwIfRequested();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Dispatch a request to the server using the configured adapter.
|
|
||||||
*
|
|
||||||
* @param {object} config The config that is to be used for the request
|
|
||||||
* @returns {Promise} The Promise to be fulfilled
|
|
||||||
*/
|
|
||||||
module.exports = function dispatchRequest(config) {
|
|
||||||
throwIfCancellationRequested(config);
|
|
||||||
|
|
||||||
// Ensure headers exist
|
|
||||||
config.headers = config.headers || {};
|
|
||||||
|
|
||||||
// Transform request data
|
|
||||||
config.data = transformData(
|
|
||||||
config.data,
|
|
||||||
config.headers,
|
|
||||||
config.transformRequest
|
|
||||||
);
|
|
||||||
|
|
||||||
// Flatten headers
|
|
||||||
config.headers = utils.merge(
|
|
||||||
config.headers.common || {},
|
|
||||||
config.headers[config.method] || {},
|
|
||||||
config.headers
|
|
||||||
);
|
|
||||||
|
|
||||||
utils.forEach(
|
|
||||||
['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],
|
|
||||||
function cleanHeaderConfig(method) {
|
|
||||||
delete config.headers[method];
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
var adapter = config.adapter || defaults.adapter;
|
|
||||||
|
|
||||||
return adapter(config).then(function onAdapterResolution(response) {
|
|
||||||
throwIfCancellationRequested(config);
|
|
||||||
|
|
||||||
// Transform response data
|
|
||||||
response.data = transformData(
|
|
||||||
response.data,
|
|
||||||
response.headers,
|
|
||||||
config.transformResponse
|
|
||||||
);
|
|
||||||
|
|
||||||
return response;
|
|
||||||
}, function onAdapterRejection(reason) {
|
|
||||||
if (!isCancel(reason)) {
|
|
||||||
throwIfCancellationRequested(config);
|
|
||||||
|
|
||||||
// Transform response data
|
|
||||||
if (reason && reason.response) {
|
|
||||||
reason.response.data = transformData(
|
|
||||||
reason.response.data,
|
|
||||||
reason.response.headers,
|
|
||||||
config.transformResponse
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return Promise.reject(reason);
|
|
||||||
});
|
|
||||||
};
|
|
42
node_modules/axios/lib/core/enhanceError.js
generated
vendored
42
node_modules/axios/lib/core/enhanceError.js
generated
vendored
|
@ -1,42 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Update an Error with the specified config, error code, and response.
|
|
||||||
*
|
|
||||||
* @param {Error} error The error to update.
|
|
||||||
* @param {Object} config The config.
|
|
||||||
* @param {string} [code] The error code (for example, 'ECONNABORTED').
|
|
||||||
* @param {Object} [request] The request.
|
|
||||||
* @param {Object} [response] The response.
|
|
||||||
* @returns {Error} The error.
|
|
||||||
*/
|
|
||||||
module.exports = function enhanceError(error, config, code, request, response) {
|
|
||||||
error.config = config;
|
|
||||||
if (code) {
|
|
||||||
error.code = code;
|
|
||||||
}
|
|
||||||
|
|
||||||
error.request = request;
|
|
||||||
error.response = response;
|
|
||||||
error.isAxiosError = true;
|
|
||||||
|
|
||||||
error.toJSON = function toJSON() {
|
|
||||||
return {
|
|
||||||
// Standard
|
|
||||||
message: this.message,
|
|
||||||
name: this.name,
|
|
||||||
// Microsoft
|
|
||||||
description: this.description,
|
|
||||||
number: this.number,
|
|
||||||
// Mozilla
|
|
||||||
fileName: this.fileName,
|
|
||||||
lineNumber: this.lineNumber,
|
|
||||||
columnNumber: this.columnNumber,
|
|
||||||
stack: this.stack,
|
|
||||||
// Axios
|
|
||||||
config: this.config,
|
|
||||||
code: this.code
|
|
||||||
};
|
|
||||||
};
|
|
||||||
return error;
|
|
||||||
};
|
|
87
node_modules/axios/lib/core/mergeConfig.js
generated
vendored
87
node_modules/axios/lib/core/mergeConfig.js
generated
vendored
|
@ -1,87 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var utils = require('../utils');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Config-specific merge-function which creates a new config-object
|
|
||||||
* by merging two configuration objects together.
|
|
||||||
*
|
|
||||||
* @param {Object} config1
|
|
||||||
* @param {Object} config2
|
|
||||||
* @returns {Object} New object resulting from merging config2 to config1
|
|
||||||
*/
|
|
||||||
module.exports = function mergeConfig(config1, config2) {
|
|
||||||
// eslint-disable-next-line no-param-reassign
|
|
||||||
config2 = config2 || {};
|
|
||||||
var config = {};
|
|
||||||
|
|
||||||
var valueFromConfig2Keys = ['url', 'method', 'data'];
|
|
||||||
var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params'];
|
|
||||||
var defaultToConfig2Keys = [
|
|
||||||
'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',
|
|
||||||
'timeout', 'timeoutMessage', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',
|
|
||||||
'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'decompress',
|
|
||||||
'maxContentLength', 'maxBodyLength', 'maxRedirects', 'transport', 'httpAgent',
|
|
||||||
'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding'
|
|
||||||
];
|
|
||||||
var directMergeKeys = ['validateStatus'];
|
|
||||||
|
|
||||||
function getMergedValue(target, source) {
|
|
||||||
if (utils.isPlainObject(target) && utils.isPlainObject(source)) {
|
|
||||||
return utils.merge(target, source);
|
|
||||||
} else if (utils.isPlainObject(source)) {
|
|
||||||
return utils.merge({}, source);
|
|
||||||
} else if (utils.isArray(source)) {
|
|
||||||
return source.slice();
|
|
||||||
}
|
|
||||||
return source;
|
|
||||||
}
|
|
||||||
|
|
||||||
function mergeDeepProperties(prop) {
|
|
||||||
if (!utils.isUndefined(config2[prop])) {
|
|
||||||
config[prop] = getMergedValue(config1[prop], config2[prop]);
|
|
||||||
} else if (!utils.isUndefined(config1[prop])) {
|
|
||||||
config[prop] = getMergedValue(undefined, config1[prop]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {
|
|
||||||
if (!utils.isUndefined(config2[prop])) {
|
|
||||||
config[prop] = getMergedValue(undefined, config2[prop]);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
utils.forEach(mergeDeepPropertiesKeys, mergeDeepProperties);
|
|
||||||
|
|
||||||
utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {
|
|
||||||
if (!utils.isUndefined(config2[prop])) {
|
|
||||||
config[prop] = getMergedValue(undefined, config2[prop]);
|
|
||||||
} else if (!utils.isUndefined(config1[prop])) {
|
|
||||||
config[prop] = getMergedValue(undefined, config1[prop]);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
utils.forEach(directMergeKeys, function merge(prop) {
|
|
||||||
if (prop in config2) {
|
|
||||||
config[prop] = getMergedValue(config1[prop], config2[prop]);
|
|
||||||
} else if (prop in config1) {
|
|
||||||
config[prop] = getMergedValue(undefined, config1[prop]);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
var axiosKeys = valueFromConfig2Keys
|
|
||||||
.concat(mergeDeepPropertiesKeys)
|
|
||||||
.concat(defaultToConfig2Keys)
|
|
||||||
.concat(directMergeKeys);
|
|
||||||
|
|
||||||
var otherKeys = Object
|
|
||||||
.keys(config1)
|
|
||||||
.concat(Object.keys(config2))
|
|
||||||
.filter(function filterAxiosKeys(key) {
|
|
||||||
return axiosKeys.indexOf(key) === -1;
|
|
||||||
});
|
|
||||||
|
|
||||||
utils.forEach(otherKeys, mergeDeepProperties);
|
|
||||||
|
|
||||||
return config;
|
|
||||||
};
|
|
25
node_modules/axios/lib/core/settle.js
generated
vendored
25
node_modules/axios/lib/core/settle.js
generated
vendored
|
@ -1,25 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var createError = require('./createError');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Resolve or reject a Promise based on response status.
|
|
||||||
*
|
|
||||||
* @param {Function} resolve A function that resolves the promise.
|
|
||||||
* @param {Function} reject A function that rejects the promise.
|
|
||||||
* @param {object} response The response.
|
|
||||||
*/
|
|
||||||
module.exports = function settle(resolve, reject, response) {
|
|
||||||
var validateStatus = response.config.validateStatus;
|
|
||||||
if (!response.status || !validateStatus || validateStatus(response.status)) {
|
|
||||||
resolve(response);
|
|
||||||
} else {
|
|
||||||
reject(createError(
|
|
||||||
'Request failed with status code ' + response.status,
|
|
||||||
response.config,
|
|
||||||
null,
|
|
||||||
response.request,
|
|
||||||
response
|
|
||||||
));
|
|
||||||
}
|
|
||||||
};
|
|
20
node_modules/axios/lib/core/transformData.js
generated
vendored
20
node_modules/axios/lib/core/transformData.js
generated
vendored
|
@ -1,20 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var utils = require('./../utils');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Transform the data for a request or a response
|
|
||||||
*
|
|
||||||
* @param {Object|String} data The data to be transformed
|
|
||||||
* @param {Array} headers The headers for the request or response
|
|
||||||
* @param {Array|Function} fns A single function or Array of functions
|
|
||||||
* @returns {*} The resulting transformed data
|
|
||||||
*/
|
|
||||||
module.exports = function transformData(data, headers, fns) {
|
|
||||||
/*eslint no-param-reassign:0*/
|
|
||||||
utils.forEach(fns, function transform(fn) {
|
|
||||||
data = fn(data, headers);
|
|
||||||
});
|
|
||||||
|
|
||||||
return data;
|
|
||||||
};
|
|
98
node_modules/axios/lib/defaults.js
generated
vendored
98
node_modules/axios/lib/defaults.js
generated
vendored
|
@ -1,98 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var utils = require('./utils');
|
|
||||||
var normalizeHeaderName = require('./helpers/normalizeHeaderName');
|
|
||||||
|
|
||||||
var DEFAULT_CONTENT_TYPE = {
|
|
||||||
'Content-Type': 'application/x-www-form-urlencoded'
|
|
||||||
};
|
|
||||||
|
|
||||||
function setContentTypeIfUnset(headers, value) {
|
|
||||||
if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {
|
|
||||||
headers['Content-Type'] = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function getDefaultAdapter() {
|
|
||||||
var adapter;
|
|
||||||
if (typeof XMLHttpRequest !== 'undefined') {
|
|
||||||
// For browsers use XHR adapter
|
|
||||||
adapter = require('./adapters/xhr');
|
|
||||||
} else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {
|
|
||||||
// For node use HTTP adapter
|
|
||||||
adapter = require('./adapters/http');
|
|
||||||
}
|
|
||||||
return adapter;
|
|
||||||
}
|
|
||||||
|
|
||||||
var defaults = {
|
|
||||||
adapter: getDefaultAdapter(),
|
|
||||||
|
|
||||||
transformRequest: [function transformRequest(data, headers) {
|
|
||||||
normalizeHeaderName(headers, 'Accept');
|
|
||||||
normalizeHeaderName(headers, 'Content-Type');
|
|
||||||
if (utils.isFormData(data) ||
|
|
||||||
utils.isArrayBuffer(data) ||
|
|
||||||
utils.isBuffer(data) ||
|
|
||||||
utils.isStream(data) ||
|
|
||||||
utils.isFile(data) ||
|
|
||||||
utils.isBlob(data)
|
|
||||||
) {
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
if (utils.isArrayBufferView(data)) {
|
|
||||||
return data.buffer;
|
|
||||||
}
|
|
||||||
if (utils.isURLSearchParams(data)) {
|
|
||||||
setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
|
|
||||||
return data.toString();
|
|
||||||
}
|
|
||||||
if (utils.isObject(data)) {
|
|
||||||
setContentTypeIfUnset(headers, 'application/json;charset=utf-8');
|
|
||||||
return JSON.stringify(data);
|
|
||||||
}
|
|
||||||
return data;
|
|
||||||
}],
|
|
||||||
|
|
||||||
transformResponse: [function transformResponse(data) {
|
|
||||||
/*eslint no-param-reassign:0*/
|
|
||||||
if (typeof data === 'string') {
|
|
||||||
try {
|
|
||||||
data = JSON.parse(data);
|
|
||||||
} catch (e) { /* Ignore */ }
|
|
||||||
}
|
|
||||||
return data;
|
|
||||||
}],
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A timeout in milliseconds to abort a request. If set to 0 (default) a
|
|
||||||
* timeout is not created.
|
|
||||||
*/
|
|
||||||
timeout: 0,
|
|
||||||
|
|
||||||
xsrfCookieName: 'XSRF-TOKEN',
|
|
||||||
xsrfHeaderName: 'X-XSRF-TOKEN',
|
|
||||||
|
|
||||||
maxContentLength: -1,
|
|
||||||
maxBodyLength: -1,
|
|
||||||
|
|
||||||
validateStatus: function validateStatus(status) {
|
|
||||||
return status >= 200 && status < 300;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
defaults.headers = {
|
|
||||||
common: {
|
|
||||||
'Accept': 'application/json, text/plain, */*'
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {
|
|
||||||
defaults.headers[method] = {};
|
|
||||||
});
|
|
||||||
|
|
||||||
utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
|
|
||||||
defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);
|
|
||||||
});
|
|
||||||
|
|
||||||
module.exports = defaults;
|
|
7
node_modules/axios/lib/helpers/README.md
generated
vendored
7
node_modules/axios/lib/helpers/README.md
generated
vendored
|
@ -1,7 +0,0 @@
|
||||||
# axios // helpers
|
|
||||||
|
|
||||||
The modules found in `helpers/` should be generic modules that are _not_ specific to the domain logic of axios. These modules could theoretically be published to npm on their own and consumed by other modules or apps. Some examples of generic modules are things like:
|
|
||||||
|
|
||||||
- Browser polyfills
|
|
||||||
- Managing cookies
|
|
||||||
- Parsing HTTP headers
|
|
11
node_modules/axios/lib/helpers/bind.js
generated
vendored
11
node_modules/axios/lib/helpers/bind.js
generated
vendored
|
@ -1,11 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = function bind(fn, thisArg) {
|
|
||||||
return function wrap() {
|
|
||||||
var args = new Array(arguments.length);
|
|
||||||
for (var i = 0; i < args.length; i++) {
|
|
||||||
args[i] = arguments[i];
|
|
||||||
}
|
|
||||||
return fn.apply(thisArg, args);
|
|
||||||
};
|
|
||||||
};
|
|
70
node_modules/axios/lib/helpers/buildURL.js
generated
vendored
70
node_modules/axios/lib/helpers/buildURL.js
generated
vendored
|
@ -1,70 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var utils = require('./../utils');
|
|
||||||
|
|
||||||
function encode(val) {
|
|
||||||
return encodeURIComponent(val).
|
|
||||||
replace(/%3A/gi, ':').
|
|
||||||
replace(/%24/g, '$').
|
|
||||||
replace(/%2C/gi, ',').
|
|
||||||
replace(/%20/g, '+').
|
|
||||||
replace(/%5B/gi, '[').
|
|
||||||
replace(/%5D/gi, ']');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Build a URL by appending params to the end
|
|
||||||
*
|
|
||||||
* @param {string} url The base of the url (e.g., http://www.google.com)
|
|
||||||
* @param {object} [params] The params to be appended
|
|
||||||
* @returns {string} The formatted url
|
|
||||||
*/
|
|
||||||
module.exports = function buildURL(url, params, paramsSerializer) {
|
|
||||||
/*eslint no-param-reassign:0*/
|
|
||||||
if (!params) {
|
|
||||||
return url;
|
|
||||||
}
|
|
||||||
|
|
||||||
var serializedParams;
|
|
||||||
if (paramsSerializer) {
|
|
||||||
serializedParams = paramsSerializer(params);
|
|
||||||
} else if (utils.isURLSearchParams(params)) {
|
|
||||||
serializedParams = params.toString();
|
|
||||||
} else {
|
|
||||||
var parts = [];
|
|
||||||
|
|
||||||
utils.forEach(params, function serialize(val, key) {
|
|
||||||
if (val === null || typeof val === 'undefined') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (utils.isArray(val)) {
|
|
||||||
key = key + '[]';
|
|
||||||
} else {
|
|
||||||
val = [val];
|
|
||||||
}
|
|
||||||
|
|
||||||
utils.forEach(val, function parseValue(v) {
|
|
||||||
if (utils.isDate(v)) {
|
|
||||||
v = v.toISOString();
|
|
||||||
} else if (utils.isObject(v)) {
|
|
||||||
v = JSON.stringify(v);
|
|
||||||
}
|
|
||||||
parts.push(encode(key) + '=' + encode(v));
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
serializedParams = parts.join('&');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (serializedParams) {
|
|
||||||
var hashmarkIndex = url.indexOf('#');
|
|
||||||
if (hashmarkIndex !== -1) {
|
|
||||||
url = url.slice(0, hashmarkIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;
|
|
||||||
}
|
|
||||||
|
|
||||||
return url;
|
|
||||||
};
|
|
14
node_modules/axios/lib/helpers/combineURLs.js
generated
vendored
14
node_modules/axios/lib/helpers/combineURLs.js
generated
vendored
|
@ -1,14 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new URL by combining the specified URLs
|
|
||||||
*
|
|
||||||
* @param {string} baseURL The base URL
|
|
||||||
* @param {string} relativeURL The relative URL
|
|
||||||
* @returns {string} The combined URL
|
|
||||||
*/
|
|
||||||
module.exports = function combineURLs(baseURL, relativeURL) {
|
|
||||||
return relativeURL
|
|
||||||
? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '')
|
|
||||||
: baseURL;
|
|
||||||
};
|
|
53
node_modules/axios/lib/helpers/cookies.js
generated
vendored
53
node_modules/axios/lib/helpers/cookies.js
generated
vendored
|
@ -1,53 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var utils = require('./../utils');
|
|
||||||
|
|
||||||
module.exports = (
|
|
||||||
utils.isStandardBrowserEnv() ?
|
|
||||||
|
|
||||||
// Standard browser envs support document.cookie
|
|
||||||
(function standardBrowserEnv() {
|
|
||||||
return {
|
|
||||||
write: function write(name, value, expires, path, domain, secure) {
|
|
||||||
var cookie = [];
|
|
||||||
cookie.push(name + '=' + encodeURIComponent(value));
|
|
||||||
|
|
||||||
if (utils.isNumber(expires)) {
|
|
||||||
cookie.push('expires=' + new Date(expires).toGMTString());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (utils.isString(path)) {
|
|
||||||
cookie.push('path=' + path);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (utils.isString(domain)) {
|
|
||||||
cookie.push('domain=' + domain);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (secure === true) {
|
|
||||||
cookie.push('secure');
|
|
||||||
}
|
|
||||||
|
|
||||||
document.cookie = cookie.join('; ');
|
|
||||||
},
|
|
||||||
|
|
||||||
read: function read(name) {
|
|
||||||
var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)'));
|
|
||||||
return (match ? decodeURIComponent(match[3]) : null);
|
|
||||||
},
|
|
||||||
|
|
||||||
remove: function remove(name) {
|
|
||||||
this.write(name, '', Date.now() - 86400000);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
})() :
|
|
||||||
|
|
||||||
// Non standard browser env (web workers, react-native) lack needed support.
|
|
||||||
(function nonStandardBrowserEnv() {
|
|
||||||
return {
|
|
||||||
write: function write() {},
|
|
||||||
read: function read() { return null; },
|
|
||||||
remove: function remove() {}
|
|
||||||
};
|
|
||||||
})()
|
|
||||||
);
|
|
24
node_modules/axios/lib/helpers/deprecatedMethod.js
generated
vendored
24
node_modules/axios/lib/helpers/deprecatedMethod.js
generated
vendored
|
@ -1,24 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
/*eslint no-console:0*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Supply a warning to the developer that a method they are using
|
|
||||||
* has been deprecated.
|
|
||||||
*
|
|
||||||
* @param {string} method The name of the deprecated method
|
|
||||||
* @param {string} [instead] The alternate method to use if applicable
|
|
||||||
* @param {string} [docs] The documentation URL to get further details
|
|
||||||
*/
|
|
||||||
module.exports = function deprecatedMethod(method, instead, docs) {
|
|
||||||
try {
|
|
||||||
console.warn(
|
|
||||||
'DEPRECATED method `' + method + '`.' +
|
|
||||||
(instead ? ' Use `' + instead + '` instead.' : '') +
|
|
||||||
' This method will be removed in a future release.');
|
|
||||||
|
|
||||||
if (docs) {
|
|
||||||
console.warn('For more information about usage see ' + docs);
|
|
||||||
}
|
|
||||||
} catch (e) { /* Ignore */ }
|
|
||||||
};
|
|
14
node_modules/axios/lib/helpers/isAbsoluteURL.js
generated
vendored
14
node_modules/axios/lib/helpers/isAbsoluteURL.js
generated
vendored
|
@ -1,14 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determines whether the specified URL is absolute
|
|
||||||
*
|
|
||||||
* @param {string} url The URL to test
|
|
||||||
* @returns {boolean} True if the specified URL is absolute, otherwise false
|
|
||||||
*/
|
|
||||||
module.exports = function isAbsoluteURL(url) {
|
|
||||||
// A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL).
|
|
||||||
// RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
|
|
||||||
// by any combination of letters, digits, plus, period, or hyphen.
|
|
||||||
return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);
|
|
||||||
};
|
|
11
node_modules/axios/lib/helpers/isAxiosError.js
generated
vendored
11
node_modules/axios/lib/helpers/isAxiosError.js
generated
vendored
|
@ -1,11 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determines whether the payload is an error thrown by Axios
|
|
||||||
*
|
|
||||||
* @param {*} payload The value to test
|
|
||||||
* @returns {boolean} True if the payload is an error thrown by Axios, otherwise false
|
|
||||||
*/
|
|
||||||
module.exports = function isAxiosError(payload) {
|
|
||||||
return (typeof payload === 'object') && (payload.isAxiosError === true);
|
|
||||||
};
|
|
68
node_modules/axios/lib/helpers/isURLSameOrigin.js
generated
vendored
68
node_modules/axios/lib/helpers/isURLSameOrigin.js
generated
vendored
|
@ -1,68 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var utils = require('./../utils');
|
|
||||||
|
|
||||||
module.exports = (
|
|
||||||
utils.isStandardBrowserEnv() ?
|
|
||||||
|
|
||||||
// Standard browser envs have full support of the APIs needed to test
|
|
||||||
// whether the request URL is of the same origin as current location.
|
|
||||||
(function standardBrowserEnv() {
|
|
||||||
var msie = /(msie|trident)/i.test(navigator.userAgent);
|
|
||||||
var urlParsingNode = document.createElement('a');
|
|
||||||
var originURL;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parse a URL to discover it's components
|
|
||||||
*
|
|
||||||
* @param {String} url The URL to be parsed
|
|
||||||
* @returns {Object}
|
|
||||||
*/
|
|
||||||
function resolveURL(url) {
|
|
||||||
var href = url;
|
|
||||||
|
|
||||||
if (msie) {
|
|
||||||
// IE needs attribute set twice to normalize properties
|
|
||||||
urlParsingNode.setAttribute('href', href);
|
|
||||||
href = urlParsingNode.href;
|
|
||||||
}
|
|
||||||
|
|
||||||
urlParsingNode.setAttribute('href', href);
|
|
||||||
|
|
||||||
// urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
|
|
||||||
return {
|
|
||||||
href: urlParsingNode.href,
|
|
||||||
protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
|
|
||||||
host: urlParsingNode.host,
|
|
||||||
search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
|
|
||||||
hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
|
|
||||||
hostname: urlParsingNode.hostname,
|
|
||||||
port: urlParsingNode.port,
|
|
||||||
pathname: (urlParsingNode.pathname.charAt(0) === '/') ?
|
|
||||||
urlParsingNode.pathname :
|
|
||||||
'/' + urlParsingNode.pathname
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
originURL = resolveURL(window.location.href);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine if a URL shares the same origin as the current location
|
|
||||||
*
|
|
||||||
* @param {String} requestURL The URL to test
|
|
||||||
* @returns {boolean} True if URL shares the same origin, otherwise false
|
|
||||||
*/
|
|
||||||
return function isURLSameOrigin(requestURL) {
|
|
||||||
var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;
|
|
||||||
return (parsed.protocol === originURL.protocol &&
|
|
||||||
parsed.host === originURL.host);
|
|
||||||
};
|
|
||||||
})() :
|
|
||||||
|
|
||||||
// Non standard browser envs (web workers, react-native) lack needed support.
|
|
||||||
(function nonStandardBrowserEnv() {
|
|
||||||
return function isURLSameOrigin() {
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
})()
|
|
||||||
);
|
|
12
node_modules/axios/lib/helpers/normalizeHeaderName.js
generated
vendored
12
node_modules/axios/lib/helpers/normalizeHeaderName.js
generated
vendored
|
@ -1,12 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var utils = require('../utils');
|
|
||||||
|
|
||||||
module.exports = function normalizeHeaderName(headers, normalizedName) {
|
|
||||||
utils.forEach(headers, function processHeader(value, name) {
|
|
||||||
if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
|
|
||||||
headers[normalizedName] = value;
|
|
||||||
delete headers[name];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
53
node_modules/axios/lib/helpers/parseHeaders.js
generated
vendored
53
node_modules/axios/lib/helpers/parseHeaders.js
generated
vendored
|
@ -1,53 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var utils = require('./../utils');
|
|
||||||
|
|
||||||
// Headers whose duplicates are ignored by node
|
|
||||||
// c.f. https://nodejs.org/api/http.html#http_message_headers
|
|
||||||
var ignoreDuplicateOf = [
|
|
||||||
'age', 'authorization', 'content-length', 'content-type', 'etag',
|
|
||||||
'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',
|
|
||||||
'last-modified', 'location', 'max-forwards', 'proxy-authorization',
|
|
||||||
'referer', 'retry-after', 'user-agent'
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parse headers into an object
|
|
||||||
*
|
|
||||||
* ```
|
|
||||||
* Date: Wed, 27 Aug 2014 08:58:49 GMT
|
|
||||||
* Content-Type: application/json
|
|
||||||
* Connection: keep-alive
|
|
||||||
* Transfer-Encoding: chunked
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* @param {String} headers Headers needing to be parsed
|
|
||||||
* @returns {Object} Headers parsed into an object
|
|
||||||
*/
|
|
||||||
module.exports = function parseHeaders(headers) {
|
|
||||||
var parsed = {};
|
|
||||||
var key;
|
|
||||||
var val;
|
|
||||||
var i;
|
|
||||||
|
|
||||||
if (!headers) { return parsed; }
|
|
||||||
|
|
||||||
utils.forEach(headers.split('\n'), function parser(line) {
|
|
||||||
i = line.indexOf(':');
|
|
||||||
key = utils.trim(line.substr(0, i)).toLowerCase();
|
|
||||||
val = utils.trim(line.substr(i + 1));
|
|
||||||
|
|
||||||
if (key) {
|
|
||||||
if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (key === 'set-cookie') {
|
|
||||||
parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);
|
|
||||||
} else {
|
|
||||||
parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return parsed;
|
|
||||||
};
|
|
27
node_modules/axios/lib/helpers/spread.js
generated
vendored
27
node_modules/axios/lib/helpers/spread.js
generated
vendored
|
@ -1,27 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Syntactic sugar for invoking a function and expanding an array for arguments.
|
|
||||||
*
|
|
||||||
* Common use case would be to use `Function.prototype.apply`.
|
|
||||||
*
|
|
||||||
* ```js
|
|
||||||
* function f(x, y, z) {}
|
|
||||||
* var args = [1, 2, 3];
|
|
||||||
* f.apply(null, args);
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* With `spread` this example can be re-written.
|
|
||||||
*
|
|
||||||
* ```js
|
|
||||||
* spread(function(x, y, z) {})([1, 2, 3]);
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* @param {Function} callback
|
|
||||||
* @returns {Function}
|
|
||||||
*/
|
|
||||||
module.exports = function spread(callback) {
|
|
||||||
return function wrap(arr) {
|
|
||||||
return callback.apply(null, arr);
|
|
||||||
};
|
|
||||||
};
|
|
351
node_modules/axios/lib/utils.js
generated
vendored
351
node_modules/axios/lib/utils.js
generated
vendored
|
@ -1,351 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var bind = require('./helpers/bind');
|
|
||||||
|
|
||||||
/*global toString:true*/
|
|
||||||
|
|
||||||
// utils is a library of generic helper functions non-specific to axios
|
|
||||||
|
|
||||||
var toString = Object.prototype.toString;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine if a value is an Array
|
|
||||||
*
|
|
||||||
* @param {Object} val The value to test
|
|
||||||
* @returns {boolean} True if value is an Array, otherwise false
|
|
||||||
*/
|
|
||||||
function isArray(val) {
|
|
||||||
return toString.call(val) === '[object Array]';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine if a value is undefined
|
|
||||||
*
|
|
||||||
* @param {Object} val The value to test
|
|
||||||
* @returns {boolean} True if the value is undefined, otherwise false
|
|
||||||
*/
|
|
||||||
function isUndefined(val) {
|
|
||||||
return typeof val === 'undefined';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine if a value is a Buffer
|
|
||||||
*
|
|
||||||
* @param {Object} val The value to test
|
|
||||||
* @returns {boolean} True if value is a Buffer, otherwise false
|
|
||||||
*/
|
|
||||||
function isBuffer(val) {
|
|
||||||
return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)
|
|
||||||
&& typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine if a value is an ArrayBuffer
|
|
||||||
*
|
|
||||||
* @param {Object} val The value to test
|
|
||||||
* @returns {boolean} True if value is an ArrayBuffer, otherwise false
|
|
||||||
*/
|
|
||||||
function isArrayBuffer(val) {
|
|
||||||
return toString.call(val) === '[object ArrayBuffer]';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine if a value is a FormData
|
|
||||||
*
|
|
||||||
* @param {Object} val The value to test
|
|
||||||
* @returns {boolean} True if value is an FormData, otherwise false
|
|
||||||
*/
|
|
||||||
function isFormData(val) {
|
|
||||||
return (typeof FormData !== 'undefined') && (val instanceof FormData);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine if a value is a view on an ArrayBuffer
|
|
||||||
*
|
|
||||||
* @param {Object} val The value to test
|
|
||||||
* @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false
|
|
||||||
*/
|
|
||||||
function isArrayBufferView(val) {
|
|
||||||
var result;
|
|
||||||
if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {
|
|
||||||
result = ArrayBuffer.isView(val);
|
|
||||||
} else {
|
|
||||||
result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine if a value is a String
|
|
||||||
*
|
|
||||||
* @param {Object} val The value to test
|
|
||||||
* @returns {boolean} True if value is a String, otherwise false
|
|
||||||
*/
|
|
||||||
function isString(val) {
|
|
||||||
return typeof val === 'string';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine if a value is a Number
|
|
||||||
*
|
|
||||||
* @param {Object} val The value to test
|
|
||||||
* @returns {boolean} True if value is a Number, otherwise false
|
|
||||||
*/
|
|
||||||
function isNumber(val) {
|
|
||||||
return typeof val === 'number';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine if a value is an Object
|
|
||||||
*
|
|
||||||
* @param {Object} val The value to test
|
|
||||||
* @returns {boolean} True if value is an Object, otherwise false
|
|
||||||
*/
|
|
||||||
function isObject(val) {
|
|
||||||
return val !== null && typeof val === 'object';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine if a value is a plain Object
|
|
||||||
*
|
|
||||||
* @param {Object} val The value to test
|
|
||||||
* @return {boolean} True if value is a plain Object, otherwise false
|
|
||||||
*/
|
|
||||||
function isPlainObject(val) {
|
|
||||||
if (toString.call(val) !== '[object Object]') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
var prototype = Object.getPrototypeOf(val);
|
|
||||||
return prototype === null || prototype === Object.prototype;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine if a value is a Date
|
|
||||||
*
|
|
||||||
* @param {Object} val The value to test
|
|
||||||
* @returns {boolean} True if value is a Date, otherwise false
|
|
||||||
*/
|
|
||||||
function isDate(val) {
|
|
||||||
return toString.call(val) === '[object Date]';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine if a value is a File
|
|
||||||
*
|
|
||||||
* @param {Object} val The value to test
|
|
||||||
* @returns {boolean} True if value is a File, otherwise false
|
|
||||||
*/
|
|
||||||
function isFile(val) {
|
|
||||||
return toString.call(val) === '[object File]';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine if a value is a Blob
|
|
||||||
*
|
|
||||||
* @param {Object} val The value to test
|
|
||||||
* @returns {boolean} True if value is a Blob, otherwise false
|
|
||||||
*/
|
|
||||||
function isBlob(val) {
|
|
||||||
return toString.call(val) === '[object Blob]';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine if a value is a Function
|
|
||||||
*
|
|
||||||
* @param {Object} val The value to test
|
|
||||||
* @returns {boolean} True if value is a Function, otherwise false
|
|
||||||
*/
|
|
||||||
function isFunction(val) {
|
|
||||||
return toString.call(val) === '[object Function]';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine if a value is a Stream
|
|
||||||
*
|
|
||||||
* @param {Object} val The value to test
|
|
||||||
* @returns {boolean} True if value is a Stream, otherwise false
|
|
||||||
*/
|
|
||||||
function isStream(val) {
|
|
||||||
return isObject(val) && isFunction(val.pipe);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine if a value is a URLSearchParams object
|
|
||||||
*
|
|
||||||
* @param {Object} val The value to test
|
|
||||||
* @returns {boolean} True if value is a URLSearchParams object, otherwise false
|
|
||||||
*/
|
|
||||||
function isURLSearchParams(val) {
|
|
||||||
return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Trim excess whitespace off the beginning and end of a string
|
|
||||||
*
|
|
||||||
* @param {String} str The String to trim
|
|
||||||
* @returns {String} The String freed of excess whitespace
|
|
||||||
*/
|
|
||||||
function trim(str) {
|
|
||||||
return str.replace(/^\s*/, '').replace(/\s*$/, '');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine if we're running in a standard browser environment
|
|
||||||
*
|
|
||||||
* This allows axios to run in a web worker, and react-native.
|
|
||||||
* Both environments support XMLHttpRequest, but not fully standard globals.
|
|
||||||
*
|
|
||||||
* web workers:
|
|
||||||
* typeof window -> undefined
|
|
||||||
* typeof document -> undefined
|
|
||||||
*
|
|
||||||
* react-native:
|
|
||||||
* navigator.product -> 'ReactNative'
|
|
||||||
* nativescript
|
|
||||||
* navigator.product -> 'NativeScript' or 'NS'
|
|
||||||
*/
|
|
||||||
function isStandardBrowserEnv() {
|
|
||||||
if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||
|
|
||||||
navigator.product === 'NativeScript' ||
|
|
||||||
navigator.product === 'NS')) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return (
|
|
||||||
typeof window !== 'undefined' &&
|
|
||||||
typeof document !== 'undefined'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Iterate over an Array or an Object invoking a function for each item.
|
|
||||||
*
|
|
||||||
* If `obj` is an Array callback will be called passing
|
|
||||||
* the value, index, and complete array for each item.
|
|
||||||
*
|
|
||||||
* If 'obj' is an Object callback will be called passing
|
|
||||||
* the value, key, and complete object for each property.
|
|
||||||
*
|
|
||||||
* @param {Object|Array} obj The object to iterate
|
|
||||||
* @param {Function} fn The callback to invoke for each item
|
|
||||||
*/
|
|
||||||
function forEach(obj, fn) {
|
|
||||||
// Don't bother if no value provided
|
|
||||||
if (obj === null || typeof obj === 'undefined') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Force an array if not already something iterable
|
|
||||||
if (typeof obj !== 'object') {
|
|
||||||
/*eslint no-param-reassign:0*/
|
|
||||||
obj = [obj];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isArray(obj)) {
|
|
||||||
// Iterate over array values
|
|
||||||
for (var i = 0, l = obj.length; i < l; i++) {
|
|
||||||
fn.call(null, obj[i], i, obj);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Iterate over object keys
|
|
||||||
for (var key in obj) {
|
|
||||||
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
||||||
fn.call(null, obj[key], key, obj);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Accepts varargs expecting each argument to be an object, then
|
|
||||||
* immutably merges the properties of each object and returns result.
|
|
||||||
*
|
|
||||||
* When multiple objects contain the same key the later object in
|
|
||||||
* the arguments list will take precedence.
|
|
||||||
*
|
|
||||||
* Example:
|
|
||||||
*
|
|
||||||
* ```js
|
|
||||||
* var result = merge({foo: 123}, {foo: 456});
|
|
||||||
* console.log(result.foo); // outputs 456
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* @param {Object} obj1 Object to merge
|
|
||||||
* @returns {Object} Result of all merge properties
|
|
||||||
*/
|
|
||||||
function merge(/* obj1, obj2, obj3, ... */) {
|
|
||||||
var result = {};
|
|
||||||
function assignValue(val, key) {
|
|
||||||
if (isPlainObject(result[key]) && isPlainObject(val)) {
|
|
||||||
result[key] = merge(result[key], val);
|
|
||||||
} else if (isPlainObject(val)) {
|
|
||||||
result[key] = merge({}, val);
|
|
||||||
} else if (isArray(val)) {
|
|
||||||
result[key] = val.slice();
|
|
||||||
} else {
|
|
||||||
result[key] = val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var i = 0, l = arguments.length; i < l; i++) {
|
|
||||||
forEach(arguments[i], assignValue);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extends object a by mutably adding to it the properties of object b.
|
|
||||||
*
|
|
||||||
* @param {Object} a The object to be extended
|
|
||||||
* @param {Object} b The object to copy properties from
|
|
||||||
* @param {Object} thisArg The object to bind function to
|
|
||||||
* @return {Object} The resulting value of object a
|
|
||||||
*/
|
|
||||||
function extend(a, b, thisArg) {
|
|
||||||
forEach(b, function assignValue(val, key) {
|
|
||||||
if (thisArg && typeof val === 'function') {
|
|
||||||
a[key] = bind(val, thisArg);
|
|
||||||
} else {
|
|
||||||
a[key] = val;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return a;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
|
|
||||||
*
|
|
||||||
* @param {string} content with BOM
|
|
||||||
* @return {string} content value without BOM
|
|
||||||
*/
|
|
||||||
function stripBOM(content) {
|
|
||||||
if (content.charCodeAt(0) === 0xFEFF) {
|
|
||||||
content = content.slice(1);
|
|
||||||
}
|
|
||||||
return content;
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
isArray: isArray,
|
|
||||||
isArrayBuffer: isArrayBuffer,
|
|
||||||
isBuffer: isBuffer,
|
|
||||||
isFormData: isFormData,
|
|
||||||
isArrayBufferView: isArrayBufferView,
|
|
||||||
isString: isString,
|
|
||||||
isNumber: isNumber,
|
|
||||||
isObject: isObject,
|
|
||||||
isPlainObject: isPlainObject,
|
|
||||||
isUndefined: isUndefined,
|
|
||||||
isDate: isDate,
|
|
||||||
isFile: isFile,
|
|
||||||
isBlob: isBlob,
|
|
||||||
isFunction: isFunction,
|
|
||||||
isStream: isStream,
|
|
||||||
isURLSearchParams: isURLSearchParams,
|
|
||||||
isStandardBrowserEnv: isStandardBrowserEnv,
|
|
||||||
forEach: forEach,
|
|
||||||
merge: merge,
|
|
||||||
extend: extend,
|
|
||||||
trim: trim,
|
|
||||||
stripBOM: stripBOM
|
|
||||||
};
|
|
116
node_modules/axios/package.json
generated
vendored
116
node_modules/axios/package.json
generated
vendored
|
@ -1,116 +0,0 @@
|
||||||
{
|
|
||||||
"_args": [
|
|
||||||
[
|
|
||||||
"axios@0.21.1",
|
|
||||||
"/home/nuno/Documents/core/software/fresh/js/metaforecasts/metaforecasts-current"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"_from": "axios@0.21.1",
|
|
||||||
"_id": "axios@0.21.1",
|
|
||||||
"_inBundle": false,
|
|
||||||
"_integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
|
|
||||||
"_location": "/axios",
|
|
||||||
"_phantomChildren": {},
|
|
||||||
"_requested": {
|
|
||||||
"type": "version",
|
|
||||||
"registry": true,
|
|
||||||
"raw": "axios@0.21.1",
|
|
||||||
"name": "axios",
|
|
||||||
"escapedName": "axios",
|
|
||||||
"rawSpec": "0.21.1",
|
|
||||||
"saveSpec": null,
|
|
||||||
"fetchSpec": "0.21.1"
|
|
||||||
},
|
|
||||||
"_requiredBy": [
|
|
||||||
"/"
|
|
||||||
],
|
|
||||||
"_resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
|
|
||||||
"_spec": "0.21.1",
|
|
||||||
"_where": "/home/nuno/Documents/core/software/fresh/js/metaforecasts/metaforecasts-current",
|
|
||||||
"author": {
|
|
||||||
"name": "Matt Zabriskie"
|
|
||||||
},
|
|
||||||
"browser": {
|
|
||||||
"./lib/adapters/http.js": "./lib/adapters/xhr.js"
|
|
||||||
},
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/axios/axios/issues"
|
|
||||||
},
|
|
||||||
"bundlesize": [
|
|
||||||
{
|
|
||||||
"path": "./dist/axios.min.js",
|
|
||||||
"threshold": "5kB"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"dependencies": {
|
|
||||||
"follow-redirects": "^1.10.0"
|
|
||||||
},
|
|
||||||
"description": "Promise based HTTP client for the browser and node.js",
|
|
||||||
"devDependencies": {
|
|
||||||
"bundlesize": "^0.17.0",
|
|
||||||
"coveralls": "^3.0.0",
|
|
||||||
"es6-promise": "^4.2.4",
|
|
||||||
"grunt": "^1.0.2",
|
|
||||||
"grunt-banner": "^0.6.0",
|
|
||||||
"grunt-cli": "^1.2.0",
|
|
||||||
"grunt-contrib-clean": "^1.1.0",
|
|
||||||
"grunt-contrib-watch": "^1.0.0",
|
|
||||||
"grunt-eslint": "^20.1.0",
|
|
||||||
"grunt-karma": "^2.0.0",
|
|
||||||
"grunt-mocha-test": "^0.13.3",
|
|
||||||
"grunt-ts": "^6.0.0-beta.19",
|
|
||||||
"grunt-webpack": "^1.0.18",
|
|
||||||
"istanbul-instrumenter-loader": "^1.0.0",
|
|
||||||
"jasmine-core": "^2.4.1",
|
|
||||||
"karma": "^1.3.0",
|
|
||||||
"karma-chrome-launcher": "^2.2.0",
|
|
||||||
"karma-coverage": "^1.1.1",
|
|
||||||
"karma-firefox-launcher": "^1.1.0",
|
|
||||||
"karma-jasmine": "^1.1.1",
|
|
||||||
"karma-jasmine-ajax": "^0.1.13",
|
|
||||||
"karma-opera-launcher": "^1.0.0",
|
|
||||||
"karma-safari-launcher": "^1.0.0",
|
|
||||||
"karma-sauce-launcher": "^1.2.0",
|
|
||||||
"karma-sinon": "^1.0.5",
|
|
||||||
"karma-sourcemap-loader": "^0.3.7",
|
|
||||||
"karma-webpack": "^1.7.0",
|
|
||||||
"load-grunt-tasks": "^3.5.2",
|
|
||||||
"minimist": "^1.2.0",
|
|
||||||
"mocha": "^5.2.0",
|
|
||||||
"sinon": "^4.5.0",
|
|
||||||
"typescript": "^2.8.1",
|
|
||||||
"url-search-params": "^0.10.0",
|
|
||||||
"webpack": "^1.13.1",
|
|
||||||
"webpack-dev-server": "^1.14.1"
|
|
||||||
},
|
|
||||||
"homepage": "https://github.com/axios/axios",
|
|
||||||
"jsdelivr": "dist/axios.min.js",
|
|
||||||
"keywords": [
|
|
||||||
"xhr",
|
|
||||||
"http",
|
|
||||||
"ajax",
|
|
||||||
"promise",
|
|
||||||
"node"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"main": "index.js",
|
|
||||||
"name": "axios",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git+https://github.com/axios/axios.git"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"build": "NODE_ENV=production grunt build",
|
|
||||||
"coveralls": "cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js",
|
|
||||||
"examples": "node ./examples/server.js",
|
|
||||||
"fix": "eslint --fix lib/**/*.js",
|
|
||||||
"postversion": "git push && git push --tags",
|
|
||||||
"preversion": "npm test",
|
|
||||||
"start": "node ./sandbox/server.js",
|
|
||||||
"test": "grunt test && bundlesize",
|
|
||||||
"version": "npm run build && grunt version && git add -A dist && git add CHANGELOG.md bower.json package.json"
|
|
||||||
},
|
|
||||||
"typings": "./index.d.ts",
|
|
||||||
"unpkg": "dist/axios.min.js",
|
|
||||||
"version": "0.21.1"
|
|
||||||
}
|
|
361
node_modules/commander/CHANGELOG.md
generated
vendored
361
node_modules/commander/CHANGELOG.md
generated
vendored
|
@ -1,361 +0,0 @@
|
||||||
# Changelog
|
|
||||||
|
|
||||||
All notable changes to this project will be documented in this file.
|
|
||||||
|
|
||||||
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
|
||||||
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). (Format adopted after v3.0.0.)
|
|
||||||
|
|
||||||
<!-- markdownlint-disable MD024 -->
|
|
||||||
<!-- markdownlint-disable MD004 -->
|
|
||||||
|
|
||||||
## [6.2.1] (2020-12-13)
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
|
|
||||||
- some tests failed if directory path included a space ([1390])
|
|
||||||
|
|
||||||
## [6.2.0] (2020-10-25)
|
|
||||||
|
|
||||||
### Added
|
|
||||||
|
|
||||||
- added 'tsx' file extension for stand-alone executable subcommands ([#1368])
|
|
||||||
- documented second parameter to `.description()` to describe command arguments ([#1353])
|
|
||||||
- documentation of special cases with options taking varying numbers of option-arguments ([#1332])
|
|
||||||
- documentation for terminology ([#1361])
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
|
|
||||||
- add missing TypeScript definition for `.addHelpCommand()' ([#1375])
|
|
||||||
- removed blank line after "Arguments:" in help, to match "Options:" and "Commands:" ([#1360])
|
|
||||||
|
|
||||||
### Changed
|
|
||||||
|
|
||||||
- update dependencies
|
|
||||||
|
|
||||||
## [6.1.0] (2020-08-28)
|
|
||||||
|
|
||||||
### Added
|
|
||||||
|
|
||||||
- include URL to relevant section of README for error for potential conflict between Command properties and option values ([#1306])
|
|
||||||
- `.combineFlagAndOptionalValue(false)` to ease upgrade path from older versions of Commander ([#1326])
|
|
||||||
- allow disabling the built-in help option using `.helpOption(false)` ([#1325])
|
|
||||||
- allow just some arguments in `argumentDescription` to `.description()` ([#1323])
|
|
||||||
|
|
||||||
### Changed
|
|
||||||
|
|
||||||
- tidy async test and remove lint override ([#1312])
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
|
|
||||||
- executable subcommand launching when script path not known ([#1322])
|
|
||||||
|
|
||||||
## [6.0.0] (2020-07-21)
|
|
||||||
|
|
||||||
### Added
|
|
||||||
|
|
||||||
- add support for variadic options ([#1250])
|
|
||||||
- allow options to be added with just a short flag ([#1256])
|
|
||||||
- *Breaking* the option property has same case as flag. e.g. flag `-n` accessed as `opts().n` (previously uppercase)
|
|
||||||
- *Breaking* throw an error if there might be a clash between option name and a Command property, with advice on how to resolve ([#1275])
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
|
|
||||||
- Options which contain -no- in the middle of the option flag should not be treated as negatable. ([#1301])
|
|
||||||
|
|
||||||
## [6.0.0-0] (2020-06-20)
|
|
||||||
|
|
||||||
(Released in 6.0.0)
|
|
||||||
|
|
||||||
## [5.1.0] (2020-04-25)
|
|
||||||
|
|
||||||
### Added
|
|
||||||
|
|
||||||
- support for multiple command aliases, the first of which is shown in the auto-generated help ([#531], [#1236])
|
|
||||||
- configuration support in `addCommand()` for `hidden` and `isDefault` ([#1232])
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
|
|
||||||
- omit masked help flags from the displayed help ([#645], [#1247])
|
|
||||||
- remove old short help flag when change help flags using `helpOption` ([#1248])
|
|
||||||
|
|
||||||
### Changed
|
|
||||||
|
|
||||||
- remove use of `arguments` to improve auto-generated help in editors ([#1235])
|
|
||||||
- rename `.command()` configuration `noHelp` to `hidden` (but not remove old support) ([#1232])
|
|
||||||
- improvements to documentation
|
|
||||||
- update dependencies
|
|
||||||
- update tested versions of node
|
|
||||||
- eliminate lint errors in TypeScript ([#1208])
|
|
||||||
|
|
||||||
## [5.0.0] (2020-03-14)
|
|
||||||
|
|
||||||
### Added
|
|
||||||
|
|
||||||
* support for nested commands with action-handlers ([#1] [#764] [#1149])
|
|
||||||
* `.addCommand()` for adding a separately configured command ([#764] [#1149])
|
|
||||||
* allow a non-executable to be set as the default command ([#742] [#1149])
|
|
||||||
* implicit help command when there are subcommands (previously only if executables) ([#1149])
|
|
||||||
* customise implicit help command with `.addHelpCommand()` ([#1149])
|
|
||||||
* display error message for unknown subcommand, by default ([#432] [#1088] [#1149])
|
|
||||||
* display help for missing subcommand, by default ([#1088] [#1149])
|
|
||||||
* combined short options as single argument may include boolean flags and value flag and value (e.g. `-a -b -p 80` can be written as `-abp80`) ([#1145])
|
|
||||||
* `.parseOption()` includes short flag and long flag expansions ([#1145])
|
|
||||||
* `.helpInformation()` returns help text as a string, previously a private routine ([#1169])
|
|
||||||
* `.parse()` implicitly uses `process.argv` if arguments not specified ([#1172])
|
|
||||||
* optionally specify where `.parse()` arguments "from", if not following node conventions ([#512] [#1172])
|
|
||||||
* suggest help option along with unknown command error ([#1179])
|
|
||||||
* TypeScript definition for `commands` property of `Command` ([#1184])
|
|
||||||
* export `program` property ([#1195])
|
|
||||||
* `createCommand` factory method to simplify subclassing ([#1191])
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
|
|
||||||
* preserve argument order in subcommands ([#508] [#962] [#1138])
|
|
||||||
* do not emit `command:*` for executable subcommands ([#809] [#1149])
|
|
||||||
* action handler called whether or not there are non-option arguments ([#1062] [#1149])
|
|
||||||
* combining option short flag and value in single argument now works for subcommands ([#1145])
|
|
||||||
* only add implicit help command when it will not conflict with other uses of argument ([#1153] [#1149])
|
|
||||||
* implicit help command works with command aliases ([#948] [#1149])
|
|
||||||
* options are validated whether or not there is an action handler ([#1149])
|
|
||||||
|
|
||||||
### Changed
|
|
||||||
|
|
||||||
* *Breaking* `.args` contains command arguments with just recognised options removed ([#1032] [#1138])
|
|
||||||
* *Breaking* display error if required argument for command is missing ([#995] [#1149])
|
|
||||||
* tighten TypeScript definition of custom option processing function passed to `.option()` ([#1119])
|
|
||||||
* *Breaking* `.allowUnknownOption()` ([#802] [#1138])
|
|
||||||
* unknown options included in arguments passed to command action handler
|
|
||||||
* unknown options included in `.args`
|
|
||||||
* only recognised option short flags and long flags are expanded (e.g. `-ab` or `--foo=bar`) ([#1145])
|
|
||||||
* *Breaking* `.parseOptions()` ([#1138])
|
|
||||||
* `args` in returned result renamed `operands` and does not include anything after first unknown option
|
|
||||||
* `unknown` in returned result has arguments after first unknown option including operands, not just options and values
|
|
||||||
* *Breaking* `.on('command:*', callback)` and other command events passed (changed) results from `.parseOptions`, i.e. operands and unknown ([#1138])
|
|
||||||
* refactor Option from prototype to class ([#1133])
|
|
||||||
* refactor Command from prototype to class ([#1159])
|
|
||||||
* changes to error handling ([#1165])
|
|
||||||
* throw for author error, not just display message
|
|
||||||
* preflight for variadic error
|
|
||||||
* add tips to missing subcommand executable
|
|
||||||
* TypeScript fluent return types changed to be more subclass friendly, return `this` rather than `Command` ([#1180])
|
|
||||||
* `.parseAsync` returns `Promise<this>` to be consistent with `.parse()` ([#1180])
|
|
||||||
* update dependencies
|
|
||||||
|
|
||||||
### Removed
|
|
||||||
|
|
||||||
* removed EventEmitter from TypeScript definition for Command, eliminating implicit peer dependency on `@types/node` ([#1146])
|
|
||||||
* removed private function `normalize` (the functionality has been integrated into `parseOptions`) ([#1145])
|
|
||||||
* `parseExpectedArgs` is now private ([#1149])
|
|
||||||
|
|
||||||
### Migration Tips
|
|
||||||
|
|
||||||
If you use `.on('command:*')` or more complicated tests to detect an unrecognised subcommand, you may be able to delete the code and rely on the default behaviour.
|
|
||||||
|
|
||||||
If you use `program.args` or more complicated tests to detect a missing subcommand, you may be able to delete the code and rely on the default behaviour.
|
|
||||||
|
|
||||||
If you use `.command('*')` to add a default command, you may be be able to switch to `isDefault:true` with a named command.
|
|
||||||
|
|
||||||
If you want to continue combining short options with optional values as though they were boolean flags, set `combineFlagAndOptionalValue(false)`
|
|
||||||
to expand `-fb` to `-f -b` rather than `-f b`.
|
|
||||||
|
|
||||||
## [5.0.0-4] (2020-03-03)
|
|
||||||
|
|
||||||
(Released in 5.0.0)
|
|
||||||
|
|
||||||
## [5.0.0-3] (2020-02-20)
|
|
||||||
|
|
||||||
(Released in 5.0.0)
|
|
||||||
|
|
||||||
## [5.0.0-2] (2020-02-10)
|
|
||||||
|
|
||||||
(Released in 5.0.0)
|
|
||||||
|
|
||||||
## [5.0.0-1] (2020-02-08)
|
|
||||||
|
|
||||||
(Released in 5.0.0)
|
|
||||||
|
|
||||||
## [5.0.0-0] (2020-02-02)
|
|
||||||
|
|
||||||
(Released in 5.0.0)
|
|
||||||
|
|
||||||
## [4.1.1] (2020-02-02)
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
|
|
||||||
* TypeScript definition for `.action()` should include Promise for async ([#1157])
|
|
||||||
|
|
||||||
## [4.1.0] (2020-01-06)
|
|
||||||
|
|
||||||
### Added
|
|
||||||
|
|
||||||
* two routines to change how option values are handled, and eliminate name clashes with command properties ([#933] [#1102])
|
|
||||||
* see storeOptionsAsProperties and passCommandToAction in README
|
|
||||||
* `.parseAsync` to use instead of `.parse` if supply async action handlers ([#806] [#1118])
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
|
|
||||||
* Remove trailing blanks from wrapped help text ([#1096])
|
|
||||||
|
|
||||||
### Changed
|
|
||||||
|
|
||||||
* update dependencies
|
|
||||||
* extend security coverage for Commander 2.x to 2020-02-03
|
|
||||||
* improvements to README
|
|
||||||
* improvements to TypeScript definition documentation
|
|
||||||
* move old versions out of main CHANGELOG
|
|
||||||
* removed explicit use of `ts-node` in tests
|
|
||||||
|
|
||||||
## [4.0.1] (2019-11-12)
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
|
|
||||||
* display help when requested, even if there are missing required options ([#1091])
|
|
||||||
|
|
||||||
## [4.0.0] (2019-11-02)
|
|
||||||
|
|
||||||
### Added
|
|
||||||
|
|
||||||
* automatically wrap and indent help descriptions for options and commands ([#1051])
|
|
||||||
* `.exitOverride()` allows override of calls to `process.exit` for additional error handling and to keep program running ([#1040])
|
|
||||||
* support for declaring required options with `.requiredOptions()` ([#1071])
|
|
||||||
* GitHub Actions support ([#1027])
|
|
||||||
* translation links in README
|
|
||||||
|
|
||||||
### Changed
|
|
||||||
|
|
||||||
* dev: switch tests from Sinon+Should to Jest with major rewrite of tests ([#1035])
|
|
||||||
* call default subcommand even when there are unknown options ([#1047])
|
|
||||||
* *Breaking* Commander is only officially supported on Node 8 and above, and requires Node 6 ([#1053])
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
|
|
||||||
* *Breaking* keep command object out of program.args when action handler called ([#1048])
|
|
||||||
* also, action handler now passed array of unknown arguments
|
|
||||||
* complain about unknown options when program argument supplied and action handler ([#1049])
|
|
||||||
* this changes parameters to `command:*` event to include unknown arguments
|
|
||||||
* removed deprecated `customFds` option from call to `child_process.spawn` ([#1052])
|
|
||||||
* rework TypeScript declarations to bring all types into imported namespace ([#1081])
|
|
||||||
|
|
||||||
### Migration Tips
|
|
||||||
|
|
||||||
#### Testing for no arguments
|
|
||||||
|
|
||||||
If you were previously using code like:
|
|
||||||
|
|
||||||
```js
|
|
||||||
if (!program.args.length) ...
|
|
||||||
```
|
|
||||||
|
|
||||||
a partial replacement is:
|
|
||||||
|
|
||||||
```js
|
|
||||||
if (program.rawArgs.length < 3) ...
|
|
||||||
```
|
|
||||||
|
|
||||||
## [4.0.0-1] Prerelease (2019-10-08)
|
|
||||||
|
|
||||||
(Released in 4.0.0)
|
|
||||||
|
|
||||||
## [4.0.0-0] Prerelease (2019-10-01)
|
|
||||||
|
|
||||||
(Released in 4.0.0)
|
|
||||||
|
|
||||||
## Older versions
|
|
||||||
|
|
||||||
* [3.x](./changelogs/CHANGELOG-3.md)
|
|
||||||
* [2.x](./changelogs/CHANGELOG-2.md)
|
|
||||||
* [1.x](./changelogs/CHANGELOG-1.md)
|
|
||||||
* [0.x](./changelogs/CHANGELOG-0.md)
|
|
||||||
|
|
||||||
[#1]: https://github.com/tj/commander.js/issues/1
|
|
||||||
[#432]: https://github.com/tj/commander.js/issues/432
|
|
||||||
[#508]: https://github.com/tj/commander.js/issues/508
|
|
||||||
[#512]: https://github.com/tj/commander.js/issues/512
|
|
||||||
[#531]: https://github.com/tj/commander.js/issues/531
|
|
||||||
[#645]: https://github.com/tj/commander.js/issues/645
|
|
||||||
[#742]: https://github.com/tj/commander.js/issues/742
|
|
||||||
[#764]: https://github.com/tj/commander.js/issues/764
|
|
||||||
[#802]: https://github.com/tj/commander.js/issues/802
|
|
||||||
[#806]: https://github.com/tj/commander.js/issues/806
|
|
||||||
[#809]: https://github.com/tj/commander.js/issues/809
|
|
||||||
[#948]: https://github.com/tj/commander.js/issues/948
|
|
||||||
[#962]: https://github.com/tj/commander.js/issues/962
|
|
||||||
[#995]: https://github.com/tj/commander.js/issues/995
|
|
||||||
[#1027]: https://github.com/tj/commander.js/pull/1027
|
|
||||||
[#1032]: https://github.com/tj/commander.js/issues/1032
|
|
||||||
[#1035]: https://github.com/tj/commander.js/pull/1035
|
|
||||||
[#1040]: https://github.com/tj/commander.js/pull/1040
|
|
||||||
[#1047]: https://github.com/tj/commander.js/pull/1047
|
|
||||||
[#1048]: https://github.com/tj/commander.js/pull/1048
|
|
||||||
[#1049]: https://github.com/tj/commander.js/pull/1049
|
|
||||||
[#1051]: https://github.com/tj/commander.js/pull/1051
|
|
||||||
[#1052]: https://github.com/tj/commander.js/pull/1052
|
|
||||||
[#1053]: https://github.com/tj/commander.js/pull/1053
|
|
||||||
[#1062]: https://github.com/tj/commander.js/pull/1062
|
|
||||||
[#1071]: https://github.com/tj/commander.js/pull/1071
|
|
||||||
[#1081]: https://github.com/tj/commander.js/pull/1081
|
|
||||||
[#1088]: https://github.com/tj/commander.js/issues/1088
|
|
||||||
[#1091]: https://github.com/tj/commander.js/pull/1091
|
|
||||||
[#1096]: https://github.com/tj/commander.js/pull/1096
|
|
||||||
[#1102]: https://github.com/tj/commander.js/pull/1102
|
|
||||||
[#1118]: https://github.com/tj/commander.js/pull/1118
|
|
||||||
[#1119]: https://github.com/tj/commander.js/pull/1119
|
|
||||||
[#1133]: https://github.com/tj/commander.js/pull/1133
|
|
||||||
[#1138]: https://github.com/tj/commander.js/pull/1138
|
|
||||||
[#1145]: https://github.com/tj/commander.js/pull/1145
|
|
||||||
[#1146]: https://github.com/tj/commander.js/pull/1146
|
|
||||||
[#1149]: https://github.com/tj/commander.js/pull/1149
|
|
||||||
[#1153]: https://github.com/tj/commander.js/issues/1153
|
|
||||||
[#1157]: https://github.com/tj/commander.js/pull/1157
|
|
||||||
[#1159]: https://github.com/tj/commander.js/pull/1159
|
|
||||||
[#1165]: https://github.com/tj/commander.js/pull/1165
|
|
||||||
[#1169]: https://github.com/tj/commander.js/pull/1169
|
|
||||||
[#1172]: https://github.com/tj/commander.js/pull/1172
|
|
||||||
[#1179]: https://github.com/tj/commander.js/pull/1179
|
|
||||||
[#1180]: https://github.com/tj/commander.js/pull/1180
|
|
||||||
[#1184]: https://github.com/tj/commander.js/pull/1184
|
|
||||||
[#1191]: https://github.com/tj/commander.js/pull/1191
|
|
||||||
[#1195]: https://github.com/tj/commander.js/pull/1195
|
|
||||||
[#1208]: https://github.com/tj/commander.js/pull/1208
|
|
||||||
[#1232]: https://github.com/tj/commander.js/pull/1232
|
|
||||||
[#1235]: https://github.com/tj/commander.js/pull/1235
|
|
||||||
[#1236]: https://github.com/tj/commander.js/pull/1236
|
|
||||||
[#1247]: https://github.com/tj/commander.js/pull/1247
|
|
||||||
[#1248]: https://github.com/tj/commander.js/pull/1248
|
|
||||||
[#1250]: https://github.com/tj/commander.js/pull/1250
|
|
||||||
[#1256]: https://github.com/tj/commander.js/pull/1256
|
|
||||||
[#1275]: https://github.com/tj/commander.js/pull/1275
|
|
||||||
[#1301]: https://github.com/tj/commander.js/issues/1301
|
|
||||||
[#1306]: https://github.com/tj/commander.js/pull/1306
|
|
||||||
[#1312]: https://github.com/tj/commander.js/pull/1312
|
|
||||||
[#1322]: https://github.com/tj/commander.js/pull/1322
|
|
||||||
[#1323]: https://github.com/tj/commander.js/pull/1323
|
|
||||||
[#1325]: https://github.com/tj/commander.js/pull/1325
|
|
||||||
[#1326]: https://github.com/tj/commander.js/pull/1326
|
|
||||||
[#1332]: https://github.com/tj/commander.js/pull/1332
|
|
||||||
[#1353]: https://github.com/tj/commander.js/pull/1353
|
|
||||||
[#1360]: https://github.com/tj/commander.js/pull/1360
|
|
||||||
[#1361]: https://github.com/tj/commander.js/pull/1361
|
|
||||||
[#1368]: https://github.com/tj/commander.js/pull/1368
|
|
||||||
[#1375]: https://github.com/tj/commander.js/pull/1375
|
|
||||||
[#1390]: https://github.com/tj/commander.js/pull/1390
|
|
||||||
|
|
||||||
[Unreleased]: https://github.com/tj/commander.js/compare/master...develop
|
|
||||||
[6.2.1]: https://github.com/tj/commander.js/compare/v6.2.0..v6.2.1
|
|
||||||
[6.2.0]: https://github.com/tj/commander.js/compare/v6.1.0..v6.2.0
|
|
||||||
[6.1.0]: https://github.com/tj/commander.js/compare/v6.0.0..v6.1.0
|
|
||||||
[6.0.0]: https://github.com/tj/commander.js/compare/v5.1.0..v6.0.0
|
|
||||||
[6.0.0-0]: https://github.com/tj/commander.js/compare/v5.1.0..v6.0.0-0
|
|
||||||
[5.1.0]: https://github.com/tj/commander.js/compare/v5.0.0..v5.1.0
|
|
||||||
[5.0.0]: https://github.com/tj/commander.js/compare/v4.1.1..v5.0.0
|
|
||||||
[5.0.0-4]: https://github.com/tj/commander.js/compare/v5.0.0-3..v5.0.0-4
|
|
||||||
[5.0.0-3]: https://github.com/tj/commander.js/compare/v5.0.0-2..v5.0.0-3
|
|
||||||
[5.0.0-2]: https://github.com/tj/commander.js/compare/v5.0.0-1..v5.0.0-2
|
|
||||||
[5.0.0-1]: https://github.com/tj/commander.js/compare/v5.0.0-0..v5.0.0-1
|
|
||||||
[5.0.0-0]: https://github.com/tj/commander.js/compare/v4.1.1..v5.0.0-0
|
|
||||||
[4.1.1]: https://github.com/tj/commander.js/compare/v4.1.0..v4.1.1
|
|
||||||
[4.1.0]: https://github.com/tj/commander.js/compare/v4.0.1..v4.1.0
|
|
||||||
[4.0.1]: https://github.com/tj/commander.js/compare/v4.0.0..v4.0.1
|
|
||||||
[4.0.0]: https://github.com/tj/commander.js/compare/v3.0.2..v4.0.0
|
|
||||||
[4.0.0-1]: https://github.com/tj/commander.js/compare/v4.0.0-0..v4.0.0-1
|
|
||||||
[4.0.0-0]: https://github.com/tj/commander.js/compare/v3.0.2...v4.0.0-0
|
|
22
node_modules/commander/LICENSE
generated
vendored
22
node_modules/commander/LICENSE
generated
vendored
|
@ -1,22 +0,0 @@
|
||||||
(The MIT License)
|
|
||||||
|
|
||||||
Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca>
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of this software and associated documentation files (the
|
|
||||||
'Software'), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
||||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
||||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
||||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
791
node_modules/commander/Readme.md
generated
vendored
791
node_modules/commander/Readme.md
generated
vendored
|
@ -1,791 +0,0 @@
|
||||||
# Commander.js
|
|
||||||
|
|
||||||
[![Build Status](https://api.travis-ci.org/tj/commander.js.svg?branch=master)](http://travis-ci.org/tj/commander.js)
|
|
||||||
[![NPM Version](http://img.shields.io/npm/v/commander.svg?style=flat)](https://www.npmjs.org/package/commander)
|
|
||||||
[![NPM Downloads](https://img.shields.io/npm/dm/commander.svg?style=flat)](https://npmcharts.com/compare/commander?minimal=true)
|
|
||||||
[![Install Size](https://packagephobia.now.sh/badge?p=commander)](https://packagephobia.now.sh/result?p=commander)
|
|
||||||
|
|
||||||
The complete solution for [node.js](http://nodejs.org) command-line interfaces.
|
|
||||||
|
|
||||||
Read this in other languages: English | [简体中文](./Readme_zh-CN.md)
|
|
||||||
|
|
||||||
- [Commander.js](#commanderjs)
|
|
||||||
- [Installation](#installation)
|
|
||||||
- [Declaring _program_ variable](#declaring-program-variable)
|
|
||||||
- [Options](#options)
|
|
||||||
- [Common option types, boolean and value](#common-option-types-boolean-and-value)
|
|
||||||
- [Default option value](#default-option-value)
|
|
||||||
- [Other option types, negatable boolean and boolean|value](#other-option-types-negatable-boolean-and-booleanvalue)
|
|
||||||
- [Custom option processing](#custom-option-processing)
|
|
||||||
- [Required option](#required-option)
|
|
||||||
- [Variadic option](#variadic-option)
|
|
||||||
- [Version option](#version-option)
|
|
||||||
- [Commands](#commands)
|
|
||||||
- [Specify the argument syntax](#specify-the-argument-syntax)
|
|
||||||
- [Action handler (sub)commands](#action-handler-subcommands)
|
|
||||||
- [Stand-alone executable (sub)commands](#stand-alone-executable-subcommands)
|
|
||||||
- [Automated help](#automated-help)
|
|
||||||
- [Custom help](#custom-help)
|
|
||||||
- [.usage and .name](#usage-and-name)
|
|
||||||
- [.help(cb)](#helpcb)
|
|
||||||
- [.outputHelp(cb)](#outputhelpcb)
|
|
||||||
- [.helpInformation()](#helpinformation)
|
|
||||||
- [.helpOption(flags, description)](#helpoptionflags-description)
|
|
||||||
- [.addHelpCommand()](#addhelpcommand)
|
|
||||||
- [Custom event listeners](#custom-event-listeners)
|
|
||||||
- [Bits and pieces](#bits-and-pieces)
|
|
||||||
- [.parse() and .parseAsync()](#parse-and-parseasync)
|
|
||||||
- [Avoiding option name clashes](#avoiding-option-name-clashes)
|
|
||||||
- [TypeScript](#typescript)
|
|
||||||
- [createCommand()](#createcommand)
|
|
||||||
- [Import into ECMAScript Module](#import-into-ecmascript-module)
|
|
||||||
- [Node options such as `--harmony`](#node-options-such-as---harmony)
|
|
||||||
- [Debugging stand-alone executable subcommands](#debugging-stand-alone-executable-subcommands)
|
|
||||||
- [Override exit handling](#override-exit-handling)
|
|
||||||
- [Examples](#examples)
|
|
||||||
- [Support](#support)
|
|
||||||
- [Commander for enterprise](#commander-for-enterprise)
|
|
||||||
|
|
||||||
For information about terms used in this document see: [terminology](./docs/terminology.md)
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm install commander
|
|
||||||
```
|
|
||||||
|
|
||||||
## Declaring _program_ variable
|
|
||||||
|
|
||||||
Commander exports a global object which is convenient for quick programs.
|
|
||||||
This is used in the examples in this README for brevity.
|
|
||||||
|
|
||||||
```js
|
|
||||||
const { program } = require('commander');
|
|
||||||
program.version('0.0.1');
|
|
||||||
```
|
|
||||||
|
|
||||||
For larger programs which may use commander in multiple ways, including unit testing, it is better to create a local Command object to use.
|
|
||||||
|
|
||||||
```js
|
|
||||||
const { Command } = require('commander');
|
|
||||||
const program = new Command();
|
|
||||||
program.version('0.0.1');
|
|
||||||
```
|
|
||||||
|
|
||||||
## Options
|
|
||||||
|
|
||||||
Options are defined with the `.option()` method, also serving as documentation for the options. Each option can have a short flag (single character) and a long name, separated by a comma or space or vertical bar ('|').
|
|
||||||
|
|
||||||
The options can be accessed as properties on the Command object. Multi-word options such as "--template-engine" are camel-cased, becoming `program.templateEngine` etc. See also optional new behaviour to [avoid name clashes](#avoiding-option-name-clashes).
|
|
||||||
|
|
||||||
Multiple short flags may optionally be combined in a single argument following the dash: boolean flags, followed by a single option taking a value (possibly followed by the value).
|
|
||||||
For example `-a -b -p 80` may be written as `-ab -p80` or even `-abp80`.
|
|
||||||
|
|
||||||
You can use `--` to indicate the end of the options, and any remaining arguments will be used without being interpreted.
|
|
||||||
|
|
||||||
Options on the command line are not positional, and can be specified before or after other arguments.
|
|
||||||
|
|
||||||
### Common option types, boolean and value
|
|
||||||
|
|
||||||
The two most used option types are a boolean option, and an option which takes its value
|
|
||||||
from the following argument (declared with angle brackets like `--expect <value>`). Both are `undefined` unless specified on command line.
|
|
||||||
|
|
||||||
Example file: [options-common.js](./examples/options-common.js)
|
|
||||||
|
|
||||||
```js
|
|
||||||
program
|
|
||||||
.option('-d, --debug', 'output extra debugging')
|
|
||||||
.option('-s, --small', 'small pizza size')
|
|
||||||
.option('-p, --pizza-type <type>', 'flavour of pizza');
|
|
||||||
|
|
||||||
program.parse(process.argv);
|
|
||||||
|
|
||||||
if (program.debug) console.log(program.opts());
|
|
||||||
console.log('pizza details:');
|
|
||||||
if (program.small) console.log('- small pizza size');
|
|
||||||
if (program.pizzaType) console.log(`- ${program.pizzaType}`);
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ pizza-options -d
|
|
||||||
{ debug: true, small: undefined, pizzaType: undefined }
|
|
||||||
pizza details:
|
|
||||||
$ pizza-options -p
|
|
||||||
error: option '-p, --pizza-type <type>' argument missing
|
|
||||||
$ pizza-options -ds -p vegetarian
|
|
||||||
{ debug: true, small: true, pizzaType: 'vegetarian' }
|
|
||||||
pizza details:
|
|
||||||
- small pizza size
|
|
||||||
- vegetarian
|
|
||||||
$ pizza-options --pizza-type=cheese
|
|
||||||
pizza details:
|
|
||||||
- cheese
|
|
||||||
```
|
|
||||||
|
|
||||||
`program.parse(arguments)` processes the arguments, leaving any args not consumed by the program options in the `program.args` array.
|
|
||||||
|
|
||||||
### Default option value
|
|
||||||
|
|
||||||
You can specify a default value for an option which takes a value.
|
|
||||||
|
|
||||||
Example file: [options-defaults.js](./examples/options-defaults.js)
|
|
||||||
|
|
||||||
```js
|
|
||||||
program
|
|
||||||
.option('-c, --cheese <type>', 'add the specified type of cheese', 'blue');
|
|
||||||
|
|
||||||
program.parse(process.argv);
|
|
||||||
|
|
||||||
console.log(`cheese: ${program.cheese}`);
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ pizza-options
|
|
||||||
cheese: blue
|
|
||||||
$ pizza-options --cheese stilton
|
|
||||||
cheese: stilton
|
|
||||||
```
|
|
||||||
|
|
||||||
### Other option types, negatable boolean and boolean|value
|
|
||||||
|
|
||||||
You can define a boolean option long name with a leading `no-` to set the option value to false when used.
|
|
||||||
Defined alone this also makes the option true by default.
|
|
||||||
|
|
||||||
If you define `--foo` first, adding `--no-foo` does not change the default value from what it would
|
|
||||||
otherwise be. You can specify a default boolean value for a boolean option and it can be overridden on command line.
|
|
||||||
|
|
||||||
Example file: [options-negatable.js](./examples/options-negatable.js)
|
|
||||||
|
|
||||||
```js
|
|
||||||
program
|
|
||||||
.option('--no-sauce', 'Remove sauce')
|
|
||||||
.option('--cheese <flavour>', 'cheese flavour', 'mozzarella')
|
|
||||||
.option('--no-cheese', 'plain with no cheese')
|
|
||||||
.parse(process.argv);
|
|
||||||
|
|
||||||
const sauceStr = program.sauce ? 'sauce' : 'no sauce';
|
|
||||||
const cheeseStr = (program.cheese === false) ? 'no cheese' : `${program.cheese} cheese`;
|
|
||||||
console.log(`You ordered a pizza with ${sauceStr} and ${cheeseStr}`);
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ pizza-options
|
|
||||||
You ordered a pizza with sauce and mozzarella cheese
|
|
||||||
$ pizza-options --sauce
|
|
||||||
error: unknown option '--sauce'
|
|
||||||
$ pizza-options --cheese=blue
|
|
||||||
You ordered a pizza with sauce and blue cheese
|
|
||||||
$ pizza-options --no-sauce --no-cheese
|
|
||||||
You ordered a pizza with no sauce and no cheese
|
|
||||||
```
|
|
||||||
|
|
||||||
You can specify an option which may be used as a boolean option but may optionally take an option-argument
|
|
||||||
(declared with square brackets like `--optional [value]`).
|
|
||||||
|
|
||||||
Example file: [options-boolean-or-value.js](./examples/options-boolean-or-value.js)
|
|
||||||
|
|
||||||
```js
|
|
||||||
program
|
|
||||||
.option('-c, --cheese [type]', 'Add cheese with optional type');
|
|
||||||
|
|
||||||
program.parse(process.argv);
|
|
||||||
|
|
||||||
if (program.cheese === undefined) console.log('no cheese');
|
|
||||||
else if (program.cheese === true) console.log('add cheese');
|
|
||||||
else console.log(`add cheese type ${program.cheese}`);
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ pizza-options
|
|
||||||
no cheese
|
|
||||||
$ pizza-options --cheese
|
|
||||||
add cheese
|
|
||||||
$ pizza-options --cheese mozzarella
|
|
||||||
add cheese type mozzarella
|
|
||||||
```
|
|
||||||
|
|
||||||
For information about possible ambiguous cases, see [options taking varying arguments](./docs/options-taking-varying-arguments.md).
|
|
||||||
|
|
||||||
### Custom option processing
|
|
||||||
|
|
||||||
You may specify a function to do custom processing of option-arguments. The callback function receives two parameters,
|
|
||||||
the user specified option-argument and the previous value for the option. It returns the new value for the option.
|
|
||||||
|
|
||||||
This allows you to coerce the option-argument to the desired type, or accumulate values, or do entirely custom processing.
|
|
||||||
|
|
||||||
You can optionally specify the default/starting value for the option after the function parameter.
|
|
||||||
|
|
||||||
Example file: [options-custom-processing.js](./examples/options-custom-processing.js)
|
|
||||||
|
|
||||||
```js
|
|
||||||
function myParseInt(value, dummyPrevious) {
|
|
||||||
// parseInt takes a string and an optional radix
|
|
||||||
return parseInt(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
function increaseVerbosity(dummyValue, previous) {
|
|
||||||
return previous + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
function collect(value, previous) {
|
|
||||||
return previous.concat([value]);
|
|
||||||
}
|
|
||||||
|
|
||||||
function commaSeparatedList(value, dummyPrevious) {
|
|
||||||
return value.split(',');
|
|
||||||
}
|
|
||||||
|
|
||||||
program
|
|
||||||
.option('-f, --float <number>', 'float argument', parseFloat)
|
|
||||||
.option('-i, --integer <number>', 'integer argument', myParseInt)
|
|
||||||
.option('-v, --verbose', 'verbosity that can be increased', increaseVerbosity, 0)
|
|
||||||
.option('-c, --collect <value>', 'repeatable value', collect, [])
|
|
||||||
.option('-l, --list <items>', 'comma separated list', commaSeparatedList)
|
|
||||||
;
|
|
||||||
|
|
||||||
program.parse(process.argv);
|
|
||||||
|
|
||||||
if (program.float !== undefined) console.log(`float: ${program.float}`);
|
|
||||||
if (program.integer !== undefined) console.log(`integer: ${program.integer}`);
|
|
||||||
if (program.verbose > 0) console.log(`verbosity: ${program.verbose}`);
|
|
||||||
if (program.collect.length > 0) console.log(program.collect);
|
|
||||||
if (program.list !== undefined) console.log(program.list);
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ custom -f 1e2
|
|
||||||
float: 100
|
|
||||||
$ custom --integer 2
|
|
||||||
integer: 2
|
|
||||||
$ custom -v -v -v
|
|
||||||
verbose: 3
|
|
||||||
$ custom -c a -c b -c c
|
|
||||||
[ 'a', 'b', 'c' ]
|
|
||||||
$ custom --list x,y,z
|
|
||||||
[ 'x', 'y', 'z' ]
|
|
||||||
```
|
|
||||||
|
|
||||||
### Required option
|
|
||||||
|
|
||||||
You may specify a required (mandatory) option using `.requiredOption`. The option must have a value after parsing, usually specified on the command line, or perhaps from a default value (say from environment). The method is otherwise the same as `.option` in format, taking flags and description, and optional default value or custom processing.
|
|
||||||
|
|
||||||
Example file: [options-required.js](./examples/options-required.js)
|
|
||||||
|
|
||||||
```js
|
|
||||||
program
|
|
||||||
.requiredOption('-c, --cheese <type>', 'pizza must have cheese');
|
|
||||||
|
|
||||||
program.parse(process.argv);
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ pizza
|
|
||||||
error: required option '-c, --cheese <type>' not specified
|
|
||||||
```
|
|
||||||
|
|
||||||
### Variadic option
|
|
||||||
|
|
||||||
You may make an option variadic by appending `...` to the value placeholder when declaring the option. On the command line you
|
|
||||||
can then specify multiple option-arguments, and the parsed option value will be an array. The extra arguments
|
|
||||||
are read until the first argument starting with a dash. The special argument `--` stops option processing entirely. If a value
|
|
||||||
is specified in the same argument as the option then no further values are read.
|
|
||||||
|
|
||||||
Example file: [options-variadic.js](./examples/options-variadic.js)
|
|
||||||
|
|
||||||
```js
|
|
||||||
program
|
|
||||||
.option('-n, --number <numbers...>', 'specify numbers')
|
|
||||||
.option('-l, --letter [letters...]', 'specify letters');
|
|
||||||
|
|
||||||
program.parse();
|
|
||||||
|
|
||||||
console.log('Options: ', program.opts());
|
|
||||||
console.log('Remaining arguments: ', program.args);
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ collect -n 1 2 3 --letter a b c
|
|
||||||
Options: { number: [ '1', '2', '3' ], letter: [ 'a', 'b', 'c' ] }
|
|
||||||
Remaining arguments: []
|
|
||||||
$ collect --letter=A -n80 operand
|
|
||||||
Options: { number: [ '80' ], letter: [ 'A' ] }
|
|
||||||
Remaining arguments: [ 'operand' ]
|
|
||||||
$ collect --letter -n 1 -n 2 3 -- operand
|
|
||||||
Options: { number: [ '1', '2', '3' ], letter: true }
|
|
||||||
Remaining arguments: [ 'operand' ]
|
|
||||||
```
|
|
||||||
|
|
||||||
For information about possible ambiguous cases, see [options taking varying arguments](./docs/options-taking-varying-arguments.md).
|
|
||||||
|
|
||||||
### Version option
|
|
||||||
|
|
||||||
The optional `version` method adds handling for displaying the command version. The default option flags are `-V` and `--version`, and when present the command prints the version number and exits.
|
|
||||||
|
|
||||||
```js
|
|
||||||
program.version('0.0.1');
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ ./examples/pizza -V
|
|
||||||
0.0.1
|
|
||||||
```
|
|
||||||
|
|
||||||
You may change the flags and description by passing additional parameters to the `version` method, using
|
|
||||||
the same syntax for flags as the `option` method.
|
|
||||||
|
|
||||||
```js
|
|
||||||
program.version('0.0.1', '-v, --vers', 'output the current version');
|
|
||||||
```
|
|
||||||
|
|
||||||
## Commands
|
|
||||||
|
|
||||||
You can specify (sub)commands using `.command()` or `.addCommand()`. There are two ways these can be implemented: using an action handler attached to the command, or as a stand-alone executable file (described in more detail later). The subcommands may be nested ([example](./examples/nestedCommands.js)).
|
|
||||||
|
|
||||||
In the first parameter to `.command()` you specify the command name and any command-arguments. The arguments may be `<required>` or `[optional]`, and the last argument may also be `variadic...`.
|
|
||||||
|
|
||||||
You can use `.addCommand()` to add an already configured subcommand to the program.
|
|
||||||
|
|
||||||
For example:
|
|
||||||
|
|
||||||
```js
|
|
||||||
// Command implemented using action handler (description is supplied separately to `.command`)
|
|
||||||
// Returns new command for configuring.
|
|
||||||
program
|
|
||||||
.command('clone <source> [destination]')
|
|
||||||
.description('clone a repository into a newly created directory')
|
|
||||||
.action((source, destination) => {
|
|
||||||
console.log('clone command called');
|
|
||||||
});
|
|
||||||
|
|
||||||
// Command implemented using stand-alone executable file (description is second parameter to `.command`)
|
|
||||||
// Returns `this` for adding more commands.
|
|
||||||
program
|
|
||||||
.command('start <service>', 'start named service')
|
|
||||||
.command('stop [service]', 'stop named service, or all if no name supplied');
|
|
||||||
|
|
||||||
// Command prepared separately.
|
|
||||||
// Returns `this` for adding more commands.
|
|
||||||
program
|
|
||||||
.addCommand(build.makeBuildCommand());
|
|
||||||
```
|
|
||||||
|
|
||||||
Configuration options can be passed with the call to `.command()` and `.addCommand()`. Specifying `hidden: true` will
|
|
||||||
remove the command from the generated help output. Specifying `isDefault: true` will run the subcommand if no other
|
|
||||||
subcommand is specified ([example](./examples/defaultCommand.js)).
|
|
||||||
|
|
||||||
### Specify the argument syntax
|
|
||||||
|
|
||||||
You use `.arguments` to specify the expected command-arguments for the top-level command, and for subcommands they are usually
|
|
||||||
included in the `.command` call. Angled brackets (e.g. `<required>`) indicate required command-arguments.
|
|
||||||
Square brackets (e.g. `[optional]`) indicate optional command-arguments.
|
|
||||||
You can optionally describe the arguments in the help by supplying a hash as second parameter to `.description()`.
|
|
||||||
|
|
||||||
Example file: [env](./examples/env)
|
|
||||||
|
|
||||||
```js
|
|
||||||
program
|
|
||||||
.version('0.1.0')
|
|
||||||
.arguments('<cmd> [env]')
|
|
||||||
.description('test command', {
|
|
||||||
cmd: 'command to run',
|
|
||||||
env: 'environment to run test in'
|
|
||||||
})
|
|
||||||
.action(function (cmd, env) {
|
|
||||||
console.log('command:', cmd);
|
|
||||||
console.log('environment:', env || 'no environment given');
|
|
||||||
});
|
|
||||||
|
|
||||||
program.parse(process.argv);
|
|
||||||
```
|
|
||||||
|
|
||||||
The last argument of a command can be variadic, and only the last argument. To make an argument variadic you
|
|
||||||
append `...` to the argument name. For example:
|
|
||||||
|
|
||||||
```js
|
|
||||||
const { program } = require('commander');
|
|
||||||
|
|
||||||
program
|
|
||||||
.version('0.1.0')
|
|
||||||
.command('rmdir <dir> [otherDirs...]')
|
|
||||||
.action(function (dir, otherDirs) {
|
|
||||||
console.log('rmdir %s', dir);
|
|
||||||
if (otherDirs) {
|
|
||||||
otherDirs.forEach(function (oDir) {
|
|
||||||
console.log('rmdir %s', oDir);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
program.parse(process.argv);
|
|
||||||
```
|
|
||||||
|
|
||||||
The variadic argument is passed to the action handler as an array.
|
|
||||||
|
|
||||||
### Action handler (sub)commands
|
|
||||||
|
|
||||||
You can add options to a command that uses an action handler.
|
|
||||||
The action handler gets passed a parameter for each argument you declared, and one additional argument which is the
|
|
||||||
command object itself. This command argument has the values for the command-specific options added as properties.
|
|
||||||
|
|
||||||
```js
|
|
||||||
const { program } = require('commander');
|
|
||||||
|
|
||||||
program
|
|
||||||
.command('rm <dir>')
|
|
||||||
.option('-r, --recursive', 'Remove recursively')
|
|
||||||
.action(function (dir, cmdObj) {
|
|
||||||
console.log('remove ' + dir + (cmdObj.recursive ? ' recursively' : ''))
|
|
||||||
})
|
|
||||||
|
|
||||||
program.parse(process.argv)
|
|
||||||
```
|
|
||||||
|
|
||||||
You may supply an `async` action handler, in which case you call `.parseAsync` rather than `.parse`.
|
|
||||||
|
|
||||||
```js
|
|
||||||
async function run() { /* code goes here */ }
|
|
||||||
|
|
||||||
async function main() {
|
|
||||||
program
|
|
||||||
.command('run')
|
|
||||||
.action(run);
|
|
||||||
await program.parseAsync(process.argv);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
A command's options on the command line are validated when the command is used. Any unknown options will be reported as an error.
|
|
||||||
|
|
||||||
### Stand-alone executable (sub)commands
|
|
||||||
|
|
||||||
When `.command()` is invoked with a description argument, this tells Commander that you're going to use stand-alone executables for subcommands.
|
|
||||||
Commander will search the executables in the directory of the entry script (like `./examples/pm`) with the name `program-subcommand`, like `pm-install`, `pm-search`.
|
|
||||||
You can specify a custom name with the `executableFile` configuration option.
|
|
||||||
|
|
||||||
You handle the options for an executable (sub)command in the executable, and don't declare them at the top-level.
|
|
||||||
|
|
||||||
Example file: [pm](./examples/pm)
|
|
||||||
|
|
||||||
```js
|
|
||||||
program
|
|
||||||
.version('0.1.0')
|
|
||||||
.command('install [name]', 'install one or more packages')
|
|
||||||
.command('search [query]', 'search with optional query')
|
|
||||||
.command('update', 'update installed packages', { executableFile: 'myUpdateSubCommand' })
|
|
||||||
.command('list', 'list packages installed', { isDefault: true });
|
|
||||||
|
|
||||||
program.parse(process.argv);
|
|
||||||
```
|
|
||||||
|
|
||||||
If the program is designed to be installed globally, make sure the executables have proper modes, like `755`.
|
|
||||||
|
|
||||||
## Automated help
|
|
||||||
|
|
||||||
The help information is auto-generated based on the information commander already knows about your program. The default
|
|
||||||
help option is `-h,--help`.
|
|
||||||
|
|
||||||
Example file: [pizza](./examples/pizza)
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ node ./examples/pizza --help
|
|
||||||
Usage: pizza [options]
|
|
||||||
|
|
||||||
An application for pizzas ordering
|
|
||||||
|
|
||||||
Options:
|
|
||||||
-V, --version output the version number
|
|
||||||
-p, --peppers Add peppers
|
|
||||||
-c, --cheese <type> Add the specified type of cheese (default: "marble")
|
|
||||||
-C, --no-cheese You do not want any cheese
|
|
||||||
-h, --help display help for command
|
|
||||||
```
|
|
||||||
|
|
||||||
A `help` command is added by default if your command has subcommands. It can be used alone, or with a subcommand name to show
|
|
||||||
further help for the subcommand. These are effectively the same if the `shell` program has implicit help:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
shell help
|
|
||||||
shell --help
|
|
||||||
|
|
||||||
shell help spawn
|
|
||||||
shell spawn --help
|
|
||||||
```
|
|
||||||
|
|
||||||
### Custom help
|
|
||||||
|
|
||||||
You can display extra information by listening for "--help".
|
|
||||||
|
|
||||||
Example file: [custom-help](./examples/custom-help)
|
|
||||||
|
|
||||||
```js
|
|
||||||
program
|
|
||||||
.option('-f, --foo', 'enable some foo');
|
|
||||||
|
|
||||||
// must be before .parse()
|
|
||||||
program.on('--help', () => {
|
|
||||||
console.log('');
|
|
||||||
console.log('Example call:');
|
|
||||||
console.log(' $ custom-help --help');
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
Yields the following help output:
|
|
||||||
|
|
||||||
```Text
|
|
||||||
Usage: custom-help [options]
|
|
||||||
|
|
||||||
Options:
|
|
||||||
-f, --foo enable some foo
|
|
||||||
-h, --help display help for command
|
|
||||||
|
|
||||||
Example call:
|
|
||||||
$ custom-help --help
|
|
||||||
```
|
|
||||||
|
|
||||||
### .usage and .name
|
|
||||||
|
|
||||||
These allow you to customise the usage description in the first line of the help. The name is otherwise
|
|
||||||
deduced from the (full) program arguments. Given:
|
|
||||||
|
|
||||||
```js
|
|
||||||
program
|
|
||||||
.name("my-command")
|
|
||||||
.usage("[global options] command")
|
|
||||||
```
|
|
||||||
|
|
||||||
The help will start with:
|
|
||||||
|
|
||||||
```Text
|
|
||||||
Usage: my-command [global options] command
|
|
||||||
```
|
|
||||||
|
|
||||||
### .help(cb)
|
|
||||||
|
|
||||||
Output help information and exit immediately. Optional callback cb allows post-processing of help text before it is displayed.
|
|
||||||
|
|
||||||
### .outputHelp(cb)
|
|
||||||
|
|
||||||
Output help information without exiting.
|
|
||||||
Optional callback cb allows post-processing of help text before it is displayed.
|
|
||||||
|
|
||||||
### .helpInformation()
|
|
||||||
|
|
||||||
Get the command help information as a string for processing or displaying yourself. (The text does not include the custom help
|
|
||||||
from `--help` listeners.)
|
|
||||||
|
|
||||||
### .helpOption(flags, description)
|
|
||||||
|
|
||||||
Override the default help flags and description. Pass false to disable the built-in help option.
|
|
||||||
|
|
||||||
```js
|
|
||||||
program
|
|
||||||
.helpOption('-e, --HELP', 'read more information');
|
|
||||||
```
|
|
||||||
|
|
||||||
### .addHelpCommand()
|
|
||||||
|
|
||||||
You can explicitly turn on or off the implicit help command with `.addHelpCommand()` and `.addHelpCommand(false)`.
|
|
||||||
|
|
||||||
You can both turn on and customise the help command by supplying the name and description:
|
|
||||||
|
|
||||||
```js
|
|
||||||
program.addHelpCommand('assist [command]', 'show assistance');
|
|
||||||
```
|
|
||||||
|
|
||||||
## Custom event listeners
|
|
||||||
|
|
||||||
You can execute custom actions by listening to command and option events.
|
|
||||||
|
|
||||||
```js
|
|
||||||
program.on('option:verbose', function () {
|
|
||||||
process.env.VERBOSE = this.verbose;
|
|
||||||
});
|
|
||||||
|
|
||||||
program.on('command:*', function (operands) {
|
|
||||||
console.error(`error: unknown command '${operands[0]}'`);
|
|
||||||
const availableCommands = program.commands.map(cmd => cmd.name());
|
|
||||||
mySuggestBestMatch(operands[0], availableCommands);
|
|
||||||
process.exitCode = 1;
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
## Bits and pieces
|
|
||||||
|
|
||||||
### .parse() and .parseAsync()
|
|
||||||
|
|
||||||
The first argument to `.parse` is the array of strings to parse. You may omit the parameter to implicitly use `process.argv`.
|
|
||||||
|
|
||||||
If the arguments follow different conventions than node you can pass a `from` option in the second parameter:
|
|
||||||
|
|
||||||
- 'node': default, `argv[0]` is the application and `argv[1]` is the script being run, with user parameters after that
|
|
||||||
- 'electron': `argv[1]` varies depending on whether the electron application is packaged
|
|
||||||
- 'user': all of the arguments from the user
|
|
||||||
|
|
||||||
For example:
|
|
||||||
|
|
||||||
```js
|
|
||||||
program.parse(process.argv); // Explicit, node conventions
|
|
||||||
program.parse(); // Implicit, and auto-detect electron
|
|
||||||
program.parse(['-f', 'filename'], { from: 'user' });
|
|
||||||
```
|
|
||||||
|
|
||||||
### Avoiding option name clashes
|
|
||||||
|
|
||||||
The original and default behaviour is that the option values are stored
|
|
||||||
as properties on the program, and the action handler is passed a
|
|
||||||
command object with the options values stored as properties.
|
|
||||||
This is very convenient to code, but the downside is possible clashes with
|
|
||||||
existing properties of Command.
|
|
||||||
|
|
||||||
There are two new routines to change the behaviour, and the default behaviour may change in the future:
|
|
||||||
|
|
||||||
- `storeOptionsAsProperties`: whether to store option values as properties on command object, or store separately (specify false) and access using `.opts()`
|
|
||||||
- `passCommandToAction`: whether to pass command to action handler,
|
|
||||||
or just the options (specify false)
|
|
||||||
|
|
||||||
Example file: [storeOptionsAsProperties-action.js](./examples/storeOptionsAsProperties-action.js)
|
|
||||||
|
|
||||||
```js
|
|
||||||
program
|
|
||||||
.storeOptionsAsProperties(false)
|
|
||||||
.passCommandToAction(false);
|
|
||||||
|
|
||||||
program
|
|
||||||
.name('my-program-name')
|
|
||||||
.option('-n,--name <name>');
|
|
||||||
|
|
||||||
program
|
|
||||||
.command('show')
|
|
||||||
.option('-a,--action <action>')
|
|
||||||
.action((options) => {
|
|
||||||
console.log(options.action);
|
|
||||||
});
|
|
||||||
|
|
||||||
program.parse(process.argv);
|
|
||||||
|
|
||||||
const programOptions = program.opts();
|
|
||||||
console.log(programOptions.name);
|
|
||||||
```
|
|
||||||
|
|
||||||
### TypeScript
|
|
||||||
|
|
||||||
The Commander package includes its TypeScript Definition file.
|
|
||||||
|
|
||||||
If you use `ts-node` and stand-alone executable subcommands written as `.ts` files, you need to call your program through node to get the subcommands called correctly. e.g.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
node -r ts-node/register pm.ts
|
|
||||||
```
|
|
||||||
|
|
||||||
### createCommand()
|
|
||||||
|
|
||||||
This factory function creates a new command. It is exported and may be used instead of using `new`, like:
|
|
||||||
|
|
||||||
```js
|
|
||||||
const { createCommand } = require('commander');
|
|
||||||
const program = createCommand();
|
|
||||||
```
|
|
||||||
|
|
||||||
`createCommand` is also a method of the Command object, and creates a new command rather than a subcommand. This gets used internally
|
|
||||||
when creating subcommands using `.command()`, and you may override it to
|
|
||||||
customise the new subcommand (examples using [subclass](./examples/custom-command-class.js) and [function](./examples/custom-command-function.js)).
|
|
||||||
|
|
||||||
### Import into ECMAScript Module
|
|
||||||
|
|
||||||
Commander is currently a CommonJS package, and the default export can be imported into an ES Module:
|
|
||||||
|
|
||||||
```js
|
|
||||||
// index.mjs
|
|
||||||
import commander from 'commander';
|
|
||||||
const program = commander.program;
|
|
||||||
const newCommand = new commander.Command();
|
|
||||||
```
|
|
||||||
|
|
||||||
### Node options such as `--harmony`
|
|
||||||
|
|
||||||
You can enable `--harmony` option in two ways:
|
|
||||||
|
|
||||||
- Use `#! /usr/bin/env node --harmony` in the subcommands scripts. (Note Windows does not support this pattern.)
|
|
||||||
- Use the `--harmony` option when call the command, like `node --harmony examples/pm publish`. The `--harmony` option will be preserved when spawning subcommand process.
|
|
||||||
|
|
||||||
### Debugging stand-alone executable subcommands
|
|
||||||
|
|
||||||
An executable subcommand is launched as a separate child process.
|
|
||||||
|
|
||||||
If you are using the node inspector for [debugging](https://nodejs.org/en/docs/guides/debugging-getting-started/) executable subcommands using `node --inspect` et al,
|
|
||||||
the inspector port is incremented by 1 for the spawned subcommand.
|
|
||||||
|
|
||||||
If you are using VSCode to debug executable subcommands you need to set the `"autoAttachChildProcesses": true` flag in your launch.json configuration.
|
|
||||||
|
|
||||||
### Override exit handling
|
|
||||||
|
|
||||||
By default Commander calls `process.exit` when it detects errors, or after displaying the help or version. You can override
|
|
||||||
this behaviour and optionally supply a callback. The default override throws a `CommanderError`.
|
|
||||||
|
|
||||||
The override callback is passed a `CommanderError` with properties `exitCode` number, `code` string, and `message`. The default override behaviour is to throw the error, except for async handling of executable subcommand completion which carries on. The normal display of error messages or version or help
|
|
||||||
is not affected by the override which is called after the display.
|
|
||||||
|
|
||||||
```js
|
|
||||||
program.exitOverride();
|
|
||||||
|
|
||||||
try {
|
|
||||||
program.parse(process.argv);
|
|
||||||
} catch (err) {
|
|
||||||
// custom processing...
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Examples
|
|
||||||
|
|
||||||
Example file: [deploy](./examples/deploy)
|
|
||||||
|
|
||||||
```js
|
|
||||||
const { program } = require('commander');
|
|
||||||
|
|
||||||
program
|
|
||||||
.version('0.1.0')
|
|
||||||
.option('-C, --chdir <path>', 'change the working directory')
|
|
||||||
.option('-c, --config <path>', 'set config path. defaults to ./deploy.conf')
|
|
||||||
.option('-T, --no-tests', 'ignore test hook');
|
|
||||||
|
|
||||||
program
|
|
||||||
.command('setup [env]')
|
|
||||||
.description('run setup commands for all envs')
|
|
||||||
.option("-s, --setup_mode [mode]", "Which setup mode to use")
|
|
||||||
.action(function(env, options){
|
|
||||||
const mode = options.setup_mode || "normal";
|
|
||||||
env = env || 'all';
|
|
||||||
console.log('setup for %s env(s) with %s mode', env, mode);
|
|
||||||
});
|
|
||||||
|
|
||||||
program
|
|
||||||
.command('exec <cmd>')
|
|
||||||
.alias('ex')
|
|
||||||
.description('execute the given remote cmd')
|
|
||||||
.option("-e, --exec_mode <mode>", "Which exec mode to use")
|
|
||||||
.action(function(cmd, options){
|
|
||||||
console.log('exec "%s" using %s mode', cmd, options.exec_mode);
|
|
||||||
}).on('--help', function() {
|
|
||||||
console.log('');
|
|
||||||
console.log('Examples:');
|
|
||||||
console.log('');
|
|
||||||
console.log(' $ deploy exec sequential');
|
|
||||||
console.log(' $ deploy exec async');
|
|
||||||
});
|
|
||||||
|
|
||||||
program.parse(process.argv);
|
|
||||||
```
|
|
||||||
|
|
||||||
More Demos can be found in the [examples](https://github.com/tj/commander.js/tree/master/examples) directory.
|
|
||||||
|
|
||||||
## Support
|
|
||||||
|
|
||||||
The current version of Commander is fully supported on Long Term Support versions of Node, and is likely to work with Node 6 but not tested.
|
|
||||||
(For versions of Node below Node 6, use Commander 3.x or 2.x.)
|
|
||||||
|
|
||||||
The main forum for free and community support is the project [Issues](https://github.com/tj/commander.js/issues) on GitHub.
|
|
||||||
|
|
||||||
### Commander for enterprise
|
|
||||||
|
|
||||||
Available as part of the Tidelift Subscription
|
|
||||||
|
|
||||||
The maintainers of Commander and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-commander?utm_source=npm-commander&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)
|
|
1881
node_modules/commander/index.js
generated
vendored
1881
node_modules/commander/index.js
generated
vendored
File diff suppressed because it is too large
Load Diff
86
node_modules/commander/package.json
generated
vendored
86
node_modules/commander/package.json
generated
vendored
|
@ -1,86 +0,0 @@
|
||||||
{
|
|
||||||
"_args": [
|
|
||||||
[
|
|
||||||
"commander@6.2.1",
|
|
||||||
"/home/nuno/Documents/core/software/fresh/js/metaforecasts/metaforecasts-current"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"_from": "commander@6.2.1",
|
|
||||||
"_id": "commander@6.2.1",
|
|
||||||
"_inBundle": false,
|
|
||||||
"_integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
|
|
||||||
"_location": "/commander",
|
|
||||||
"_phantomChildren": {},
|
|
||||||
"_requested": {
|
|
||||||
"type": "version",
|
|
||||||
"registry": true,
|
|
||||||
"raw": "commander@6.2.1",
|
|
||||||
"name": "commander",
|
|
||||||
"escapedName": "commander",
|
|
||||||
"rawSpec": "6.2.1",
|
|
||||||
"saveSpec": null,
|
|
||||||
"fetchSpec": "6.2.1"
|
|
||||||
},
|
|
||||||
"_requiredBy": [
|
|
||||||
"/json2csv"
|
|
||||||
],
|
|
||||||
"_resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
|
|
||||||
"_spec": "6.2.1",
|
|
||||||
"_where": "/home/nuno/Documents/core/software/fresh/js/metaforecasts/metaforecasts-current",
|
|
||||||
"author": {
|
|
||||||
"name": "TJ Holowaychuk",
|
|
||||||
"email": "tj@vision-media.ca"
|
|
||||||
},
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/tj/commander.js/issues"
|
|
||||||
},
|
|
||||||
"dependencies": {},
|
|
||||||
"description": "the complete solution for node.js command-line programs",
|
|
||||||
"devDependencies": {
|
|
||||||
"@types/jest": "^26.0.15",
|
|
||||||
"@types/node": "^14.14.2",
|
|
||||||
"@typescript-eslint/eslint-plugin": "^4.5.0",
|
|
||||||
"eslint": "^7.11.0",
|
|
||||||
"eslint-config-standard-with-typescript": "^19.0.1",
|
|
||||||
"eslint-plugin-jest": "^24.1.0",
|
|
||||||
"jest": "^26.6.0",
|
|
||||||
"standard": "^15.0.0",
|
|
||||||
"typescript": "^4.0.3"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 6"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"index.js",
|
|
||||||
"typings/index.d.ts"
|
|
||||||
],
|
|
||||||
"homepage": "https://github.com/tj/commander.js#readme",
|
|
||||||
"jest": {
|
|
||||||
"collectCoverage": true
|
|
||||||
},
|
|
||||||
"keywords": [
|
|
||||||
"commander",
|
|
||||||
"command",
|
|
||||||
"option",
|
|
||||||
"parser",
|
|
||||||
"cli",
|
|
||||||
"argument",
|
|
||||||
"args",
|
|
||||||
"argv"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"main": "index",
|
|
||||||
"name": "commander",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git+https://github.com/tj/commander.js.git"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"lint": "eslint index.js \"tests/**/*.js\"",
|
|
||||||
"test": "jest && npm run test-typings",
|
|
||||||
"test-typings": "tsc -p tsconfig.json",
|
|
||||||
"typescript-lint": "eslint typings/*.ts"
|
|
||||||
},
|
|
||||||
"typings": "typings/index.d.ts",
|
|
||||||
"version": "6.2.1"
|
|
||||||
}
|
|
410
node_modules/commander/typings/index.d.ts
generated
vendored
410
node_modules/commander/typings/index.d.ts
generated
vendored
|
@ -1,410 +0,0 @@
|
||||||
// Type definitions for commander
|
|
||||||
// Original definitions by: Alan Agius <https://github.com/alan-agius4>, Marcelo Dezem <https://github.com/mdezem>, vvakame <https://github.com/vvakame>, Jules Randolph <https://github.com/sveinburne>
|
|
||||||
|
|
||||||
declare namespace commander {
|
|
||||||
|
|
||||||
interface CommanderError extends Error {
|
|
||||||
code: string;
|
|
||||||
exitCode: number;
|
|
||||||
message: string;
|
|
||||||
nestedError?: string;
|
|
||||||
}
|
|
||||||
type CommanderErrorConstructor = new (exitCode: number, code: string, message: string) => CommanderError;
|
|
||||||
|
|
||||||
interface Option {
|
|
||||||
flags: string;
|
|
||||||
required: boolean; // A value must be supplied when the option is specified.
|
|
||||||
optional: boolean; // A value is optional when the option is specified.
|
|
||||||
mandatory: boolean; // The option must have a value after parsing, which usually means it must be specified on command line.
|
|
||||||
bool: boolean;
|
|
||||||
short?: string;
|
|
||||||
long: string;
|
|
||||||
description: string;
|
|
||||||
}
|
|
||||||
type OptionConstructor = new (flags: string, description?: string) => Option;
|
|
||||||
|
|
||||||
interface ParseOptions {
|
|
||||||
from: 'node' | 'electron' | 'user';
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Command {
|
|
||||||
[key: string]: any; // options as properties
|
|
||||||
|
|
||||||
args: string[];
|
|
||||||
|
|
||||||
commands: Command[];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the program version to `str`.
|
|
||||||
*
|
|
||||||
* This method auto-registers the "-V, --version" flag
|
|
||||||
* which will print the version number when passed.
|
|
||||||
*
|
|
||||||
* You can optionally supply the flags and description to override the defaults.
|
|
||||||
*/
|
|
||||||
version(str: string, flags?: string, description?: string): this;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define a command, implemented using an action handler.
|
|
||||||
*
|
|
||||||
* @remarks
|
|
||||||
* The command description is supplied using `.description`, not as a parameter to `.command`.
|
|
||||||
*
|
|
||||||
* @example
|
|
||||||
* ```ts
|
|
||||||
* program
|
|
||||||
* .command('clone <source> [destination]')
|
|
||||||
* .description('clone a repository into a newly created directory')
|
|
||||||
* .action((source, destination) => {
|
|
||||||
* console.log('clone command called');
|
|
||||||
* });
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* @param nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...`
|
|
||||||
* @param opts - configuration options
|
|
||||||
* @returns new command
|
|
||||||
*/
|
|
||||||
command(nameAndArgs: string, opts?: CommandOptions): ReturnType<this['createCommand']>;
|
|
||||||
/**
|
|
||||||
* Define a command, implemented in a separate executable file.
|
|
||||||
*
|
|
||||||
* @remarks
|
|
||||||
* The command description is supplied as the second parameter to `.command`.
|
|
||||||
*
|
|
||||||
* @example
|
|
||||||
* ```ts
|
|
||||||
* program
|
|
||||||
* .command('start <service>', 'start named service')
|
|
||||||
* .command('stop [service]', 'stop named service, or all if no name supplied');
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* @param nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...`
|
|
||||||
* @param description - description of executable command
|
|
||||||
* @param opts - configuration options
|
|
||||||
* @returns `this` command for chaining
|
|
||||||
*/
|
|
||||||
command(nameAndArgs: string, description: string, opts?: commander.ExecutableCommandOptions): this;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Factory routine to create a new unattached command.
|
|
||||||
*
|
|
||||||
* See .command() for creating an attached subcommand, which uses this routine to
|
|
||||||
* create the command. You can override createCommand to customise subcommands.
|
|
||||||
*/
|
|
||||||
createCommand(name?: string): Command;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a prepared subcommand.
|
|
||||||
*
|
|
||||||
* See .command() for creating an attached subcommand which inherits settings from its parent.
|
|
||||||
*
|
|
||||||
* @returns `this` command for chaining
|
|
||||||
*/
|
|
||||||
addCommand(cmd: Command, opts?: CommandOptions): this;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define argument syntax for command.
|
|
||||||
*
|
|
||||||
* @returns `this` command for chaining
|
|
||||||
*/
|
|
||||||
arguments(desc: string): this;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Override default decision whether to add implicit help command.
|
|
||||||
*
|
|
||||||
* addHelpCommand() // force on
|
|
||||||
* addHelpCommand(false); // force off
|
|
||||||
* addHelpCommand('help [cmd]', 'display help for [cmd]'); // force on with custom details
|
|
||||||
*
|
|
||||||
* @returns `this` command for chaining
|
|
||||||
*/
|
|
||||||
addHelpCommand(enableOrNameAndArgs?: string | boolean, description?: string): this;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Register callback to use as replacement for calling process.exit.
|
|
||||||
*/
|
|
||||||
exitOverride(callback?: (err: CommanderError) => never|void): this;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Register callback `fn` for the command.
|
|
||||||
*
|
|
||||||
* @example
|
|
||||||
* program
|
|
||||||
* .command('help')
|
|
||||||
* .description('display verbose help')
|
|
||||||
* .action(function() {
|
|
||||||
* // output help here
|
|
||||||
* });
|
|
||||||
*
|
|
||||||
* @returns `this` command for chaining
|
|
||||||
*/
|
|
||||||
action(fn: (...args: any[]) => void | Promise<void>): this;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define option with `flags`, `description` and optional
|
|
||||||
* coercion `fn`.
|
|
||||||
*
|
|
||||||
* The `flags` string should contain both the short and long flags,
|
|
||||||
* separated by comma, a pipe or space. The following are all valid
|
|
||||||
* all will output this way when `--help` is used.
|
|
||||||
*
|
|
||||||
* "-p, --pepper"
|
|
||||||
* "-p|--pepper"
|
|
||||||
* "-p --pepper"
|
|
||||||
*
|
|
||||||
* @example
|
|
||||||
* // simple boolean defaulting to false
|
|
||||||
* program.option('-p, --pepper', 'add pepper');
|
|
||||||
*
|
|
||||||
* --pepper
|
|
||||||
* program.pepper
|
|
||||||
* // => Boolean
|
|
||||||
*
|
|
||||||
* // simple boolean defaulting to true
|
|
||||||
* program.option('-C, --no-cheese', 'remove cheese');
|
|
||||||
*
|
|
||||||
* program.cheese
|
|
||||||
* // => true
|
|
||||||
*
|
|
||||||
* --no-cheese
|
|
||||||
* program.cheese
|
|
||||||
* // => false
|
|
||||||
*
|
|
||||||
* // required argument
|
|
||||||
* program.option('-C, --chdir <path>', 'change the working directory');
|
|
||||||
*
|
|
||||||
* --chdir /tmp
|
|
||||||
* program.chdir
|
|
||||||
* // => "/tmp"
|
|
||||||
*
|
|
||||||
* // optional argument
|
|
||||||
* program.option('-c, --cheese [type]', 'add cheese [marble]');
|
|
||||||
*
|
|
||||||
* @returns `this` command for chaining
|
|
||||||
*/
|
|
||||||
option(flags: string, description?: string, defaultValue?: string | boolean): this;
|
|
||||||
option(flags: string, description: string, regexp: RegExp, defaultValue?: string | boolean): this;
|
|
||||||
option<T>(flags: string, description: string, fn: (value: string, previous: T) => T, defaultValue?: T): this;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define a required option, which must have a value after parsing. This usually means
|
|
||||||
* the option must be specified on the command line. (Otherwise the same as .option().)
|
|
||||||
*
|
|
||||||
* The `flags` string should contain both the short and long flags, separated by comma, a pipe or space.
|
|
||||||
*/
|
|
||||||
requiredOption(flags: string, description?: string, defaultValue?: string | boolean): this;
|
|
||||||
requiredOption(flags: string, description: string, regexp: RegExp, defaultValue?: string | boolean): this;
|
|
||||||
requiredOption<T>(flags: string, description: string, fn: (value: string, previous: T) => T, defaultValue?: T): this;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether to store option values as properties on command object,
|
|
||||||
* or store separately (specify false). In both cases the option values can be accessed using .opts().
|
|
||||||
*
|
|
||||||
* @returns `this` command for chaining
|
|
||||||
*/
|
|
||||||
storeOptionsAsProperties(value?: boolean): this;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether to pass command to action handler,
|
|
||||||
* or just the options (specify false).
|
|
||||||
*
|
|
||||||
* @returns `this` command for chaining
|
|
||||||
*/
|
|
||||||
passCommandToAction(value?: boolean): this;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Alter parsing of short flags with optional values.
|
|
||||||
*
|
|
||||||
* @example
|
|
||||||
* // for `.option('-f,--flag [value]'):
|
|
||||||
* .combineFlagAndOptionalValue(true) // `-f80` is treated like `--flag=80`, this is the default behaviour
|
|
||||||
* .combineFlagAndOptionalValue(false) // `-fb` is treated like `-f -b`
|
|
||||||
*
|
|
||||||
* @returns `this` command for chaining
|
|
||||||
*/
|
|
||||||
combineFlagAndOptionalValue(arg?: boolean): this;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allow unknown options on the command line.
|
|
||||||
*
|
|
||||||
* @param [arg] if `true` or omitted, no error will be thrown for unknown options.
|
|
||||||
* @returns `this` command for chaining
|
|
||||||
*/
|
|
||||||
allowUnknownOption(arg?: boolean): this;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parse `argv`, setting options and invoking commands when defined.
|
|
||||||
*
|
|
||||||
* The default expectation is that the arguments are from node and have the application as argv[0]
|
|
||||||
* and the script being run in argv[1], with user parameters after that.
|
|
||||||
*
|
|
||||||
* Examples:
|
|
||||||
*
|
|
||||||
* program.parse(process.argv);
|
|
||||||
* program.parse(); // implicitly use process.argv and auto-detect node vs electron conventions
|
|
||||||
* program.parse(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]
|
|
||||||
*
|
|
||||||
* @returns `this` command for chaining
|
|
||||||
*/
|
|
||||||
parse(argv?: string[], options?: ParseOptions): this;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parse `argv`, setting options and invoking commands when defined.
|
|
||||||
*
|
|
||||||
* Use parseAsync instead of parse if any of your action handlers are async. Returns a Promise.
|
|
||||||
*
|
|
||||||
* The default expectation is that the arguments are from node and have the application as argv[0]
|
|
||||||
* and the script being run in argv[1], with user parameters after that.
|
|
||||||
*
|
|
||||||
* Examples:
|
|
||||||
*
|
|
||||||
* program.parseAsync(process.argv);
|
|
||||||
* program.parseAsync(); // implicitly use process.argv and auto-detect node vs electron conventions
|
|
||||||
* program.parseAsync(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]
|
|
||||||
*
|
|
||||||
* @returns Promise
|
|
||||||
*/
|
|
||||||
parseAsync(argv?: string[], options?: ParseOptions): Promise<this>;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parse options from `argv` removing known options,
|
|
||||||
* and return argv split into operands and unknown arguments.
|
|
||||||
*
|
|
||||||
* @example
|
|
||||||
* argv => operands, unknown
|
|
||||||
* --known kkk op => [op], []
|
|
||||||
* op --known kkk => [op], []
|
|
||||||
* sub --unknown uuu op => [sub], [--unknown uuu op]
|
|
||||||
* sub -- --unknown uuu op => [sub --unknown uuu op], []
|
|
||||||
*/
|
|
||||||
parseOptions(argv: string[]): commander.ParseOptionsResult;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return an object containing options as key-value pairs
|
|
||||||
*/
|
|
||||||
opts(): { [key: string]: any };
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the description.
|
|
||||||
*
|
|
||||||
* @returns `this` command for chaining
|
|
||||||
*/
|
|
||||||
description(str: string, argsDescription?: {[argName: string]: string}): this;
|
|
||||||
/**
|
|
||||||
* Get the description.
|
|
||||||
*/
|
|
||||||
description(): string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set an alias for the command.
|
|
||||||
*
|
|
||||||
* You may call more than once to add multiple aliases. Only the first alias is shown in the auto-generated help.
|
|
||||||
*
|
|
||||||
* @returns `this` command for chaining
|
|
||||||
*/
|
|
||||||
alias(alias: string): this;
|
|
||||||
/**
|
|
||||||
* Get alias for the command.
|
|
||||||
*/
|
|
||||||
alias(): string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set aliases for the command.
|
|
||||||
*
|
|
||||||
* Only the first alias is shown in the auto-generated help.
|
|
||||||
*
|
|
||||||
* @returns `this` command for chaining
|
|
||||||
*/
|
|
||||||
aliases(aliases: string[]): this;
|
|
||||||
/**
|
|
||||||
* Get aliases for the command.
|
|
||||||
*/
|
|
||||||
aliases(): string[];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the command usage.
|
|
||||||
*
|
|
||||||
* @returns `this` command for chaining
|
|
||||||
*/
|
|
||||||
usage(str: string): this;
|
|
||||||
/**
|
|
||||||
* Get the command usage.
|
|
||||||
*/
|
|
||||||
usage(): string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the name of the command.
|
|
||||||
*
|
|
||||||
* @returns `this` command for chaining
|
|
||||||
*/
|
|
||||||
name(str: string): this;
|
|
||||||
/**
|
|
||||||
* Get the name of the command.
|
|
||||||
*/
|
|
||||||
name(): string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Output help information for this command.
|
|
||||||
*
|
|
||||||
* When listener(s) are available for the helpLongFlag
|
|
||||||
* those callbacks are invoked.
|
|
||||||
*/
|
|
||||||
outputHelp(cb?: (str: string) => string): void;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return command help documentation.
|
|
||||||
*/
|
|
||||||
helpInformation(): string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* You can pass in flags and a description to override the help
|
|
||||||
* flags and help description for your command. Pass in false
|
|
||||||
* to disable the built-in help option.
|
|
||||||
*/
|
|
||||||
helpOption(flags?: string | boolean, description?: string): this;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Output help information and exit.
|
|
||||||
*/
|
|
||||||
help(cb?: (str: string) => string): never;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a listener (callback) for when events occur. (Implemented using EventEmitter.)
|
|
||||||
*
|
|
||||||
* @example
|
|
||||||
* program
|
|
||||||
* .on('--help', () -> {
|
|
||||||
* console.log('See web site for more information.');
|
|
||||||
* });
|
|
||||||
*/
|
|
||||||
on(event: string | symbol, listener: (...args: any[]) => void): this;
|
|
||||||
}
|
|
||||||
type CommandConstructor = new (name?: string) => Command;
|
|
||||||
|
|
||||||
interface CommandOptions {
|
|
||||||
noHelp?: boolean; // old name for hidden
|
|
||||||
hidden?: boolean;
|
|
||||||
isDefault?: boolean;
|
|
||||||
}
|
|
||||||
interface ExecutableCommandOptions extends CommandOptions {
|
|
||||||
executableFile?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ParseOptionsResult {
|
|
||||||
operands: string[];
|
|
||||||
unknown: string[];
|
|
||||||
}
|
|
||||||
|
|
||||||
interface CommanderStatic extends Command {
|
|
||||||
program: Command;
|
|
||||||
Command: CommandConstructor;
|
|
||||||
Option: OptionConstructor;
|
|
||||||
CommanderError: CommanderErrorConstructor;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Declaring namespace AND global
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
|
||||||
declare const commander: commander.CommanderStatic;
|
|
||||||
export = commander;
|
|
18
node_modules/follow-redirects/LICENSE
generated
vendored
18
node_modules/follow-redirects/LICENSE
generated
vendored
|
@ -1,18 +0,0 @@
|
||||||
Copyright 2014–present Olivier Lalonde <olalonde@gmail.com>, James Talmage <james@talmage.io>, Ruben Verborgh
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
|
||||||
the Software without restriction, including without limitation the rights to
|
|
||||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
||||||
of the Software, and to permit persons to whom the Software is furnished to do
|
|
||||||
so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
|
|
||||||
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
148
node_modules/follow-redirects/README.md
generated
vendored
148
node_modules/follow-redirects/README.md
generated
vendored
|
@ -1,148 +0,0 @@
|
||||||
## Follow Redirects
|
|
||||||
|
|
||||||
Drop-in replacement for Node's `http` and `https` modules that automatically follows redirects.
|
|
||||||
|
|
||||||
[![npm version](https://img.shields.io/npm/v/follow-redirects.svg)](https://www.npmjs.com/package/follow-redirects)
|
|
||||||
[![Build Status](https://travis-ci.com/follow-redirects/follow-redirects.svg?branch=master)](https://travis-ci.com/follow-redirects/follow-redirects)
|
|
||||||
[![Coverage Status](https://coveralls.io/repos/follow-redirects/follow-redirects/badge.svg?branch=master)](https://coveralls.io/r/follow-redirects/follow-redirects?branch=master)
|
|
||||||
[![npm downloads](https://img.shields.io/npm/dm/follow-redirects.svg)](https://www.npmjs.com/package/follow-redirects)
|
|
||||||
[![Sponsor on GitHub](https://img.shields.io/static/v1?label=Sponsor&message=%F0%9F%92%96&logo=GitHub)](https://github.com/sponsors/RubenVerborgh)
|
|
||||||
|
|
||||||
`follow-redirects` provides [request](https://nodejs.org/api/http.html#http_http_request_options_callback) and [get](https://nodejs.org/api/http.html#http_http_get_options_callback)
|
|
||||||
methods that behave identically to those found on the native [http](https://nodejs.org/api/http.html#http_http_request_options_callback) and [https](https://nodejs.org/api/https.html#https_https_request_options_callback)
|
|
||||||
modules, with the exception that they will seamlessly follow redirects.
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
const { http, https } = require('follow-redirects');
|
|
||||||
|
|
||||||
http.get('http://bit.ly/900913', response => {
|
|
||||||
response.on('data', chunk => {
|
|
||||||
console.log(chunk);
|
|
||||||
});
|
|
||||||
}).on('error', err => {
|
|
||||||
console.error(err);
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
You can inspect the final redirected URL through the `responseUrl` property on the `response`.
|
|
||||||
If no redirection happened, `responseUrl` is the original request URL.
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
const request = https.request({
|
|
||||||
host: 'bitly.com',
|
|
||||||
path: '/UHfDGO',
|
|
||||||
}, response => {
|
|
||||||
console.log(response.responseUrl);
|
|
||||||
// 'http://duckduckgo.com/robots.txt'
|
|
||||||
});
|
|
||||||
request.end();
|
|
||||||
```
|
|
||||||
|
|
||||||
## Options
|
|
||||||
### Global options
|
|
||||||
Global options are set directly on the `follow-redirects` module:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
const followRedirects = require('follow-redirects');
|
|
||||||
followRedirects.maxRedirects = 10;
|
|
||||||
followRedirects.maxBodyLength = 20 * 1024 * 1024; // 20 MB
|
|
||||||
```
|
|
||||||
|
|
||||||
The following global options are supported:
|
|
||||||
|
|
||||||
- `maxRedirects` (default: `21`) – sets the maximum number of allowed redirects; if exceeded, an error will be emitted.
|
|
||||||
|
|
||||||
- `maxBodyLength` (default: 10MB) – sets the maximum size of the request body; if exceeded, an error will be emitted.
|
|
||||||
|
|
||||||
### Per-request options
|
|
||||||
Per-request options are set by passing an `options` object:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
const url = require('url');
|
|
||||||
const { http, https } = require('follow-redirects');
|
|
||||||
|
|
||||||
const options = url.parse('http://bit.ly/900913');
|
|
||||||
options.maxRedirects = 10;
|
|
||||||
options.beforeRedirect = (options, { headers }) => {
|
|
||||||
// Use this to adjust the request options upon redirecting,
|
|
||||||
// to inspect the latest response headers,
|
|
||||||
// or to cancel the request by throwing an error
|
|
||||||
if (options.hostname === "example.com") {
|
|
||||||
options.auth = "user:password";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
http.request(options);
|
|
||||||
```
|
|
||||||
|
|
||||||
In addition to the [standard HTTP](https://nodejs.org/api/http.html#http_http_request_options_callback) and [HTTPS options](https://nodejs.org/api/https.html#https_https_request_options_callback),
|
|
||||||
the following per-request options are supported:
|
|
||||||
- `followRedirects` (default: `true`) – whether redirects should be followed.
|
|
||||||
|
|
||||||
- `maxRedirects` (default: `21`) – sets the maximum number of allowed redirects; if exceeded, an error will be emitted.
|
|
||||||
|
|
||||||
- `maxBodyLength` (default: 10MB) – sets the maximum size of the request body; if exceeded, an error will be emitted.
|
|
||||||
|
|
||||||
- `beforeRedirect` (default: `undefined`) – optionally change the request `options` on redirects, or abort the request by throwing an error.
|
|
||||||
|
|
||||||
- `agents` (default: `undefined`) – sets the `agent` option per protocol, since HTTP and HTTPS use different agents. Example value: `{ http: new http.Agent(), https: new https.Agent() }`
|
|
||||||
|
|
||||||
- `trackRedirects` (default: `false`) – whether to store the redirected response details into the `redirects` array on the response object.
|
|
||||||
|
|
||||||
|
|
||||||
### Advanced usage
|
|
||||||
By default, `follow-redirects` will use the Node.js default implementations
|
|
||||||
of [`http`](https://nodejs.org/api/http.html)
|
|
||||||
and [`https`](https://nodejs.org/api/https.html).
|
|
||||||
To enable features such as caching and/or intermediate request tracking,
|
|
||||||
you might instead want to wrap `follow-redirects` around custom protocol implementations:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
const { http, https } = require('follow-redirects').wrap({
|
|
||||||
http: require('your-custom-http'),
|
|
||||||
https: require('your-custom-https'),
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
Such custom protocols only need an implementation of the `request` method.
|
|
||||||
|
|
||||||
## Browser Usage
|
|
||||||
|
|
||||||
Due to the way the browser works,
|
|
||||||
the `http` and `https` browser equivalents perform redirects by default.
|
|
||||||
|
|
||||||
By requiring `follow-redirects` this way:
|
|
||||||
```javascript
|
|
||||||
const http = require('follow-redirects/http');
|
|
||||||
const https = require('follow-redirects/https');
|
|
||||||
```
|
|
||||||
you can easily tell webpack and friends to replace
|
|
||||||
`follow-redirect` by the built-in versions:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"follow-redirects/http" : "http",
|
|
||||||
"follow-redirects/https" : "https"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Contributing
|
|
||||||
|
|
||||||
Pull Requests are always welcome. Please [file an issue](https://github.com/follow-redirects/follow-redirects/issues)
|
|
||||||
detailing your proposal before you invest your valuable time. Additional features and bug fixes should be accompanied
|
|
||||||
by tests. You can run the test suite locally with a simple `npm test` command.
|
|
||||||
|
|
||||||
## Debug Logging
|
|
||||||
|
|
||||||
`follow-redirects` uses the excellent [debug](https://www.npmjs.com/package/debug) for logging. To turn on logging
|
|
||||||
set the environment variable `DEBUG=follow-redirects` for debug output from just this module. When running the test
|
|
||||||
suite it is sometimes advantageous to set `DEBUG=*` to see output from the express server as well.
|
|
||||||
|
|
||||||
## Authors
|
|
||||||
|
|
||||||
- [Ruben Verborgh](https://ruben.verborgh.org/)
|
|
||||||
- [Olivier Lalonde](mailto:olalonde@gmail.com)
|
|
||||||
- [James Talmage](mailto:james@talmage.io)
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
[MIT License](https://github.com/follow-redirects/follow-redirects/blob/master/LICENSE)
|
|
9
node_modules/follow-redirects/debug.js
generated
vendored
9
node_modules/follow-redirects/debug.js
generated
vendored
|
@ -1,9 +0,0 @@
|
||||||
var debug;
|
|
||||||
try {
|
|
||||||
/* eslint global-require: off */
|
|
||||||
debug = require("debug")("follow-redirects");
|
|
||||||
}
|
|
||||||
catch (error) {
|
|
||||||
debug = function () { /* */ };
|
|
||||||
}
|
|
||||||
module.exports = debug;
|
|
1
node_modules/follow-redirects/http.js
generated
vendored
1
node_modules/follow-redirects/http.js
generated
vendored
|
@ -1 +0,0 @@
|
||||||
module.exports = require("./").http;
|
|
1
node_modules/follow-redirects/https.js
generated
vendored
1
node_modules/follow-redirects/https.js
generated
vendored
|
@ -1 +0,0 @@
|
||||||
module.exports = require("./").https;
|
|
504
node_modules/follow-redirects/index.js
generated
vendored
504
node_modules/follow-redirects/index.js
generated
vendored
|
@ -1,504 +0,0 @@
|
||||||
var url = require("url");
|
|
||||||
var URL = url.URL;
|
|
||||||
var http = require("http");
|
|
||||||
var https = require("https");
|
|
||||||
var Writable = require("stream").Writable;
|
|
||||||
var assert = require("assert");
|
|
||||||
var debug = require("./debug");
|
|
||||||
|
|
||||||
// Create handlers that pass events from native requests
|
|
||||||
var eventHandlers = Object.create(null);
|
|
||||||
["abort", "aborted", "connect", "error", "socket", "timeout"].forEach(function (event) {
|
|
||||||
eventHandlers[event] = function (arg1, arg2, arg3) {
|
|
||||||
this._redirectable.emit(event, arg1, arg2, arg3);
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
// Error types with codes
|
|
||||||
var RedirectionError = createErrorType(
|
|
||||||
"ERR_FR_REDIRECTION_FAILURE",
|
|
||||||
""
|
|
||||||
);
|
|
||||||
var TooManyRedirectsError = createErrorType(
|
|
||||||
"ERR_FR_TOO_MANY_REDIRECTS",
|
|
||||||
"Maximum number of redirects exceeded"
|
|
||||||
);
|
|
||||||
var MaxBodyLengthExceededError = createErrorType(
|
|
||||||
"ERR_FR_MAX_BODY_LENGTH_EXCEEDED",
|
|
||||||
"Request body larger than maxBodyLength limit"
|
|
||||||
);
|
|
||||||
var WriteAfterEndError = createErrorType(
|
|
||||||
"ERR_STREAM_WRITE_AFTER_END",
|
|
||||||
"write after end"
|
|
||||||
);
|
|
||||||
|
|
||||||
// An HTTP(S) request that can be redirected
|
|
||||||
function RedirectableRequest(options, responseCallback) {
|
|
||||||
// Initialize the request
|
|
||||||
Writable.call(this);
|
|
||||||
this._sanitizeOptions(options);
|
|
||||||
this._options = options;
|
|
||||||
this._ended = false;
|
|
||||||
this._ending = false;
|
|
||||||
this._redirectCount = 0;
|
|
||||||
this._redirects = [];
|
|
||||||
this._requestBodyLength = 0;
|
|
||||||
this._requestBodyBuffers = [];
|
|
||||||
|
|
||||||
// Attach a callback if passed
|
|
||||||
if (responseCallback) {
|
|
||||||
this.on("response", responseCallback);
|
|
||||||
}
|
|
||||||
|
|
||||||
// React to responses of native requests
|
|
||||||
var self = this;
|
|
||||||
this._onNativeResponse = function (response) {
|
|
||||||
self._processResponse(response);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Perform the first request
|
|
||||||
this._performRequest();
|
|
||||||
}
|
|
||||||
RedirectableRequest.prototype = Object.create(Writable.prototype);
|
|
||||||
|
|
||||||
// Writes buffered data to the current native request
|
|
||||||
RedirectableRequest.prototype.write = function (data, encoding, callback) {
|
|
||||||
// Writing is not allowed if end has been called
|
|
||||||
if (this._ending) {
|
|
||||||
throw new WriteAfterEndError();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Validate input and shift parameters if necessary
|
|
||||||
if (!(typeof data === "string" || typeof data === "object" && ("length" in data))) {
|
|
||||||
throw new TypeError("data should be a string, Buffer or Uint8Array");
|
|
||||||
}
|
|
||||||
if (typeof encoding === "function") {
|
|
||||||
callback = encoding;
|
|
||||||
encoding = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ignore empty buffers, since writing them doesn't invoke the callback
|
|
||||||
// https://github.com/nodejs/node/issues/22066
|
|
||||||
if (data.length === 0) {
|
|
||||||
if (callback) {
|
|
||||||
callback();
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// Only write when we don't exceed the maximum body length
|
|
||||||
if (this._requestBodyLength + data.length <= this._options.maxBodyLength) {
|
|
||||||
this._requestBodyLength += data.length;
|
|
||||||
this._requestBodyBuffers.push({ data: data, encoding: encoding });
|
|
||||||
this._currentRequest.write(data, encoding, callback);
|
|
||||||
}
|
|
||||||
// Error when we exceed the maximum body length
|
|
||||||
else {
|
|
||||||
this.emit("error", new MaxBodyLengthExceededError());
|
|
||||||
this.abort();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Ends the current native request
|
|
||||||
RedirectableRequest.prototype.end = function (data, encoding, callback) {
|
|
||||||
// Shift parameters if necessary
|
|
||||||
if (typeof data === "function") {
|
|
||||||
callback = data;
|
|
||||||
data = encoding = null;
|
|
||||||
}
|
|
||||||
else if (typeof encoding === "function") {
|
|
||||||
callback = encoding;
|
|
||||||
encoding = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write data if needed and end
|
|
||||||
if (!data) {
|
|
||||||
this._ended = this._ending = true;
|
|
||||||
this._currentRequest.end(null, null, callback);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
var self = this;
|
|
||||||
var currentRequest = this._currentRequest;
|
|
||||||
this.write(data, encoding, function () {
|
|
||||||
self._ended = true;
|
|
||||||
currentRequest.end(null, null, callback);
|
|
||||||
});
|
|
||||||
this._ending = true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Sets a header value on the current native request
|
|
||||||
RedirectableRequest.prototype.setHeader = function (name, value) {
|
|
||||||
this._options.headers[name] = value;
|
|
||||||
this._currentRequest.setHeader(name, value);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Clears a header value on the current native request
|
|
||||||
RedirectableRequest.prototype.removeHeader = function (name) {
|
|
||||||
delete this._options.headers[name];
|
|
||||||
this._currentRequest.removeHeader(name);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Global timeout for all underlying requests
|
|
||||||
RedirectableRequest.prototype.setTimeout = function (msecs, callback) {
|
|
||||||
if (callback) {
|
|
||||||
this.once("timeout", callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.socket) {
|
|
||||||
startTimer(this, msecs);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
var self = this;
|
|
||||||
this._currentRequest.once("socket", function () {
|
|
||||||
startTimer(self, msecs);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
this.once("response", clearTimer);
|
|
||||||
this.once("error", clearTimer);
|
|
||||||
|
|
||||||
return this;
|
|
||||||
};
|
|
||||||
|
|
||||||
function startTimer(request, msecs) {
|
|
||||||
clearTimeout(request._timeout);
|
|
||||||
request._timeout = setTimeout(function () {
|
|
||||||
request.emit("timeout");
|
|
||||||
}, msecs);
|
|
||||||
}
|
|
||||||
|
|
||||||
function clearTimer() {
|
|
||||||
clearTimeout(this._timeout);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Proxy all other public ClientRequest methods
|
|
||||||
[
|
|
||||||
"abort", "flushHeaders", "getHeader",
|
|
||||||
"setNoDelay", "setSocketKeepAlive",
|
|
||||||
].forEach(function (method) {
|
|
||||||
RedirectableRequest.prototype[method] = function (a, b) {
|
|
||||||
return this._currentRequest[method](a, b);
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
// Proxy all public ClientRequest properties
|
|
||||||
["aborted", "connection", "socket"].forEach(function (property) {
|
|
||||||
Object.defineProperty(RedirectableRequest.prototype, property, {
|
|
||||||
get: function () { return this._currentRequest[property]; },
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
RedirectableRequest.prototype._sanitizeOptions = function (options) {
|
|
||||||
// Ensure headers are always present
|
|
||||||
if (!options.headers) {
|
|
||||||
options.headers = {};
|
|
||||||
}
|
|
||||||
|
|
||||||
// Since http.request treats host as an alias of hostname,
|
|
||||||
// but the url module interprets host as hostname plus port,
|
|
||||||
// eliminate the host property to avoid confusion.
|
|
||||||
if (options.host) {
|
|
||||||
// Use hostname if set, because it has precedence
|
|
||||||
if (!options.hostname) {
|
|
||||||
options.hostname = options.host;
|
|
||||||
}
|
|
||||||
delete options.host;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Complete the URL object when necessary
|
|
||||||
if (!options.pathname && options.path) {
|
|
||||||
var searchPos = options.path.indexOf("?");
|
|
||||||
if (searchPos < 0) {
|
|
||||||
options.pathname = options.path;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
options.pathname = options.path.substring(0, searchPos);
|
|
||||||
options.search = options.path.substring(searchPos);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// Executes the next native request (initial or redirect)
|
|
||||||
RedirectableRequest.prototype._performRequest = function () {
|
|
||||||
// Load the native protocol
|
|
||||||
var protocol = this._options.protocol;
|
|
||||||
var nativeProtocol = this._options.nativeProtocols[protocol];
|
|
||||||
if (!nativeProtocol) {
|
|
||||||
this.emit("error", new TypeError("Unsupported protocol " + protocol));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If specified, use the agent corresponding to the protocol
|
|
||||||
// (HTTP and HTTPS use different types of agents)
|
|
||||||
if (this._options.agents) {
|
|
||||||
var scheme = protocol.substr(0, protocol.length - 1);
|
|
||||||
this._options.agent = this._options.agents[scheme];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create the native request
|
|
||||||
var request = this._currentRequest =
|
|
||||||
nativeProtocol.request(this._options, this._onNativeResponse);
|
|
||||||
this._currentUrl = url.format(this._options);
|
|
||||||
|
|
||||||
// Set up event handlers
|
|
||||||
request._redirectable = this;
|
|
||||||
for (var event in eventHandlers) {
|
|
||||||
/* istanbul ignore else */
|
|
||||||
if (event) {
|
|
||||||
request.on(event, eventHandlers[event]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// End a redirected request
|
|
||||||
// (The first request must be ended explicitly with RedirectableRequest#end)
|
|
||||||
if (this._isRedirect) {
|
|
||||||
// Write the request entity and end.
|
|
||||||
var i = 0;
|
|
||||||
var self = this;
|
|
||||||
var buffers = this._requestBodyBuffers;
|
|
||||||
(function writeNext(error) {
|
|
||||||
// Only write if this request has not been redirected yet
|
|
||||||
/* istanbul ignore else */
|
|
||||||
if (request === self._currentRequest) {
|
|
||||||
// Report any write errors
|
|
||||||
/* istanbul ignore if */
|
|
||||||
if (error) {
|
|
||||||
self.emit("error", error);
|
|
||||||
}
|
|
||||||
// Write the next buffer if there are still left
|
|
||||||
else if (i < buffers.length) {
|
|
||||||
var buffer = buffers[i++];
|
|
||||||
/* istanbul ignore else */
|
|
||||||
if (!request.finished) {
|
|
||||||
request.write(buffer.data, buffer.encoding, writeNext);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// End the request if `end` has been called on us
|
|
||||||
else if (self._ended) {
|
|
||||||
request.end();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Processes a response from the current native request
|
|
||||||
RedirectableRequest.prototype._processResponse = function (response) {
|
|
||||||
// Store the redirected response
|
|
||||||
var statusCode = response.statusCode;
|
|
||||||
if (this._options.trackRedirects) {
|
|
||||||
this._redirects.push({
|
|
||||||
url: this._currentUrl,
|
|
||||||
headers: response.headers,
|
|
||||||
statusCode: statusCode,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// RFC7231§6.4: The 3xx (Redirection) class of status code indicates
|
|
||||||
// that further action needs to be taken by the user agent in order to
|
|
||||||
// fulfill the request. If a Location header field is provided,
|
|
||||||
// the user agent MAY automatically redirect its request to the URI
|
|
||||||
// referenced by the Location field value,
|
|
||||||
// even if the specific status code is not understood.
|
|
||||||
var location = response.headers.location;
|
|
||||||
if (location && this._options.followRedirects !== false &&
|
|
||||||
statusCode >= 300 && statusCode < 400) {
|
|
||||||
// Abort the current request
|
|
||||||
this._currentRequest.removeAllListeners();
|
|
||||||
this._currentRequest.on("error", noop);
|
|
||||||
this._currentRequest.abort();
|
|
||||||
// Discard the remainder of the response to avoid waiting for data
|
|
||||||
response.destroy();
|
|
||||||
|
|
||||||
// RFC7231§6.4: A client SHOULD detect and intervene
|
|
||||||
// in cyclical redirections (i.e., "infinite" redirection loops).
|
|
||||||
if (++this._redirectCount > this._options.maxRedirects) {
|
|
||||||
this.emit("error", new TooManyRedirectsError());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// RFC7231§6.4: Automatic redirection needs to done with
|
|
||||||
// care for methods not known to be safe, […]
|
|
||||||
// RFC7231§6.4.2–3: For historical reasons, a user agent MAY change
|
|
||||||
// the request method from POST to GET for the subsequent request.
|
|
||||||
if ((statusCode === 301 || statusCode === 302) && this._options.method === "POST" ||
|
|
||||||
// RFC7231§6.4.4: The 303 (See Other) status code indicates that
|
|
||||||
// the server is redirecting the user agent to a different resource […]
|
|
||||||
// A user agent can perform a retrieval request targeting that URI
|
|
||||||
// (a GET or HEAD request if using HTTP) […]
|
|
||||||
(statusCode === 303) && !/^(?:GET|HEAD)$/.test(this._options.method)) {
|
|
||||||
this._options.method = "GET";
|
|
||||||
// Drop a possible entity and headers related to it
|
|
||||||
this._requestBodyBuffers = [];
|
|
||||||
removeMatchingHeaders(/^content-/i, this._options.headers);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Drop the Host header, as the redirect might lead to a different host
|
|
||||||
var previousHostName = removeMatchingHeaders(/^host$/i, this._options.headers) ||
|
|
||||||
url.parse(this._currentUrl).hostname;
|
|
||||||
|
|
||||||
// Create the redirected request
|
|
||||||
var redirectUrl = url.resolve(this._currentUrl, location);
|
|
||||||
debug("redirecting to", redirectUrl);
|
|
||||||
this._isRedirect = true;
|
|
||||||
var redirectUrlParts = url.parse(redirectUrl);
|
|
||||||
Object.assign(this._options, redirectUrlParts);
|
|
||||||
|
|
||||||
// Drop the Authorization header if redirecting to another host
|
|
||||||
if (redirectUrlParts.hostname !== previousHostName) {
|
|
||||||
removeMatchingHeaders(/^authorization$/i, this._options.headers);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Evaluate the beforeRedirect callback
|
|
||||||
if (typeof this._options.beforeRedirect === "function") {
|
|
||||||
var responseDetails = { headers: response.headers };
|
|
||||||
try {
|
|
||||||
this._options.beforeRedirect.call(null, this._options, responseDetails);
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
this.emit("error", err);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this._sanitizeOptions(this._options);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Perform the redirected request
|
|
||||||
try {
|
|
||||||
this._performRequest();
|
|
||||||
}
|
|
||||||
catch (cause) {
|
|
||||||
var error = new RedirectionError("Redirected request failed: " + cause.message);
|
|
||||||
error.cause = cause;
|
|
||||||
this.emit("error", error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// The response is not a redirect; return it as-is
|
|
||||||
response.responseUrl = this._currentUrl;
|
|
||||||
response.redirects = this._redirects;
|
|
||||||
this.emit("response", response);
|
|
||||||
|
|
||||||
// Clean up
|
|
||||||
this._requestBodyBuffers = [];
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Wraps the key/value object of protocols with redirect functionality
|
|
||||||
function wrap(protocols) {
|
|
||||||
// Default settings
|
|
||||||
var exports = {
|
|
||||||
maxRedirects: 21,
|
|
||||||
maxBodyLength: 10 * 1024 * 1024,
|
|
||||||
};
|
|
||||||
|
|
||||||
// Wrap each protocol
|
|
||||||
var nativeProtocols = {};
|
|
||||||
Object.keys(protocols).forEach(function (scheme) {
|
|
||||||
var protocol = scheme + ":";
|
|
||||||
var nativeProtocol = nativeProtocols[protocol] = protocols[scheme];
|
|
||||||
var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol);
|
|
||||||
|
|
||||||
// Executes a request, following redirects
|
|
||||||
function request(input, options, callback) {
|
|
||||||
// Parse parameters
|
|
||||||
if (typeof input === "string") {
|
|
||||||
var urlStr = input;
|
|
||||||
try {
|
|
||||||
input = urlToOptions(new URL(urlStr));
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
/* istanbul ignore next */
|
|
||||||
input = url.parse(urlStr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (URL && (input instanceof URL)) {
|
|
||||||
input = urlToOptions(input);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
callback = options;
|
|
||||||
options = input;
|
|
||||||
input = { protocol: protocol };
|
|
||||||
}
|
|
||||||
if (typeof options === "function") {
|
|
||||||
callback = options;
|
|
||||||
options = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set defaults
|
|
||||||
options = Object.assign({
|
|
||||||
maxRedirects: exports.maxRedirects,
|
|
||||||
maxBodyLength: exports.maxBodyLength,
|
|
||||||
}, input, options);
|
|
||||||
options.nativeProtocols = nativeProtocols;
|
|
||||||
|
|
||||||
assert.equal(options.protocol, protocol, "protocol mismatch");
|
|
||||||
debug("options", options);
|
|
||||||
return new RedirectableRequest(options, callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Executes a GET request, following redirects
|
|
||||||
function get(input, options, callback) {
|
|
||||||
var wrappedRequest = wrappedProtocol.request(input, options, callback);
|
|
||||||
wrappedRequest.end();
|
|
||||||
return wrappedRequest;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Expose the properties on the wrapped protocol
|
|
||||||
Object.defineProperties(wrappedProtocol, {
|
|
||||||
request: { value: request, configurable: true, enumerable: true, writable: true },
|
|
||||||
get: { value: get, configurable: true, enumerable: true, writable: true },
|
|
||||||
});
|
|
||||||
});
|
|
||||||
return exports;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* istanbul ignore next */
|
|
||||||
function noop() { /* empty */ }
|
|
||||||
|
|
||||||
// from https://github.com/nodejs/node/blob/master/lib/internal/url.js
|
|
||||||
function urlToOptions(urlObject) {
|
|
||||||
var options = {
|
|
||||||
protocol: urlObject.protocol,
|
|
||||||
hostname: urlObject.hostname.startsWith("[") ?
|
|
||||||
/* istanbul ignore next */
|
|
||||||
urlObject.hostname.slice(1, -1) :
|
|
||||||
urlObject.hostname,
|
|
||||||
hash: urlObject.hash,
|
|
||||||
search: urlObject.search,
|
|
||||||
pathname: urlObject.pathname,
|
|
||||||
path: urlObject.pathname + urlObject.search,
|
|
||||||
href: urlObject.href,
|
|
||||||
};
|
|
||||||
if (urlObject.port !== "") {
|
|
||||||
options.port = Number(urlObject.port);
|
|
||||||
}
|
|
||||||
return options;
|
|
||||||
}
|
|
||||||
|
|
||||||
function removeMatchingHeaders(regex, headers) {
|
|
||||||
var lastValue;
|
|
||||||
for (var header in headers) {
|
|
||||||
if (regex.test(header)) {
|
|
||||||
lastValue = headers[header];
|
|
||||||
delete headers[header];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return lastValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
function createErrorType(code, defaultMessage) {
|
|
||||||
function CustomError(message) {
|
|
||||||
Error.captureStackTrace(this, this.constructor);
|
|
||||||
this.message = message || defaultMessage;
|
|
||||||
}
|
|
||||||
CustomError.prototype = new Error();
|
|
||||||
CustomError.prototype.constructor = CustomError;
|
|
||||||
CustomError.prototype.name = "Error [" + code + "]";
|
|
||||||
CustomError.prototype.code = code;
|
|
||||||
return CustomError;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Exports
|
|
||||||
module.exports = wrap({ http: http, https: https });
|
|
||||||
module.exports.wrap = wrap;
|
|
98
node_modules/follow-redirects/package.json
generated
vendored
98
node_modules/follow-redirects/package.json
generated
vendored
|
@ -1,98 +0,0 @@
|
||||||
{
|
|
||||||
"_args": [
|
|
||||||
[
|
|
||||||
"follow-redirects@1.13.1",
|
|
||||||
"/home/nuno/Documents/core/software/fresh/js/metaforecasts/metaforecasts-current"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"_from": "follow-redirects@1.13.1",
|
|
||||||
"_id": "follow-redirects@1.13.1",
|
|
||||||
"_inBundle": false,
|
|
||||||
"_integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==",
|
|
||||||
"_location": "/follow-redirects",
|
|
||||||
"_phantomChildren": {},
|
|
||||||
"_requested": {
|
|
||||||
"type": "version",
|
|
||||||
"registry": true,
|
|
||||||
"raw": "follow-redirects@1.13.1",
|
|
||||||
"name": "follow-redirects",
|
|
||||||
"escapedName": "follow-redirects",
|
|
||||||
"rawSpec": "1.13.1",
|
|
||||||
"saveSpec": null,
|
|
||||||
"fetchSpec": "1.13.1"
|
|
||||||
},
|
|
||||||
"_requiredBy": [
|
|
||||||
"/axios"
|
|
||||||
],
|
|
||||||
"_resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz",
|
|
||||||
"_spec": "1.13.1",
|
|
||||||
"_where": "/home/nuno/Documents/core/software/fresh/js/metaforecasts/metaforecasts-current",
|
|
||||||
"author": {
|
|
||||||
"name": "Ruben Verborgh",
|
|
||||||
"email": "ruben@verborgh.org",
|
|
||||||
"url": "https://ruben.verborgh.org/"
|
|
||||||
},
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/follow-redirects/follow-redirects/issues"
|
|
||||||
},
|
|
||||||
"contributors": [
|
|
||||||
{
|
|
||||||
"name": "Olivier Lalonde",
|
|
||||||
"email": "olalonde@gmail.com",
|
|
||||||
"url": "http://www.syskall.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "James Talmage",
|
|
||||||
"email": "james@talmage.io"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "HTTP and HTTPS modules that follow redirects.",
|
|
||||||
"devDependencies": {
|
|
||||||
"concat-stream": "^2.0.0",
|
|
||||||
"eslint": "^5.16.0",
|
|
||||||
"express": "^4.16.4",
|
|
||||||
"lolex": "^3.1.0",
|
|
||||||
"mocha": "^6.0.2",
|
|
||||||
"nyc": "^14.1.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=4.0"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"*.js"
|
|
||||||
],
|
|
||||||
"funding": [
|
|
||||||
{
|
|
||||||
"type": "individual",
|
|
||||||
"url": "https://github.com/sponsors/RubenVerborgh"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"homepage": "https://github.com/follow-redirects/follow-redirects",
|
|
||||||
"keywords": [
|
|
||||||
"http",
|
|
||||||
"https",
|
|
||||||
"url",
|
|
||||||
"redirect",
|
|
||||||
"client",
|
|
||||||
"location",
|
|
||||||
"utility"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"main": "index.js",
|
|
||||||
"name": "follow-redirects",
|
|
||||||
"peerDependenciesMeta": {
|
|
||||||
"debug": {
|
|
||||||
"optional": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git+ssh://git@github.com/follow-redirects/follow-redirects.git"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"lint": "eslint *.js test",
|
|
||||||
"mocha": "nyc mocha",
|
|
||||||
"test": "npm run lint && npm run mocha"
|
|
||||||
},
|
|
||||||
"version": "1.13.1"
|
|
||||||
}
|
|
9
node_modules/fs/README.md
generated
vendored
9
node_modules/fs/README.md
generated
vendored
|
@ -1,9 +0,0 @@
|
||||||
# Security holding package
|
|
||||||
|
|
||||||
This package name is not currently in use, but was formerly occupied
|
|
||||||
by another package. To avoid malicious use, npm is hanging on to the
|
|
||||||
package name, but loosely, and we'll probably give it to you if you
|
|
||||||
want it.
|
|
||||||
|
|
||||||
You may adopt this package by contacting support@npmjs.com and
|
|
||||||
requesting the name.
|
|
48
node_modules/fs/package.json
generated
vendored
48
node_modules/fs/package.json
generated
vendored
|
@ -1,48 +0,0 @@
|
||||||
{
|
|
||||||
"_args": [
|
|
||||||
[
|
|
||||||
"fs@0.0.1-security",
|
|
||||||
"/home/nuno/Documents/core/software/fresh/js/metaforecasts/metaforecasts-current"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"_from": "fs@0.0.1-security",
|
|
||||||
"_id": "fs@0.0.1-security",
|
|
||||||
"_inBundle": false,
|
|
||||||
"_integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=",
|
|
||||||
"_location": "/fs",
|
|
||||||
"_phantomChildren": {},
|
|
||||||
"_requested": {
|
|
||||||
"type": "version",
|
|
||||||
"registry": true,
|
|
||||||
"raw": "fs@0.0.1-security",
|
|
||||||
"name": "fs",
|
|
||||||
"escapedName": "fs",
|
|
||||||
"rawSpec": "0.0.1-security",
|
|
||||||
"saveSpec": null,
|
|
||||||
"fetchSpec": "0.0.1-security"
|
|
||||||
},
|
|
||||||
"_requiredBy": [
|
|
||||||
"/"
|
|
||||||
],
|
|
||||||
"_resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz",
|
|
||||||
"_spec": "0.0.1-security",
|
|
||||||
"_where": "/home/nuno/Documents/core/software/fresh/js/metaforecasts/metaforecasts-current",
|
|
||||||
"author": "",
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/npm/security-holder/issues"
|
|
||||||
},
|
|
||||||
"description": "This package name is not currently in use, but was formerly occupied by another package. To avoid malicious use, npm is hanging on to the package name, but loosely, and we'll probably give it to you if you want it.",
|
|
||||||
"homepage": "https://github.com/npm/security-holder#readme",
|
|
||||||
"keywords": [],
|
|
||||||
"license": "ISC",
|
|
||||||
"main": "index.js",
|
|
||||||
"name": "fs",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git+https://github.com/npm/security-holder.git"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
|
||||||
},
|
|
||||||
"version": "0.0.1-security"
|
|
||||||
}
|
|
5
node_modules/is-docker/cli.js
generated
vendored
5
node_modules/is-docker/cli.js
generated
vendored
|
@ -1,5 +0,0 @@
|
||||||
#!/usr/bin/env node
|
|
||||||
'use strict';
|
|
||||||
const isDocker = require('.');
|
|
||||||
|
|
||||||
process.exitCode = isDocker() ? 0 : 2;
|
|
15
node_modules/is-docker/index.d.ts
generated
vendored
15
node_modules/is-docker/index.d.ts
generated
vendored
|
@ -1,15 +0,0 @@
|
||||||
/**
|
|
||||||
Check if the process is running inside a Docker container.
|
|
||||||
|
|
||||||
@example
|
|
||||||
```
|
|
||||||
import isDocker = require('is-docker');
|
|
||||||
|
|
||||||
if (isDocker()) {
|
|
||||||
console.log('Running inside a Docker container');
|
|
||||||
}
|
|
||||||
```
|
|
||||||
*/
|
|
||||||
declare function isDocker(): boolean;
|
|
||||||
|
|
||||||
export = isDocker;
|
|
29
node_modules/is-docker/index.js
generated
vendored
29
node_modules/is-docker/index.js
generated
vendored
|
@ -1,29 +0,0 @@
|
||||||
'use strict';
|
|
||||||
const fs = require('fs');
|
|
||||||
|
|
||||||
let isDocker;
|
|
||||||
|
|
||||||
function hasDockerEnv() {
|
|
||||||
try {
|
|
||||||
fs.statSync('/.dockerenv');
|
|
||||||
return true;
|
|
||||||
} catch (_) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function hasDockerCGroup() {
|
|
||||||
try {
|
|
||||||
return fs.readFileSync('/proc/self/cgroup', 'utf8').includes('docker');
|
|
||||||
} catch (_) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = () => {
|
|
||||||
if (isDocker === undefined) {
|
|
||||||
isDocker = hasDockerEnv() || hasDockerCGroup();
|
|
||||||
}
|
|
||||||
|
|
||||||
return isDocker;
|
|
||||||
};
|
|
9
node_modules/is-docker/license
generated
vendored
9
node_modules/is-docker/license
generated
vendored
|
@ -1,9 +0,0 @@
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
80
node_modules/is-docker/package.json
generated
vendored
80
node_modules/is-docker/package.json
generated
vendored
|
@ -1,80 +0,0 @@
|
||||||
{
|
|
||||||
"_args": [
|
|
||||||
[
|
|
||||||
"is-docker@2.1.1",
|
|
||||||
"/home/nuno/Documents/core/software/fresh/js/metaforecasts/metaforecasts-current"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"_from": "is-docker@2.1.1",
|
|
||||||
"_id": "is-docker@2.1.1",
|
|
||||||
"_inBundle": false,
|
|
||||||
"_integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==",
|
|
||||||
"_location": "/is-docker",
|
|
||||||
"_phantomChildren": {},
|
|
||||||
"_requested": {
|
|
||||||
"type": "version",
|
|
||||||
"registry": true,
|
|
||||||
"raw": "is-docker@2.1.1",
|
|
||||||
"name": "is-docker",
|
|
||||||
"escapedName": "is-docker",
|
|
||||||
"rawSpec": "2.1.1",
|
|
||||||
"saveSpec": null,
|
|
||||||
"fetchSpec": "2.1.1"
|
|
||||||
},
|
|
||||||
"_requiredBy": [
|
|
||||||
"/is-wsl",
|
|
||||||
"/open"
|
|
||||||
],
|
|
||||||
"_resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz",
|
|
||||||
"_spec": "2.1.1",
|
|
||||||
"_where": "/home/nuno/Documents/core/software/fresh/js/metaforecasts/metaforecasts-current",
|
|
||||||
"author": {
|
|
||||||
"name": "Sindre Sorhus",
|
|
||||||
"email": "sindresorhus@gmail.com",
|
|
||||||
"url": "https://sindresorhus.com"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"is-docker": "cli.js"
|
|
||||||
},
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/sindresorhus/is-docker/issues"
|
|
||||||
},
|
|
||||||
"description": "Check if the process is running inside a Docker container",
|
|
||||||
"devDependencies": {
|
|
||||||
"ava": "^1.4.1",
|
|
||||||
"sinon": "^7.3.2",
|
|
||||||
"tsd": "^0.7.2",
|
|
||||||
"xo": "^0.24.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"index.js",
|
|
||||||
"index.d.ts",
|
|
||||||
"cli.js"
|
|
||||||
],
|
|
||||||
"funding": "https://github.com/sponsors/sindresorhus",
|
|
||||||
"homepage": "https://github.com/sindresorhus/is-docker#readme",
|
|
||||||
"keywords": [
|
|
||||||
"detect",
|
|
||||||
"docker",
|
|
||||||
"dockerized",
|
|
||||||
"container",
|
|
||||||
"inside",
|
|
||||||
"is",
|
|
||||||
"env",
|
|
||||||
"environment",
|
|
||||||
"process"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"name": "is-docker",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git+https://github.com/sindresorhus/is-docker.git"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "xo && ava && tsd"
|
|
||||||
},
|
|
||||||
"version": "2.1.1"
|
|
||||||
}
|
|
27
node_modules/is-docker/readme.md
generated
vendored
27
node_modules/is-docker/readme.md
generated
vendored
|
@ -1,27 +0,0 @@
|
||||||
# is-docker [![Build Status](https://travis-ci.com/sindresorhus/is-docker.svg?branch=master)](https://travis-ci.com/github/sindresorhus/is-docker)
|
|
||||||
|
|
||||||
> Check if the process is running inside a Docker container
|
|
||||||
|
|
||||||
## Install
|
|
||||||
|
|
||||||
```
|
|
||||||
$ npm install is-docker
|
|
||||||
```
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
```js
|
|
||||||
const isDocker = require('is-docker');
|
|
||||||
|
|
||||||
if (isDocker()) {
|
|
||||||
console.log('Running inside a Docker container');
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## CLI
|
|
||||||
|
|
||||||
```
|
|
||||||
$ is-docker
|
|
||||||
```
|
|
||||||
|
|
||||||
Exits with code 0 if inside a Docker container and 2 if not.
|
|
15
node_modules/is-wsl/index.d.ts
generated
vendored
15
node_modules/is-wsl/index.d.ts
generated
vendored
|
@ -1,15 +0,0 @@
|
||||||
/**
|
|
||||||
Check if the process is running inside [Windows Subsystem for Linux](https://msdn.microsoft.com/commandline/wsl/about) (Bash on Windows).
|
|
||||||
|
|
||||||
@example
|
|
||||||
```
|
|
||||||
import isWsl = require('is-wsl');
|
|
||||||
|
|
||||||
// When running inside Windows Subsystem for Linux
|
|
||||||
console.log(isWsl);
|
|
||||||
//=> true
|
|
||||||
```
|
|
||||||
*/
|
|
||||||
declare const isWsl: boolean;
|
|
||||||
|
|
||||||
export = isWsl;
|
|
31
node_modules/is-wsl/index.js
generated
vendored
31
node_modules/is-wsl/index.js
generated
vendored
|
@ -1,31 +0,0 @@
|
||||||
'use strict';
|
|
||||||
const os = require('os');
|
|
||||||
const fs = require('fs');
|
|
||||||
const isDocker = require('is-docker');
|
|
||||||
|
|
||||||
const isWsl = () => {
|
|
||||||
if (process.platform !== 'linux') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (os.release().toLowerCase().includes('microsoft')) {
|
|
||||||
if (isDocker()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
return fs.readFileSync('/proc/version', 'utf8').toLowerCase().includes('microsoft') ?
|
|
||||||
!isDocker() : false;
|
|
||||||
} catch (_) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
if (process.env.__IS_WSL_TEST__) {
|
|
||||||
module.exports = isWsl;
|
|
||||||
} else {
|
|
||||||
module.exports = isWsl();
|
|
||||||
}
|
|
9
node_modules/is-wsl/license
generated
vendored
9
node_modules/is-wsl/license
generated
vendored
|
@ -1,9 +0,0 @@
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
80
node_modules/is-wsl/package.json
generated
vendored
80
node_modules/is-wsl/package.json
generated
vendored
|
@ -1,80 +0,0 @@
|
||||||
{
|
|
||||||
"_args": [
|
|
||||||
[
|
|
||||||
"is-wsl@2.2.0",
|
|
||||||
"/home/nuno/Documents/core/software/fresh/js/metaforecasts/metaforecasts-current"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"_from": "is-wsl@2.2.0",
|
|
||||||
"_id": "is-wsl@2.2.0",
|
|
||||||
"_inBundle": false,
|
|
||||||
"_integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
|
|
||||||
"_location": "/is-wsl",
|
|
||||||
"_phantomChildren": {},
|
|
||||||
"_requested": {
|
|
||||||
"type": "version",
|
|
||||||
"registry": true,
|
|
||||||
"raw": "is-wsl@2.2.0",
|
|
||||||
"name": "is-wsl",
|
|
||||||
"escapedName": "is-wsl",
|
|
||||||
"rawSpec": "2.2.0",
|
|
||||||
"saveSpec": null,
|
|
||||||
"fetchSpec": "2.2.0"
|
|
||||||
},
|
|
||||||
"_requiredBy": [
|
|
||||||
"/open"
|
|
||||||
],
|
|
||||||
"_resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
|
|
||||||
"_spec": "2.2.0",
|
|
||||||
"_where": "/home/nuno/Documents/core/software/fresh/js/metaforecasts/metaforecasts-current",
|
|
||||||
"author": {
|
|
||||||
"name": "Sindre Sorhus",
|
|
||||||
"email": "sindresorhus@gmail.com",
|
|
||||||
"url": "sindresorhus.com"
|
|
||||||
},
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/sindresorhus/is-wsl/issues"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"is-docker": "^2.0.0"
|
|
||||||
},
|
|
||||||
"description": "Check if the process is running inside Windows Subsystem for Linux (Bash on Windows)",
|
|
||||||
"devDependencies": {
|
|
||||||
"ava": "^1.4.1",
|
|
||||||
"clear-module": "^3.2.0",
|
|
||||||
"proxyquire": "^2.1.0",
|
|
||||||
"tsd": "^0.7.2",
|
|
||||||
"xo": "^0.24.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"index.js",
|
|
||||||
"index.d.ts"
|
|
||||||
],
|
|
||||||
"homepage": "https://github.com/sindresorhus/is-wsl#readme",
|
|
||||||
"keywords": [
|
|
||||||
"check",
|
|
||||||
"wsl",
|
|
||||||
"windows",
|
|
||||||
"subsystem",
|
|
||||||
"linux",
|
|
||||||
"detect",
|
|
||||||
"bash",
|
|
||||||
"process",
|
|
||||||
"console",
|
|
||||||
"terminal",
|
|
||||||
"is"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"name": "is-wsl",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git+https://github.com/sindresorhus/is-wsl.git"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "xo && ava && tsd"
|
|
||||||
},
|
|
||||||
"version": "2.2.0"
|
|
||||||
}
|
|
36
node_modules/is-wsl/readme.md
generated
vendored
36
node_modules/is-wsl/readme.md
generated
vendored
|
@ -1,36 +0,0 @@
|
||||||
# is-wsl [![Build Status](https://travis-ci.org/sindresorhus/is-wsl.svg?branch=master)](https://travis-ci.org/sindresorhus/is-wsl)
|
|
||||||
|
|
||||||
> Check if the process is running inside [Windows Subsystem for Linux](https://msdn.microsoft.com/commandline/wsl/about) (Bash on Windows)
|
|
||||||
|
|
||||||
Can be useful if you need to work around unimplemented or buggy features in WSL. Supports both WSL 1 and WSL 2.
|
|
||||||
|
|
||||||
|
|
||||||
## Install
|
|
||||||
|
|
||||||
```
|
|
||||||
$ npm install is-wsl
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
```js
|
|
||||||
const isWsl = require('is-wsl');
|
|
||||||
|
|
||||||
// When running inside Windows Subsystem for Linux
|
|
||||||
console.log(isWsl);
|
|
||||||
//=> true
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<div align="center">
|
|
||||||
<b>
|
|
||||||
<a href="https://tidelift.com/subscription/pkg/npm-is-wsl?utm_source=npm-is-wsl&utm_medium=referral&utm_campaign=readme">Get professional support for this package with a Tidelift subscription</a>
|
|
||||||
</b>
|
|
||||||
<br>
|
|
||||||
<sub>
|
|
||||||
Tidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.
|
|
||||||
</sub>
|
|
||||||
</div>
|
|
10
node_modules/json2csv/.eslintrc
generated
vendored
10
node_modules/json2csv/.eslintrc
generated
vendored
|
@ -1,10 +0,0 @@
|
||||||
{
|
|
||||||
"env": {
|
|
||||||
"node": true,
|
|
||||||
"es6": true
|
|
||||||
},
|
|
||||||
"parserOptions": {
|
|
||||||
"ecmaVersion": 8
|
|
||||||
},
|
|
||||||
"extends": "eslint:recommended"
|
|
||||||
}
|
|
3
node_modules/json2csv/.gitattributes
generated
vendored
3
node_modules/json2csv/.gitattributes
generated
vendored
|
@ -1,3 +0,0 @@
|
||||||
* text=auto
|
|
||||||
test/fixtures/csv/eol.csv text eol=crlf
|
|
||||||
test/fixtures/csv/escapeEOL.csv text eol=crlf
|
|
600
node_modules/json2csv/CHANGELOG.md
generated
vendored
600
node_modules/json2csv/CHANGELOG.md
generated
vendored
|
@ -1,600 +0,0 @@
|
||||||
# Changelog
|
|
||||||
|
|
||||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
||||||
|
|
||||||
### [5.0.5](https://github.com/zemirco/json2csv/compare/v5.0.4...v5.0.5) (2020-11-16)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* don't mutate original object in unset ([#499](https://github.com/zemirco/json2csv/issues/499)) ([6e4ea5e](https://github.com/zemirco/json2csv/commit/6e4ea5ebdc263006ca6ff45879fbb7e0bd65bef2))
|
|
||||||
|
|
||||||
### [5.0.4](https://github.com/zemirco/json2csv/compare/v5.0.3...v5.0.4) (2020-11-10)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* Fix issue with unwind and empty arrays creating an extra column ([#496](https://github.com/zemirco/json2csv/issues/496)) ([0b331fc](https://github.com/zemirco/json2csv/commit/0b331fc3ad345f8062abe60f64cb3b43dad30fb0))
|
|
||||||
|
|
||||||
### [5.0.3](https://github.com/zemirco/json2csv/compare/v5.0.2...v5.0.3) (2020-09-24)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* audit dependencies fix ([d6d0fc7](https://github.com/zemirco/json2csv/commit/d6d0fc78128e01e021414aaf52a65cbcd09a1225))
|
|
||||||
* update commander dep ([322e568](https://github.com/zemirco/json2csv/commit/322e568793ec4a64f43ec2ac82c9886177bcc4ed))
|
|
||||||
|
|
||||||
### [5.0.2](https://github.com/zemirco/json2csv/compare/v5.0.1...v5.0.2) (2020-09-24)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **cli:** fix relative paths issue in CLI when not streaming ([#488](https://github.com/zemirco/json2csv/issues/488)) ([06079e8](https://github.com/zemirco/json2csv/commit/06079e840128030eacfecde66da11295eb162234))
|
|
||||||
|
|
||||||
### [5.0.1](https://github.com/zemirco/json2csv/compare/v5.0.0...v5.0.1) (2020-04-28)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* wrong call to processValue ([#454](https://github.com/zemirco/json2csv/issues/454)) ([66abd45](https://github.com/zemirco/json2csv/commit/66abd45))
|
|
||||||
|
|
||||||
## [5.0.0](https://github.com/zemirco/json2csv/compare/v4.5.2...v5.0.0) (2020-03-15)
|
|
||||||
|
|
||||||
|
|
||||||
### ⚠ BREAKING CHANGES
|
|
||||||
|
|
||||||
* Node 8 and 9 no longer supported, use Node 10 or greater. It might still work, but it has reached End-Of-Life.
|
|
||||||
* module no longer takes `unwind`, `unwindBlank`, `flatten` or the `flattenSeparator` options, instead see the new `transforms` option. CLI options are unchanged from the callers side, but use the built in transforms under the hood.
|
|
||||||
|
|
||||||
* Add support for transforms
|
|
||||||
|
|
||||||
* Add documentation about transforms
|
|
||||||
* remove extra commonjs build, use starting point in package.json `main` field.
|
|
||||||
* Renamed `doubleQuote` to `escapedQuote`
|
|
||||||
* remove `stringify` option
|
|
||||||
* `--fields-config` option has been removed, use the new `--config` option for all configuration, not just fields.
|
|
||||||
* Drop node 6 and 7, and add node 11 and 12
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* Always error asynchronously from parseAsync method ([#412](https://github.com/zemirco/json2csv/issues/412)) ([16cc044](https://github.com/zemirco/json2csv/commit/16cc044))
|
|
||||||
* audit deps ([15992cf](https://github.com/zemirco/json2csv/commit/15992cf))
|
|
||||||
* drop Node 8 and 9 ([7295465](https://github.com/zemirco/json2csv/commit/7295465))
|
|
||||||
* Make some CLI options mandatory ([#433](https://github.com/zemirco/json2csv/issues/433)) ([bd51527](https://github.com/zemirco/json2csv/commit/bd51527))
|
|
||||||
* Remove CommonJS build ([#422](https://github.com/zemirco/json2csv/issues/422)) ([5ce0089](https://github.com/zemirco/json2csv/commit/5ce0089))
|
|
||||||
* Remove stringify option ([#419](https://github.com/zemirco/json2csv/issues/419)) ([39f303d](https://github.com/zemirco/json2csv/commit/39f303d))
|
|
||||||
* Rename doubleQuote to escapedQuote ([#418](https://github.com/zemirco/json2csv/issues/418)) ([f99408c](https://github.com/zemirco/json2csv/commit/f99408c))
|
|
||||||
* update CI node versions ([#413](https://github.com/zemirco/json2csv/issues/413)) ([6fd6c09](https://github.com/zemirco/json2csv/commit/6fd6c09))
|
|
||||||
* update commander cli dep ([74aa40a](https://github.com/zemirco/json2csv/commit/74aa40a))
|
|
||||||
* update commander dep ([272675b](https://github.com/zemirco/json2csv/commit/272675b))
|
|
||||||
* **deps:** audit dependencies ([bf9877a](https://github.com/zemirco/json2csv/commit/bf9877a))
|
|
||||||
* **deps:** update commander ([3f099f2](https://github.com/zemirco/json2csv/commit/3f099f2))
|
|
||||||
* **security:** fix audit vulnerabilities ([b57715b](https://github.com/zemirco/json2csv/commit/b57715b))
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* Add support for flattening arrays and change transforms arguments to an object. ([#432](https://github.com/zemirco/json2csv/issues/432)) ([916e448](https://github.com/zemirco/json2csv/commit/916e448))
|
|
||||||
* Add support for transforms ([#431](https://github.com/zemirco/json2csv/issues/431)) ([f1d04d0](https://github.com/zemirco/json2csv/commit/f1d04d0))
|
|
||||||
* Improve async promise to optionally not return ([#421](https://github.com/zemirco/json2csv/issues/421)) ([3e296f6](https://github.com/zemirco/json2csv/commit/3e296f6))
|
|
||||||
* Improves the unwind transform so it unwinds all unwindable fields if … ([#434](https://github.com/zemirco/json2csv/issues/434)) ([ec1f301](https://github.com/zemirco/json2csv/commit/ec1f301))
|
|
||||||
* replace fields config by a global config ([#338](https://github.com/zemirco/json2csv/issues/338)) ([d6c1c5f](https://github.com/zemirco/json2csv/commit/d6c1c5f))
|
|
||||||
|
|
||||||
## [4.5.2](https://github.com/zemirco/json2csv/compare/v4.5.1...v4.5.2) (2019-07-05)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* Improve the inference of the header name when using function as value ([#395](https://github.com/zemirco/json2csv/issues/395)) ([590d19a](https://github.com/zemirco/json2csv/commit/590d19a))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.4.0"></a>
|
|
||||||
## [4.4.0](https://github.com/zemirco/json2csv/compare/v4.3.5...v4.4.0) (2019-03-25)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* Performance improvements and new async api ([#360](https://github.com/zemirco/json2csv/issues/360)) ([d59dea1](https://github.com/zemirco/json2csv/commit/d59dea1))
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.3.5"></a>
|
|
||||||
## [4.3.5](https://github.com/zemirco/json2csv/compare/v4.3.4...v4.3.5) (2019-02-22)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* audit deps ([3182707](https://github.com/zemirco/json2csv/commit/3182707))
|
|
||||||
* unwind of nested fields ([#357](https://github.com/zemirco/json2csv/issues/357)) ([2d69281](https://github.com/zemirco/json2csv/commit/2d69281))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.3.4"></a>
|
|
||||||
## [4.3.4](https://github.com/zemirco/json2csv/compare/v4.3.3...v4.3.4) (2019-02-11)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* issue with fields.value function not receiving correct fields ([#353](https://github.com/zemirco/json2csv/issues/353)) ([851c02f](https://github.com/zemirco/json2csv/commit/851c02f))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.3.3"></a>
|
|
||||||
## [4.3.3](https://github.com/zemirco/json2csv/compare/v4.3.2...v4.3.3) (2019-01-11)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* audit dep fix ([1ef4bcd](https://github.com/zemirco/json2csv/commit/1ef4bcd))
|
|
||||||
* Remove invalid reference to flat ([#347](https://github.com/zemirco/json2csv/issues/347)) ([130ef7d](https://github.com/zemirco/json2csv/commit/130ef7d))
|
|
||||||
* Remove preferGlobal from package.json ([#346](https://github.com/zemirco/json2csv/issues/346)) ([2b6ad3a](https://github.com/zemirco/json2csv/commit/2b6ad3a))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.3.2"></a>
|
|
||||||
## [4.3.2](https://github.com/zemirco/json2csv/compare/v4.3.1...v4.3.2) (2018-12-08)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* Remove lodash.clonedeep dependency ([#339](https://github.com/zemirco/json2csv/issues/339)) ([d28955a](https://github.com/zemirco/json2csv/commit/d28955a)), closes [#333](https://github.com/zemirco/json2csv/issues/333)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.3.1"></a>
|
|
||||||
## [4.3.1](https://github.com/zemirco/json2csv/compare/v4.3.0...v4.3.1) (2018-11-17)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* Return correct exit code on error ([#337](https://github.com/zemirco/json2csv/issues/337)) ([a793de5](https://github.com/zemirco/json2csv/commit/a793de5))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.3.0"></a>
|
|
||||||
# [4.3.0](https://github.com/zemirco/json2csv/compare/v4.2.1...v4.3.0) (2018-11-05)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* Optimize performance around the usage of fields ([#328](https://github.com/zemirco/json2csv/issues/328)) ([d9e4463](https://github.com/zemirco/json2csv/commit/d9e4463))
|
|
||||||
* Remove wrong submodule ([#326](https://github.com/zemirco/json2csv/issues/326)) ([6486bb0](https://github.com/zemirco/json2csv/commit/6486bb0))
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* Add support for objectMode in the stream API ([#325](https://github.com/zemirco/json2csv/issues/325)) ([8f0ae55](https://github.com/zemirco/json2csv/commit/8f0ae55))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.2.1"></a>
|
|
||||||
## [4.2.1](https://github.com/zemirco/json2csv/compare/v4.2.0...v4.2.1) (2018-08-06)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* bug that modifies opts after parsing an object/stream ([#318](https://github.com/zemirco/json2csv/issues/318)) ([f0a4830](https://github.com/zemirco/json2csv/commit/f0a4830))
|
|
||||||
* Clean up the flattening separator feature ([#315](https://github.com/zemirco/json2csv/issues/315)) ([ee3d181](https://github.com/zemirco/json2csv/commit/ee3d181))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.2.0"></a>
|
|
||||||
# [4.2.0](https://github.com/zemirco/json2csv/compare/v4.1.6...v4.2.0) (2018-07-31)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* Added flattenSeparator option ([#314](https://github.com/zemirco/json2csv/issues/314)) ([5c5de9f](https://github.com/zemirco/json2csv/commit/5c5de9f))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.1.6"></a>
|
|
||||||
## [4.1.6](https://github.com/zemirco/json2csv/compare/v4.1.5...v4.1.6) (2018-07-12)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* Update dependencies and remove cli-table2 dependency ([#312](https://github.com/zemirco/json2csv/issues/312)) ([5981ba3](https://github.com/zemirco/json2csv/commit/5981ba3))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.1.5"></a>
|
|
||||||
## [4.1.5](https://github.com/zemirco/json2csv/compare/v4.1.4...v4.1.5) (2018-06-26)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* Process stdin as a stream ([#308](https://github.com/zemirco/json2csv/issues/308)) ([2b186b6](https://github.com/zemirco/json2csv/commit/2b186b6))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.1.4"></a>
|
|
||||||
## [4.1.4](https://github.com/zemirco/json2csv/compare/v4.1.3...v4.1.4) (2018-06-23)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* don't escape tabs ([#305](https://github.com/zemirco/json2csv/issues/305)) ([a36c8e3](https://github.com/zemirco/json2csv/commit/a36c8e3))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.1.3"></a>
|
|
||||||
## [4.1.3](https://github.com/zemirco/json2csv/compare/v4.1.2...v4.1.3) (2018-05-23)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* Escape custom quotes correctly ([#301](https://github.com/zemirco/json2csv/issues/301)) ([7d57208](https://github.com/zemirco/json2csv/commit/7d57208))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.1.2"></a>
|
|
||||||
## [4.1.2](https://github.com/zemirco/json2csv/compare/v4.1.1...v4.1.2) (2018-04-16)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **tests:** Skip bogus pretty print tests only in old node versions ([#290](https://github.com/zemirco/json2csv/issues/290)) ([0f3b885](https://github.com/zemirco/json2csv/commit/0f3b885))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.1.1"></a>
|
|
||||||
## [4.1.1](https://github.com/zemirco/json2csv/compare/v4.1.0...v4.1.1) (2018-04-16)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* readme CLI's info ([#289](https://github.com/zemirco/json2csv/issues/289)) ([9fe65b3](https://github.com/zemirco/json2csv/commit/9fe65b3))
|
|
||||||
* Add tests and docs to unwind-blank feature ([#287](https://github.com/zemirco/json2csv/issues/287)) ([e3d4a05](https://github.com/zemirco/json2csv/commit/e3d4a05))
|
|
||||||
* **perf:** Improve unwind performance and maintainability ([#288](https://github.com/zemirco/json2csv/issues/288)) ([80e496d](https://github.com/zemirco/json2csv/commit/80e496d))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.1.0"></a>
|
|
||||||
## [4.1.0](https://github.com/zemirco/json2csv/compare/v4.0.4...v4.1.0) (2018-04-16)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* Avoid redundant deep cloning when unwinding. ([#286](https://github.com/zemirco/json2csv/issues/286)) ([95a6ca9](https://github.com/zemirco/json2csv/commit/95a6ca9))
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* Add ability to unwind by blanking out instead of repeating data ([#285](https://github.com/zemirco/json2csv/issues/285)) ([61d9808](https://github.com/zemirco/json2csv/commit/61d9808))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.0.4"></a>
|
|
||||||
## [4.0.4](https://github.com/zemirco/json2csv/compare/v4.0.3...v4.0.4) (2018-04-10)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* comment out failing tests ([#283](https://github.com/zemirco/json2csv/issues/283)) ([5b25eaa](https://github.com/zemirco/json2csv/commit/5b25eaa))
|
|
||||||
* Support empty array with opts.fields ([#281](https://github.com/zemirco/json2csv/issues/281)) ([eccca89](https://github.com/zemirco/json2csv/commit/eccca89))
|
|
||||||
* **tests:** emit correct lines from transform ([#282](https://github.com/zemirco/json2csv/issues/282)) ([2322ddf](https://github.com/zemirco/json2csv/commit/2322ddf))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.0.3"></a>
|
|
||||||
## [4.0.3](https://github.com/zemirco/json2csv/compare/v4.0.2...v4.0.3) (2018-04-09)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* error when a field is null and flatten is used ([#274](https://github.com/zemirco/json2csv/issues/274)) ([1349a94](https://github.com/zemirco/json2csv/commit/1349a94))
|
|
||||||
* throw error for empty dataset only if fields not specified ([0d8534e](https://github.com/zemirco/json2csv/commit/0d8534e))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.0.2"></a>
|
|
||||||
## [4.0.2](https://github.com/zemirco/json2csv/compare/v4.0.1...v4.0.2) (2018-03-09)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **parser:** RangeError ([#271](https://github.com/zemirco/json2csv/issues/271)) ([c8d5a87](https://github.com/zemirco/json2csv/commit/c8d5a87))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.0.1"></a>
|
|
||||||
## [4.0.1](https://github.com/zemirco/json2csv/compare/v4.0.0...v4.0.1) (2018-03-05)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* double quote escaping before new line ([#268](https://github.com/zemirco/json2csv/issues/268)) ([fa991cf](https://github.com/zemirco/json2csv/commit/fa991cf))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.0.0"></a>
|
|
||||||
# [4.0.0](https://github.com/zemirco/json2csv/compare/v4.0.0-alpha.2...v4.0.0) (2018-02-27)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* Replace webpack with rollup packaging ([#266](https://github.com/zemirco/json2csv/issues/266)) ([a9f8020](https://github.com/zemirco/json2csv/commit/a9f8020))
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* Pass transform options through ([#262](https://github.com/zemirco/json2csv/issues/262)) ([650913f](https://github.com/zemirco/json2csv/commit/650913f))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.0.0-alpha.2"></a>
|
|
||||||
# [4.0.0-alpha.2](https://github.com/zemirco/json2csv/compare/v4.0.0-alpha.1...v4.0.0-alpha.2) (2018-02-25)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* flatten issue with toJSON ([#259](https://github.com/zemirco/json2csv/issues/259)) ([7006d2b](https://github.com/zemirco/json2csv/commit/7006d2b))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.0.0-alpha.1"></a>
|
|
||||||
# [4.0.0-alpha.1](https://github.com/zemirco/json2csv/compare/v4.0.0-alpha.0...v4.0.0-alpha.1) (2018-02-21)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* Remove TypeScript definition ([#256](https://github.com/zemirco/json2csv/issues/256)) ([4f09694](https://github.com/zemirco/json2csv/commit/4f09694))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.0.0-alpha.0"></a>
|
|
||||||
# [4.0.0-alpha.0](https://github.com/zemirco/json2csv/compare/v3.11.5...v4.0.0-alpha.0) (2018-02-21)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* Add CLI tests ([#247](https://github.com/zemirco/json2csv/issues/247)) ([bb8126f](https://github.com/zemirco/json2csv/commit/bb8126f))
|
|
||||||
* Add excel string to cli and standardize ([#231](https://github.com/zemirco/json2csv/issues/231)) ([421baad](https://github.com/zemirco/json2csv/commit/421baad))
|
|
||||||
* Allow passing ldjson input files ([#220](https://github.com/zemirco/json2csv/issues/220)) ([9c861ed](https://github.com/zemirco/json2csv/commit/9c861ed))
|
|
||||||
* Avoid throwing an error on elements that can't be stringified (like functions) ([#223](https://github.com/zemirco/json2csv/issues/223)) ([679c687](https://github.com/zemirco/json2csv/commit/679c687))
|
|
||||||
* backslash logic ([#222](https://github.com/zemirco/json2csv/issues/222)) ([29e9445](https://github.com/zemirco/json2csv/commit/29e9445))
|
|
||||||
* broken stdin input ([#241](https://github.com/zemirco/json2csv/issues/241)) ([6cb407c](https://github.com/zemirco/json2csv/commit/6cb407c))
|
|
||||||
* Combine EOL and newLine parameters ([#219](https://github.com/zemirco/json2csv/issues/219)) ([4668a8b](https://github.com/zemirco/json2csv/commit/4668a8b))
|
|
||||||
* header flag ([#221](https://github.com/zemirco/json2csv/issues/221)) ([7f7338f](https://github.com/zemirco/json2csv/commit/7f7338f))
|
|
||||||
* outdated jsdoc ([#243](https://github.com/zemirco/json2csv/issues/243)) ([efe9888](https://github.com/zemirco/json2csv/commit/efe9888))
|
|
||||||
* pretty print issues ([#242](https://github.com/zemirco/json2csv/issues/242)) ([3bd9655](https://github.com/zemirco/json2csv/commit/3bd9655))
|
|
||||||
* Process header cells as any other cell ([#244](https://github.com/zemirco/json2csv/issues/244)) ([1fcde13](https://github.com/zemirco/json2csv/commit/1fcde13))
|
|
||||||
* Remove callback support ([2096ade](https://github.com/zemirco/json2csv/commit/2096ade))
|
|
||||||
* Remove fieldNames ([#232](https://github.com/zemirco/json2csv/issues/232)) ([6cc74b2](https://github.com/zemirco/json2csv/commit/6cc74b2))
|
|
||||||
* Remove path-is-absolute dependency ([#225](https://github.com/zemirco/json2csv/issues/225)) ([f71a3df](https://github.com/zemirco/json2csv/commit/f71a3df))
|
|
||||||
* Rename hasCSVColumnTitle to noHeader ([#216](https://github.com/zemirco/json2csv/issues/216)) ([f053c8b](https://github.com/zemirco/json2csv/commit/f053c8b))
|
|
||||||
* Rename ld-json to ndjson ([#240](https://github.com/zemirco/json2csv/issues/240)) ([24a7893](https://github.com/zemirco/json2csv/commit/24a7893))
|
|
||||||
* Rename unwindPath to unwind ([#230](https://github.com/zemirco/json2csv/issues/230)) ([7143bc7](https://github.com/zemirco/json2csv/commit/7143bc7))
|
|
||||||
* Streamify pretty print ([#248](https://github.com/zemirco/json2csv/issues/248)) ([fb7ad53](https://github.com/zemirco/json2csv/commit/fb7ad53))
|
|
||||||
|
|
||||||
|
|
||||||
### Chores
|
|
||||||
|
|
||||||
* Refactor the entire library to ES6 ([#233](https://github.com/zemirco/json2csv/issues/233)) ([dce4d33](https://github.com/zemirco/json2csv/commit/dce4d33))
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* add doubleQuote to cli, rename other options to line up with the cli ([5e402dc](https://github.com/zemirco/json2csv/commit/5e402dc))
|
|
||||||
* Add fields config option to CLI ([#245](https://github.com/zemirco/json2csv/issues/245)) ([74ef666](https://github.com/zemirco/json2csv/commit/74ef666))
|
|
||||||
* Add streaming API ([#235](https://github.com/zemirco/json2csv/issues/235)) ([01ca93e](https://github.com/zemirco/json2csv/commit/01ca93e))
|
|
||||||
* Split tests in multiple files ([#246](https://github.com/zemirco/json2csv/issues/246)) ([839de77](https://github.com/zemirco/json2csv/commit/839de77))
|
|
||||||
|
|
||||||
|
|
||||||
### BREAKING CHANGES
|
|
||||||
|
|
||||||
* Replaces field-list with field-config
|
|
||||||
* Remove `preserveNewLinesInValues` option, preserve by default
|
|
||||||
|
|
||||||
* Refactor the entire library to ES6
|
|
||||||
|
|
||||||
* Fix PR issues
|
|
||||||
|
|
||||||
* Add strict mode for node 4.X
|
|
||||||
* Remove fieldNames
|
|
||||||
|
|
||||||
* Increase coverage back to 100%
|
|
||||||
* callback is no longer available, just return the csv from the json2csv.
|
|
||||||
|
|
||||||
- updated tests
|
|
||||||
- updated readme
|
|
||||||
* * Rename unwindPath to unwind
|
|
||||||
|
|
||||||
* Fix field-list in CLI
|
|
||||||
* newLine removed, eol kept.
|
|
||||||
* Rename del to delimiter to match the cli flag
|
|
||||||
* Rename quotes to quote to match the cli flag
|
|
||||||
|
|
||||||
* Remove unused double quotes comment
|
|
||||||
|
|
||||||
* Fix noHeader in CLI
|
|
||||||
|
|
||||||
* Revert "Remove unused double quotes comment"
|
|
||||||
|
|
||||||
This reverts commit 250d3e6ddf3062cbdc1e0174493a37fa21197d8e.
|
|
||||||
|
|
||||||
* Add doubleQuote to CLI
|
|
||||||
* Rename hasCSVColumnTitle to noHeader to keep in line with the CLI
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="3.11.5"></a>
|
|
||||||
## [3.11.5](https://github.com/zemirco/json2csv/compare/v3.11.4...v3.11.5) (2017-10-23)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* backslash value not escaped properly ([#202](https://github.com/zemirco/json2csv/issues/202)) ([#204](https://github.com/zemirco/json2csv/issues/204)) ([2cf50f1](https://github.com/zemirco/json2csv/commit/2cf50f1))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="3.11.4"></a>
|
|
||||||
## [3.11.4](https://github.com/zemirco/json2csv/compare/v3.11.3...v3.11.4) (2017-10-09)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **security:** Update debug to 3.1.0 for security reasons ([9c7cfaa](https://github.com/zemirco/json2csv/commit/9c7cfaa))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="3.11.3"></a>
|
|
||||||
## [3.11.3](https://github.com/zemirco/json2csv/compare/v3.11.2...v3.11.3) (2017-10-09)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="3.11.2"></a>
|
|
||||||
## [3.11.2](https://github.com/zemirco/json2csv/compare/v3.11.1...v3.11.2) (2017-09-13)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* Remove extra space character in mode withBOM: true [#190](https://github.com/zemirco/json2csv/issues/190) ([#194](https://github.com/zemirco/json2csv/issues/194)) ([e8b6f6b](https://github.com/zemirco/json2csv/commit/e8b6f6b))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="3.11.1"></a>
|
|
||||||
## [3.11.1](https://github.com/zemirco/json2csv/compare/v3.11.0...v3.11.1) (2017-08-11)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **cli:** pass BOM cli option to function ([#193](https://github.com/zemirco/json2csv/issues/193)) ([70cfdfe](https://github.com/zemirco/json2csv/commit/70cfdfe))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="3.11.0"></a>
|
|
||||||
# [3.11.0](https://github.com/zemirco/json2csv/compare/v3.10.0...v3.11.0) (2017-08-02)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* Handle dates without double-escaping ([#189](https://github.com/zemirco/json2csv/issues/189)) ([ff514ba](https://github.com/zemirco/json2csv/commit/ff514ba))
|
|
||||||
* unwind parameter in command line mode ([#191](https://github.com/zemirco/json2csv/issues/191)) ([e706c25](https://github.com/zemirco/json2csv/commit/e706c25))
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* Added flag to signal if resulting function value should be stringified or not ([#192](https://github.com/zemirco/json2csv/issues/192)) ([aaa6b05](https://github.com/zemirco/json2csv/commit/aaa6b05))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="3.10.0"></a>
|
|
||||||
# [3.10.0](https://github.com/zemirco/json2csv/compare/v3.9.1...v3.10.0) (2017-07-24)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* Add BOM character option ([#187](https://github.com/zemirco/json2csv/issues/187)) ([0c799ca](https://github.com/zemirco/json2csv/commit/0c799ca))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="3.9.1"></a>
|
|
||||||
## [3.9.1](https://github.com/zemirco/json2csv/compare/v3.9.0...v3.9.1) (2017-07-14)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="3.9.0"></a>
|
|
||||||
# [3.9.0](https://github.com/zemirco/json2csv/compare/v3.8.0...v3.9.0) (2017-07-11)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* Parameter unwindPath for multiple fields ([#174](https://github.com/zemirco/json2csv/issues/174)) ([#183](https://github.com/zemirco/json2csv/issues/183)) ([fbcaa10](https://github.com/zemirco/json2csv/commit/fbcaa10))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="3.8.0"></a>
|
|
||||||
# [3.8.0](https://github.com/zemirco/json2csv/compare/v3.7.3...v3.8.0) (2017-07-03)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **docs:** Add a coma in the ReadMe example ([#181](https://github.com/zemirco/json2csv/issues/181)) ([abeb820](https://github.com/zemirco/json2csv/commit/abeb820))
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* Preserve new lines in cells with option `preserveNewLinesInValues` ([#91](https://github.com/zemirco/json2csv/issues/91)) ([#171](https://github.com/zemirco/json2csv/issues/171)) ([187b701](https://github.com/zemirco/json2csv/commit/187b701))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="3.7.3"></a>
|
|
||||||
## [3.7.3](https://github.com/zemirco/json2csv/compare/v3.7.1...v3.7.3) (2016-12-08)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **jsdoc:** JSDoc Editting ([#155](https://github.com/zemirco/json2csv/issues/155)) ([76075d6](https://github.com/zemirco/json2csv/commit/76075d6))
|
|
||||||
* **ts:** Fix type definition ([#154](https://github.com/zemirco/json2csv/issues/154)) ([fae53a1](https://github.com/zemirco/json2csv/commit/fae53a1))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 3.6.3 / 2016-08-17
|
|
||||||
|
|
||||||
* Fix crashing on EPIPE error [#134](https://github.com/zemirco/json2csv/pull/134)
|
|
||||||
* Add UMD build for browser usage [#136](https://github.com/zemirco/json2csv/pull/136)
|
|
||||||
* Add docs during prepublish
|
|
||||||
|
|
||||||
## 3.6.2 / 2016-07-22
|
|
||||||
|
|
||||||
* Remove debugger, see [#132](https://github.com/zemirco/json2csv/pull/132)
|
|
||||||
* Fix changelog typo
|
|
||||||
|
|
||||||
## 3.6.1 / 2016-07-12
|
|
||||||
|
|
||||||
* Fix auto-fields returning all available fields, even if not available on the first object, see #104
|
|
||||||
|
|
||||||
## 3.6.0 / 2016-07-07
|
|
||||||
|
|
||||||
* Make callback optional
|
|
||||||
* Make callback use `process.nextTick`, so it's not sync
|
|
||||||
|
|
||||||
Thanks @STRML!
|
|
||||||
|
|
||||||
## 3.5.1 / 2016-06-29
|
|
||||||
|
|
||||||
* Revert [#114](https://github.com/zemirco/json2csv/pull/114), due to more issues
|
|
||||||
* Update npmignore
|
|
||||||
* Add a changelog
|
|
||||||
* Updatee readme
|
|
||||||
|
|
||||||
## 3.5.0 / 2016-06-21
|
|
||||||
|
|
||||||
* `includeEmptyRows` options added, see [#122](https://github.com/zemirco/json2csv/pull/122) (Thanks @glutentag)
|
|
||||||
* `-a` or `--include-empty-rows` added for the CLI.
|
|
||||||
|
|
||||||
## 2.2.1 / 2013-11-10
|
|
||||||
|
|
||||||
* mainly for development e.g. adding code format, update readme..
|
|
||||||
|
|
||||||
## 2.2.0 / 2013-11-08
|
|
||||||
|
|
||||||
* not create CSV column title by passing hasCSVColumnTitle: false, into params.
|
|
||||||
* if field is not exist in object then the field value in CSV will be empty.
|
|
||||||
* fix data in object format - {...}
|
|
||||||
|
|
||||||
## 2.1.0 / 2013-06-11
|
|
||||||
|
|
||||||
* quote titles in the first row
|
|
||||||
|
|
||||||
## 2.0.0 / 2013-03-04
|
|
||||||
|
|
||||||
* err in callback function
|
|
||||||
|
|
||||||
## 1.3.1 / 2013-02-20
|
|
||||||
|
|
||||||
* fix stdin encoding
|
|
||||||
|
|
||||||
## 1.3.0 / 2013-02-20
|
|
||||||
|
|
||||||
* support reading from stdin [#9](https://github.com/zeMirco/json2csv/pull/9)
|
|
||||||
|
|
||||||
## 1.2.0 / 2013-02-20
|
|
||||||
|
|
||||||
* support custom field names [#8](https://github.com/zeMirco/json2csv/pull/8)
|
|
||||||
|
|
||||||
## 1.1.0 / 2013-01-19
|
|
||||||
|
|
||||||
* add optional custom delimiter
|
|
14
node_modules/json2csv/LICENSE.md
generated
vendored
14
node_modules/json2csv/LICENSE.md
generated
vendored
|
@ -1,14 +0,0 @@
|
||||||
Copyright (C) 2012 [Mirco Zeiss](mailto: mirco.zeiss@gmail.com)
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
|
|
||||||
documentation files (the "Software"), to deal in the Software without restriction, including without limitation
|
|
||||||
the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
|
|
||||||
to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
|
|
||||||
TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
|
|
||||||
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
970
node_modules/json2csv/README.md
generated
vendored
970
node_modules/json2csv/README.md
generated
vendored
|
@ -1,970 +0,0 @@
|
||||||
# json2csv
|
|
||||||
|
|
||||||
Converts json into csv with column titles and proper line endings.
|
|
||||||
Can be used as a module and from the command line.
|
|
||||||
|
|
||||||
[![npm version][npm-badge]][npm-badge-url]
|
|
||||||
[![Build Status][travis-badge]][travis-badge-url]
|
|
||||||
[![Coverage Status][coveralls-badge]][coveralls-badge-url]
|
|
||||||
|
|
||||||
See the [CHANGELOG] for details about the latest release.
|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
- Fast and lightweight
|
|
||||||
- Scalable to infinitely large datasets (using stream processing)
|
|
||||||
- Support for standard JSON as well as NDJSON
|
|
||||||
- Advanced data selection (automatic field discovery, underscore-like selectors, custom data getters, default values for missing fields, transforms, etc.)
|
|
||||||
- Highly customizable (supportting custom quotation marks, delimiters, eol values, etc.)
|
|
||||||
- Automatic escaping (preserving new lines, quotes, etc. in them)
|
|
||||||
- Optional headers
|
|
||||||
- Unicode encoding support
|
|
||||||
- Pretty printing in table format to stdout
|
|
||||||
|
|
||||||
## How to install
|
|
||||||
|
|
||||||
You can install json2csv as a dependency using NPM.
|
|
||||||
Requires **Node v10** or higher.
|
|
||||||
|
|
||||||
```sh
|
|
||||||
# Global so it can be called from anywhere
|
|
||||||
$ npm install -g json2csv
|
|
||||||
# or as a dependency of a project
|
|
||||||
$ npm install json2csv --save
|
|
||||||
```
|
|
||||||
|
|
||||||
Also, if you are loading json2csv directly to the browser you can pull it directly from the CDN.
|
|
||||||
|
|
||||||
```html
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/json2csv"></script>
|
|
||||||
```
|
|
||||||
|
|
||||||
By default, the above script will get the latest release of json2csv. You can also specify a specific version:
|
|
||||||
|
|
||||||
```html
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/json2csv@4.2.1"></script>
|
|
||||||
```
|
|
||||||
|
|
||||||
## Command Line Interface
|
|
||||||
|
|
||||||
`json2csv` can be called from the command line if installed globally (using the `-g` flag).
|
|
||||||
|
|
||||||
```bash
|
|
||||||
Usage: json2csv [options]
|
|
||||||
|
|
||||||
Options:
|
|
||||||
-V, --version output the version number
|
|
||||||
-i, --input <input> Path and name of the incoming json file. Defaults to stdin.
|
|
||||||
-o, --output <output> Path and name of the resulting csv file. Defaults to stdout.
|
|
||||||
-c, --config <path> Specify a file with a valid JSON configuration.
|
|
||||||
-n, --ndjson Treat the input as NewLine-Delimited JSON.
|
|
||||||
-s, --no-streaming Process the whole JSON array in memory instead of doing it line by line.
|
|
||||||
-f, --fields <fields> List of fields to process. Defaults to field auto-detection.
|
|
||||||
-v, --default-value <defaultValue> Default value to use for missing fields.
|
|
||||||
-q, --quote <quote> Character(s) to use as quote mark. Defaults to '"'.
|
|
||||||
-Q, --escaped-quote <escapedQuote> Character(s) to use as a escaped quote. Defaults to a double `quote`, '""'.
|
|
||||||
-d, --delimiter <delimiter> Character(s) to use as delimiter. Defaults to ','. (default: ",")
|
|
||||||
-e, --eol <eol> Character(s) to use as End-of-Line for separating rows. Defaults to '\n'. (default: "\n")
|
|
||||||
-E, --excel-strings Wraps string data to force Excel to interpret it as string even if it contains a number.
|
|
||||||
-H, --no-header Disable the column name header.
|
|
||||||
-a, --include-empty-rows Includes empty rows in the resulting CSV output.
|
|
||||||
-b, --with-bom Includes BOM character at the beginning of the CSV.
|
|
||||||
-p, --pretty Print output as a pretty table. Use only when printing to console.
|
|
||||||
--unwind [paths] Creates multiple rows from a single JSON document similar to MongoDB unwind.
|
|
||||||
--unwind-blank When unwinding, blank out instead of repeating data. Defaults to false. (default: false)
|
|
||||||
--flatten-objects Flatten nested objects. Defaults to false. (default: false)
|
|
||||||
--flatten-arrays Flatten nested arrays. Defaults to false. (default: false)
|
|
||||||
--flatten-separator <separator> Flattened keys separator. Defaults to '.'. (default: ".")
|
|
||||||
-h, --help output usage information
|
|
||||||
```
|
|
||||||
|
|
||||||
If no input `-i` is specified the result is expected from to the console standard input.
|
|
||||||
If no output `-o` is specified the result is printed to the console standard output.
|
|
||||||
If no fields `-f` or config `-c` are passed the fields of the first element are used since json2csv CLI process the items one at a time. You can use the `--no-streaming` flag to load the entire JSON in memory and get all the headers. However, keep in mind that this is slower and requires much more memory.
|
|
||||||
Use `-p` to show the result as a table in the console.
|
|
||||||
|
|
||||||
Any option passed through the config file `-c` will be overriden if a specific flag is passed as well. For example, the fields option of the config will be overriden if the fields flag `-f` is used.
|
|
||||||
|
|
||||||
### CLI examples
|
|
||||||
|
|
||||||
All examples use this example [input file](https://github.com/zemirco/json2csv/blob/master/test/fixtures/json/default.json).
|
|
||||||
|
|
||||||
#### Input file and specify fields
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ json2csv -i input.json -f carModel,price,color
|
|
||||||
carModel,price,color
|
|
||||||
"Audi",10000,"blue"
|
|
||||||
"BMW",15000,"red"
|
|
||||||
"Mercedes",20000,"yellow"
|
|
||||||
"Porsche",30000,"green"
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Input file, specify fields and use pretty logging
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ json2csv -i input.json -f carModel,price,color -p
|
|
||||||
```
|
|
||||||
|
|
||||||
![Screenshot](https://s3.amazonaws.com/zeMirco/github/json2csv/json2csv-pretty.png)
|
|
||||||
|
|
||||||
#### Generating CSV containing only specific fields
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ json2csv -i input.json -f carModel,price,color -o out.csv
|
|
||||||
$ cat out.csv
|
|
||||||
carModel,price,color
|
|
||||||
"Audi",10000,"blue"
|
|
||||||
"BMW",15000,"red"
|
|
||||||
"Mercedes",20000,"yellow"
|
|
||||||
"Porsche",30000,"green"
|
|
||||||
```
|
|
||||||
|
|
||||||
Same result will be obtained passing the fields config as a file.
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ json2csv -i input.json -c fieldsConfig.json -o out.csv
|
|
||||||
```
|
|
||||||
|
|
||||||
where the file `fieldsConfig.json` contains
|
|
||||||
|
|
||||||
```json
|
|
||||||
[
|
|
||||||
"carModel",
|
|
||||||
"price",
|
|
||||||
"color"
|
|
||||||
]
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Read input from stdin
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ json2csv -f price
|
|
||||||
[{"price":1000},{"price":2000}]
|
|
||||||
```
|
|
||||||
|
|
||||||
Hit <kbd>Enter</kbd> and afterwards <kbd>CTRL</kbd> + <kbd>D</kbd> to end reading from stdin. The terminal should show
|
|
||||||
|
|
||||||
```
|
|
||||||
price
|
|
||||||
1000
|
|
||||||
2000
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Appending to existing CSV
|
|
||||||
|
|
||||||
Sometimes you want to add some additional rows with the same columns.
|
|
||||||
This is how you can do that.
|
|
||||||
|
|
||||||
```sh
|
|
||||||
# Initial creation of csv with headings
|
|
||||||
$ json2csv -i test.json -f name,version > test.csv
|
|
||||||
# Append additional rows
|
|
||||||
$ json2csv -i test.json -f name,version --no-header >> test.csv
|
|
||||||
```
|
|
||||||
|
|
||||||
## Javascript module
|
|
||||||
|
|
||||||
`json2csv` can also be use programatically from you javascript codebase.
|
|
||||||
|
|
||||||
### Available Options
|
|
||||||
|
|
||||||
The programatic APIs take a configuration object very equivalent to the CLI options.
|
|
||||||
|
|
||||||
- `fields` - Array of Objects/Strings. Defaults to toplevel JSON attributes. See example below.
|
|
||||||
- `ndjson` - Only effective on the streaming API. Indicates that data coming through the stream is NDJSON.
|
|
||||||
- `transforms` - Array of transforms to be applied to each data item. A transform is simply a function that receives a data item and returns the transformed item.
|
|
||||||
- `defaultValue` - String, default value to use when missing data. Defaults to `<empty>` if not specified. (Overridden by `fields[].default`)
|
|
||||||
- `quote` - String, quote around cell values and column names. Defaults to `"` if not specified.
|
|
||||||
- `escapedQuote` - String, the value to replace escaped quotes in strings. Defaults to 2x`quotes` (for example `""`) if not specified.
|
|
||||||
- `delimiter` - String, delimiter of columns. Defaults to `,` if not specified.
|
|
||||||
- `eol` - String, overrides the default OS line ending (i.e. `\n` on Unix and `\r\n` on Windows).
|
|
||||||
- `excelStrings` - Boolean, converts string data into normalized Excel style data.
|
|
||||||
- `header` - Boolean, determines whether or not CSV file will contain a title column. Defaults to `true` if not specified.
|
|
||||||
- `includeEmptyRows` - Boolean, includes empty rows. Defaults to `false`.
|
|
||||||
- `withBOM` - Boolean, with BOM character. Defaults to `false`.
|
|
||||||
|
|
||||||
### json2csv parser (Synchronous API)
|
|
||||||
|
|
||||||
`json2csv` can also be used programatically as a synchronous converter using its `parse` method.
|
|
||||||
```js
|
|
||||||
const { Parser } = require('json2csv');
|
|
||||||
|
|
||||||
const fields = ['field1', 'field2', 'field3'];
|
|
||||||
const opts = { fields };
|
|
||||||
|
|
||||||
try {
|
|
||||||
const parser = new Parser(opts);
|
|
||||||
const csv = parser.parse(myData);
|
|
||||||
console.log(csv);
|
|
||||||
} catch (err) {
|
|
||||||
console.error(err);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
you can also use the convenience method `parse`
|
|
||||||
|
|
||||||
```js
|
|
||||||
const { parse } = require('json2csv');
|
|
||||||
|
|
||||||
const fields = ['field1', 'field2', 'field3'];
|
|
||||||
const opts = { fields };
|
|
||||||
|
|
||||||
try {
|
|
||||||
const csv = parse(myData, opts);
|
|
||||||
console.log(csv);
|
|
||||||
} catch (err) {
|
|
||||||
console.error(err);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Both of the methods above load the entire JSON in memory and do the whole processing in-memory while blocking Javascript event loop. For that reason is rarely a good reason to use it until your data is very small or your application doesn't do anything else.
|
|
||||||
|
|
||||||
### json2csv async parser (Streaming API)
|
|
||||||
|
|
||||||
The synchronous API has the downside of loading the entire JSON array in memory and blocking javascript's event loop while processing the data. This means that your server won't be able to process more request or your UI will become irresponsive while data is being processed. For those reasons, is rarely a good reason to use it unless your data is very small or your application doesn't do anything else.
|
|
||||||
|
|
||||||
The async parser process the data as a non-blocking stream. This approach ensures a consistent memory footprint and avoid blocking javascript's event loop. Thus, it's better suited for large datasets or system with high concurrency.
|
|
||||||
|
|
||||||
One very important difference between the asynchronous and the synchronous APIs is that using the asynchronous API json objects are processed one by one. In practice, this means that only the fields in the first object of the array are automatically detected and other fields are just ignored. To avoid this, it's advisable to ensure that all the objects contain exactly the same fields or provide the list of fields using the `fields` option.
|
|
||||||
|
|
||||||
The async API uses takes a second options arguments that's directly passed to the underlying streams and accept the same options as the standard [Node.js streams](https://nodejs.org/api/stream.html#stream_new_stream_duplex_options).
|
|
||||||
|
|
||||||
Instances of `AsyncParser` expose three objects:
|
|
||||||
* *input:* Which allows to push more data
|
|
||||||
* *processor:* A readable string representing the whole data processing. You can listen to all the standard events of Node.js streams.
|
|
||||||
* *transform:* The json2csv transform. See bellow for more details.
|
|
||||||
|
|
||||||
```js
|
|
||||||
const { AsyncParser } = require('json2csv');
|
|
||||||
|
|
||||||
const fields = ['field1', 'field2', 'field3'];
|
|
||||||
const opts = { fields };
|
|
||||||
const transformOpts = { highWaterMark: 8192 };
|
|
||||||
|
|
||||||
const asyncParser = new AsyncParser(opts, transformOpts);
|
|
||||||
|
|
||||||
let csv = '';
|
|
||||||
asyncParser.processor
|
|
||||||
.on('data', chunk => (csv += chunk.toString()))
|
|
||||||
.on('end', () => console.log(csv))
|
|
||||||
.on('error', err => console.error(err));
|
|
||||||
|
|
||||||
// You can also listen for events on the conversion and see how the header or the lines are coming out.
|
|
||||||
asyncParser.transform
|
|
||||||
.on('header', header => console.log(header))
|
|
||||||
.on('line', line => console.log(line))
|
|
||||||
.on('error', err => console.log(err));
|
|
||||||
|
|
||||||
asyncParser.input.push(data); // This data might come from an HTTP request, etc.
|
|
||||||
asyncParser.input.push(null); // Sending `null` to a stream signal that no more data is expected and ends it.
|
|
||||||
```
|
|
||||||
|
|
||||||
`AsyncParser` also exposes some convenience methods:
|
|
||||||
* `fromInput` allows you to set the input stream.
|
|
||||||
* `throughTransform` allows you to add transforms to the stream.
|
|
||||||
* `toOutput` allows you to set the output stream.
|
|
||||||
* `promise` returns a promise that resolves when the stream ends or errors. Takes a boolean parameter to indicate if the resulting CSV should be kept in-memory and be resolved by the promise.
|
|
||||||
|
|
||||||
```js
|
|
||||||
const { createReadStream, createWriteStream } = require('fs');
|
|
||||||
const { AsyncParser } = require('json2csv');
|
|
||||||
|
|
||||||
const fields = ['field1', 'field2', 'field3'];
|
|
||||||
const opts = { fields };
|
|
||||||
const transformOpts = { highWaterMark: 8192 };
|
|
||||||
|
|
||||||
// Using the promise API
|
|
||||||
const input = createReadStream(inputPath, { encoding: 'utf8' });
|
|
||||||
const asyncParser = new JSON2CSVAsyncParser(opts, transformOpts);
|
|
||||||
const parsingProcessor = asyncParser.fromInput(input);
|
|
||||||
|
|
||||||
parsingProcessor.promise()
|
|
||||||
.then(csv => console.log(csv))
|
|
||||||
.catch(err => console.error(err));
|
|
||||||
|
|
||||||
// Using the promise API just to know when the process finnish
|
|
||||||
// but not actually load the CSV in memory
|
|
||||||
const input = createReadStream(inputPath, { encoding: 'utf8' });
|
|
||||||
const output = createWriteStream(outputPath, { encoding: 'utf8' });
|
|
||||||
const asyncParser = new JSON2CSVAsyncParser(opts, transformOpts);
|
|
||||||
const parsingProcessor = asyncParser.fromInput(input).toOutput(output);
|
|
||||||
|
|
||||||
parsingProcessor.promise(false).catch(err => console.error(err));
|
|
||||||
```
|
|
||||||
|
|
||||||
you can also use the convenience method `parseAsync` which accept both JSON arrays/objects and readable streams and returns a promise.
|
|
||||||
|
|
||||||
```js
|
|
||||||
const { parseAsync } = require('json2csv');
|
|
||||||
|
|
||||||
const fields = ['field1', 'field2', 'field3'];
|
|
||||||
const opts = { fields };
|
|
||||||
|
|
||||||
parseAsync(myData, opts)
|
|
||||||
.then(csv => console.log(csv))
|
|
||||||
.catch(err => console.error(err));
|
|
||||||
```
|
|
||||||
|
|
||||||
### json2csv transform (Streaming API)
|
|
||||||
|
|
||||||
json2csv also exposes the raw stream transform so you can pipe your json content into it. This is the same Transform that `AsyncParser` uses under the hood.
|
|
||||||
|
|
||||||
```js
|
|
||||||
const { createReadStream, createWriteStream } = require('fs');
|
|
||||||
const { Transform } = require('json2csv');
|
|
||||||
|
|
||||||
const fields = ['field1', 'field2', 'field3'];
|
|
||||||
const opts = { fields };
|
|
||||||
const transformOpts = { highWaterMark: 16384, encoding: 'utf-8' };
|
|
||||||
|
|
||||||
const input = createReadStream(inputPath, { encoding: 'utf8' });
|
|
||||||
const output = createWriteStream(outputPath, { encoding: 'utf8' });
|
|
||||||
const json2csv = new Transform(opts, transformOpts);
|
|
||||||
|
|
||||||
const processor = input.pipe(json2csv).pipe(output);
|
|
||||||
|
|
||||||
// You can also listen for events on the conversion and see how the header or the lines are coming out.
|
|
||||||
json2csv
|
|
||||||
.on('header', header => console.log(header))
|
|
||||||
.on('line', line => console.log(line))
|
|
||||||
.on('error', err => console.log(err));
|
|
||||||
```
|
|
||||||
|
|
||||||
The stream API can also work on object mode. This is useful when you have an input stream in object mode or if you are getting JSON objects one by one and want to convert them to CSV as they come.
|
|
||||||
|
|
||||||
```js
|
|
||||||
const { Transform } = require("json2csv");
|
|
||||||
const { Readable } = require('stream');
|
|
||||||
|
|
||||||
const input = new Readable({ objectMode: true });
|
|
||||||
input._read = () => {};
|
|
||||||
// myObjectEmitter is just a fake example representing anything that emit objects.
|
|
||||||
myObjectEmitter.on('object', obj => input.push(obj));
|
|
||||||
// Pushing a null close the stream
|
|
||||||
myObjectEmitter.end(() => input.push(null));
|
|
||||||
|
|
||||||
const output = process.stdout;
|
|
||||||
|
|
||||||
const opts = {};
|
|
||||||
const transformOpts = { objectMode: true };
|
|
||||||
|
|
||||||
const json2csv = new Transform(opts, transformOpts);
|
|
||||||
const processor = input.pipe(json2csv).pipe(output);
|
|
||||||
```
|
|
||||||
|
|
||||||
### Data transforms
|
|
||||||
|
|
||||||
json2csv supports data transforms. A transform is simply a function that receives a data item and returns the transformed item.
|
|
||||||
|
|
||||||
|
|
||||||
#### Custom transforms
|
|
||||||
|
|
||||||
```js
|
|
||||||
function (item) {
|
|
||||||
// apply tranformations or create new object
|
|
||||||
return transformedItem;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
or using ES6
|
|
||||||
```js
|
|
||||||
(item) => {
|
|
||||||
// apply tranformations or create new object
|
|
||||||
return transformedItem;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
For example, let's add a line counter to our CSV, capitalize the car field and change the price to be in Ks (1000s).
|
|
||||||
```js
|
|
||||||
let counter = 1;
|
|
||||||
(item) => ({ counter: counter++, ...item, car: item.car.toUpperCase(), price: item.price / 1000 });
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Built-in transforms
|
|
||||||
|
|
||||||
There is a number of built-in transform provider by the library.
|
|
||||||
|
|
||||||
```js
|
|
||||||
const { transforms: { unwind, flatten } } = require('json2csv');
|
|
||||||
```
|
|
||||||
|
|
||||||
##### Unwind
|
|
||||||
|
|
||||||
The unwind transform deconstructs an array field from the input item to output a row for each element. Is's similar to MongoDB's $unwind aggregation.
|
|
||||||
|
|
||||||
The transform needs to be instantiated and takes an options object as arguments containing:
|
|
||||||
- `paths` - Array of String, list the paths to the fields to be unwound. It's mandatory and should not be empty.
|
|
||||||
- `blankOut` - Boolean, unwind using blank values instead of repeating data. Defaults to `false`.
|
|
||||||
|
|
||||||
```js
|
|
||||||
// Default
|
|
||||||
unwind({ paths: ['fieldToUnwind'] });
|
|
||||||
|
|
||||||
// Blanking out repeated data
|
|
||||||
unwind({ paths: ['fieldToUnwind'], blankOut: true });
|
|
||||||
```
|
|
||||||
|
|
||||||
##### Flatten
|
|
||||||
Flatten nested javascript objects into a single level object.
|
|
||||||
|
|
||||||
The transform needs to be instantiated and takes an options object as arguments containing:
|
|
||||||
- `objects` - Boolean, whether to flatten JSON objects or not. Defaults to `true`.
|
|
||||||
- `arrays`- Boolean, whether to flatten Arrays or not. Defaults to `false`.
|
|
||||||
- `separator` - String, separator to use between nested JSON keys when flattening a field. Defaults to `.`.
|
|
||||||
|
|
||||||
```js
|
|
||||||
// Default
|
|
||||||
flatten();
|
|
||||||
|
|
||||||
// Custom separator '__'
|
|
||||||
flatten({ separator: '_' });
|
|
||||||
|
|
||||||
// Flatten only arrays
|
|
||||||
flatten({ objects: false, arrays: true });
|
|
||||||
```
|
|
||||||
|
|
||||||
### Javascript module examples
|
|
||||||
|
|
||||||
#### Example `fields` option
|
|
||||||
```js
|
|
||||||
{
|
|
||||||
fields: [
|
|
||||||
// Supports pathname -> pathvalue
|
|
||||||
'simplepath', // equivalent to {value:'simplepath'}
|
|
||||||
'path.to.value' // also equivalent to {value:'path.to.value'}
|
|
||||||
|
|
||||||
// Supports label -> simple path
|
|
||||||
{
|
|
||||||
label: 'some label', // Optional, column will be labeled 'path.to.something' if not defined)
|
|
||||||
value: 'path.to.something', // data.path.to.something
|
|
||||||
default: 'NULL' // default if value is not found (Optional, overrides `defaultValue` for column)
|
|
||||||
},
|
|
||||||
|
|
||||||
// Supports label -> derived value
|
|
||||||
{
|
|
||||||
label: 'some label', // Optional, column will be labeled with the function name or empty if the function is anonymous
|
|
||||||
value: (row, field) => row[field.label].toLowerCase() ||field.default,
|
|
||||||
default: 'NULL' // default if value function returns null or undefined
|
|
||||||
},
|
|
||||||
|
|
||||||
// Supports label -> derived value
|
|
||||||
{
|
|
||||||
value: (row) => row.arrayField.join(',')
|
|
||||||
},
|
|
||||||
|
|
||||||
// Supports label -> derived value
|
|
||||||
{
|
|
||||||
value: (row) => `"${row.arrayField.join(',')}"`
|
|
||||||
},
|
|
||||||
]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Example 1
|
|
||||||
|
|
||||||
```js
|
|
||||||
const { Parser } = require('json2csv');
|
|
||||||
|
|
||||||
const myCars = [
|
|
||||||
{
|
|
||||||
"car": "Audi",
|
|
||||||
"price": 40000,
|
|
||||||
"color": "blue"
|
|
||||||
}, {
|
|
||||||
"car": "BMW",
|
|
||||||
"price": 35000,
|
|
||||||
"color": "black"
|
|
||||||
}, {
|
|
||||||
"car": "Porsche",
|
|
||||||
"price": 60000,
|
|
||||||
"color": "green"
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
const json2csvParser = new Parser();
|
|
||||||
const csv = json2csvParser.parse(myCars);
|
|
||||||
|
|
||||||
console.log(csv);
|
|
||||||
```
|
|
||||||
|
|
||||||
will output to console
|
|
||||||
|
|
||||||
```
|
|
||||||
"car", "price", "color"
|
|
||||||
"Audi", 40000, "blue"
|
|
||||||
"BMW", 35000, "black"
|
|
||||||
"Porsche", 60000, "green"
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Example 2
|
|
||||||
|
|
||||||
You can choose which fields to include in the CSV.
|
|
||||||
|
|
||||||
```js
|
|
||||||
const { Parser } = require('json2csv');
|
|
||||||
const fields = ['car', 'color'];
|
|
||||||
|
|
||||||
const json2csvParser = new Parser({ fields });
|
|
||||||
const csv = json2csvParser.parse(myCars);
|
|
||||||
|
|
||||||
console.log(csv);
|
|
||||||
```
|
|
||||||
|
|
||||||
will output to console
|
|
||||||
|
|
||||||
```
|
|
||||||
"car", "color"
|
|
||||||
"Audi", "blue"
|
|
||||||
"BMW", "black"
|
|
||||||
"Porsche", "green"
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Example 3
|
|
||||||
|
|
||||||
You can choose custom column names for the exported file.
|
|
||||||
|
|
||||||
```js
|
|
||||||
const { Parser } = require('json2csv');
|
|
||||||
|
|
||||||
const fields = [{
|
|
||||||
label: 'Car Name',
|
|
||||||
value: 'car'
|
|
||||||
},{
|
|
||||||
label: 'Price USD',
|
|
||||||
value: 'price'
|
|
||||||
}];
|
|
||||||
|
|
||||||
const json2csvParser = new Parser({ fields });
|
|
||||||
const csv = json2csvParser.parse(myCars);
|
|
||||||
|
|
||||||
console.log(csv);
|
|
||||||
```
|
|
||||||
|
|
||||||
will output to console
|
|
||||||
|
|
||||||
```
|
|
||||||
"Car Name", "Price USD"
|
|
||||||
"Audi", 40000
|
|
||||||
"BMW", 35000
|
|
||||||
"Porsche", 60000
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Example 4
|
|
||||||
|
|
||||||
You can also specify nested properties using dot notation.
|
|
||||||
|
|
||||||
```js
|
|
||||||
const { Parser } = require('json2csv');
|
|
||||||
|
|
||||||
const myCars = [
|
|
||||||
{
|
|
||||||
"car": { "make": "Audi", "model": "A3" },
|
|
||||||
"price": 40000,
|
|
||||||
"color": "blue"
|
|
||||||
}, {
|
|
||||||
"car": { "make": "BMW", "model": "F20" },
|
|
||||||
"price": 35000,
|
|
||||||
"color": "black"
|
|
||||||
}, {
|
|
||||||
"car": { "make": "Porsche", "model": "9PA AF1" },
|
|
||||||
"price": 60000,
|
|
||||||
"color": "green"
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
const fields = ['car.make', 'car.model', 'price', 'color'];
|
|
||||||
|
|
||||||
const json2csvParser = new Parser({ fields });
|
|
||||||
const csv = json2csvParser.parse(myCars);
|
|
||||||
|
|
||||||
console.log(csv);
|
|
||||||
```
|
|
||||||
|
|
||||||
will output to console
|
|
||||||
|
|
||||||
```
|
|
||||||
"car.make", "car.model", "price", "color"
|
|
||||||
"Audi", "A3", 40000, "blue"
|
|
||||||
"BMW", "F20", 35000, "black"
|
|
||||||
"Porsche", "9PA AF1", 60000, "green"
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Example 5
|
|
||||||
|
|
||||||
Use a custom delimiter to create tsv files using the delimiter option:
|
|
||||||
|
|
||||||
```js
|
|
||||||
const { Parser } = require('json2csv');
|
|
||||||
|
|
||||||
const json2csvParser = new Parser({ delimiter: '\t' });
|
|
||||||
const tsv = json2csvParser.parse(myCars);
|
|
||||||
|
|
||||||
console.log(tsv);
|
|
||||||
```
|
|
||||||
|
|
||||||
will output to console
|
|
||||||
|
|
||||||
```
|
|
||||||
"car" "price" "color"
|
|
||||||
"Audi" 10000 "blue"
|
|
||||||
"BMW" 15000 "red"
|
|
||||||
"Mercedes" 20000 "yellow"
|
|
||||||
"Porsche" 30000 "green"
|
|
||||||
```
|
|
||||||
|
|
||||||
If no delimiter is specified, the default `,` is used.
|
|
||||||
|
|
||||||
#### Example 6
|
|
||||||
|
|
||||||
You can choose custom quotation marks.
|
|
||||||
|
|
||||||
```js
|
|
||||||
const { Parser } = require('json2csv');
|
|
||||||
|
|
||||||
const json2csvParser = new Parser({ quote: '' });
|
|
||||||
const csv = json2csvParser.parse(myCars);
|
|
||||||
|
|
||||||
console.log(csv);
|
|
||||||
```
|
|
||||||
|
|
||||||
will output to console
|
|
||||||
|
|
||||||
```
|
|
||||||
car, price, color
|
|
||||||
Audi, 40000, blue
|
|
||||||
BMW", 35000, black
|
|
||||||
Porsche", 60000, green
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Example 7
|
|
||||||
|
|
||||||
You can unwind arrays similar to MongoDB's $unwind operation using the `unwind` transform.
|
|
||||||
|
|
||||||
```js
|
|
||||||
const { Parser, transforms: { unwind } } = require('json2csv');
|
|
||||||
|
|
||||||
const myCars = [
|
|
||||||
{
|
|
||||||
"carModel": "Audi",
|
|
||||||
"price": 0,
|
|
||||||
"colors": ["blue","green","yellow"]
|
|
||||||
}, {
|
|
||||||
"carModel": "BMW",
|
|
||||||
"price": 15000,
|
|
||||||
"colors": ["red","blue"]
|
|
||||||
}, {
|
|
||||||
"carModel": "Mercedes",
|
|
||||||
"price": 20000,
|
|
||||||
"colors": "yellow"
|
|
||||||
}, {
|
|
||||||
"carModel": "Porsche",
|
|
||||||
"price": 30000,
|
|
||||||
"colors": ["green","teal","aqua"]
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
const fields = ['carModel', 'price', 'colors'];
|
|
||||||
const transforms = [unwind({ paths: ['colors'] })];
|
|
||||||
|
|
||||||
const json2csvParser = new Parser({ fields, transforms });
|
|
||||||
const csv = json2csvParser.parse(myCars);
|
|
||||||
|
|
||||||
console.log(csv);
|
|
||||||
```
|
|
||||||
|
|
||||||
will output to console
|
|
||||||
|
|
||||||
```
|
|
||||||
"carModel","price","colors"
|
|
||||||
"Audi",0,"blue"
|
|
||||||
"Audi",0,"green"
|
|
||||||
"Audi",0,"yellow"
|
|
||||||
"BMW",15000,"red"
|
|
||||||
"BMW",15000,"blue"
|
|
||||||
"Mercedes",20000,"yellow"
|
|
||||||
"Porsche",30000,"green"
|
|
||||||
"Porsche",30000,"teal"
|
|
||||||
"Porsche",30000,"aqua"
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Example 8
|
|
||||||
|
|
||||||
You can also unwind arrays multiple times or with nested objects.
|
|
||||||
|
|
||||||
```js
|
|
||||||
const { Parser, transforms: { unwind } } = require('json2csv');
|
|
||||||
|
|
||||||
const myCars = [
|
|
||||||
{
|
|
||||||
"carModel": "BMW",
|
|
||||||
"price": 15000,
|
|
||||||
"items": [
|
|
||||||
{
|
|
||||||
"name": "airbag",
|
|
||||||
"color": "white"
|
|
||||||
}, {
|
|
||||||
"name": "dashboard",
|
|
||||||
"color": "black"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}, {
|
|
||||||
"carModel": "Porsche",
|
|
||||||
"price": 30000,
|
|
||||||
"items": [
|
|
||||||
{
|
|
||||||
"name": "airbag",
|
|
||||||
"items": [
|
|
||||||
{
|
|
||||||
"position": "left",
|
|
||||||
"color": "white"
|
|
||||||
}, {
|
|
||||||
"position": "right",
|
|
||||||
"color": "gray"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}, {
|
|
||||||
"name": "dashboard",
|
|
||||||
"items": [
|
|
||||||
{
|
|
||||||
"position": "left",
|
|
||||||
"color": "gray"
|
|
||||||
}, {
|
|
||||||
"position": "right",
|
|
||||||
"color": "black"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
const fields = ['carModel', 'price', 'items.name', 'items.color', 'items.items.position', 'items.items.color'];
|
|
||||||
const transforms = [unwind({ paths: ['items', 'items.items'] })];
|
|
||||||
const json2csvParser = new Parser({ fields, transforms });
|
|
||||||
const csv = json2csvParser.parse(myCars);
|
|
||||||
|
|
||||||
console.log(csv);
|
|
||||||
```
|
|
||||||
|
|
||||||
will output to console
|
|
||||||
|
|
||||||
```
|
|
||||||
"carModel","price","items.name","items.color","items.items.position","items.items.color"
|
|
||||||
"BMW",15000,"airbag","white",,
|
|
||||||
"BMW",15000,"dashboard","black",,
|
|
||||||
"Porsche",30000,"airbag",,"left","white"
|
|
||||||
"Porsche",30000,"airbag",,"right","gray"
|
|
||||||
"Porsche",30000,"dashboard",,"left","gray"
|
|
||||||
"Porsche",30000,"dashboard",,"right","black"
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Example 9
|
|
||||||
|
|
||||||
You can also unwind arrays blanking the repeated fields.
|
|
||||||
|
|
||||||
```js
|
|
||||||
const { Parser, transforms: { unwind } } = require('json2csv');
|
|
||||||
|
|
||||||
const myCars = [
|
|
||||||
{
|
|
||||||
"carModel": "BMW",
|
|
||||||
"price": 15000,
|
|
||||||
"items": [
|
|
||||||
{
|
|
||||||
"name": "airbag",
|
|
||||||
"color": "white"
|
|
||||||
}, {
|
|
||||||
"name": "dashboard",
|
|
||||||
"color": "black"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}, {
|
|
||||||
"carModel": "Porsche",
|
|
||||||
"price": 30000,
|
|
||||||
"items": [
|
|
||||||
{
|
|
||||||
"name": "airbag",
|
|
||||||
"items": [
|
|
||||||
{
|
|
||||||
"position": "left",
|
|
||||||
"color": "white"
|
|
||||||
}, {
|
|
||||||
"position": "right",
|
|
||||||
"color": "gray"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}, {
|
|
||||||
"name": "dashboard",
|
|
||||||
"items": [
|
|
||||||
{
|
|
||||||
"position": "left",
|
|
||||||
"color": "gray"
|
|
||||||
}, {
|
|
||||||
"position": "right",
|
|
||||||
"color": "black"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
const fields = ['carModel', 'price', 'items.name', 'items.color', 'items.items.position', 'items.items.color'];
|
|
||||||
const transforms = [unwind({ paths: ['items', 'items.items'], blankOut: true })];
|
|
||||||
|
|
||||||
const json2csvParser = new Parser({ fields, transforms });
|
|
||||||
const csv = json2csvParser.parse(myCars);
|
|
||||||
|
|
||||||
console.log(csv);
|
|
||||||
```
|
|
||||||
|
|
||||||
will output to console
|
|
||||||
|
|
||||||
```
|
|
||||||
"carModel","price","items.name","items.color","items.items.position","items.items.color"
|
|
||||||
"BMW",15000,"airbag","white",,
|
|
||||||
,,"dashboard","black",,
|
|
||||||
"Porsche",30000,"airbag",,"left","white"
|
|
||||||
,,,,"right","gray"
|
|
||||||
,,"dashboard",,"left","gray"
|
|
||||||
,,,,"right","black"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Migrations
|
|
||||||
|
|
||||||
#### Migrating from 3.X to 4.X
|
|
||||||
|
|
||||||
What in 3.X used to be
|
|
||||||
```js
|
|
||||||
const json2csv = require('json2csv');
|
|
||||||
const csv = json2csv({ data: myData, fields: myFields, unwindPath: paths, ... });
|
|
||||||
```
|
|
||||||
|
|
||||||
should be replaced by
|
|
||||||
```js
|
|
||||||
const { Parser } = require('json2csv');
|
|
||||||
const json2csvParser = new Parser({ fields: myFields, unwind: paths, ... });
|
|
||||||
const csv = json2csvParser.parse(myData);
|
|
||||||
```
|
|
||||||
|
|
||||||
or the convenience method
|
|
||||||
```js
|
|
||||||
const json2csv = require('json2csv');
|
|
||||||
const csv = json2csv.parse(myData, { fields: myFields, unwind: paths, ... });
|
|
||||||
```
|
|
||||||
|
|
||||||
Please note that many of the configuration parameters have been slightly renamed. Please check one by one that all your parameters are correct.
|
|
||||||
You can se the documentation for json2csv 3.11.5 [here](https://github.com/zemirco/json2csv/blob/v3.11.5/README.md).
|
|
||||||
|
|
||||||
#### Migrating from 4.X to 5.X
|
|
||||||
|
|
||||||
In the CLI, the config file option, `-c`, used to be a list of fields and now it's expected to be a full configuration object.
|
|
||||||
|
|
||||||
The `stringify` option hass been removed.
|
|
||||||
|
|
||||||
`doubleQuote` has been renamed to `escapedQuote`.
|
|
||||||
|
|
||||||
The `unwind` and `flatten` -related options has been moved to their own transforms.
|
|
||||||
|
|
||||||
What used to be
|
|
||||||
```js
|
|
||||||
const { Parser } = require('json2csv');
|
|
||||||
const json2csvParser = new Parser({ unwind: paths, unwindBlank: true, flatten: true, flattenSeparator: '__' });
|
|
||||||
const csv = json2csvParser.parse(myData);
|
|
||||||
```
|
|
||||||
|
|
||||||
should be replaced by
|
|
||||||
```js
|
|
||||||
const { Parser, transforms: { unwind, flatten } } = require('json2csv');
|
|
||||||
const json2csvParser = new Parser({ transforms: [unwind({ paths, blankOut: true }), flatten('__')] });
|
|
||||||
const csv = json2csvParser.parse(myData);
|
|
||||||
```
|
|
||||||
|
|
||||||
You can se the documentation for json2csv v4.X.X [here](https://github.com/zemirco/json2csv/blob/v4/README.md).
|
|
||||||
|
|
||||||
## Known Gotchas
|
|
||||||
|
|
||||||
### Excel support
|
|
||||||
|
|
||||||
#### Avoiding excel autoformatting
|
|
||||||
|
|
||||||
Excel tries to automatically detect the format of every field (number, date, string, etc.) regardless of whether the field is quoted or not.
|
|
||||||
|
|
||||||
This might produce few undesired effects with, for example, serial numbers:
|
|
||||||
- Large numbers are displayed using scientific notation
|
|
||||||
- Leading zeros are stripped.
|
|
||||||
|
|
||||||
Enabling the `excelString` option produces an Excel-specific CSV file that forces Excel to interpret string fields as strings. Please note that the CSV will look incorrect if viewing it somewhere else than Excel.
|
|
||||||
|
|
||||||
#### Avoiding CSV injection
|
|
||||||
|
|
||||||
As part of Excel automatically format detection, fields regarded as formulas (starting with `=`, `+`, `-` or `@`) are interpreted regardless of whether the field is quoted or not, creating a security risk (see [CSV Injection](https://www.owasp.org/index.php/CSV_Injection).
|
|
||||||
|
|
||||||
This issue has nothing to do with the CSV format, since CSV knows nothing about formulas, but with how Excel parses CSV files.
|
|
||||||
|
|
||||||
Enabling the `excelString` option produces an Excel-specific CSV file that forces Excel to interpret string fields as strings. Please note that the CSV will look incorrect if viewing it somewhere else than Excel.
|
|
||||||
|
|
||||||
#### Preserving new lines
|
|
||||||
|
|
||||||
Excel only recognizes `\r\n` as valid new line inside a cell.
|
|
||||||
|
|
||||||
#### Unicode Support
|
|
||||||
|
|
||||||
Excel can display Unicode correctly (just setting the `withBOM` option to true). However, Excel can't save unicode so, if you perform any changes to the CSV and save it from Excel, the Unicode characters will not be displayed correctly.
|
|
||||||
|
|
||||||
|
|
||||||
### PowerShell escaping
|
|
||||||
|
|
||||||
PowerShell do some estrange double quote escaping escaping which results on each line of the CSV missing the first and last quote if outputting the result directly to stdout. Instead of that, it's advisable that you write the result directly to a file.
|
|
||||||
|
|
||||||
## Building
|
|
||||||
|
|
||||||
json2csv is packaged using `rollup`. You can generate the packages running:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
npm run build
|
|
||||||
```
|
|
||||||
which generates 3 files under the `dist folder`:
|
|
||||||
|
|
||||||
* `json2csv.umd.js` UMD module transpiled to ES5
|
|
||||||
* `json2csv.esm.js` ES5 module (import/export)
|
|
||||||
* `json2csv.cjs.js` CommonJS module
|
|
||||||
|
|
||||||
When you use packaging tools like webpack and such, they know which version to use depending on your configuration.
|
|
||||||
|
|
||||||
## Testing
|
|
||||||
|
|
||||||
Run the folowing command to check the code style.
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ npm run lint
|
|
||||||
```
|
|
||||||
|
|
||||||
Run the following command to run the tests and return coverage
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ npm run test-with-coverage
|
|
||||||
```
|
|
||||||
|
|
||||||
## Contributors
|
|
||||||
|
|
||||||
After you clone the repository you just need to install the required packages for development by runnning following command under json2csv dir.
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ npm install
|
|
||||||
```
|
|
||||||
|
|
||||||
Before making any pull request please ensure sure that your code is formatted, test are passing and test coverage haven't decreased. (See [Testing](#testing))
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
See [LICENSE.md].
|
|
||||||
|
|
||||||
[npm-badge]: https://badge.fury.io/js/json2csv.svg
|
|
||||||
[npm-badge-url]: http://badge.fury.io/js/json2csv
|
|
||||||
[travis-badge]: https://travis-ci.org/zemirco/json2csv.svg
|
|
||||||
[travis-badge-url]: https://travis-ci.org/zemirco/json2csv
|
|
||||||
[coveralls-badge]: https://coveralls.io/repos/zemirco/json2csv/badge.svg?branch=master
|
|
||||||
[coveralls-badge-url]: https://coveralls.io/r/zemirco/json2csv?branch=master
|
|
||||||
[CHANGELOG]: https://github.com/zemirco/json2csv/blob/master/CHANGELOG.md
|
|
||||||
[LICENSE.md]: https://github.com/zemirco/json2csv/blob/master/LICENSE.md
|
|
183
node_modules/json2csv/bin/json2csv.js
generated
vendored
183
node_modules/json2csv/bin/json2csv.js
generated
vendored
|
@ -1,183 +0,0 @@
|
||||||
#!/usr/bin/env node
|
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
const { promisify } = require('util');
|
|
||||||
const { createReadStream, createWriteStream, readFile: readFileOrig, writeFile: writeFileOrig } = require('fs');
|
|
||||||
const os = require('os');
|
|
||||||
const { isAbsolute, join } = require('path');
|
|
||||||
const program = require('commander');
|
|
||||||
const pkg = require('../package');
|
|
||||||
const json2csv = require('../lib/json2csv');
|
|
||||||
const parseNdJson = require('./utils/parseNdjson');
|
|
||||||
const TablePrinter = require('./utils/TablePrinter');
|
|
||||||
|
|
||||||
const readFile = promisify(readFileOrig);
|
|
||||||
const writeFile = promisify(writeFileOrig);
|
|
||||||
|
|
||||||
const { unwind, flatten } = json2csv.transforms;
|
|
||||||
const JSON2CSVParser = json2csv.Parser;
|
|
||||||
const Json2csvTransform = json2csv.Transform;
|
|
||||||
|
|
||||||
program
|
|
||||||
.version(pkg.version)
|
|
||||||
.option('-i, --input <input>', 'Path and name of the incoming json file. Defaults to stdin.')
|
|
||||||
.option('-o, --output <output>', 'Path and name of the resulting csv file. Defaults to stdout.')
|
|
||||||
.option('-c, --config <path>', 'Specify a file with a valid JSON configuration.')
|
|
||||||
.option('-n, --ndjson', 'Treat the input as NewLine-Delimited JSON.')
|
|
||||||
.option('-s, --no-streaming', 'Process the whole JSON array in memory instead of doing it line by line.')
|
|
||||||
.option('-f, --fields <fields>', 'List of fields to process. Defaults to field auto-detection.')
|
|
||||||
.option('-v, --default-value <defaultValue>', 'Default value to use for missing fields.')
|
|
||||||
.option('-q, --quote <quote>', 'Character(s) to use as quote mark. Defaults to \'"\'.')
|
|
||||||
.option('-Q, --escaped-quote <escapedQuote>', 'Character(s) to use as a escaped quote. Defaults to a double `quote`, \'""\'.')
|
|
||||||
.option('-d, --delimiter <delimiter>', 'Character(s) to use as delimiter. Defaults to \',\'.', ',')
|
|
||||||
.option('-e, --eol <eol>', 'Character(s) to use as End-of-Line for separating rows. Defaults to \'\\n\'.', os.EOL)
|
|
||||||
.option('-E, --excel-strings','Wraps string data to force Excel to interpret it as string even if it contains a number.')
|
|
||||||
.option('-H, --no-header', 'Disable the column name header.')
|
|
||||||
.option('-a, --include-empty-rows', 'Includes empty rows in the resulting CSV output.')
|
|
||||||
.option('-b, --with-bom', 'Includes BOM character at the beginning of the CSV.')
|
|
||||||
.option('-p, --pretty', 'Print output as a pretty table. Use only when printing to console.')
|
|
||||||
// Built-in transforms
|
|
||||||
.option('--unwind [paths]', 'Creates multiple rows from a single JSON document similar to MongoDB unwind.')
|
|
||||||
.option('--unwind-blank', 'When unwinding, blank out instead of repeating data. Defaults to false.', false)
|
|
||||||
.option('--flatten-objects', 'Flatten nested objects. Defaults to false.', false)
|
|
||||||
.option('--flatten-arrays', 'Flatten nested arrays. Defaults to false.', false)
|
|
||||||
.option('--flatten-separator <separator>', 'Flattened keys separator. Defaults to \'.\'.', '.')
|
|
||||||
.parse(process.argv);
|
|
||||||
|
|
||||||
function makePathAbsolute(filePath) {
|
|
||||||
return (filePath && !isAbsolute(filePath))
|
|
||||||
? join(process.cwd(), filePath)
|
|
||||||
: filePath;
|
|
||||||
}
|
|
||||||
|
|
||||||
program.input = makePathAbsolute(program.input);
|
|
||||||
program.output = makePathAbsolute(program.output);
|
|
||||||
program.config = makePathAbsolute(program.config);
|
|
||||||
|
|
||||||
// don't fail if piped to e.g. head
|
|
||||||
/* istanbul ignore next */
|
|
||||||
process.stdout.on('error', (error) => {
|
|
||||||
if (error.code === 'EPIPE') process.exit(1);
|
|
||||||
});
|
|
||||||
|
|
||||||
function getInputStream(inputPath) {
|
|
||||||
if (inputPath) return createReadStream(inputPath, { encoding: 'utf8' });
|
|
||||||
|
|
||||||
process.stdin.resume();
|
|
||||||
process.stdin.setEncoding('utf8');
|
|
||||||
return process.stdin;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getOutputStream(outputPath, config) {
|
|
||||||
if (outputPath) return createWriteStream(outputPath, { encoding: 'utf8' });
|
|
||||||
if (config.pretty) return new TablePrinter(config).writeStream();
|
|
||||||
return process.stdout;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function getInput(inputPath, ndjson) {
|
|
||||||
if (!inputPath) return getInputFromStdin();
|
|
||||||
if (ndjson) return parseNdJson(await readFile(inputPath, 'utf8'));
|
|
||||||
return require(inputPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function getInputFromStdin() {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
process.stdin.resume();
|
|
||||||
process.stdin.setEncoding('utf8');
|
|
||||||
|
|
||||||
let inputData = '';
|
|
||||||
process.stdin.on('data', chunk => (inputData += chunk));
|
|
||||||
/* istanbul ignore next */
|
|
||||||
process.stdin.on('error', err => reject(new Error('Could not read from stdin', err)));
|
|
||||||
process.stdin.on('end', () => {
|
|
||||||
try {
|
|
||||||
resolve(program.ndjson ? parseNdJson(inputData) : JSON.parse(inputData));
|
|
||||||
} catch (err) {
|
|
||||||
reject(new Error('Invalid data received from stdin', err));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async function processOutput(outputPath, csv, config) {
|
|
||||||
if (!outputPath) {
|
|
||||||
// eslint-disable-next-line no-console
|
|
||||||
config.pretty ? (new TablePrinter(config)).printCSV(csv) : console.log(csv);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
await writeFile(outputPath, csv);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function processInMemory(config, opts) {
|
|
||||||
const input = await getInput(program.input, config.ndjson);
|
|
||||||
const output = new JSON2CSVParser(opts).parse(input);
|
|
||||||
await processOutput(program.output, output, config);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function processStream(config, opts) {
|
|
||||||
const input = getInputStream(program.input);
|
|
||||||
const transform = new Json2csvTransform(opts);
|
|
||||||
const output = getOutputStream(program.output, config);
|
|
||||||
|
|
||||||
await new Promise((resolve, reject) => {
|
|
||||||
input.pipe(transform).pipe(output);
|
|
||||||
input.on('error', reject);
|
|
||||||
transform.on('error', reject);
|
|
||||||
output.on('error', reject)
|
|
||||||
.on('finish', resolve);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
(async (program) => {
|
|
||||||
try {
|
|
||||||
const config = Object.assign({}, program.config ? require(program.config) : {}, program);
|
|
||||||
|
|
||||||
const transforms = [];
|
|
||||||
if (config.unwind) {
|
|
||||||
transforms.push(unwind({
|
|
||||||
paths: config.unwind === true ? undefined : config.unwind.split(','),
|
|
||||||
blankOut: config.unwindBlank
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (config.flattenObjects || config.flattenArrays) {
|
|
||||||
transforms.push(flatten({
|
|
||||||
objects: config.flattenObjects,
|
|
||||||
arrays: config.flattenArrays,
|
|
||||||
separator: config.flattenSeparator
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
const opts = {
|
|
||||||
transforms,
|
|
||||||
fields: config.fields
|
|
||||||
? (Array.isArray(config.fields) ? config.fields : config.fields.split(','))
|
|
||||||
: config.fields,
|
|
||||||
defaultValue: config.defaultValue,
|
|
||||||
quote: config.quote,
|
|
||||||
escapedQuote: config.escapedQuote,
|
|
||||||
delimiter: config.delimiter,
|
|
||||||
eol: config.eol,
|
|
||||||
excelStrings: config.excelStrings,
|
|
||||||
header: config.header,
|
|
||||||
includeEmptyRows: config.includeEmptyRows,
|
|
||||||
withBOM: config.withBom
|
|
||||||
};
|
|
||||||
|
|
||||||
await (config.streaming ? processStream : processInMemory)(config, opts);
|
|
||||||
} catch(err) {
|
|
||||||
let processedError = err;
|
|
||||||
if (program.input && err.message.includes(program.input)) {
|
|
||||||
processedError = new Error(`Invalid input file. (${err.message})`);
|
|
||||||
} else if (program.output && err.message.includes(program.output)) {
|
|
||||||
processedError = new Error(`Invalid output file. (${err.message})`);
|
|
||||||
} else if (program.config && err.message.includes(program.config)) {
|
|
||||||
processedError = new Error(`Invalid config file. (${err.message})`);
|
|
||||||
}
|
|
||||||
// eslint-disable-next-line no-console
|
|
||||||
console.error(processedError);
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
})(program);
|
|
117
node_modules/json2csv/bin/utils/TablePrinter.js
generated
vendored
117
node_modules/json2csv/bin/utils/TablePrinter.js
generated
vendored
|
@ -1,117 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
const { Writable } = require('stream');
|
|
||||||
|
|
||||||
const MIN_CELL_WIDTH = 15;
|
|
||||||
|
|
||||||
class TablePrinter {
|
|
||||||
constructor(opts) {
|
|
||||||
this.opts = opts;
|
|
||||||
this._hasWritten = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
push(csv) {
|
|
||||||
const lines = csv.split(this.opts.eol);
|
|
||||||
|
|
||||||
if (!lines.length) return;
|
|
||||||
|
|
||||||
if (!this._hasWritten) this.setColumnWidths(lines[0]);
|
|
||||||
|
|
||||||
const top = this._hasWritten ? this.middleLine : this.topLine;
|
|
||||||
this.print(top, lines);
|
|
||||||
this._hasWritten = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
end(csv) {
|
|
||||||
let lines = csv.split(this.opts.eol);
|
|
||||||
if (!this._hasWritten) this.setColumnWidths(lines[0]);
|
|
||||||
const top = this._hasWritten ? this.middleLine : this.topLine;
|
|
||||||
this.print(top, lines, this.bottomLine);
|
|
||||||
}
|
|
||||||
|
|
||||||
printCSV(csv) {
|
|
||||||
this.end(csv);
|
|
||||||
}
|
|
||||||
|
|
||||||
setColumnWidths(line) {
|
|
||||||
this.colWidths = line
|
|
||||||
.split(this.opts.delimiter)
|
|
||||||
.map(elem => Math.max(elem.length * 2, MIN_CELL_WIDTH));
|
|
||||||
|
|
||||||
this.topLine = `┌${this.colWidths.map(i => '─'.repeat(i)).join('┬')}┐`;
|
|
||||||
this.middleLine = `├${this.colWidths.map(i => '─'.repeat(i)).join('┼')}┤`;
|
|
||||||
this.bottomLine = `└${this.colWidths.map(i => '─'.repeat(i)).join('┴')}┘`;
|
|
||||||
}
|
|
||||||
|
|
||||||
print(top, lines, bottom) {
|
|
||||||
const table = `${top}\n`
|
|
||||||
+ lines
|
|
||||||
.map(row => this.formatRow(row))
|
|
||||||
.join(`\n${this.middleLine}\n`)
|
|
||||||
+ (bottom ? `\n${bottom}` : '');
|
|
||||||
|
|
||||||
// eslint-disable-next-line no-console
|
|
||||||
console.log(table);
|
|
||||||
}
|
|
||||||
|
|
||||||
formatRow(row) {
|
|
||||||
const wrappedRow = row
|
|
||||||
.split(this.opts.delimiter)
|
|
||||||
.map((cell, i) => cell.match(new RegExp(`(.{1,${this.colWidths[i] - 2}})`, 'g')) || []);
|
|
||||||
|
|
||||||
const height = wrappedRow.reduce((acc, cell) => Math.max(acc, cell.length), 0);
|
|
||||||
|
|
||||||
const processedCells = wrappedRow
|
|
||||||
.map((cell, i) => this.formatCell(cell, height, this.colWidths[i]));
|
|
||||||
|
|
||||||
return Array(height).fill('')
|
|
||||||
.map((_, i) => `│${processedCells.map(cell => cell[i]).join('│')}│`)
|
|
||||||
.join('\n');
|
|
||||||
}
|
|
||||||
|
|
||||||
formatCell(content, heigth, width) {
|
|
||||||
const paddedContent = this.padCellHorizontally(content, width);
|
|
||||||
return this.padCellVertically(paddedContent, heigth, width);
|
|
||||||
}
|
|
||||||
|
|
||||||
padCellVertically(content, heigth, width) {
|
|
||||||
const vertPad = heigth - content.length;
|
|
||||||
const vertPadTop = Math.ceil(vertPad / 2);
|
|
||||||
const vertPadBottom = vertPad - vertPadTop;
|
|
||||||
const emptyLine = ' '.repeat(width);
|
|
||||||
|
|
||||||
return [
|
|
||||||
...Array(vertPadTop).fill(emptyLine),
|
|
||||||
...content,
|
|
||||||
...Array(vertPadBottom).fill(emptyLine)
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
padCellHorizontally(content, width) {
|
|
||||||
return content.map((line) => {
|
|
||||||
const horPad = width - line.length - 2;
|
|
||||||
return ` ${line}${' '.repeat(horPad)} `;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
writeStream() {
|
|
||||||
let csv = '';
|
|
||||||
const table = this;
|
|
||||||
return new Writable({
|
|
||||||
write(chunk, encoding, callback) {
|
|
||||||
csv += chunk.toString();
|
|
||||||
const index = csv.lastIndexOf(table.opts.eol);
|
|
||||||
let lines = csv.substring(0, index);
|
|
||||||
csv = csv.substring(index + 1);
|
|
||||||
|
|
||||||
if (lines) table.push(lines);
|
|
||||||
callback();
|
|
||||||
},
|
|
||||||
final() {
|
|
||||||
table.end(csv);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = TablePrinter;
|
|
11
node_modules/json2csv/bin/utils/parseNdjson.js
generated
vendored
11
node_modules/json2csv/bin/utils/parseNdjson.js
generated
vendored
|
@ -1,11 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
function parseNdJson(input) {
|
|
||||||
return input
|
|
||||||
.split('\n')
|
|
||||||
.map(line => line.trim())
|
|
||||||
.filter(line => line !== '')
|
|
||||||
.map(line=> JSON.parse(line));
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = parseNdJson;
|
|
2337
node_modules/json2csv/dist/json2csv.esm.js
generated
vendored
2337
node_modules/json2csv/dist/json2csv.esm.js
generated
vendored
File diff suppressed because it is too large
Load Diff
7424
node_modules/json2csv/dist/json2csv.umd.js
generated
vendored
7424
node_modules/json2csv/dist/json2csv.umd.js
generated
vendored
File diff suppressed because it is too large
Load Diff
60
node_modules/json2csv/lib/JSON2CSVAsyncParser.js
generated
vendored
60
node_modules/json2csv/lib/JSON2CSVAsyncParser.js
generated
vendored
|
@ -1,60 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
const { Transform } = require('stream');
|
|
||||||
const JSON2CSVTransform = require('./JSON2CSVTransform');
|
|
||||||
const { fastJoin } = require('./utils');
|
|
||||||
|
|
||||||
class JSON2CSVAsyncParser {
|
|
||||||
constructor(opts, transformOpts) {
|
|
||||||
this.input = new Transform(transformOpts);
|
|
||||||
this.input._read = () => {};
|
|
||||||
|
|
||||||
this.transform = new JSON2CSVTransform(opts, transformOpts);
|
|
||||||
this.processor = this.input.pipe(this.transform);
|
|
||||||
}
|
|
||||||
|
|
||||||
fromInput(input) {
|
|
||||||
if (this._input) {
|
|
||||||
throw new Error('Async parser already has an input.');
|
|
||||||
}
|
|
||||||
this._input = input;
|
|
||||||
this.input = this._input.pipe(this.processor);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
throughTransform(transform) {
|
|
||||||
if (this._output) {
|
|
||||||
throw new Error('Can\'t add transforms once an output has been added.');
|
|
||||||
}
|
|
||||||
this.processor = this.processor.pipe(transform);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
toOutput(output) {
|
|
||||||
if (this._output) {
|
|
||||||
throw new Error('Async parser already has an output.');
|
|
||||||
}
|
|
||||||
this._output = output;
|
|
||||||
this.processor = this.processor.pipe(output);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
promise(returnCSV = true) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
if (!returnCSV) {
|
|
||||||
this.processor
|
|
||||||
.on('finish', () => resolve())
|
|
||||||
.on('error', err => reject(err));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let csvBuffer = [];
|
|
||||||
this.processor
|
|
||||||
.on('data', chunk => csvBuffer.push(chunk.toString()))
|
|
||||||
.on('finish', () => resolve(fastJoin(csvBuffer, '')))
|
|
||||||
.on('error', err => reject(err));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = JSON2CSVAsyncParser
|
|
186
node_modules/json2csv/lib/JSON2CSVBase.js
generated
vendored
186
node_modules/json2csv/lib/JSON2CSVBase.js
generated
vendored
|
@ -1,186 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
const os = require('os');
|
|
||||||
const lodashGet = require('lodash.get');
|
|
||||||
const { getProp, fastJoin, flattenReducer } = require('./utils');
|
|
||||||
|
|
||||||
class JSON2CSVBase {
|
|
||||||
constructor(opts) {
|
|
||||||
this.opts = this.preprocessOpts(opts);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check passing opts and set defaults.
|
|
||||||
*
|
|
||||||
* @param {Json2CsvOptions} opts Options object containing fields,
|
|
||||||
* delimiter, default value, quote mark, header, etc.
|
|
||||||
*/
|
|
||||||
preprocessOpts(opts) {
|
|
||||||
const processedOpts = Object.assign({}, opts);
|
|
||||||
processedOpts.transforms = !Array.isArray(processedOpts.transforms)
|
|
||||||
? (processedOpts.transforms ? [processedOpts.transforms] : [])
|
|
||||||
: processedOpts.transforms
|
|
||||||
processedOpts.delimiter = processedOpts.delimiter || ',';
|
|
||||||
processedOpts.eol = processedOpts.eol || os.EOL;
|
|
||||||
processedOpts.quote = typeof processedOpts.quote === 'string'
|
|
||||||
? processedOpts.quote
|
|
||||||
: '"';
|
|
||||||
processedOpts.escapedQuote = typeof processedOpts.escapedQuote === 'string'
|
|
||||||
? processedOpts.escapedQuote
|
|
||||||
: `${processedOpts.quote}${processedOpts.quote}`;
|
|
||||||
processedOpts.header = processedOpts.header !== false;
|
|
||||||
processedOpts.includeEmptyRows = processedOpts.includeEmptyRows || false;
|
|
||||||
processedOpts.withBOM = processedOpts.withBOM || false;
|
|
||||||
|
|
||||||
return processedOpts;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check and normalize the fields configuration.
|
|
||||||
*
|
|
||||||
* @param {(string|object)[]} fields Fields configuration provided by the user
|
|
||||||
* or inferred from the data
|
|
||||||
* @returns {object[]} preprocessed FieldsInfo array
|
|
||||||
*/
|
|
||||||
preprocessFieldsInfo(fields) {
|
|
||||||
return fields.map((fieldInfo) => {
|
|
||||||
if (typeof fieldInfo === 'string') {
|
|
||||||
return {
|
|
||||||
label: fieldInfo,
|
|
||||||
value: (fieldInfo.includes('.') || fieldInfo.includes('['))
|
|
||||||
? row => lodashGet(row, fieldInfo, this.opts.defaultValue)
|
|
||||||
: row => getProp(row, fieldInfo, this.opts.defaultValue),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof fieldInfo === 'object') {
|
|
||||||
const defaultValue = 'default' in fieldInfo
|
|
||||||
? fieldInfo.default
|
|
||||||
: this.opts.defaultValue;
|
|
||||||
|
|
||||||
if (typeof fieldInfo.value === 'string') {
|
|
||||||
return {
|
|
||||||
label: fieldInfo.label || fieldInfo.value,
|
|
||||||
value: (fieldInfo.value.includes('.') || fieldInfo.value.includes('['))
|
|
||||||
? row => lodashGet(row, fieldInfo.value, defaultValue)
|
|
||||||
: row => getProp(row, fieldInfo.value, defaultValue),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof fieldInfo.value === 'function') {
|
|
||||||
const label = fieldInfo.label || fieldInfo.value.name || '';
|
|
||||||
const field = { label, default: defaultValue };
|
|
||||||
return {
|
|
||||||
label,
|
|
||||||
value(row) {
|
|
||||||
const value = fieldInfo.value(row, field);
|
|
||||||
return (value === null || value === undefined)
|
|
||||||
? defaultValue
|
|
||||||
: value;
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new Error('Invalid field info option. ' + JSON.stringify(fieldInfo));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create the title row with all the provided fields as column headings
|
|
||||||
*
|
|
||||||
* @returns {String} titles as a string
|
|
||||||
*/
|
|
||||||
getHeader() {
|
|
||||||
return fastJoin(
|
|
||||||
this.opts.fields.map(fieldInfo => this.processValue(fieldInfo.label)),
|
|
||||||
this.opts.delimiter
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Preprocess each object according to the given transforms (unwind, flatten, etc.).
|
|
||||||
* @param {Object} row JSON object to be converted in a CSV row
|
|
||||||
*/
|
|
||||||
preprocessRow(row) {
|
|
||||||
return this.opts.transforms.reduce((rows, transform) =>
|
|
||||||
rows.map(row => transform(row)).reduce(flattenReducer, []),
|
|
||||||
[row]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create the content of a specific CSV row
|
|
||||||
*
|
|
||||||
* @param {Object} row JSON object to be converted in a CSV row
|
|
||||||
* @returns {String} CSV string (row)
|
|
||||||
*/
|
|
||||||
processRow(row) {
|
|
||||||
if (!row) {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
const processedRow = this.opts.fields.map(fieldInfo => this.processCell(row, fieldInfo));
|
|
||||||
|
|
||||||
if (!this.opts.includeEmptyRows && processedRow.every(field => field === undefined)) {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
return fastJoin(
|
|
||||||
processedRow,
|
|
||||||
this.opts.delimiter
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create the content of a specfic CSV row cell
|
|
||||||
*
|
|
||||||
* @param {Object} row JSON object representing the CSV row that the cell belongs to
|
|
||||||
* @param {FieldInfo} fieldInfo Details of the field to process to be a CSV cell
|
|
||||||
* @returns {String} CSV string (cell)
|
|
||||||
*/
|
|
||||||
processCell(row, fieldInfo) {
|
|
||||||
return this.processValue(fieldInfo.value(row));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create the content of a specfic CSV row cell
|
|
||||||
*
|
|
||||||
* @param {Any} value Value to be included in a CSV cell
|
|
||||||
* @returns {String} Value stringified and processed
|
|
||||||
*/
|
|
||||||
processValue(value) {
|
|
||||||
if (value === null || value === undefined) {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
const valueType = typeof value;
|
|
||||||
if (valueType !== 'boolean' && valueType !== 'number' && valueType !== 'string') {
|
|
||||||
value = JSON.stringify(value);
|
|
||||||
|
|
||||||
if (value === undefined) {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (value[0] === '"') {
|
|
||||||
value = value.replace(/^"(.+)"$/,'$1');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof value === 'string') {
|
|
||||||
if(value.includes(this.opts.quote)) {
|
|
||||||
value = value.replace(new RegExp(this.opts.quote, 'g'), this.opts.escapedQuote);
|
|
||||||
}
|
|
||||||
|
|
||||||
value = `${this.opts.quote}${value}${this.opts.quote}`;
|
|
||||||
|
|
||||||
if (this.opts.excelStrings) {
|
|
||||||
value = `"="${value}""`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = JSON2CSVBase;
|
|
81
node_modules/json2csv/lib/JSON2CSVParser.js
generated
vendored
81
node_modules/json2csv/lib/JSON2CSVParser.js
generated
vendored
|
@ -1,81 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
const JSON2CSVBase = require('./JSON2CSVBase');
|
|
||||||
const { fastJoin, flattenReducer } = require('./utils');
|
|
||||||
|
|
||||||
class JSON2CSVParser extends JSON2CSVBase {
|
|
||||||
constructor(opts) {
|
|
||||||
super(opts);
|
|
||||||
if (this.opts.fields) {
|
|
||||||
this.opts.fields = this.preprocessFieldsInfo(this.opts.fields);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Main function that converts json to csv.
|
|
||||||
*
|
|
||||||
* @param {Array|Object} data Array of JSON objects to be converted to CSV
|
|
||||||
* @returns {String} The CSV formated data as a string
|
|
||||||
*/
|
|
||||||
parse(data) {
|
|
||||||
const processedData = this.preprocessData(data);
|
|
||||||
|
|
||||||
if (!this.opts.fields) {
|
|
||||||
this.opts.fields = processedData
|
|
||||||
.reduce((fields, item) => {
|
|
||||||
Object.keys(item).forEach((field) => {
|
|
||||||
if (!fields.includes(field)) {
|
|
||||||
fields.push(field)
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return fields
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
this.opts.fields = this.preprocessFieldsInfo(this.opts.fields);
|
|
||||||
}
|
|
||||||
|
|
||||||
const header = this.opts.header ? this.getHeader() : '';
|
|
||||||
const rows = this.processData(processedData);
|
|
||||||
const csv = (this.opts.withBOM ? '\ufeff' : '')
|
|
||||||
+ header
|
|
||||||
+ ((header && rows) ? this.opts.eol : '')
|
|
||||||
+ rows;
|
|
||||||
|
|
||||||
return csv;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Preprocess the data according to the give opts (unwind, flatten, etc.)
|
|
||||||
and calculate the fields and field names if they are not provided.
|
|
||||||
*
|
|
||||||
* @param {Array|Object} data Array or object to be converted to CSV
|
|
||||||
*/
|
|
||||||
preprocessData(data) {
|
|
||||||
const processedData = Array.isArray(data) ? data : [data];
|
|
||||||
|
|
||||||
if (!this.opts.fields && (processedData.length === 0 || typeof processedData[0] !== 'object')) {
|
|
||||||
throw new Error('Data should not be empty or the "fields" option should be included');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.opts.transforms.length === 0) return processedData;
|
|
||||||
|
|
||||||
return processedData
|
|
||||||
.map(row => this.preprocessRow(row))
|
|
||||||
.reduce(flattenReducer, []);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create the content row by row below the header
|
|
||||||
*
|
|
||||||
* @param {Array} data Array of JSON objects to be converted to CSV
|
|
||||||
* @returns {String} CSV string (body)
|
|
||||||
*/
|
|
||||||
processData(data) {
|
|
||||||
return fastJoin(
|
|
||||||
data.map(row => this.processRow(row)).filter(row => row), // Filter empty rows
|
|
||||||
this.opts.eol
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = JSON2CSVParser;
|
|
203
node_modules/json2csv/lib/JSON2CSVTransform.js
generated
vendored
203
node_modules/json2csv/lib/JSON2CSVTransform.js
generated
vendored
|
@ -1,203 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
const { Transform } = require('stream');
|
|
||||||
const Parser = require('jsonparse');
|
|
||||||
const JSON2CSVBase = require('./JSON2CSVBase');
|
|
||||||
|
|
||||||
class JSON2CSVTransform extends Transform {
|
|
||||||
constructor(opts, transformOpts) {
|
|
||||||
super(transformOpts);
|
|
||||||
|
|
||||||
// Inherit methods from JSON2CSVBase since extends doesn't
|
|
||||||
// allow multiple inheritance and manually preprocess opts
|
|
||||||
Object.getOwnPropertyNames(JSON2CSVBase.prototype)
|
|
||||||
.forEach(key => (this[key] = JSON2CSVBase.prototype[key]));
|
|
||||||
this.opts = this.preprocessOpts(opts);
|
|
||||||
|
|
||||||
this._data = '';
|
|
||||||
this._hasWritten = false;
|
|
||||||
|
|
||||||
if (this._readableState.objectMode) {
|
|
||||||
this.initObjectModeParse();
|
|
||||||
} else if (this.opts.ndjson) {
|
|
||||||
this.initNDJSONParse();
|
|
||||||
} else {
|
|
||||||
this.initJSONParser();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.opts.withBOM) {
|
|
||||||
this.push('\ufeff');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.opts.fields) {
|
|
||||||
this.opts.fields = this.preprocessFieldsInfo(this.opts.fields);
|
|
||||||
this.pushHeader();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Init the transform with a parser to process data in object mode.
|
|
||||||
* It receives JSON objects one by one and send them to `pushLine for processing.
|
|
||||||
*/
|
|
||||||
initObjectModeParse() {
|
|
||||||
const transform = this;
|
|
||||||
|
|
||||||
this.parser = {
|
|
||||||
write(line) {
|
|
||||||
transform.pushLine(line);
|
|
||||||
},
|
|
||||||
getPendingData() {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Init the transform with a parser to process NDJSON data.
|
|
||||||
* It maintains a buffer of received data, parses each line
|
|
||||||
* as JSON and send it to `pushLine for processing.
|
|
||||||
*/
|
|
||||||
initNDJSONParse() {
|
|
||||||
const transform = this;
|
|
||||||
|
|
||||||
this.parser = {
|
|
||||||
_data: '',
|
|
||||||
write(chunk) {
|
|
||||||
this._data += chunk.toString();
|
|
||||||
const lines = this._data
|
|
||||||
.split('\n')
|
|
||||||
.map(line => line.trim())
|
|
||||||
.filter(line => line !== '');
|
|
||||||
|
|
||||||
let pendingData = false;
|
|
||||||
lines
|
|
||||||
.forEach((line, i) => {
|
|
||||||
try {
|
|
||||||
transform.pushLine(JSON.parse(line));
|
|
||||||
} catch(e) {
|
|
||||||
if (i === lines.length - 1) {
|
|
||||||
pendingData = true;
|
|
||||||
} else {
|
|
||||||
e.message = `Invalid JSON (${line})`
|
|
||||||
transform.emit('error', e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
this._data = pendingData
|
|
||||||
? this._data.slice(this._data.lastIndexOf('\n'))
|
|
||||||
: '';
|
|
||||||
},
|
|
||||||
getPendingData() {
|
|
||||||
return this._data;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Init the transform with a parser to process JSON data.
|
|
||||||
* It maintains a buffer of received data, parses each as JSON
|
|
||||||
* item if the data is an array or the data itself otherwise
|
|
||||||
* and send it to `pushLine` for processing.
|
|
||||||
*/
|
|
||||||
initJSONParser() {
|
|
||||||
const transform = this;
|
|
||||||
this.parser = new Parser();
|
|
||||||
this.parser.onValue = function (value) {
|
|
||||||
if (this.stack.length !== this.depthToEmit) return;
|
|
||||||
transform.pushLine(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.parser._onToken = this.parser.onToken;
|
|
||||||
|
|
||||||
this.parser.onToken = function (token, value) {
|
|
||||||
transform.parser._onToken(token, value);
|
|
||||||
|
|
||||||
if (this.stack.length === 0
|
|
||||||
&& !transform.opts.fields
|
|
||||||
&& this.mode !== Parser.C.ARRAY
|
|
||||||
&& this.mode !== Parser.C.OBJECT) {
|
|
||||||
this.onError(new Error('Data should not be empty or the "fields" option should be included'));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.stack.length === 1) {
|
|
||||||
if(this.depthToEmit === undefined) {
|
|
||||||
// If Array emit its content, else emit itself
|
|
||||||
this.depthToEmit = (this.mode === Parser.C.ARRAY) ? 1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.depthToEmit !== 0 && this.stack.length === 1) {
|
|
||||||
// No need to store the whole root array in memory
|
|
||||||
this.value = undefined;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.parser.getPendingData = function () {
|
|
||||||
return this.value;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.parser.onError = function (err) {
|
|
||||||
if(err.message.includes('Unexpected')) {
|
|
||||||
err.message = `Invalid JSON (${err.message})`;
|
|
||||||
}
|
|
||||||
transform.emit('error', err);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Main function that send data to the parse to be processed.
|
|
||||||
*
|
|
||||||
* @param {Buffer} chunk Incoming data
|
|
||||||
* @param {String} encoding Encoding of the incoming data. Defaults to 'utf8'
|
|
||||||
* @param {Function} done Called when the proceesing of the supplied chunk is done
|
|
||||||
*/
|
|
||||||
_transform(chunk, encoding, done) {
|
|
||||||
this.parser.write(chunk);
|
|
||||||
done();
|
|
||||||
}
|
|
||||||
|
|
||||||
_flush(done) {
|
|
||||||
if (this.parser.getPendingData()) {
|
|
||||||
done(new Error('Invalid data received from stdin', this.parser.getPendingData()));
|
|
||||||
}
|
|
||||||
|
|
||||||
done();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generate the csv header and pushes it downstream.
|
|
||||||
*/
|
|
||||||
pushHeader() {
|
|
||||||
if (this.opts.header) {
|
|
||||||
const header = this.getHeader();
|
|
||||||
this.emit('header', header);
|
|
||||||
this.push(header);
|
|
||||||
this._hasWritten = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Transforms an incoming json data to csv and pushes it downstream.
|
|
||||||
*
|
|
||||||
* @param {Object} data JSON object to be converted in a CSV row
|
|
||||||
*/
|
|
||||||
pushLine(data) {
|
|
||||||
const processedData = this.preprocessRow(data);
|
|
||||||
|
|
||||||
if (!this._hasWritten) {
|
|
||||||
this.opts.fields = this.opts.fields || this.preprocessFieldsInfo(Object.keys(processedData[0]));
|
|
||||||
this.pushHeader();
|
|
||||||
}
|
|
||||||
|
|
||||||
processedData.forEach(row => {
|
|
||||||
const line = this.processRow(row, this.opts);
|
|
||||||
if (line === undefined) return;
|
|
||||||
this.emit('line', line);
|
|
||||||
this.push(this._hasWritten ? this.opts.eol + line : line);
|
|
||||||
this._hasWritten = true;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = JSON2CSVTransform;
|
|
44
node_modules/json2csv/lib/json2csv.js
generated
vendored
44
node_modules/json2csv/lib/json2csv.js
generated
vendored
|
@ -1,44 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
const { Readable } = require('stream');
|
|
||||||
const JSON2CSVParser = require('./JSON2CSVParser');
|
|
||||||
const JSON2CSVAsyncParser = require('./JSON2CSVAsyncParser');
|
|
||||||
const JSON2CSVTransform = require('./JSON2CSVTransform');
|
|
||||||
const flatten = require('./transforms/flatten');
|
|
||||||
const unwind = require('./transforms/unwind');
|
|
||||||
|
|
||||||
module.exports.Parser = JSON2CSVParser;
|
|
||||||
module.exports.AsyncParser = JSON2CSVAsyncParser;
|
|
||||||
module.exports.Transform = JSON2CSVTransform;
|
|
||||||
|
|
||||||
// Convenience method to keep the API similar to version 3.X
|
|
||||||
module.exports.parse = (data, opts) => new JSON2CSVParser(opts).parse(data);
|
|
||||||
module.exports.parseAsync = (data, opts, transformOpts) => {
|
|
||||||
try {
|
|
||||||
if (!(data instanceof Readable)) {
|
|
||||||
transformOpts = Object.assign({}, transformOpts, { objectMode: true });
|
|
||||||
}
|
|
||||||
|
|
||||||
const asyncParser = new JSON2CSVAsyncParser(opts, transformOpts);
|
|
||||||
const promise = asyncParser.promise();
|
|
||||||
|
|
||||||
if (Array.isArray(data)) {
|
|
||||||
data.forEach(item => asyncParser.input.push(item));
|
|
||||||
asyncParser.input.push(null);
|
|
||||||
} else if (data instanceof Readable) {
|
|
||||||
asyncParser.fromInput(data);
|
|
||||||
} else {
|
|
||||||
asyncParser.input.push(data);
|
|
||||||
asyncParser.input.push(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
return promise;
|
|
||||||
} catch (err) {
|
|
||||||
return Promise.reject(err);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports.transforms = {
|
|
||||||
flatten,
|
|
||||||
unwind,
|
|
||||||
};
|
|
37
node_modules/json2csv/lib/transforms/flatten.js
generated
vendored
37
node_modules/json2csv/lib/transforms/flatten.js
generated
vendored
|
@ -1,37 +0,0 @@
|
||||||
/**
|
|
||||||
* Performs the flattening of a data row recursively
|
|
||||||
*
|
|
||||||
* @param {String} separator Separator to be used as the flattened field name
|
|
||||||
* @returns {Object => Object} Flattened object
|
|
||||||
*/
|
|
||||||
function flatten({ objects = true, arrays = false, separator = '.' } = {}) {
|
|
||||||
function step (obj, flatDataRow, currentPath) {
|
|
||||||
Object.keys(obj).forEach((key) => {
|
|
||||||
const newPath = currentPath ? `${currentPath}${separator}${key}` : key;
|
|
||||||
const value = obj[key];
|
|
||||||
|
|
||||||
if (objects
|
|
||||||
&& typeof value === 'object'
|
|
||||||
&& value !== null
|
|
||||||
&& !Array.isArray(value)
|
|
||||||
&& Object.prototype.toString.call(value.toJSON) !== '[object Function]'
|
|
||||||
&& Object.keys(value).length) {
|
|
||||||
step(value, flatDataRow, newPath);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (arrays && Array.isArray(value)) {
|
|
||||||
step(value, flatDataRow, newPath);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
flatDataRow[newPath] = value;
|
|
||||||
});
|
|
||||||
|
|
||||||
return flatDataRow;
|
|
||||||
}
|
|
||||||
|
|
||||||
return dataRow => step(dataRow, {});
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = flatten;
|
|
63
node_modules/json2csv/lib/transforms/unwind.js
generated
vendored
63
node_modules/json2csv/lib/transforms/unwind.js
generated
vendored
|
@ -1,63 +0,0 @@
|
||||||
|
|
||||||
const lodashGet = require('lodash.get');
|
|
||||||
const { setProp, unsetProp, flattenReducer } = require('../utils');
|
|
||||||
|
|
||||||
function getUnwindablePaths(obj, currentPath) {
|
|
||||||
return Object.keys(obj).reduce((unwindablePaths, key) => {
|
|
||||||
const newPath = currentPath ? `${currentPath}.${key}` : key;
|
|
||||||
const value = obj[key];
|
|
||||||
|
|
||||||
if (typeof value === 'object'
|
|
||||||
&& value !== null
|
|
||||||
&& !Array.isArray(value)
|
|
||||||
&& Object.prototype.toString.call(value.toJSON) !== '[object Function]'
|
|
||||||
&& Object.keys(value).length) {
|
|
||||||
unwindablePaths = unwindablePaths.concat(getUnwindablePaths(value, newPath));
|
|
||||||
} else if (Array.isArray(value)) {
|
|
||||||
unwindablePaths.push(newPath);
|
|
||||||
unwindablePaths = unwindablePaths.concat(value
|
|
||||||
.map(arrObj => getUnwindablePaths(arrObj, newPath))
|
|
||||||
.reduce(flattenReducer, [])
|
|
||||||
.filter((item, index, arr) => arr.indexOf(item) !== index));
|
|
||||||
}
|
|
||||||
|
|
||||||
return unwindablePaths;
|
|
||||||
}, []);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Performs the unwind recursively in specified sequence
|
|
||||||
*
|
|
||||||
* @param {String[]} unwindPaths The paths as strings to be used to deconstruct the array
|
|
||||||
* @returns {Object => Array} Array of objects containing all rows after unwind of chosen paths
|
|
||||||
*/
|
|
||||||
function unwind({ paths = undefined, blankOut = false } = {}) {
|
|
||||||
function unwindReducer(rows, unwindPath) {
|
|
||||||
return rows
|
|
||||||
.map(row => {
|
|
||||||
const unwindArray = lodashGet(row, unwindPath);
|
|
||||||
|
|
||||||
if (!Array.isArray(unwindArray)) {
|
|
||||||
return row;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!unwindArray.length) {
|
|
||||||
return unsetProp(row, unwindPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
return unwindArray.map((unwindRow, index) => {
|
|
||||||
const clonedRow = (blankOut && index > 0)
|
|
||||||
? {}
|
|
||||||
: row;
|
|
||||||
|
|
||||||
return setProp(clonedRow, unwindPath, unwindRow);
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.reduce(flattenReducer, []);
|
|
||||||
}
|
|
||||||
|
|
||||||
paths = Array.isArray(paths) ? paths : (paths ? [paths] : undefined);
|
|
||||||
return dataRow => (paths || getUnwindablePaths(dataRow)).reduce(unwindReducer, [dataRow]);
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = unwind;
|
|
66
node_modules/json2csv/lib/utils.js
generated
vendored
66
node_modules/json2csv/lib/utils.js
generated
vendored
|
@ -1,66 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
function getProp(obj, path, defaultValue) {
|
|
||||||
return obj[path] === undefined ? defaultValue : obj[path];
|
|
||||||
}
|
|
||||||
|
|
||||||
function setProp(obj, path, value) {
|
|
||||||
const pathArray = Array.isArray(path) ? path : path.split('.');
|
|
||||||
const [key, ...restPath] = pathArray;
|
|
||||||
const newValue = pathArray.length > 1 ? setProp(obj[key] || {}, restPath, value) : value;
|
|
||||||
return Object.assign({}, obj, { [key]: newValue });
|
|
||||||
}
|
|
||||||
|
|
||||||
function unsetProp(obj, path) {
|
|
||||||
const pathArray = Array.isArray(path) ? path : path.split('.');
|
|
||||||
const [key, ...restPath] = pathArray;
|
|
||||||
|
|
||||||
if (typeof obj[key] !== 'object') {
|
|
||||||
// This will never be hit in the current code because unwind does the check before calling unsetProp
|
|
||||||
/* istanbul ignore next */
|
|
||||||
return obj;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pathArray.length === 1) {
|
|
||||||
return Object.keys(obj)
|
|
||||||
.filter(prop => prop !== key)
|
|
||||||
.reduce((acc, prop) => Object.assign(acc, { [prop]: obj[prop] }), {});
|
|
||||||
}
|
|
||||||
|
|
||||||
return unsetProp(obj[key], restPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
function flattenReducer(acc, arr) {
|
|
||||||
try {
|
|
||||||
// This is faster but susceptible to `RangeError: Maximum call stack size exceeded`
|
|
||||||
acc.push(...arr);
|
|
||||||
return acc;
|
|
||||||
} catch (err) {
|
|
||||||
// Fallback to a slower but safer option
|
|
||||||
return acc.concat(arr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function fastJoin(arr, separator) {
|
|
||||||
let isFirst = true;
|
|
||||||
return arr.reduce((acc, elem) => {
|
|
||||||
if (elem === null || elem === undefined) {
|
|
||||||
elem = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isFirst) {
|
|
||||||
isFirst = false;
|
|
||||||
return `${elem}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
return `${acc}${separator}${elem}`;
|
|
||||||
}, '');
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
getProp,
|
|
||||||
setProp,
|
|
||||||
unsetProp,
|
|
||||||
fastJoin,
|
|
||||||
flattenReducer
|
|
||||||
};
|
|
103
node_modules/json2csv/package.json
generated
vendored
103
node_modules/json2csv/package.json
generated
vendored
|
@ -1,103 +0,0 @@
|
||||||
{
|
|
||||||
"_args": [
|
|
||||||
[
|
|
||||||
"json2csv@5.0.5",
|
|
||||||
"/home/nuno/Documents/core/software/fresh/js/metaforecasts/metaforecasts-current"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"_from": "json2csv@5.0.5",
|
|
||||||
"_id": "json2csv@5.0.5",
|
|
||||||
"_inBundle": false,
|
|
||||||
"_integrity": "sha512-/UyvnfuUghRM+C/AiQ02X0LS+/AKfugcwaWo/gAz1pi203v29sUMrMSNEC088i+h0EG39eSsmeL9Z0iK+9MM0A==",
|
|
||||||
"_location": "/json2csv",
|
|
||||||
"_phantomChildren": {},
|
|
||||||
"_requested": {
|
|
||||||
"type": "version",
|
|
||||||
"registry": true,
|
|
||||||
"raw": "json2csv@5.0.5",
|
|
||||||
"name": "json2csv",
|
|
||||||
"escapedName": "json2csv",
|
|
||||||
"rawSpec": "5.0.5",
|
|
||||||
"saveSpec": null,
|
|
||||||
"fetchSpec": "5.0.5"
|
|
||||||
},
|
|
||||||
"_requiredBy": [
|
|
||||||
"/"
|
|
||||||
],
|
|
||||||
"_resolved": "https://registry.npmjs.org/json2csv/-/json2csv-5.0.5.tgz",
|
|
||||||
"_spec": "5.0.5",
|
|
||||||
"_where": "/home/nuno/Documents/core/software/fresh/js/metaforecasts/metaforecasts-current",
|
|
||||||
"author": {
|
|
||||||
"name": "Mirco Zeiss",
|
|
||||||
"email": "mirco.zeiss@gmail.com"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"json2csv": "bin/json2csv.js"
|
|
||||||
},
|
|
||||||
"browser": "dist/json2csv.umd.js",
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/zemirco/json2csv/issues"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"commander": "^6.1.0",
|
|
||||||
"jsonparse": "^1.3.1",
|
|
||||||
"lodash.get": "^4.4.2"
|
|
||||||
},
|
|
||||||
"description": "Convert JSON to CSV",
|
|
||||||
"devDependencies": {
|
|
||||||
"@babel/core": "^7.3.3",
|
|
||||||
"@babel/preset-env": "^7.3.1",
|
|
||||||
"coveralls": "^3.0.3",
|
|
||||||
"docpress": "^0.8.0",
|
|
||||||
"eslint": "^6.1.0",
|
|
||||||
"gh-pages": "^2.0.1",
|
|
||||||
"in-publish": "^2.0.0",
|
|
||||||
"nyc": "^14.1.1",
|
|
||||||
"rollup": "^1.11.0",
|
|
||||||
"rollup-plugin-babel": "^4.3.2",
|
|
||||||
"rollup-plugin-commonjs": "^10.0.2",
|
|
||||||
"rollup-plugin-node-builtins": "^2.1.2",
|
|
||||||
"rollup-plugin-node-globals": "^1.2.1",
|
|
||||||
"rollup-plugin-node-resolve": "^5.2.0",
|
|
||||||
"standard-version": "^8.0.1",
|
|
||||||
"tap-spec": "^5.0.0",
|
|
||||||
"tape": "^4.10.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10",
|
|
||||||
"npm": ">= 6.13.0"
|
|
||||||
},
|
|
||||||
"homepage": "http://zemirco.github.io/json2csv",
|
|
||||||
"keywords": [
|
|
||||||
"json",
|
|
||||||
"to",
|
|
||||||
"csv",
|
|
||||||
"export",
|
|
||||||
"convert",
|
|
||||||
"parse"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"main": "lib/json2csv.js",
|
|
||||||
"module": "dist/json2csv.esm.js",
|
|
||||||
"name": "json2csv",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git+https://github.com/zemirco/json2csv.git"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"before:publish": "npm test && npm run build && npm run deploy:docs",
|
|
||||||
"build": "rollup -c",
|
|
||||||
"coveralls": "nyc report --reporter=text-lcov | coveralls",
|
|
||||||
"deploy:docs": "docpress b && gh-pages -d _docpress",
|
|
||||||
"dev": "rollup -c -w",
|
|
||||||
"lint": "eslint bin lib test",
|
|
||||||
"prepublish": "in-publish && npm run before:publish || not-in-publish",
|
|
||||||
"release": "standard-version",
|
|
||||||
"test": "node test | tap-spec",
|
|
||||||
"test-with-coverage": "nyc --reporter=text node test | tap-spec"
|
|
||||||
},
|
|
||||||
"version": "5.0.5",
|
|
||||||
"volta": {
|
|
||||||
"node": "10.19.0"
|
|
||||||
}
|
|
||||||
}
|
|
46
node_modules/json2csv/rollup.config.js
generated
vendored
46
node_modules/json2csv/rollup.config.js
generated
vendored
|
@ -1,46 +0,0 @@
|
||||||
import resolve from 'rollup-plugin-node-resolve';
|
|
||||||
import commonjs from 'rollup-plugin-commonjs';
|
|
||||||
import globals from 'rollup-plugin-node-globals';
|
|
||||||
import builtins from 'rollup-plugin-node-builtins';
|
|
||||||
import babel from 'rollup-plugin-babel';
|
|
||||||
import pkg from './package.json';
|
|
||||||
|
|
||||||
export default [
|
|
||||||
{
|
|
||||||
input: 'lib/json2csv.js',
|
|
||||||
output: {
|
|
||||||
file: pkg.browser,
|
|
||||||
format: 'umd',
|
|
||||||
name: 'json2csv'
|
|
||||||
},
|
|
||||||
plugins: [
|
|
||||||
resolve({
|
|
||||||
browser: true
|
|
||||||
}),
|
|
||||||
commonjs(),
|
|
||||||
globals(),
|
|
||||||
builtins(),
|
|
||||||
babel({
|
|
||||||
exclude: ['node_modules/**'],
|
|
||||||
babelrc: false,
|
|
||||||
presets: [['@babel/env', { modules: false }]],
|
|
||||||
})
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
input: 'lib/json2csv.js',
|
|
||||||
output: [
|
|
||||||
{ file: pkg.module, format: 'es' }
|
|
||||||
],
|
|
||||||
external: [ 'os', 'stream' ],
|
|
||||||
plugins: [
|
|
||||||
resolve(),
|
|
||||||
commonjs(),
|
|
||||||
babel({
|
|
||||||
exclude: ['node_modules/**'],
|
|
||||||
babelrc: false,
|
|
||||||
presets: [['@babel/env', { modules: false }]],
|
|
||||||
})
|
|
||||||
]
|
|
||||||
}
|
|
||||||
];
|
|
1
node_modules/jsonparse/.npmignore
generated
vendored
1
node_modules/jsonparse/.npmignore
generated
vendored
|
@ -1 +0,0 @@
|
||||||
node_modules
|
|
24
node_modules/jsonparse/LICENSE
generated
vendored
24
node_modules/jsonparse/LICENSE
generated
vendored
|
@ -1,24 +0,0 @@
|
||||||
The MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2012 Tim Caswell
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge,
|
|
||||||
to any person obtaining a copy of this software and
|
|
||||||
associated documentation files (the "Software"), to
|
|
||||||
deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify,
|
|
||||||
merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom
|
|
||||||
the Software is furnished to do so,
|
|
||||||
subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice
|
|
||||||
shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
||||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
|
|
||||||
ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
||||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
||||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
11
node_modules/jsonparse/README.markdown
generated
vendored
11
node_modules/jsonparse/README.markdown
generated
vendored
|
@ -1,11 +0,0 @@
|
||||||
This is a streaming JSON parser. For a simpler, sax-based version see this gist: https://gist.github.com/1821394
|
|
||||||
|
|
||||||
The MIT License (MIT)
|
|
||||||
Copyright (c) 2011-2012 Tim Caswell
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
26
node_modules/jsonparse/bench.js
generated
vendored
26
node_modules/jsonparse/bench.js
generated
vendored
|
@ -1,26 +0,0 @@
|
||||||
var fs = require('fs'),
|
|
||||||
Parser = require('./jsonparse');
|
|
||||||
|
|
||||||
|
|
||||||
var json = fs.readFileSync("samplejson/basic.json");
|
|
||||||
|
|
||||||
|
|
||||||
while (true) {
|
|
||||||
var start = Date.now();
|
|
||||||
for (var i = 0; i < 1000; i++) {
|
|
||||||
JSON.parse(json);
|
|
||||||
}
|
|
||||||
var first = Date.now() - start;
|
|
||||||
|
|
||||||
start = Date.now();
|
|
||||||
var p = new Parser();
|
|
||||||
for (var i = 0; i < 1000; i++) {
|
|
||||||
p.write(json);
|
|
||||||
}
|
|
||||||
var second = Date.now() - start;
|
|
||||||
|
|
||||||
|
|
||||||
console.log("JSON.parse took %s", first);
|
|
||||||
console.log("streaming parser took %s", second);
|
|
||||||
console.log("streaming is %s times slower", second / first);
|
|
||||||
}
|
|
30
node_modules/jsonparse/examples/twitterfeed.js
generated
vendored
30
node_modules/jsonparse/examples/twitterfeed.js
generated
vendored
|
@ -1,30 +0,0 @@
|
||||||
var Parser = require('../jsonparse');
|
|
||||||
var Http = require('http');
|
|
||||||
require('./colors');
|
|
||||||
var p = new Parser();
|
|
||||||
var cred = require('./credentials');
|
|
||||||
var client = Http.createClient(80, "stream.twitter.com");
|
|
||||||
var request = client.request("GET", "/1/statuses/sample.json", {
|
|
||||||
"Host": "stream.twitter.com",
|
|
||||||
"Authorization": (new Buffer(cred.username + ":" + cred.password)).toString("base64")
|
|
||||||
});
|
|
||||||
request.on('response', function (response) {
|
|
||||||
console.log(response.statusCode);
|
|
||||||
console.dir(response.headers);
|
|
||||||
response.on('data', function (chunk) {
|
|
||||||
p.write(chunk);
|
|
||||||
});
|
|
||||||
response.on('end', function () {
|
|
||||||
console.log("END");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
request.end();
|
|
||||||
var text = "", name = "";
|
|
||||||
p.onValue = function (value) {
|
|
||||||
if (this.stack.length === 1 && this.key === 'text') { text = value; }
|
|
||||||
if (this.stack.length === 2 && this.key === 'name' && this.stack[1].key === 'user') { name = value; }
|
|
||||||
if (this.stack.length === 0) {
|
|
||||||
console.log(text.blue + " - " + name.yellow);
|
|
||||||
text = name = "";
|
|
||||||
}
|
|
||||||
};
|
|
413
node_modules/jsonparse/jsonparse.js
generated
vendored
413
node_modules/jsonparse/jsonparse.js
generated
vendored
|
@ -1,413 +0,0 @@
|
||||||
/*global Buffer*/
|
|
||||||
// Named constants with unique integer values
|
|
||||||
var C = {};
|
|
||||||
// Tokens
|
|
||||||
var LEFT_BRACE = C.LEFT_BRACE = 0x1;
|
|
||||||
var RIGHT_BRACE = C.RIGHT_BRACE = 0x2;
|
|
||||||
var LEFT_BRACKET = C.LEFT_BRACKET = 0x3;
|
|
||||||
var RIGHT_BRACKET = C.RIGHT_BRACKET = 0x4;
|
|
||||||
var COLON = C.COLON = 0x5;
|
|
||||||
var COMMA = C.COMMA = 0x6;
|
|
||||||
var TRUE = C.TRUE = 0x7;
|
|
||||||
var FALSE = C.FALSE = 0x8;
|
|
||||||
var NULL = C.NULL = 0x9;
|
|
||||||
var STRING = C.STRING = 0xa;
|
|
||||||
var NUMBER = C.NUMBER = 0xb;
|
|
||||||
// Tokenizer States
|
|
||||||
var START = C.START = 0x11;
|
|
||||||
var STOP = C.STOP = 0x12;
|
|
||||||
var TRUE1 = C.TRUE1 = 0x21;
|
|
||||||
var TRUE2 = C.TRUE2 = 0x22;
|
|
||||||
var TRUE3 = C.TRUE3 = 0x23;
|
|
||||||
var FALSE1 = C.FALSE1 = 0x31;
|
|
||||||
var FALSE2 = C.FALSE2 = 0x32;
|
|
||||||
var FALSE3 = C.FALSE3 = 0x33;
|
|
||||||
var FALSE4 = C.FALSE4 = 0x34;
|
|
||||||
var NULL1 = C.NULL1 = 0x41;
|
|
||||||
var NULL2 = C.NULL2 = 0x42;
|
|
||||||
var NULL3 = C.NULL3 = 0x43;
|
|
||||||
var NUMBER1 = C.NUMBER1 = 0x51;
|
|
||||||
var NUMBER3 = C.NUMBER3 = 0x53;
|
|
||||||
var STRING1 = C.STRING1 = 0x61;
|
|
||||||
var STRING2 = C.STRING2 = 0x62;
|
|
||||||
var STRING3 = C.STRING3 = 0x63;
|
|
||||||
var STRING4 = C.STRING4 = 0x64;
|
|
||||||
var STRING5 = C.STRING5 = 0x65;
|
|
||||||
var STRING6 = C.STRING6 = 0x66;
|
|
||||||
// Parser States
|
|
||||||
var VALUE = C.VALUE = 0x71;
|
|
||||||
var KEY = C.KEY = 0x72;
|
|
||||||
// Parser Modes
|
|
||||||
var OBJECT = C.OBJECT = 0x81;
|
|
||||||
var ARRAY = C.ARRAY = 0x82;
|
|
||||||
// Character constants
|
|
||||||
var BACK_SLASH = "\\".charCodeAt(0);
|
|
||||||
var FORWARD_SLASH = "\/".charCodeAt(0);
|
|
||||||
var BACKSPACE = "\b".charCodeAt(0);
|
|
||||||
var FORM_FEED = "\f".charCodeAt(0);
|
|
||||||
var NEWLINE = "\n".charCodeAt(0);
|
|
||||||
var CARRIAGE_RETURN = "\r".charCodeAt(0);
|
|
||||||
var TAB = "\t".charCodeAt(0);
|
|
||||||
|
|
||||||
var STRING_BUFFER_SIZE = 64 * 1024;
|
|
||||||
|
|
||||||
function Parser() {
|
|
||||||
this.tState = START;
|
|
||||||
this.value = undefined;
|
|
||||||
|
|
||||||
this.string = undefined; // string data
|
|
||||||
this.stringBuffer = Buffer.alloc ? Buffer.alloc(STRING_BUFFER_SIZE) : new Buffer(STRING_BUFFER_SIZE);
|
|
||||||
this.stringBufferOffset = 0;
|
|
||||||
this.unicode = undefined; // unicode escapes
|
|
||||||
this.highSurrogate = undefined;
|
|
||||||
|
|
||||||
this.key = undefined;
|
|
||||||
this.mode = undefined;
|
|
||||||
this.stack = [];
|
|
||||||
this.state = VALUE;
|
|
||||||
this.bytes_remaining = 0; // number of bytes remaining in multi byte utf8 char to read after split boundary
|
|
||||||
this.bytes_in_sequence = 0; // bytes in multi byte utf8 char to read
|
|
||||||
this.temp_buffs = { "2": new Buffer(2), "3": new Buffer(3), "4": new Buffer(4) }; // for rebuilding chars split before boundary is reached
|
|
||||||
|
|
||||||
// Stream offset
|
|
||||||
this.offset = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Slow code to string converter (only used when throwing syntax errors)
|
|
||||||
Parser.toknam = function (code) {
|
|
||||||
var keys = Object.keys(C);
|
|
||||||
for (var i = 0, l = keys.length; i < l; i++) {
|
|
||||||
var key = keys[i];
|
|
||||||
if (C[key] === code) { return key; }
|
|
||||||
}
|
|
||||||
return code && ("0x" + code.toString(16));
|
|
||||||
};
|
|
||||||
|
|
||||||
var proto = Parser.prototype;
|
|
||||||
proto.onError = function (err) { throw err; };
|
|
||||||
proto.charError = function (buffer, i) {
|
|
||||||
this.tState = STOP;
|
|
||||||
this.onError(new Error("Unexpected " + JSON.stringify(String.fromCharCode(buffer[i])) + " at position " + i + " in state " + Parser.toknam(this.tState)));
|
|
||||||
};
|
|
||||||
proto.appendStringChar = function (char) {
|
|
||||||
if (this.stringBufferOffset >= STRING_BUFFER_SIZE) {
|
|
||||||
this.string += this.stringBuffer.toString('utf8');
|
|
||||||
this.stringBufferOffset = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.stringBuffer[this.stringBufferOffset++] = char;
|
|
||||||
};
|
|
||||||
proto.appendStringBuf = function (buf, start, end) {
|
|
||||||
var size = buf.length;
|
|
||||||
if (typeof start === 'number') {
|
|
||||||
if (typeof end === 'number') {
|
|
||||||
if (end < 0) {
|
|
||||||
// adding a negative end decreeses the size
|
|
||||||
size = buf.length - start + end;
|
|
||||||
} else {
|
|
||||||
size = end - start;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
size = buf.length - start;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (size < 0) {
|
|
||||||
size = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.stringBufferOffset + size > STRING_BUFFER_SIZE) {
|
|
||||||
this.string += this.stringBuffer.toString('utf8', 0, this.stringBufferOffset);
|
|
||||||
this.stringBufferOffset = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
buf.copy(this.stringBuffer, this.stringBufferOffset, start, end);
|
|
||||||
this.stringBufferOffset += size;
|
|
||||||
};
|
|
||||||
proto.write = function (buffer) {
|
|
||||||
if (typeof buffer === "string") buffer = new Buffer(buffer);
|
|
||||||
var n;
|
|
||||||
for (var i = 0, l = buffer.length; i < l; i++) {
|
|
||||||
if (this.tState === START){
|
|
||||||
n = buffer[i];
|
|
||||||
this.offset++;
|
|
||||||
if(n === 0x7b){ this.onToken(LEFT_BRACE, "{"); // {
|
|
||||||
}else if(n === 0x7d){ this.onToken(RIGHT_BRACE, "}"); // }
|
|
||||||
}else if(n === 0x5b){ this.onToken(LEFT_BRACKET, "["); // [
|
|
||||||
}else if(n === 0x5d){ this.onToken(RIGHT_BRACKET, "]"); // ]
|
|
||||||
}else if(n === 0x3a){ this.onToken(COLON, ":"); // :
|
|
||||||
}else if(n === 0x2c){ this.onToken(COMMA, ","); // ,
|
|
||||||
}else if(n === 0x74){ this.tState = TRUE1; // t
|
|
||||||
}else if(n === 0x66){ this.tState = FALSE1; // f
|
|
||||||
}else if(n === 0x6e){ this.tState = NULL1; // n
|
|
||||||
}else if(n === 0x22){ // "
|
|
||||||
this.string = "";
|
|
||||||
this.stringBufferOffset = 0;
|
|
||||||
this.tState = STRING1;
|
|
||||||
}else if(n === 0x2d){ this.string = "-"; this.tState = NUMBER1; // -
|
|
||||||
}else{
|
|
||||||
if (n >= 0x30 && n < 0x40) { // 1-9
|
|
||||||
this.string = String.fromCharCode(n); this.tState = NUMBER3;
|
|
||||||
} else if (n === 0x20 || n === 0x09 || n === 0x0a || n === 0x0d) {
|
|
||||||
// whitespace
|
|
||||||
} else {
|
|
||||||
return this.charError(buffer, i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}else if (this.tState === STRING1){ // After open quote
|
|
||||||
n = buffer[i]; // get current byte from buffer
|
|
||||||
// check for carry over of a multi byte char split between data chunks
|
|
||||||
// & fill temp buffer it with start of this data chunk up to the boundary limit set in the last iteration
|
|
||||||
if (this.bytes_remaining > 0) {
|
|
||||||
for (var j = 0; j < this.bytes_remaining; j++) {
|
|
||||||
this.temp_buffs[this.bytes_in_sequence][this.bytes_in_sequence - this.bytes_remaining + j] = buffer[j];
|
|
||||||
}
|
|
||||||
|
|
||||||
this.appendStringBuf(this.temp_buffs[this.bytes_in_sequence]);
|
|
||||||
this.bytes_in_sequence = this.bytes_remaining = 0;
|
|
||||||
i = i + j - 1;
|
|
||||||
} else if (this.bytes_remaining === 0 && n >= 128) { // else if no remainder bytes carried over, parse multi byte (>=128) chars one at a time
|
|
||||||
if (n <= 193 || n > 244) {
|
|
||||||
return this.onError(new Error("Invalid UTF-8 character at position " + i + " in state " + Parser.toknam(this.tState)));
|
|
||||||
}
|
|
||||||
if ((n >= 194) && (n <= 223)) this.bytes_in_sequence = 2;
|
|
||||||
if ((n >= 224) && (n <= 239)) this.bytes_in_sequence = 3;
|
|
||||||
if ((n >= 240) && (n <= 244)) this.bytes_in_sequence = 4;
|
|
||||||
if ((this.bytes_in_sequence + i) > buffer.length) { // if bytes needed to complete char fall outside buffer length, we have a boundary split
|
|
||||||
for (var k = 0; k <= (buffer.length - 1 - i); k++) {
|
|
||||||
this.temp_buffs[this.bytes_in_sequence][k] = buffer[i + k]; // fill temp buffer of correct size with bytes available in this chunk
|
|
||||||
}
|
|
||||||
this.bytes_remaining = (i + this.bytes_in_sequence) - buffer.length;
|
|
||||||
i = buffer.length - 1;
|
|
||||||
} else {
|
|
||||||
this.appendStringBuf(buffer, i, i + this.bytes_in_sequence);
|
|
||||||
i = i + this.bytes_in_sequence - 1;
|
|
||||||
}
|
|
||||||
} else if (n === 0x22) {
|
|
||||||
this.tState = START;
|
|
||||||
this.string += this.stringBuffer.toString('utf8', 0, this.stringBufferOffset);
|
|
||||||
this.stringBufferOffset = 0;
|
|
||||||
this.onToken(STRING, this.string);
|
|
||||||
this.offset += Buffer.byteLength(this.string, 'utf8') + 1;
|
|
||||||
this.string = undefined;
|
|
||||||
}
|
|
||||||
else if (n === 0x5c) {
|
|
||||||
this.tState = STRING2;
|
|
||||||
}
|
|
||||||
else if (n >= 0x20) { this.appendStringChar(n); }
|
|
||||||
else {
|
|
||||||
return this.charError(buffer, i);
|
|
||||||
}
|
|
||||||
}else if (this.tState === STRING2){ // After backslash
|
|
||||||
n = buffer[i];
|
|
||||||
if(n === 0x22){ this.appendStringChar(n); this.tState = STRING1;
|
|
||||||
}else if(n === 0x5c){ this.appendStringChar(BACK_SLASH); this.tState = STRING1;
|
|
||||||
}else if(n === 0x2f){ this.appendStringChar(FORWARD_SLASH); this.tState = STRING1;
|
|
||||||
}else if(n === 0x62){ this.appendStringChar(BACKSPACE); this.tState = STRING1;
|
|
||||||
}else if(n === 0x66){ this.appendStringChar(FORM_FEED); this.tState = STRING1;
|
|
||||||
}else if(n === 0x6e){ this.appendStringChar(NEWLINE); this.tState = STRING1;
|
|
||||||
}else if(n === 0x72){ this.appendStringChar(CARRIAGE_RETURN); this.tState = STRING1;
|
|
||||||
}else if(n === 0x74){ this.appendStringChar(TAB); this.tState = STRING1;
|
|
||||||
}else if(n === 0x75){ this.unicode = ""; this.tState = STRING3;
|
|
||||||
}else{
|
|
||||||
return this.charError(buffer, i);
|
|
||||||
}
|
|
||||||
}else if (this.tState === STRING3 || this.tState === STRING4 || this.tState === STRING5 || this.tState === STRING6){ // unicode hex codes
|
|
||||||
n = buffer[i];
|
|
||||||
// 0-9 A-F a-f
|
|
||||||
if ((n >= 0x30 && n < 0x40) || (n > 0x40 && n <= 0x46) || (n > 0x60 && n <= 0x66)) {
|
|
||||||
this.unicode += String.fromCharCode(n);
|
|
||||||
if (this.tState++ === STRING6) {
|
|
||||||
var intVal = parseInt(this.unicode, 16);
|
|
||||||
this.unicode = undefined;
|
|
||||||
if (this.highSurrogate !== undefined && intVal >= 0xDC00 && intVal < (0xDFFF + 1)) { //<56320,57343> - lowSurrogate
|
|
||||||
this.appendStringBuf(new Buffer(String.fromCharCode(this.highSurrogate, intVal)));
|
|
||||||
this.highSurrogate = undefined;
|
|
||||||
} else if (this.highSurrogate === undefined && intVal >= 0xD800 && intVal < (0xDBFF + 1)) { //<55296,56319> - highSurrogate
|
|
||||||
this.highSurrogate = intVal;
|
|
||||||
} else {
|
|
||||||
if (this.highSurrogate !== undefined) {
|
|
||||||
this.appendStringBuf(new Buffer(String.fromCharCode(this.highSurrogate)));
|
|
||||||
this.highSurrogate = undefined;
|
|
||||||
}
|
|
||||||
this.appendStringBuf(new Buffer(String.fromCharCode(intVal)));
|
|
||||||
}
|
|
||||||
this.tState = STRING1;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return this.charError(buffer, i);
|
|
||||||
}
|
|
||||||
} else if (this.tState === NUMBER1 || this.tState === NUMBER3) {
|
|
||||||
n = buffer[i];
|
|
||||||
|
|
||||||
switch (n) {
|
|
||||||
case 0x30: // 0
|
|
||||||
case 0x31: // 1
|
|
||||||
case 0x32: // 2
|
|
||||||
case 0x33: // 3
|
|
||||||
case 0x34: // 4
|
|
||||||
case 0x35: // 5
|
|
||||||
case 0x36: // 6
|
|
||||||
case 0x37: // 7
|
|
||||||
case 0x38: // 8
|
|
||||||
case 0x39: // 9
|
|
||||||
case 0x2e: // .
|
|
||||||
case 0x65: // e
|
|
||||||
case 0x45: // E
|
|
||||||
case 0x2b: // +
|
|
||||||
case 0x2d: // -
|
|
||||||
this.string += String.fromCharCode(n);
|
|
||||||
this.tState = NUMBER3;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
this.tState = START;
|
|
||||||
var result = Number(this.string);
|
|
||||||
|
|
||||||
if (isNaN(result)){
|
|
||||||
return this.charError(buffer, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((this.string.match(/[0-9]+/) == this.string) && (result.toString() != this.string)) {
|
|
||||||
// Long string of digits which is an ID string and not valid and/or safe JavaScript integer Number
|
|
||||||
this.onToken(STRING, this.string);
|
|
||||||
} else {
|
|
||||||
this.onToken(NUMBER, result);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.offset += this.string.length - 1;
|
|
||||||
this.string = undefined;
|
|
||||||
i--;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}else if (this.tState === TRUE1){ // r
|
|
||||||
if (buffer[i] === 0x72) { this.tState = TRUE2; }
|
|
||||||
else { return this.charError(buffer, i); }
|
|
||||||
}else if (this.tState === TRUE2){ // u
|
|
||||||
if (buffer[i] === 0x75) { this.tState = TRUE3; }
|
|
||||||
else { return this.charError(buffer, i); }
|
|
||||||
}else if (this.tState === TRUE3){ // e
|
|
||||||
if (buffer[i] === 0x65) { this.tState = START; this.onToken(TRUE, true); this.offset+= 3; }
|
|
||||||
else { return this.charError(buffer, i); }
|
|
||||||
}else if (this.tState === FALSE1){ // a
|
|
||||||
if (buffer[i] === 0x61) { this.tState = FALSE2; }
|
|
||||||
else { return this.charError(buffer, i); }
|
|
||||||
}else if (this.tState === FALSE2){ // l
|
|
||||||
if (buffer[i] === 0x6c) { this.tState = FALSE3; }
|
|
||||||
else { return this.charError(buffer, i); }
|
|
||||||
}else if (this.tState === FALSE3){ // s
|
|
||||||
if (buffer[i] === 0x73) { this.tState = FALSE4; }
|
|
||||||
else { return this.charError(buffer, i); }
|
|
||||||
}else if (this.tState === FALSE4){ // e
|
|
||||||
if (buffer[i] === 0x65) { this.tState = START; this.onToken(FALSE, false); this.offset+= 4; }
|
|
||||||
else { return this.charError(buffer, i); }
|
|
||||||
}else if (this.tState === NULL1){ // u
|
|
||||||
if (buffer[i] === 0x75) { this.tState = NULL2; }
|
|
||||||
else { return this.charError(buffer, i); }
|
|
||||||
}else if (this.tState === NULL2){ // l
|
|
||||||
if (buffer[i] === 0x6c) { this.tState = NULL3; }
|
|
||||||
else { return this.charError(buffer, i); }
|
|
||||||
}else if (this.tState === NULL3){ // l
|
|
||||||
if (buffer[i] === 0x6c) { this.tState = START; this.onToken(NULL, null); this.offset += 3; }
|
|
||||||
else { return this.charError(buffer, i); }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
proto.onToken = function (token, value) {
|
|
||||||
// Override this to get events
|
|
||||||
};
|
|
||||||
|
|
||||||
proto.parseError = function (token, value) {
|
|
||||||
this.tState = STOP;
|
|
||||||
this.onError(new Error("Unexpected " + Parser.toknam(token) + (value ? ("(" + JSON.stringify(value) + ")") : "") + " in state " + Parser.toknam(this.state)));
|
|
||||||
};
|
|
||||||
proto.push = function () {
|
|
||||||
this.stack.push({value: this.value, key: this.key, mode: this.mode});
|
|
||||||
};
|
|
||||||
proto.pop = function () {
|
|
||||||
var value = this.value;
|
|
||||||
var parent = this.stack.pop();
|
|
||||||
this.value = parent.value;
|
|
||||||
this.key = parent.key;
|
|
||||||
this.mode = parent.mode;
|
|
||||||
this.emit(value);
|
|
||||||
if (!this.mode) { this.state = VALUE; }
|
|
||||||
};
|
|
||||||
proto.emit = function (value) {
|
|
||||||
if (this.mode) { this.state = COMMA; }
|
|
||||||
this.onValue(value);
|
|
||||||
};
|
|
||||||
proto.onValue = function (value) {
|
|
||||||
// Override me
|
|
||||||
};
|
|
||||||
proto.onToken = function (token, value) {
|
|
||||||
if(this.state === VALUE){
|
|
||||||
if(token === STRING || token === NUMBER || token === TRUE || token === FALSE || token === NULL){
|
|
||||||
if (this.value) {
|
|
||||||
this.value[this.key] = value;
|
|
||||||
}
|
|
||||||
this.emit(value);
|
|
||||||
}else if(token === LEFT_BRACE){
|
|
||||||
this.push();
|
|
||||||
if (this.value) {
|
|
||||||
this.value = this.value[this.key] = {};
|
|
||||||
} else {
|
|
||||||
this.value = {};
|
|
||||||
}
|
|
||||||
this.key = undefined;
|
|
||||||
this.state = KEY;
|
|
||||||
this.mode = OBJECT;
|
|
||||||
}else if(token === LEFT_BRACKET){
|
|
||||||
this.push();
|
|
||||||
if (this.value) {
|
|
||||||
this.value = this.value[this.key] = [];
|
|
||||||
} else {
|
|
||||||
this.value = [];
|
|
||||||
}
|
|
||||||
this.key = 0;
|
|
||||||
this.mode = ARRAY;
|
|
||||||
this.state = VALUE;
|
|
||||||
}else if(token === RIGHT_BRACE){
|
|
||||||
if (this.mode === OBJECT) {
|
|
||||||
this.pop();
|
|
||||||
} else {
|
|
||||||
return this.parseError(token, value);
|
|
||||||
}
|
|
||||||
}else if(token === RIGHT_BRACKET){
|
|
||||||
if (this.mode === ARRAY) {
|
|
||||||
this.pop();
|
|
||||||
} else {
|
|
||||||
return this.parseError(token, value);
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
return this.parseError(token, value);
|
|
||||||
}
|
|
||||||
}else if(this.state === KEY){
|
|
||||||
if (token === STRING) {
|
|
||||||
this.key = value;
|
|
||||||
this.state = COLON;
|
|
||||||
} else if (token === RIGHT_BRACE) {
|
|
||||||
this.pop();
|
|
||||||
} else {
|
|
||||||
return this.parseError(token, value);
|
|
||||||
}
|
|
||||||
}else if(this.state === COLON){
|
|
||||||
if (token === COLON) { this.state = VALUE; }
|
|
||||||
else { return this.parseError(token, value); }
|
|
||||||
}else if(this.state === COMMA){
|
|
||||||
if (token === COMMA) {
|
|
||||||
if (this.mode === ARRAY) { this.key++; this.state = VALUE; }
|
|
||||||
else if (this.mode === OBJECT) { this.state = KEY; }
|
|
||||||
|
|
||||||
} else if (token === RIGHT_BRACKET && this.mode === ARRAY || token === RIGHT_BRACE && this.mode === OBJECT) {
|
|
||||||
this.pop();
|
|
||||||
} else {
|
|
||||||
return this.parseError(token, value);
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
return this.parseError(token, value);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Parser.C = C;
|
|
||||||
|
|
||||||
module.exports = Parser;
|
|
61
node_modules/jsonparse/package.json
generated
vendored
61
node_modules/jsonparse/package.json
generated
vendored
|
@ -1,61 +0,0 @@
|
||||||
{
|
|
||||||
"_args": [
|
|
||||||
[
|
|
||||||
"jsonparse@1.3.1",
|
|
||||||
"/home/nuno/Documents/core/software/fresh/js/metaforecasts/metaforecasts-current"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"_from": "jsonparse@1.3.1",
|
|
||||||
"_id": "jsonparse@1.3.1",
|
|
||||||
"_inBundle": false,
|
|
||||||
"_integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
|
|
||||||
"_location": "/jsonparse",
|
|
||||||
"_phantomChildren": {},
|
|
||||||
"_requested": {
|
|
||||||
"type": "version",
|
|
||||||
"registry": true,
|
|
||||||
"raw": "jsonparse@1.3.1",
|
|
||||||
"name": "jsonparse",
|
|
||||||
"escapedName": "jsonparse",
|
|
||||||
"rawSpec": "1.3.1",
|
|
||||||
"saveSpec": null,
|
|
||||||
"fetchSpec": "1.3.1"
|
|
||||||
},
|
|
||||||
"_requiredBy": [
|
|
||||||
"/json2csv"
|
|
||||||
],
|
|
||||||
"_resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
|
|
||||||
"_spec": "1.3.1",
|
|
||||||
"_where": "/home/nuno/Documents/core/software/fresh/js/metaforecasts/metaforecasts-current",
|
|
||||||
"author": {
|
|
||||||
"name": "Tim Caswell",
|
|
||||||
"email": "tim@creationix.com"
|
|
||||||
},
|
|
||||||
"bugs": {
|
|
||||||
"url": "http://github.com/creationix/jsonparse/issues"
|
|
||||||
},
|
|
||||||
"description": "This is a pure-js JSON streaming parser for node.js",
|
|
||||||
"devDependencies": {
|
|
||||||
"tap": "~0.3.3",
|
|
||||||
"tape": "~0.1.1"
|
|
||||||
},
|
|
||||||
"engines": [
|
|
||||||
"node >= 0.2.0"
|
|
||||||
],
|
|
||||||
"homepage": "https://github.com/creationix/jsonparse#readme",
|
|
||||||
"license": "MIT",
|
|
||||||
"main": "jsonparse.js",
|
|
||||||
"name": "jsonparse",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git+ssh://git@github.com/creationix/jsonparse.git"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "tap test/*.js"
|
|
||||||
},
|
|
||||||
"tags": [
|
|
||||||
"json",
|
|
||||||
"stream"
|
|
||||||
],
|
|
||||||
"version": "1.3.1"
|
|
||||||
}
|
|
167
node_modules/jsonparse/samplejson/basic.json
generated
vendored
167
node_modules/jsonparse/samplejson/basic.json
generated
vendored
|
@ -1,167 +0,0 @@
|
||||||
[
|
|
||||||
{
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"image": [
|
|
||||||
{"shape": "rect", "fill": "#333", "stroke": "#999", "x": 0.5e+1, "y": 0.5, "z": 0.8e-0, "w": 0.5e5, "u": 2E10, "foo": 2E+1, "bar": 2E-0, "width": 47, "height": 47}
|
|
||||||
],
|
|
||||||
"jumpable": 3,
|
|
||||||
"solid": {
|
|
||||||
"1": [2,4],
|
|
||||||
"2": [],
|
|
||||||
"3": [2,6],
|
|
||||||
"4": [],
|
|
||||||
"5": [2,8,1,3,7,9,4,6],
|
|
||||||
"6": [],
|
|
||||||
"7": [4,8],
|
|
||||||
"8": [],
|
|
||||||
"9": [6,8]
|
|
||||||
},
|
|
||||||
"corners": {"1": true,"3": true,"7": true,"9": true}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"image": [
|
|
||||||
{"shape": "polygon", "fill": "#248", "stroke": "#48f", "points": [[0.5,47.5],[47.5,47.5],[47.5,0.5]]}
|
|
||||||
],
|
|
||||||
"solid": {
|
|
||||||
"1": [2,4],
|
|
||||||
"2": [1],
|
|
||||||
"3": [2],
|
|
||||||
"4": [],
|
|
||||||
"5": [2,8,1,3,7,9,4,6],
|
|
||||||
"6": [],
|
|
||||||
"7": [4,8],
|
|
||||||
"8": [],
|
|
||||||
"9": [6,8]
|
|
||||||
},
|
|
||||||
"corners": {"1": true,"3": true,"7": false,"9": true}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"image": [
|
|
||||||
{"shape": "polygon", "fill": "#248", "stroke": "#48f", "points": [[0.5,0.5],[47.5,47.5],[0.5,47.5]]}
|
|
||||||
],
|
|
||||||
"solid": {
|
|
||||||
"1": [2],
|
|
||||||
"2": [3],
|
|
||||||
"3": [2,6],
|
|
||||||
"4": [],
|
|
||||||
"5": [2,8,1,3,7,9,4,6],
|
|
||||||
"6": [],
|
|
||||||
"7": [4,8],
|
|
||||||
"8": [],
|
|
||||||
"9": [6,8]
|
|
||||||
},
|
|
||||||
"corners": {"1": true,"3": true,"7": true,"9": false}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"image": [
|
|
||||||
{"shape": "polygon", "fill": "#333", "stroke": "#999", "points": [[0.5,0.5],[47.5,47.5],[47.5,0.5]]}
|
|
||||||
],
|
|
||||||
"jumpable": 3,
|
|
||||||
"solid": {
|
|
||||||
"1": [2,4],
|
|
||||||
"2": [],
|
|
||||||
"3": [2,6],
|
|
||||||
"4": [],
|
|
||||||
"5": [2,8,1,3,7,9,4,6],
|
|
||||||
"6": [3],
|
|
||||||
"7": [4,8],
|
|
||||||
"8": [7],
|
|
||||||
"9": [6,8]
|
|
||||||
},
|
|
||||||
"corners": {"1": false,"3": true,"7": true,"9": true}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"image": [
|
|
||||||
{"shape": "polygon", "fill": "#333", "stroke": "#999", "points": [[0.5,0.5],[0.5,47.5],[47.5,0.5]]}
|
|
||||||
],
|
|
||||||
"jumpable": 3,
|
|
||||||
"solid": {
|
|
||||||
"1": [2,4],
|
|
||||||
"2": [],
|
|
||||||
"3": [2,6],
|
|
||||||
"4": [1],
|
|
||||||
"5": [2,8,1,3,7,9,4,6],
|
|
||||||
"6": [],
|
|
||||||
"7": [4,8],
|
|
||||||
"8": [9],
|
|
||||||
"9": [6,8]
|
|
||||||
},
|
|
||||||
"corners": {"1": true,"3": false,"7": true,"9": true}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"image": [
|
|
||||||
{"shape": "polygon", "fill": "#482", "stroke": "#8f4", "points": [[0.5,47.5],[0.5,23.5],[24.5,23.5],[24.5,0.5],[47.5,0.5],[47.5,47.5]]}
|
|
||||||
],
|
|
||||||
"jumpable": 3,
|
|
||||||
"solid": {
|
|
||||||
"1": [2,4],
|
|
||||||
"2": [],
|
|
||||||
"3": [6,2],
|
|
||||||
"4": [],
|
|
||||||
"5": [2,8,1,3,7,9,4,6],
|
|
||||||
"6": [9],
|
|
||||||
"7": [4,8],
|
|
||||||
"8": [],
|
|
||||||
"9": [6,8]
|
|
||||||
},
|
|
||||||
"corners": {"1": true,"3": true,"7": false,"9": true}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"image": [
|
|
||||||
{"shape": "polygon", "fill": "#482", "stroke": "#8f4", "points": [[0.5,0.5],[23.5,0.5],[23.5,24.5],[47.5,24.5],[47.5,47.5],[0.5,47.5]]}
|
|
||||||
],
|
|
||||||
"jumpable": 3,
|
|
||||||
"solid": {
|
|
||||||
"1": [4,2],
|
|
||||||
"2": [],
|
|
||||||
"3": [2,6],
|
|
||||||
"4": [7],
|
|
||||||
"5": [2,8,1,3,7,9,4,6],
|
|
||||||
"6": [],
|
|
||||||
"7": [4,8],
|
|
||||||
"8": [],
|
|
||||||
"9": [6,8]
|
|
||||||
},
|
|
||||||
"corners": {"1": true,"3": true,"7": true,"9": false}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"image": [
|
|
||||||
{"shape": "circle", "fill": "#ff0", "stroke": "#ff8", "cx": 24, "cy": 24, "r": 18}
|
|
||||||
],
|
|
||||||
"item": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"image": [
|
|
||||||
{"shape": "polygon", "fill": "#842", "stroke": "#f84", "points": [[4.5,0.5],[14.5,0.5],[14.5,17.5],[34,17.5],[33.5,0.5],[43.5,0.5],[43.5,47.5],[33.5,47.5],[33.5,30.5],[14.5,30.5],[14.5,47.5],[4.5,47.5]]}
|
|
||||||
],
|
|
||||||
"jumpable": 3
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"image": [
|
|
||||||
{"shape": "polygon", "fill": "#333", "stroke": "#999", "points": [[0.5,0.5],[47.5,0.5],[24,47.5]]}
|
|
||||||
],
|
|
||||||
"jumpable": 3,
|
|
||||||
"solid": {
|
|
||||||
"1": [2,4],
|
|
||||||
"2": [],
|
|
||||||
"3": [2,6],
|
|
||||||
"4": [1],
|
|
||||||
"5": [2,8,1,3,7,9,4,6],
|
|
||||||
"6": [3],
|
|
||||||
"7": [4,8],
|
|
||||||
"8": [],
|
|
||||||
"9": [6,8]
|
|
||||||
},
|
|
||||||
"corners": {"1": false,"3": false,"7": true,"9": true}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"image": [
|
|
||||||
{"shape": "rect", "fill": "#114acb", "x": 0.5, "y": 0.5, "width": 47, "height": 47},
|
|
||||||
{"shape": "polygon", "fill": "rgba(255,255,255,0.30)", "points": [[0.5,0.5],[47.5,0.5],[40,8],[8,8],[8,40],[0.5,47.5]]},
|
|
||||||
{"shape": "polygon", "fill": "rgba(0,0,0,0.30)", "points": [[47.5,0.5],[48,48],[0.5,47.5],[8,40],[40,40],[40,8]]},
|
|
||||||
{"shape": "polygon", "fill": "rgb(255,255,0)", "stroke": "rgba(255,255,0,0.5)", "points": [[24,9],[35,20],[26,29],[26,33],[22,33],[22,27],[29,20],[24,15],[16,23],[13,20]]},
|
|
||||||
{"shape": "rect", "fill": "rgb(255,255,0)", "stroke": "rgba(255,255,0,0.5)", "x": 22, "y":35, "width": 4, "height": 4}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user