diff --git a/add-on/_locales/en/messages.json b/add-on/_locales/en/messages.json index f2c5acc2e..f433e9940 100644 --- a/add-on/_locales/en/messages.json +++ b/add-on/_locales/en/messages.json @@ -366,6 +366,18 @@ "message": "drop it here to share", "description": "Partial info stats beneath the header on the share files page (quickUpload_drop_it_here)" }, + "quickUpload_options_show": { + "message": "upload options", + "description": "Button on the share files page (quickUpload_options_show)" + }, + "quickUpload_options_wrapWithDirectory": { + "message": "Wrap single files in a directory to preserve their filenames.", + "description": "Checkbox label on the share files page (quickUpload_options_wrapWithDirectory)" + }, + "quickUpload_options_pinUpload": { + "message": "Pin files so they are retained when performing garbage collection on your IPFS repo.", + "description": "Checkbox label on the share files page (quickUpload_options_pinUpload)" + }, "page_proxyAcl_title": { "message": "Manage Permissions", "description": "Page title for the IPFS proxy ACL page (page_proxyAcl_title)" diff --git a/add-on/src/background/big-deps.js b/add-on/src/background/big-deps.js new file mode 100644 index 000000000..7b12c1f75 --- /dev/null +++ b/add-on/src/background/big-deps.js @@ -0,0 +1,12 @@ +'use strict' +/* eslint-env browser, webextensions */ + +// Problem: addons-linter does not permit .js bigger than 4MB (FILE_TOO_LARGE) +// Solution: this file lets us fine-tune to decide what to extract +// into a shared bundle created by browserify+factor-bundle + +const Ipfs = require('ipfs') +// const IpfsApi = require('ipfs-api') +const node = new Ipfs({ start: false }) +console.log('this code wont run :-)', node) +// console.log('fake api', IpfsApi) diff --git a/add-on/src/lib/ipfs-companion.js b/add-on/src/lib/ipfs-companion.js index 2a32bf01f..71ffccb89 100644 --- a/add-on/src/lib/ipfs-companion.js +++ b/add-on/src/lib/ipfs-companion.js @@ -219,7 +219,7 @@ module.exports = async function init () { // URL Uploader // ------------------------------------------------------------------- - async function addFromURL (info) { + async function addFromURL (info, options) { const srcUrl = await findUrlForContext(info) let result try { @@ -233,17 +233,19 @@ module.exports = async function init () { // console.log('addFromURL.fetchOptions', fetchOptions) const response = await fetch(srcUrl, fetchOptions) const blob = await response.blob() - const buffer = await new Promise((resolve, reject) => { const reader = new FileReader() reader.onloadend = () => resolve(Buffer.from(reader.result)) reader.onerror = reject reader.readAsArrayBuffer(blob) }) - - result = await ipfs.files.add(buffer) + const data = { + path: decodeURIComponent(new URL(response.url).pathname.split('/').pop()), + content: buffer + } + result = await ipfs.files.add(data, options) } else { - result = await ipfs.util.addFromURL(srcUrl) + result = await ipfs.util.addFromURL(srcUrl, options) } } catch (error) { console.error('Error in upload to IPFS context menu', error) @@ -274,19 +276,24 @@ module.exports = async function init () { } } - function uploadResultHandler (result) { - result.forEach(function (file) { + async function uploadResultHandler (result) { + for (let file of result) { if (file && file.hash) { const {path, url} = getIpfsPathAndNativeAddress(file.hash) - browser.tabs.create({ - 'url': url - }) - console.info('[ipfs-companion] successfully stored', path) + // open the wrapping directory (or the CID if wrapping was disabled) + if (result.length === 1 || file.path === '' || file.path === file.hash) { + await browser.tabs.create({ + 'url': url + }) + } + // preload every item if (state.preloadAtPublicGateway) { preloadAtPublicGateway(path) } + console.info('[ipfs-companion] successfully stored', file) } - }) + } + return result } // Page-specific Actions @@ -589,17 +596,20 @@ module.exports = async function init () { return ipfs }, - async ipfsAddAndShow (buffer) { + async ipfsAddAndShow (data, options) { + options = options || {} let result try { - result = await api.ipfs.files.add(buffer) + result = await api.ipfs.files.add(data, options) + if (options.wrapWithDirectory && result.length !== data.length + 1) { + throw new Error(`ipfs.files.add result should include an entry for every uploaded file plus additional one for a wrapping directory (${data.length + 1} in total), but found only ${result.length} entries`) + } } catch (err) { console.error('Failed to IPFS add', err) notify('notify_uploadErrorTitle', 'notify_inlineErrorMsg', `${err.message}`) throw err } - uploadResultHandler(result) - return result + return uploadResultHandler(result) }, async destroy () { diff --git a/add-on/src/popup/quick-upload.css b/add-on/src/popup/quick-upload.css index c34cad974..3c84c7039 100644 --- a/add-on/src/popup/quick-upload.css +++ b/add-on/src/popup/quick-upload.css @@ -1,4 +1,5 @@ @import url('../../ui-kit/tachyons.css'); +@import url('../../ui-kit/ipfs.css'); @import url('heartbeat.css'); html, body, #root { @@ -11,3 +12,37 @@ html, body, #root { .hover-inner-shadow:hover { box-shadow: inset 0 0 10px 5px rgba(211, 235, 237, 0.2); } + +.no-user-select { + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; +} + +/* Temporary CSS for custom checkbox (TODO: move/replace with ipfs-css */ +input[type='checkbox'] { + display:none; +} + +input[type=checkbox] + .mark { + background: transparent; + height: 16px; + width: 16px; + display: inline-block; + padding: 0; + border: 1px #6ACAD1 solid; + position: relative; +} + +input[type=checkbox]:checked + .mark::after { + color: #6ACAD1; + position: absolute; + left: 4px; + top: 2px; + content: ""; + height: 6px; + width: 6px; + border-left: 2px solid; + border-bottom: 2px solid; + transform: rotate(-45deg); +} diff --git a/add-on/src/popup/quick-upload.html b/add-on/src/popup/quick-upload.html index 82fd6ceac..ed0304e26 100644 --- a/add-on/src/popup/quick-upload.html +++ b/add-on/src/popup/quick-upload.html @@ -2,7 +2,6 @@ - IPFS Upload diff --git a/add-on/src/popup/quick-upload.js b/add-on/src/popup/quick-upload.js index e2bd39033..d8c353435 100644 --- a/add-on/src/popup/quick-upload.js +++ b/add-on/src/popup/quick-upload.js @@ -6,16 +6,30 @@ const choo = require('choo') const html = require('choo/html') const logo = require('./logo') +document.title = browser.i18n.getMessage('panel_quickUpload') + const app = choo() app.use(quickUploadStore) app.route('*', quickUploadPage) app.mount('#root') +function file2buffer (file) { + return new Promise((resolve, reject) => { + const reader = new FileReader() + reader.onloadend = () => resolve(Buffer.from(reader.result)) + reader.onerror = reject + reader.readAsArrayBuffer(file) + }) +} + function quickUploadStore (state, emitter) { state.message = '' state.peerCount = '' state.ipfsNodeType = 'external' + state.wrapWithDirectory = true + state.pinUpload = true + state.expandOptions = false function updateState ({ipfsNodeType, peerCount}) { state.ipfsNodeType = ipfsNodeType @@ -37,22 +51,25 @@ function quickUploadStore (state, emitter) { }) emitter.on('fileInputChange', async (event) => { - const file = event.target.files[0] try { const { ipfsCompanion } = await browser.runtime.getBackgroundPage() - - const buffer = await new Promise((resolve, reject) => { - const reader = new FileReader() - reader.onloadend = () => resolve(Buffer.from(reader.result)) - reader.onerror = reject - reader.readAsArrayBuffer(file) - }) - - await ipfsCompanion.ipfsAddAndShow(buffer) - + const uploadTab = await browser.tabs.getCurrent() + const files = [] + for (let file of event.target.files) { + const buffer = await file2buffer(file) + files.push({ + path: file.name, + content: buffer + }) + } + const uploadOptions = { + wrapWithDirectory: state.wrapWithDirectory || files.length > 1, + pin: state.pinUpload + } + const result = await ipfsCompanion.ipfsAddAndShow(files, uploadOptions) + console.log('Upload result', result) // close upload tab as it will be replaced with a new tab with uploaded content - const tab = await browser.tabs.getCurrent() - browser.tabs.remove(tab.id) + browser.tabs.remove(uploadTab.id) } catch (err) { console.error('Unable to perform quick upload', err) // keep upload tab and display error message in it @@ -62,14 +79,41 @@ function quickUploadStore (state, emitter) { }) } +function quickUploadOptions (state, emit) { + const onExpandOptions = (e) => { state.expandOptions = true; emit('render') } + const onWrapWithDirectoryChange = (e) => { state.wrapWithDirectory = e.target.checked } + const onPinUploadChange = (e) => { state.pinUpload = e.target.checked } + if (state.expandOptions) { + return html` +
+ + +
+ ` + } + return html` + + ` +} + function quickUploadPage (state, emit) { const onFileInputChange = (e) => emit('fileInputChange', e) const {peerCount} = state return html` -
+
-
+
${logo({ size: 80, path: '../../icons', @@ -84,8 +128,8 @@ function quickUploadPage (state, emit) {

-
` diff --git a/package.json b/package.json index 1d6a6e2b1..14abcccdc 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "build:copy:wx-polyfill-lib": "shx cp node_modules/webextension-polyfill/dist/browser-polyfill.min.js add-on/dist/contentScripts/browser-polyfill.min.js", "build:js": "run-p build:js:*", "build:js:gui": "browserify -p prundupify -g [ uglifyify --compress [ --inline=0 ] ] -t [ browserify-package-json --global ] add-on/src/popup/browser-action/index.js add-on/src/popup/page-action/index.js add-on/src/popup/quick-upload.js -p [ factor-bundle -o add-on/dist/popup/browser-action/browser-action.js -o add-on/dist/popup/page-action/page-action.js -o add-on/dist/popup/quick-upload.js] -o add-on/dist/ipfs-companion-gui-common.js", - "build:js:backend": "browserify -p prundupify -g [ uglifyify --compress [ --inline=0 ] ] -t [ browserify-package-json --global ] add-on/src/background/background.js add-on/src/options/options.js add-on/src/pages/proxy-acl/index.js add-on/src/pages/proxy-access-dialog/index.js -p [ factor-bundle -o add-on/dist/background/background.js -o add-on/dist/options/options.js -o add-on/dist/pages/proxy-acl/proxy-acl.js -o add-on/dist/pages/proxy-access-dialog/proxy-access-dialog.js ] -o add-on/dist/ipfs-companion-common.js", + "build:js:backend": "browserify -p prundupify -g [ uglifyify --compress [ --inline=0 ] ] -t [ browserify-package-json --global ] add-on/src/background/background.js add-on/src/background/big-deps.js add-on/src/options/options.js add-on/src/pages/proxy-acl/index.js add-on/src/pages/proxy-access-dialog/index.js -p [ factor-bundle -o add-on/dist/background/background.js -o add-on/dist/background/big-deps.js -o add-on/dist/options/options.js -o add-on/dist/pages/proxy-acl/proxy-acl.js -o add-on/dist/pages/proxy-access-dialog/proxy-access-dialog.js ] -o add-on/dist/ipfs-companion-common.js", "build:content-scripts": "run-p build:content-scripts:*", "build:content-scripts:ipfs-proxy": "run-s build:content-scripts:ipfs-proxy:*", "build:content-scripts:ipfs-proxy:page": "browserify -p prundupify -g uglifyify -t [ browserify-package-json --global ] add-on/src/contentScripts/ipfs-proxy/page.js -o add-on/dist/contentScripts/ipfs-proxy/page.js", @@ -94,7 +94,7 @@ "doc-sniff": "1.0.1", "file-type": "7.6.0", "ipfs": "0.28.2", - "ipfs-api": "18.2.0", + "ipfs-api": "21.0.0", "ipfs-css": "0.3.0", "ipfs-postmsg-proxy": "2.16.0", "is-ipfs": "0.3.2", diff --git a/yarn.lock b/yarn.lock index 43ec641ca..1280ac6f6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1039,6 +1039,17 @@ browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.0.6, browserify- inherits "^2.0.1" safe-buffer "^5.0.1" +browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + browserify-cipher@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" @@ -1160,6 +1171,17 @@ bs58check@<3.0.0, bs58check@^2.0.0: bs58 "^4.0.0" create-hash "^1.1.0" +buffer-alloc-unsafe@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-0.1.1.tgz#ffe1f67551dd055737de253337bfe853dfab1a6a" + +buffer-alloc@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.1.0.tgz#05514d33bf1656d3540c684f65b1202e90eca303" + dependencies: + buffer-alloc-unsafe "^0.1.0" + buffer-fill "^0.1.0" + buffer-compare@=1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-compare/-/buffer-compare-1.0.0.tgz#acaa7a966e98eee9fae14b31c39a5f158fb3c4a2" @@ -1180,6 +1202,14 @@ buffer-equals@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/buffer-equals/-/buffer-equals-1.0.4.tgz#0353b54fd07fd9564170671ae6f66b9cf10d27f5" +buffer-fill@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-0.1.1.tgz#76d825c4d6e50e06b7a31eb520c04d08cc235071" + +buffer-from@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531" + buffer-indexof@~0.0.0: version "0.0.2" resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-0.0.2.tgz#ed0f36b7ae166a66a7cd174c0467ae8dedf008f5" @@ -1729,6 +1759,15 @@ concat-stream@^1.6.1: readable-stream "^2.2.2" typedarray "^0.0.6" +concat-stream@^1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + concat-stream@~1.5.1: version "1.5.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266" @@ -3313,6 +3352,10 @@ from@~0: version "0.1.7" resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + "fs-ext@github:baudehlo/node-fs-ext#master": version "1.0.0" resolved "https://codeload.github.com/baudehlo/node-fs-ext/tar.gz/500be8514729c194ac7ca2b30b5bc7eaf812670d" @@ -4167,7 +4210,47 @@ ip@^1.1.0, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" -ipfs-api@18.2.0, ipfs-api@^18.1.2: +ipfs-api@21.0.0: + version "21.0.0" + resolved "https://registry.yarnpkg.com/ipfs-api/-/ipfs-api-21.0.0.tgz#fd8611025e8eff91cde0fad1ca2386d73ff05cd8" + dependencies: + async "^2.6.0" + big.js "^5.0.3" + bs58 "^4.0.1" + cids "~0.5.3" + concat-stream "^1.6.2" + detect-node "^2.0.3" + flatmap "0.0.3" + glob "^7.1.2" + ipfs-block "~0.7.1" + ipfs-unixfs "~0.1.14" + ipld-dag-cbor "~0.12.0" + ipld-dag-pb "~0.14.4" + is-ipfs "~0.3.2" + is-pull-stream "0.0.0" + is-stream "^1.1.0" + libp2p-crypto "^0.13.0" + lru-cache "^4.1.3" + multiaddr "^5.0.0" + multibase "~0.4.0" + multihashes "~0.4.13" + ndjson "^1.5.0" + once "^1.4.0" + peer-id "~0.10.7" + peer-info "~0.14.1" + promisify-es6 "^1.0.3" + pull-defer "^0.2.2" + pull-pushable "^2.2.0" + pull-stream-to-stream "^1.3.4" + pump "^3.0.0" + qs "^6.5.2" + readable-stream "^2.3.6" + stream-http "^2.8.2" + stream-to-pull-stream "^1.7.2" + streamifier "^0.1.1" + tar-stream "^1.6.0" + +ipfs-api@^18.1.2: version "18.2.0" resolved "https://registry.yarnpkg.com/ipfs-api/-/ipfs-api-18.2.0.tgz#10b3095509aa4ec121ba1b4a7e29edea4e61281d" dependencies: @@ -4235,7 +4318,7 @@ ipfs-block-service@~0.13.0: version "0.13.0" resolved "https://registry.yarnpkg.com/ipfs-block-service/-/ipfs-block-service-0.13.0.tgz#4d827863c59f34f9e44deb92dea9a5b1a9fcb093" -ipfs-block@^0.7.1: +ipfs-block@^0.7.1, ipfs-block@~0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/ipfs-block/-/ipfs-block-0.7.1.tgz#f506d6159219e19690d3ab863c039cba293d1e40" dependencies: @@ -4502,6 +4585,23 @@ ipld-dag-pb@~0.13.1: pull-traverse "^1.0.3" stable "^0.1.6" +ipld-dag-pb@~0.14.4: + version "0.14.4" + resolved "https://registry.yarnpkg.com/ipld-dag-pb/-/ipld-dag-pb-0.14.4.tgz#9a147575939832ab143da5b3a1b11cc37905ef7e" + dependencies: + async "^2.6.0" + bs58 "^4.0.1" + buffer-loader "~0.0.1" + cids "~0.5.3" + class-is "^1.1.0" + is-ipfs "~0.3.2" + multihashes "~0.4.13" + multihashing-async "~0.4.8" + protons "^1.0.1" + pull-stream "^3.6.7" + pull-traverse "^1.0.3" + stable "0.1.6" + ipld-ethereum@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ipld-ethereum/-/ipld-ethereum-2.0.0.tgz#f024c201f8ec670f6c18c91cf3d8d39879330acf" @@ -5521,6 +5621,24 @@ libp2p-crypto@^0.12.1, libp2p-crypto@~0.12.0, libp2p-crypto@~0.12.1: tweetnacl "^1.0.0" webcrypto-shim "github:dignifiedquire/webcrypto-shim#master" +libp2p-crypto@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/libp2p-crypto/-/libp2p-crypto-0.13.0.tgz#25404ea43bf2fd3802780d9ab87b5d2095d86f07" + dependencies: + asn1.js "^5.0.0" + async "^2.6.0" + browserify-aes "^1.2.0" + bs58 "^4.0.1" + keypair "^1.0.1" + libp2p-crypto-secp256k1 "~0.2.2" + multihashing-async "~0.4.8" + node-forge "^0.7.5" + pem-jwk "^1.5.1" + protons "^1.0.1" + rsa-pem-to-jwk "^1.1.3" + tweetnacl "^1.0.0" + webcrypto-shim "github:dignifiedquire/webcrypto-shim#master" + libp2p-floodsub@^0.14.1, libp2p-floodsub@~0.14.1: version "0.14.1" resolved "https://registry.yarnpkg.com/libp2p-floodsub/-/libp2p-floodsub-0.14.1.tgz#5aa77718c09427123869f53722ad1ae102a3be2e" @@ -6031,6 +6149,13 @@ lru-cache@^4.0.0, lru-cache@^4.1.2: pseudomap "^1.0.2" yallist "^2.1.2" +lru-cache@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + lru_map@0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" @@ -6051,6 +6176,12 @@ mafmt@^4.0.0: dependencies: multiaddr "^3.0.2" +mafmt@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/mafmt/-/mafmt-6.0.0.tgz#ec13f8761253354c23420ae3903c837b6649caa6" + dependencies: + multiaddr "^4.0.0" + magic-string@^0.22.4: version "0.22.5" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e" @@ -6406,6 +6537,19 @@ multiaddr@^4.0.0: varint "^5.0.0" xtend "^4.0.1" +multiaddr@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/multiaddr/-/multiaddr-5.0.0.tgz#c8d7492d8506de470610f6c1adb82af9a69d6748" + dependencies: + bs58 "^4.0.1" + class-is "^1.1.0" + ip "^1.1.5" + ip-address "^5.8.9" + lodash.filter "^4.6.0" + lodash.map "^4.6.0" + varint "^5.0.0" + xtend "^4.0.1" + multibase@~0.3.4: version "0.3.4" resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.3.4.tgz#fba8b0aac9724f62e24782557e2a062e30d3ae7f" @@ -6701,6 +6845,10 @@ node-forge@^0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.1.tgz#9da611ea08982f4b94206b3beb4cc9665f20c300" +node-forge@^0.7.5: + version "0.7.5" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df" + node-notifier@5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea" @@ -7296,6 +7444,15 @@ peer-info@^0.14.0: multiaddr "^4.0.0" peer-id "~0.10.7" +peer-info@~0.14.1: + version "0.14.1" + resolved "https://registry.yarnpkg.com/peer-info/-/peer-info-0.14.1.tgz#ac5aec421e9965f7b0e7576d717941bb25676134" + dependencies: + lodash.uniqby "^4.7.0" + mafmt "^6.0.0" + multiaddr "^4.0.0" + peer-id "~0.10.7" + pelo@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/pelo/-/pelo-0.1.0.tgz#54157d3bc63c10da65504d6b801f0b535584c11b" @@ -7794,6 +7951,10 @@ qs@^6.5.1, qs@~6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" +qs@^6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + qs@~6.3.0: version "6.3.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" @@ -7929,6 +8090,18 @@ readable-stream@^2.3.5: string_decoder "~1.0.3" util-deprecate "~1.0.1" +readable-stream@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + 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" + readable-stream@~1.0.15, readable-stream@~1.0.17: version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" @@ -9106,6 +9279,16 @@ stream-http@^2.8.1: to-arraybuffer "^1.0.0" xtend "^4.0.0" +stream-http@^2.8.2: + version "2.8.2" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.2.tgz#4126e8c6b107004465918aa2fc35549e77402c87" + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + stream-parser@~0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/stream-parser/-/stream-parser-0.3.1.tgz#1618548694420021a1182ff0af1911c129761773" @@ -9192,7 +9375,7 @@ string.prototype.padend@^3.0.0: es-abstract "^1.4.3" function-bind "^1.0.2" -string_decoder@^1.1.1: +string_decoder@^1.1.1, string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" dependencies: @@ -9397,6 +9580,18 @@ tar-stream@^1.1.2, tar-stream@^1.5.0, tar-stream@^1.5.5: readable-stream "^2.0.0" xtend "^4.0.0" +tar-stream@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.0.tgz#a50efaa7b17760b82c27b3cae4a301a8254a5715" + dependencies: + bl "^1.0.0" + buffer-alloc "^1.1.0" + end-of-stream "^1.0.0" + fs-constants "^1.0.0" + readable-stream "^2.0.0" + to-buffer "^1.1.0" + xtend "^4.0.0" + tar@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" @@ -9538,6 +9733,10 @@ to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" +to-buffer@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" + to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"