5 changed files with 578 additions and 0 deletions
@ -1,2 +1,158 @@
|
||||
# deepl-scraper |
||||
|
||||
Scrape data from DeepL translator without applying for the paid authenticated API, using Puppeteer, Chrome browser's headless API. |
||||
|
||||
## Getting started |
||||
|
||||
### Prerequisites |
||||
|
||||
- NodeJS |
||||
- NPM |
||||
- Yarn |
||||
|
||||
### Install |
||||
|
||||
From [npm](https://www.npmjs.com/package/deepl-scraper) |
||||
|
||||
`yarn add deepl-scraper` |
||||
|
||||
or |
||||
|
||||
`npm i deepl-scraper` |
||||
|
||||
### Use |
||||
|
||||
```js |
||||
const translate = require('deepl-scraper').translate; |
||||
|
||||
translate(sentence, source, target, quit).then(console.log).catch(console.error); |
||||
``` |
||||
|
||||
#### Parameters |
||||
|
||||
- `sentence` *string* - Word/sentence to be translated |
||||
- `source` *string* (optional) - Word/sentence original language |
||||
<br>Default : `auto` |
||||
- `target` *string* - Language for word/sentence to be translated |
||||
- `quit` *boolean* (optional) - Quit the browser emulator after this translation |
||||
<br>Until the browser is active, it will keep the script running |
||||
|
||||
#### Supported languages |
||||
|
||||
The module doesn't store languages and will always support DeepL's languages list without required update. |
||||
|
||||
Language format is 2 letters. |
||||
|
||||
They can be found in DeepL's HTML : |
||||
|
||||
```html |
||||
<div class="lmt__language_select__menu"> |
||||
<button dl-value="auto">Any language (detect)</button> |
||||
<button dl-value="EN">English</button> |
||||
<button dl-value="DE">German</button> |
||||
<button dl-value="FR">French</button> |
||||
<button dl-value="ES">Spanish</button> |
||||
<button dl-value="PT">Portuguese</button> |
||||
<button dl-value="IT">Italian</button> |
||||
<button dl-value="NL">Dutch</button> |
||||
<button dl-value="PL">Polish</button> |
||||
<button dl-value="RU">Russian</button> |
||||
</div> |
||||
``` |
||||
|
||||
However, lowercase is supported in the module. |
||||
|
||||
#### Error handling |
||||
|
||||
- `INVALID_SOURCE_LANGUAGE` |
||||
- `TARGET_LANGUAGE_REQUIRED` |
||||
- `INVALID_TARGET_LANGUAGE` |
||||
- `UNSUPPORTED_SOURCE_LANGUAGE` |
||||
- `UNSUPPORTED_TARGET_LANGUAGE` |
||||
|
||||
### Examples |
||||
|
||||
```js |
||||
translate('hello', 'en', 'fr').then(console.log); |
||||
``` |
||||
|
||||
```json |
||||
{ |
||||
"source": { |
||||
"lang": "en", |
||||
"sentence": "hello" |
||||
}, |
||||
"target": { |
||||
"lang": "fr", |
||||
"sentences": [ |
||||
"bonjour", |
||||
"bonjour, bonjour", |
||||
"bonjour, bonjour.", |
||||
"bonjour, salut" |
||||
] |
||||
} |
||||
} |
||||
``` |
||||
|
||||
```js |
||||
translate('hello', null, 'fr').then(console.log); |
||||
``` |
||||
|
||||
```json |
||||
{ |
||||
"source": { |
||||
"lang": "en", |
||||
"confident": false, |
||||
"sentence": "hello" |
||||
}, |
||||
"target": { |
||||
"lang": "fr", |
||||
"sentences": [ |
||||
"bonjour", |
||||
"bonjour, bonjour", |
||||
"bonjour, bonjour.", |
||||
"bonjour, salut" |
||||
] |
||||
} |
||||
} |
||||
``` |
||||
|
||||
```js |
||||
translate('hey, what\'s up ?', null, 'fr').then(console.log); |
||||
``` |
||||
|
||||
```json |
||||
{ |
||||
"source": { |
||||
"lang": "en", |
||||
"confident": true, |
||||
"sentence": "hey, what's up ?" |
||||
}, |
||||
"target": { |
||||
"lang": "fr", |
||||
"sentences": [ |
||||
"Hé, quoi de neuf ?", |
||||
"hey, quoi de neuf ?", |
||||
"Hey, quoi de neuf ?", |
||||
"hey, quoi de neuf ?" |
||||
] |
||||
} |
||||
} |
||||
``` |
||||
|
||||
## Known issues |
||||
|
||||
- Verifying if translation is complete by getting the alts list's computed CSS size is kinda dirty but it's the only way I found for now. |
||||
|
||||
## Planned features |
||||
|
||||
- Get word-by-word definitions, quotes and synonyms |
||||
|
||||
## FAQ |
||||
|
||||
**Why using Puppeteer instead of HTTP requests ?** |
||||
<br>Fucking rate limit error always showing up, whatever you do. |
||||
|
||||
## Changelog |
||||
|
||||
* `1.0.0` (2019-05-06) • Initial release |
||||
|
@ -0,0 +1,106 @@
|
||||
const |
||||
puppeteer = require('puppeteer'); |
||||
|
||||
let browser; |
||||
|
||||
const getBrowser = () => new Promise(resolve => { |
||||
if(!browser){ |
||||
puppeteer.launch().then(_browser => { |
||||
browser = _browser; |
||||
resolve(browser); |
||||
}); |
||||
} |
||||
else |
||||
resolve(browser); |
||||
}); |
||||
|
||||
const getNewPage = () => new Promise(resolve => { |
||||
getBrowser().then(browser => { |
||||
browser.newPage().then(resolve); |
||||
}); |
||||
}); |
||||
|
||||
module.exports = { |
||||
translate: (sentence, source, target, quit = false) => new Promise((resolve, reject) => { |
||||
if(!source) |
||||
source = 'auto'; |
||||
else if(source.length > 2) |
||||
reject('INVALID_SOURCE_LANGUAGE'); |
||||
else |
||||
source = source.toUpperCase(); |
||||
if(!target) |
||||
reject('TARGET_LANGUAGE_REQUIRED'); |
||||
else if(target.length > 2) |
||||
reject('INVALID_TARGET_LANGUAGE'); |
||||
else |
||||
target = target.toUpperCase(); |
||||
getNewPage().then(page => { |
||||
const |
||||
homepage = 'https://www.deepl.com/translator', |
||||
sourceLangSelect = '.lmt__language_select--source button', |
||||
targetLangSelect = '.lmt__language_select--target button', |
||||
sourceLangMenu = '.lmt__language_select--source .lmt__language_select__menu', |
||||
targetLangMenu = '.lmt__language_select--target .lmt__language_select__menu', |
||||
sourceLangButton = `.lmt__language_select--source button[DL-VALUE=${source}]`, |
||||
targetLangButton = `.lmt__language_select--target button[DL-VALUE=${target}]`, |
||||
originalSentenceField = '.lmt__source_textarea'/*, |
||||
targetSentencesContainer = '.lmt__translations_as_text'*/; |
||||
const loadHomePage = () => new Promise(resolve => page.goto(homepage).then(resolve)); |
||||
const selectSourceLang = () => new Promise(resolve => { |
||||
page.waitForSelector(sourceLangMenu, { visible: true }).then(() => { |
||||
page.click(sourceLangButton) |
||||
.then(() => resolve()) |
||||
.catch(() => reject('UNSUPPORTED_SOURCE_LANGUAGE')); |
||||
}); |
||||
page.click(sourceLangSelect); |
||||
}); |
||||
const selectTargetLang = () => new Promise(resolve => { |
||||
page.waitForSelector(targetLangMenu, { visible: true }).then(() => { |
||||
page.click(targetLangButton) |
||||
.then(() => resolve()) |
||||
.catch(() => reject('UNSUPPORTED_TARGET_LANGUAGE')); |
||||
}); |
||||
page.click(targetLangSelect); |
||||
}); |
||||
const typeOriginalSentence = () => new Promise(resolve => page.type(originalSentenceField, sentence).then(() => resolve())); |
||||
loadHomePage().then(() => { |
||||
selectSourceLang().then(() => { |
||||
selectTargetLang().then(() => { |
||||
typeOriginalSentence().then(() => { |
||||
let res; |
||||
const wait = setInterval(() => { |
||||
page.evaluate(() => JSON.parse(JSON.stringify(window.getComputedStyle(document.querySelector('.lmt__translations_as_text'))))) |
||||
.then(styles => { |
||||
if(styles.height === '0px') return; |
||||
if(quit) |
||||
browser.close(); |
||||
clearInterval(wait); |
||||
resolve(res); |
||||
}); |
||||
}, 100); |
||||
page.on('requestfinished', request => { |
||||
request.response().json().then(_res => { |
||||
_res = _res['result']; |
||||
if(!_res) return; |
||||
res = { |
||||
source: { |
||||
lang: _res['source_lang'].toLowerCase(), |
||||
...(source === 'auto' ? { |
||||
confident: !!_res['source_lang_is_confident'] |
||||
} : {}), |
||||
sentence |
||||
}, |
||||
target: { |
||||
lang: _res['target_lang'].toLowerCase(), |
||||
sentences: _res['translations'][0]['beams'].map(item => item['postprocessed_sentence']) |
||||
} |
||||
}; |
||||
}).catch(() => {}); |
||||
}); |
||||
}); |
||||
}); |
||||
}); |
||||
}); |
||||
}); |
||||
}) |
||||
}; |
@ -0,0 +1,27 @@
|
||||
{ |
||||
"name": "deepl-scraper", |
||||
"version": "1.0.0", |
||||
"description": "Scrape data from DeepL translator without applying for the paid authenticated API", |
||||
"keywords": [ |
||||
"deepl", |
||||
"deepl.com", |
||||
"translator", |
||||
"scraper", |
||||
"api" |
||||
], |
||||
"homepage": "https://git.kaki87.net/KaKi87/deepl-scraper", |
||||
"license": "WTFPL", |
||||
"author": { |
||||
"name": "KaKi87", |
||||
"email": "tiana.lemesle@live.fr", |
||||
"url": "kaki87.net" |
||||
}, |
||||
"main": "index.js", |
||||
"repository": { |
||||
"type": "git", |
||||
"url": "https://git.kaki87.net/KaKi87/deepl-scraper.git" |
||||
}, |
||||
"dependencies": { |
||||
"puppeteer": "^1.15.0" |
||||
} |
||||
} |
@ -0,0 +1,287 @@
|
||||
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. |
||||
# yarn lockfile v1 |
||||
|
||||
|
||||
agent-base@^4.1.0: |
||||
version "4.2.1" |
||||
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" |
||||
integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== |
||||
dependencies: |
||||
es6-promisify "^5.0.0" |
||||
|
||||
async-limiter@~1.0.0: |
||||
version "1.0.0" |
||||
resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" |
||||
integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== |
||||
|
||||
balanced-match@^1.0.0: |
||||
version "1.0.0" |
||||
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" |
||||
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= |
||||
|
||||
brace-expansion@^1.1.7: |
||||
version "1.1.11" |
||||
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" |
||||
integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== |
||||
dependencies: |
||||
balanced-match "^1.0.0" |
||||
concat-map "0.0.1" |
||||
|
||||
buffer-from@^1.0.0: |
||||
version "1.1.1" |
||||
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" |
||||
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== |
||||
|
||||
concat-map@0.0.1: |
||||
version "0.0.1" |
||||
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" |
||||
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= |
||||
|
||||
concat-stream@1.6.2: |
||||
version "1.6.2" |
||||
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" |
||||
integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== |
||||
dependencies: |
||||
buffer-from "^1.0.0" |
||||
inherits "^2.0.3" |
||||
readable-stream "^2.2.2" |
||||
typedarray "^0.0.6" |
||||
|
||||
core-util-is@~1.0.0: |
||||
version "1.0.2" |
||||
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" |
||||
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= |
||||
|
||||
debug@2.6.9: |
||||
version "2.6.9" |
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" |
||||
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== |
||||
dependencies: |
||||
ms "2.0.0" |
||||
|
||||
debug@^3.1.0: |
||||
version "3.2.6" |
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" |
||||
integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== |
||||
dependencies: |
||||
ms "^2.1.1" |
||||
|
||||
debug@^4.1.0: |
||||
version "4.1.1" |
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" |
||||
integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== |
||||
dependencies: |
||||
ms "^2.1.1" |
||||
|
||||
es6-promise@^4.0.3: |
||||
version "4.2.6" |
||||
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.6.tgz#b685edd8258886365ea62b57d30de28fadcd974f" |
||||
integrity sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q== |
||||
|
||||
es6-promisify@^5.0.0: |
||||
version "5.0.0" |
||||
resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" |
||||
integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= |
||||
dependencies: |
||||
es6-promise "^4.0.3" |
||||
|
||||
extract-zip@^1.6.6: |
||||
version "1.6.7" |
||||
resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9" |
||||
integrity sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k= |
||||
dependencies: |
||||
concat-stream "1.6.2" |
||||
debug "2.6.9" |
||||
mkdirp "0.5.1" |
||||
yauzl "2.4.1" |
||||
|
||||
fd-slicer@~1.0.1: |
||||
version "1.0.1" |
||||
resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" |
||||
integrity sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU= |
||||
dependencies: |
||||
pend "~1.2.0" |
||||
|
||||
fs.realpath@^1.0.0: |
||||
version "1.0.0" |
||||
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" |
||||
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= |
||||
|
||||
glob@^7.1.3: |
||||
version "7.1.3" |
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" |
||||
integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== |
||||
dependencies: |
||||
fs.realpath "^1.0.0" |
||||
inflight "^1.0.4" |
||||
inherits "2" |
||||
minimatch "^3.0.4" |
||||
once "^1.3.0" |
||||
path-is-absolute "^1.0.0" |
||||
|
||||
https-proxy-agent@^2.2.1: |
||||
version "2.2.1" |
||||
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" |
||||
integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ== |
||||
dependencies: |
||||
agent-base "^4.1.0" |
||||
debug "^3.1.0" |
||||
|
||||
inflight@^1.0.4: |
||||
version "1.0.6" |
||||
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" |
||||
integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= |
||||
dependencies: |
||||
once "^1.3.0" |
||||
wrappy "1" |
||||
|
||||
inherits@2, inherits@^2.0.3, inherits@~2.0.3: |
||||
version "2.0.3" |
||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" |
||||
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= |
||||
|
||||
isarray@~1.0.0: |
||||
version "1.0.0" |
||||
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" |
||||
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= |
||||
|
||||
mime@^2.0.3: |
||||
version "2.4.2" |
||||
resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.2.tgz#ce5229a5e99ffc313abac806b482c10e7ba6ac78" |
||||
integrity sha512-zJBfZDkwRu+j3Pdd2aHsR5GfH2jIWhmL1ZzBoc+X+3JEti2hbArWcyJ+1laC1D2/U/W1a/+Cegj0/OnEU2ybjg== |
||||
|
||||
minimatch@^3.0.4: |
||||
version "3.0.4" |
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" |
||||
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== |
||||
dependencies: |
||||
brace-expansion "^1.1.7" |
||||
|
||||
minimist@0.0.8: |
||||
version "0.0.8" |
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" |
||||
integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= |
||||
|
||||
mkdirp@0.5.1: |
||||
version "0.5.1" |
||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" |
||||
integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= |
||||
dependencies: |
||||
minimist "0.0.8" |
||||
|
||||
ms@2.0.0: |
||||
version "2.0.0" |
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" |
||||
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= |
||||
|
||||
ms@^2.1.1: |
||||
version "2.1.1" |
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" |
||||
integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== |
||||
|
||||
once@^1.3.0: |
||||
version "1.4.0" |
||||
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" |
||||
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= |
||||
dependencies: |
||||
wrappy "1" |
||||
|
||||
path-is-absolute@^1.0.0: |
||||
version "1.0.1" |
||||
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" |
||||
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= |
||||
|
||||
pend@~1.2.0: |
||||
version "1.2.0" |
||||
resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" |
||||
integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= |
||||
|
||||
process-nextick-args@~2.0.0: |
||||
version "2.0.0" |
||||
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" |
||||
integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== |
||||
|
||||
progress@^2.0.1: |
||||
version "2.0.3" |
||||
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" |
||||
integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== |
||||
|
||||
proxy-from-env@^1.0.0: |
||||
version "1.0.0" |
||||
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" |
||||
integrity sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4= |
||||
|
||||
puppeteer@^1.15.0: |
||||
version "1.15.0" |
||||
resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-1.15.0.tgz#1680fac13e51f609143149a5b7fa99eec392b34f" |
||||
integrity sha512-D2y5kwA9SsYkNUmcBzu9WZ4V1SGHiQTmgvDZSx6sRYFsgV25IebL4V6FaHjF6MbwLK9C6f3G3pmck9qmwM8H3w== |
||||
dependencies: |
||||
debug "^4.1.0" |
||||
extract-zip "^1.6.6" |
||||
https-proxy-agent "^2.2.1" |
||||
mime "^2.0.3" |
||||
progress "^2.0.1" |
||||
proxy-from-env "^1.0.0" |
||||
rimraf "^2.6.1" |
||||
ws "^6.1.0" |
||||
|
||||
readable-stream@^2.2.2: |
||||
version "2.3.6" |
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" |
||||
integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== |
||||
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" |
||||
|
||||
rimraf@^2.6.1: |
||||
version "2.6.3" |
||||
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" |
||||
integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== |
||||
dependencies: |
||||
glob "^7.1.3" |
||||
|
||||
safe-buffer@~5.1.0, safe-buffer@~5.1.1: |
||||
version "5.1.2" |
||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" |
||||
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== |
||||
|
||||
string_decoder@~1.1.1: |
||||
version "1.1.1" |
||||
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" |
||||
integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== |
||||
dependencies: |
||||
safe-buffer "~5.1.0" |
||||
|
||||
typedarray@^0.0.6: |
||||
version "0.0.6" |
||||
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" |
||||
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= |
||||
|
||||
util-deprecate@~1.0.1: |
||||
version "1.0.2" |
||||
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" |
||||
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= |
||||
|
||||
wrappy@1: |
||||
version "1.0.2" |
||||
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" |
||||
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= |
||||
|
||||
ws@^6.1.0: |
||||
version "6.2.1" |
||||
resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" |
||||
integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== |
||||
dependencies: |
||||
async-limiter "~1.0.0" |
||||
|
||||
yauzl@2.4.1: |
||||
version "2.4.1" |
||||
resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" |
||||
integrity sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU= |
||||
dependencies: |
||||
fd-slicer "~1.0.1" |
Loading…
Reference in new issue