diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..3e24add --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,15 @@ +{ + "env": { + "browser": true, + "node": true, + "commonjs": true, + "es2021": true + }, + "extends": ["eslint:recommended", "prettier"], + "parserOptions": { + "ecmaVersion": 13 + }, + "rules": { + "no-constant-condition": ["error", { "checkLoops": false }] + } +} diff --git a/.github/workflows/build-node-binaries.yml b/.github/workflows/build-node-binaries.yml index 63e6675..aa6124c 100644 --- a/.github/workflows/build-node-binaries.yml +++ b/.github/workflows/build-node-binaries.yml @@ -28,6 +28,7 @@ jobs: - run: yarn install --frozen-lockfile + - run: yarn lint - run: yarn build - name: Upload Binaries diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..c980fbc --- /dev/null +++ b/.prettierrc @@ -0,0 +1,4 @@ +{ + "trailingComma": "all", + "printWidth": 100 +} diff --git a/getElements.js b/getElements.js index 15b1fda..ee809f8 100644 --- a/getElements.js +++ b/getElements.js @@ -1,7 +1,7 @@ const getElements = (fn, ...args) => { const ID_ATTRIBUTE = "data-magic-mouse-id"; - const getIdOf = async element => { + const getIdOf = async (element) => { let id = element.getAttribute(ID_ATTRIBUTE); if (!id) { id = await window.uuid(); @@ -14,13 +14,11 @@ const getElements = (fn, ...args) => { // https://gist.github.com/ciaranj/7177fb342102e571db2784dc831f868b // which is based on this StackOverflow answer by Édouard Mercier: // https://stackoverflow.com/a/50916681/2560557 - const calculateContainsWindow = element => { + const calculateContainsWindow = (element) => { const imageComputedStyle = window.getComputedStyle(element); const imageObjectFit = imageComputedStyle.getPropertyValue("object-fit"); const coords = {}; - const imagePositions = imageComputedStyle - .getPropertyValue("object-position") - .split(" "); + const imagePositions = imageComputedStyle.getPropertyValue("object-position").split(" "); let naturalWidth = element.naturalWidth; let naturalHeight = element.naturalHeight; if (element.tagName === "VIDEO") { @@ -38,18 +36,13 @@ const getElements = (fn, ...args) => { if (imageObjectFit === "none") { coords.sourceWidth = element.clientWidth; coords.sourceHeight = element.clientHeight; - coords.sourceX = - (naturalWidth - element.clientWidth) * horizontalPercentage; - coords.sourceY = - (naturalHeight - element.clientHeight) * verticalPercentage; + coords.sourceX = (naturalWidth - element.clientWidth) * horizontalPercentage; + coords.sourceY = (naturalHeight - element.clientHeight) * verticalPercentage; coords.destinationWidthPercentage = 1; coords.destinationHeightPercentage = 1; coords.destinationXPercentage = 0; coords.destinationYPercentage = 0; - } else if ( - imageObjectFit === "contain" || - imageObjectFit === "scale-down" - ) { + } else if (imageObjectFit === "contain" || imageObjectFit === "scale-down") { // TODO: handle the "scale-down" appropriately, once its meaning will be clear coords.sourceWidth = naturalWidth; coords.sourceHeight = naturalHeight; @@ -58,17 +51,13 @@ const getElements = (fn, ...args) => { if (naturalRatio > visibleRatio) { coords.destinationWidthPercentage = 1; coords.destinationHeightPercentage = - naturalHeight / - element.clientHeight / - (naturalWidth / element.clientWidth); + naturalHeight / element.clientHeight / (naturalWidth / element.clientWidth); coords.destinationXPercentage = 0; coords.destinationYPercentage = (1 - coords.destinationHeightPercentage) * verticalPercentage; } else { coords.destinationWidthPercentage = - naturalWidth / - element.clientWidth / - (naturalHeight / element.clientHeight); + naturalWidth / element.clientWidth / (naturalHeight / element.clientHeight); coords.destinationHeightPercentage = 1; coords.destinationXPercentage = (1 - coords.destinationWidthPercentage) * horizontalPercentage; @@ -78,15 +67,13 @@ const getElements = (fn, ...args) => { if (naturalRatio > visibleRatio) { coords.sourceWidth = naturalHeight * visibleRatio; coords.sourceHeight = naturalHeight; - coords.sourceX = - (naturalWidth - coords.sourceWidth) * horizontalPercentage; + coords.sourceX = (naturalWidth - coords.sourceWidth) * horizontalPercentage; coords.sourceY = 0; } else { coords.sourceWidth = naturalWidth; coords.sourceHeight = naturalWidth / visibleRatio; coords.sourceX = 0; - coords.sourceY = - (naturalHeight - coords.sourceHeight) * verticalPercentage; + coords.sourceY = (naturalHeight - coords.sourceHeight) * verticalPercentage; } coords.destinationWidthPercentage = 1; coords.destinationHeightPercentage = 1; @@ -103,16 +90,14 @@ const getElements = (fn, ...args) => { coords.destinationYPercentage = 0; } else { console.error( - "unexpected 'object-fit' attribute with value '" + - imageObjectFit + - "' relative to" + "unexpected 'object-fit' attribute with value '" + imageObjectFit + "' relative to", ); } return coords; }; // Convert an element to a base64-encoded string. - const img2Base64 = img => { + const img2Base64 = (img) => { const canvas = document.createElement("canvas"); canvas.width = img.naturalWidth; canvas.height = img.naturalHeight; @@ -138,14 +123,14 @@ const getElements = (fn, ...args) => { y: rect.y + offsetY, w, h, - data: includeData ? img2Base64(img) : null + data: includeData ? img2Base64(img) : null, }; }; const extractCanvas = async (canvas, includeData = true) => { - const rect = img.getBoundingClientRect(); + const rect = canvas.getBoundingClientRect(); - const style = window.getComputedStyle(img); + const style = window.getComputedStyle(canvas); const offsetX = parseInt(style.paddingLeft, 10); const offsetY = parseInt(style.paddingTop, 10); @@ -169,14 +154,14 @@ const getElements = (fn, ...args) => { y, w, h, - data: includeData ? canvas.toDataURL("image/png").split(",")[1] : null + data: includeData ? canvas.toDataURL("image/png").split(",")[1] : null, }; }; const extractPre = async (element, includeData = true) => { const viewport = { w: document.documentElement.clientWidth, - h: document.documentElement.clientHeight + h: document.documentElement.clientHeight, }; const rect = element.getBoundingClientRect(); @@ -199,7 +184,7 @@ const getElements = (fn, ...args) => { y: rect.y, w: rect.width - dw, h: rect.height - dh, - data: includeData ? element.textContent : null + data: includeData ? element.textContent : null, }; }; @@ -219,7 +204,7 @@ const getElements = (fn, ...args) => { y: rect.y, w: rect.width, h: rect.height, - data: null + data: null, }; } }; @@ -229,12 +214,10 @@ const getElements = (fn, ...args) => { document .elementsFromPoint(x, y) .filter( - element => - element.tagName === "IMG" || - element.tagName === "CANVAS" || - element.tagName === "PRE" + (element) => + element.tagName === "IMG" || element.tagName === "CANVAS" || element.tagName === "PRE", ) - .map(async element => extract(element)) + .map(async (element) => extract(element)), ); }; @@ -243,7 +226,7 @@ const getElements = (fn, ...args) => { document .querySelectorAll(`[${ID_ATTRIBUTE}]`) - .forEach(element => infos.push(extract(element, false))); + .forEach((element) => infos.push(extract(element, false))); return Promise.all(infos); }; @@ -257,5 +240,5 @@ const getElements = (fn, ...args) => { }; module.exports = { - getElements + getElements, }; diff --git a/package.json b/package.json index 43033d8..da1f012 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,9 @@ }, "scripts": { "build": "pkg --targets node16-win,node16-macos,node16-linux --public --output ./build/magicmouse ./run.js", - "postinstall": "patch-package" + "postinstall": "patch-package", + "lint": "eslint --cache --quiet ./ && prettier --list-different --config .prettierrc \"*.js\"", + "format": "eslint --cache --fix --quiet . && prettier --write --config .prettierrc \"*.js\"" }, "dependencies": { "awaitify-stream": "^1.0.2", @@ -19,6 +21,9 @@ "uuid": "^8.3.2" }, "devDependencies": { - "pkg": "^5.5.1" + "eslint": "^8.5.0", + "eslint-config-prettier": "^8.3.0", + "pkg": "^5.5.1", + "prettier": "^2.5.1" } } diff --git a/run.js b/run.js index de6d562..70daf4a 100644 --- a/run.js +++ b/run.js @@ -6,14 +6,14 @@ const awaitifyStream = require("awaitify-stream"); const { getElements } = require("./getElements"); const uuid = require("uuid").v1; -Array.prototype.flat = function() { +Array.prototype.flat = function () { return this.reduce((acc, x) => acc.concat(x), []); }; -Array.prototype.flatMap = function(mapper) { +Array.prototype.flatMap = function (mapper) { return this.map(mapper).flat(); }; -SmartBuffer.prototype.writeStringPrependSize = function(string) { +SmartBuffer.prototype.writeStringPrependSize = function (string) { const buffer = Buffer.from(string, "utf8"); this.writeUInt32LE(buffer.length); this.writeBuffer(buffer); @@ -29,7 +29,7 @@ const run = async () => { const url = process.argv[process.argv.length - 5]; const screenSize = { x: parseInt(process.argv[process.argv.length - 4], 10), - y: parseInt(process.argv[process.argv.length - 3], 10) + y: parseInt(process.argv[process.argv.length - 3], 10), }; const headless = process.argv[process.argv.length - 2] === "headless"; const chromeProfilePath = process.argv[process.argv.length - 1]; @@ -41,7 +41,7 @@ const run = async () => { process.exit(); }; - const sendCommand = buffer => { + const sendCommand = (buffer) => { const lenBuffer = new Buffer(4); lenBuffer.writeUInt32BE(buffer.length); process.stdout.write(lenBuffer); @@ -55,14 +55,14 @@ const run = async () => { ...(headless ? ["--headless"] : []), // '--start-fullscreen', "--force-device-scale-factor=1", - `--user-data-dir=${chromeProfilePath}` + `--user-data-dir=${chromeProfilePath}`, ], - executablePath: findChrome() + executablePath: findChrome(), }); const page = await browser.newPage(); await page.setBypassCSP(true); await page.setUserAgent( - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36" + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36", ); await page.setViewport({ width: screenSize.x, height: screenSize.y }); @@ -73,73 +73,67 @@ const run = async () => { return; } console.error("Instrumenting Google Slides"); - const morphPositions = (await Promise.all( - page - .frames() - .filter(frame => !frame.isDetached()) - .map(async frame => - frame.evaluate( - ID_ATTRIBUTE => - Promise.all( - Array.from( - new Set( - Array.from( - document.querySelectorAll( - '.punch-viewer-svgpage g[id*="paragraph"]' - ) - ).map(element => element.parentNode) + const morphPositions = ( + await Promise.all( + page + .frames() + .filter((frame) => !frame.isDetached()) + .map(async (frame) => + frame.evaluate( + (ID_ATTRIBUTE) => + Promise.all( + Array.from( + new Set( + Array.from( + document.querySelectorAll('.punch-viewer-svgpage g[id*="paragraph"]'), + ).map((element) => element.parentNode), + ), ) - ) - .map(element => ({ - element, - text: Array.from( - element.querySelectorAll('g[id*="paragraph"]') - ) - .map(paragraph => - Array.from( - paragraph.querySelectorAll( - ".sketchy-text-content-text text" - ) + .map((element) => ({ + element, + text: Array.from(element.querySelectorAll('g[id*="paragraph"]')) + .map((paragraph) => + Array.from(paragraph.querySelectorAll(".sketchy-text-content-text text")) + .map((text) => text.textContent) + .join(" "), ) - .map(text => text.textContent) - .join(" ") - ) - .join("\r") - })) - .filter(tmp => tmp.text.startsWith("!")) - .map(tmp => { - let element = tmp.element; - let path = null; - do { - element = element.parentNode; - path = element.querySelector("path"); - } while (path === null); - return { ...tmp, path }; - }) - .map(async tmp => { - const rect = tmp.path.getBoundingClientRect(); - - let id = tmp.path.getAttribute(ID_ATTRIBUTE); - if (!id) { - id = await window.uuid(); - tmp.path.setAttribute(ID_ATTRIBUTE, id); - } - - return { - id, - type: "morph", - x: rect.x, - y: rect.y, - w: rect.width, - h: rect.height, - data: tmp.text - }; - }) - ), - ID_ATTRIBUTE - ) - ) - )).flat(); + .join("\r"), + })) + .filter((tmp) => tmp.text.startsWith("!")) + .map((tmp) => { + let element = tmp.element; + let path = null; + do { + element = element.parentNode; + path = element.querySelector("path"); + } while (path === null); + return { ...tmp, path }; + }) + .map(async (tmp) => { + const rect = tmp.path.getBoundingClientRect(); + + let id = tmp.path.getAttribute(ID_ATTRIBUTE); + if (!id) { + id = await window.uuid(); + tmp.path.setAttribute(ID_ATTRIBUTE, id); + } + + return { + id, + type: "morph", + x: rect.x, + y: rect.y, + w: rect.width, + h: rect.height, + data: tmp.text, + }; + }), + ), + ID_ATTRIBUTE, + ), + ), + ) + ).flat(); console.error("Google Slides Morph Positions", morphPositions); morphPositions.forEach(sendPortalDataCommand); @@ -165,16 +159,11 @@ const run = async () => { name = name.substr(0, name.length - 4); bar[0].insertAdjacentHTML( "beforeEnd", - `Clone to Squeak` + `Clone to Squeak`, ); - const normalCloneButton = document.getElementsByClassName( - "get-repo-select-menu" - ); - if ( - normalCloneButton.length === 0 || - normalCloneButton[0].children.length === 0 - ) { + const normalCloneButton = document.getElementsByClassName("get-repo-select-menu"); + if (normalCloneButton.length === 0 || normalCloneButton[0].children.length === 0) { return; } normalCloneButton[0].children[0].classList.remove("btn-primary"); @@ -182,28 +171,27 @@ const run = async () => { }; const parseLDJsons = async () => { - const ldJsons = await page.$$eval( - 'script[type="application/ld+json"]', - nodes => nodes.map(node => JSON.parse(node.innerText)) + const ldJsons = await page.$$eval('script[type="application/ld+json"]', (nodes) => + nodes.map((node) => JSON.parse(node.innerText)), ); console.error("LD JSON", ldJsons); const buf = new SmartBuffer(); buf.writeString("s"); buf.writeUInt32LE(ldJsons.length); - ldJsons.forEach(ldJson => { + ldJsons.forEach((ldJson) => { const json = JSON.stringify(ldJson); buf.writeStringPrependSize(json); }); await sendCommand(buf.toBuffer()); }; - const ignoreExecutionContextDestroyed = error => { + const ignoreExecutionContextDestroyed = (error) => { // Sometimes the frame is destroyed right after navigation, thus throwing an error // when trying to evaluate a function in the frame's context. That's why we catch // those errors here. if ( !error.message.endsWith( - "Execution context was destroyed, most likely because of a navigation." + "Execution context was destroyed, most likely because of a navigation.", ) && !error.message.endsWith("Cannot find context with specified id") ) { @@ -211,15 +199,15 @@ const run = async () => { } }; - page.on("dialog", async dialog => { + page.on("dialog", async (dialog) => { // TODO: We could send the dialog contents to Squeak and ask the user what to do. // For now, accept all dialogs, so that the page remains responsive. console.error("Dialog!", dialog.defaultValue(), dialog.message(), dialog.type()); await dialog.accept(); }); - page.on("framenavigated", async frame => { - await new Promise(resolve => setTimeout(() => resolve(), 50)); + page.on("framenavigated", async (frame) => { + await new Promise((resolve) => setTimeout(() => resolve(), 50)); try { await parseLDJsons(); await instrumentGoogleSlides(); @@ -246,33 +234,35 @@ const run = async () => { }); const refreshTrackedElements = async () => { - const trackedElements = (await Promise.all( - page - .frames() - .filter(frame => !frame.isDetached()) - .map(frame => - frame.evaluate(getElements, "refreshInfo").catch(error => { - ignoreExecutionContextDestroyed(error); - return []; - }) - ) - )).flat(); + const trackedElements = ( + await Promise.all( + page + .frames() + .filter((frame) => !frame.isDetached()) + .map((frame) => + frame.evaluate(getElements, "refreshInfo").catch((error) => { + ignoreExecutionContextDestroyed(error); + return []; + }), + ), + ) + ).flat(); // console.error(trackedElements); const buf = new SmartBuffer(); buf.writeString("hr"); // portal refresh buf.writeUInt32LE(trackedElements.length); - trackedElements.forEach(element => + trackedElements.forEach((element) => buf .writeStringNT(element.id) .writeInt32LE(element.x) .writeInt32LE(element.y) .writeInt32LE(element.w) - .writeInt32LE(element.h) + .writeInt32LE(element.h), ); sendCommand(buf.toBuffer()); }; - page.on("screencastframe", async frame => { + page.on("screencastframe", async (frame) => { const screenshot = Buffer.from(frame.data, "base64"); const buf = new SmartBuffer(); @@ -290,7 +280,7 @@ const run = async () => { } else { resolve(pixels); } - }) + }), ); buf.writeString("ir"); buf.writeUInt32LE(pixels.shape[0]); @@ -317,7 +307,7 @@ const run = async () => { await sendCommand(buf.toBuffer()); }); - const sendPortalDataCommand = data => { + const sendPortalDataCommand = (data) => { const buf = new SmartBuffer(); switch (data.type) { case "img": @@ -356,7 +346,7 @@ const run = async () => { console.error("Starting screencast..."); await page.startScreencast({ format: IMAGE_FORMAT === "jpeg" ? "jpeg" : "png", - everyNthFrame: 1 + everyNthFrame: 1, }); console.error("Recording screencast..."); @@ -364,13 +354,9 @@ const run = async () => { while (true) { const size = (await reader.readAsync(4)).readUInt32BE(); console.error(`Waiting for payload of size ${size}`); - const command = String.fromCharCode( - (await reader.readAsync(1)).readUInt8() - ); + const command = String.fromCharCode((await reader.readAsync(1)).readUInt8()); const payload = - size > 1 - ? SmartBuffer.fromBuffer(await reader.readAsync(size - 1)) - : new SmartBuffer(); + size > 1 ? SmartBuffer.fromBuffer(await reader.readAsync(size - 1)) : new SmartBuffer(); console.error(`Received command ${command} with payload of size ${size}.`); switch (command) { @@ -385,9 +371,9 @@ const run = async () => { const field = document .elementsFromPoint(x, y) .find( - element => + (element) => ["INPUT", "TEXTAREA"].includes(element.tagName) || - element.contentEditable === "true" + element.contentEditable === "true", ); if (!field) { return; @@ -400,22 +386,19 @@ const run = async () => { }, x, y, - str + str, ); break; } - case "f": + case "f": { const x = payload.readInt32LE(); const y = payload.readInt32LE(); console.error(`DROPPED MORPH AT ${x}@${y}`); const form = await page.evaluateHandle( - (x, y) => - document - .elementsFromPoint(x, y) - .find(element => element.tagName === "FORM"), + (x, y) => document.elementsFromPoint(x, y).find((element) => element.tagName === "FORM"), x, - y + y, ); const fields = @@ -425,50 +408,49 @@ const run = async () => { const buf = new SmartBuffer(); buf.writeString("f"); - const inputs = (await Promise.all( - fields.map(async field => { - if ( - (await (await field.getProperty("offsetParent")).jsonValue()) === - null - ) { - return undefined; - } - let description = await (await field.getProperty( - "placeholder" - )).jsonValue(); - if (description === undefined || description.length === 0) { - description = await (await field.getProperty("name")).jsonValue(); - } - if (description === undefined || description.length === 0) { - return undefined; - } - const box = (await field.boxModel()).content; - console.error(box); - const boundingBox = { - x: Math.round(box[0].x), - y: Math.round(box[0].y), - width: Math.round(box[2].x - box[0].x), - height: Math.round(box[2].y - box[0].y) - }; - console.error(boundingBox); - return { - boundingBox, - description: description, - id: await (await page.evaluateHandle( - async (element, ID_ATTRIBUTE) => { - let id = element.getAttribute(ID_ATTRIBUTE); - if (!id) { - id = await window.uuid(); - element.setAttribute(ID_ATTRIBUTE, id); - } - return id; - }, - field, - ID_ATTRIBUTE - )).jsonValue() - }; - }) - )).filter(input => input !== undefined); + const inputs = ( + await Promise.all( + fields.map(async (field) => { + if ((await (await field.getProperty("offsetParent")).jsonValue()) === null) { + return undefined; + } + let description = await (await field.getProperty("placeholder")).jsonValue(); + if (description === undefined || description.length === 0) { + description = await (await field.getProperty("name")).jsonValue(); + } + if (description === undefined || description.length === 0) { + return undefined; + } + const box = (await field.boxModel()).content; + console.error(box); + const boundingBox = { + x: Math.round(box[0].x), + y: Math.round(box[0].y), + width: Math.round(box[2].x - box[0].x), + height: Math.round(box[2].y - box[0].y), + }; + console.error(boundingBox); + return { + boundingBox, + description: description, + id: await ( + await page.evaluateHandle( + async (element, ID_ATTRIBUTE) => { + let id = element.getAttribute(ID_ATTRIBUTE); + if (!id) { + id = await window.uuid(); + element.setAttribute(ID_ATTRIBUTE, id); + } + return id; + }, + field, + ID_ATTRIBUTE, + ) + ).jsonValue(), + }; + }), + ) + ).filter((input) => input !== undefined); buf.writeInt32LE(inputs.length); inputs.forEach(({ boundingBox, description, id }) => { buf.writeInt32LE(boundingBox.x); @@ -480,7 +462,8 @@ const run = async () => { }); sendCommand(buf.toBuffer()); break; - case "t": + } + case "t": { const id = payload.readString(payload.readInt32LE()); const text = payload.readString(payload.readInt32LE()); console.error(`Update Text: ${id} ${text}`); @@ -494,9 +477,7 @@ const run = async () => { element.value = text; } else if (element.tagName === "SELECT") { const option = Array.from(element.options).find( - option => - option.innerText.toLocaleLowerCase() === - text.toLocaleLowerCase() + (option) => option.innerText.toLocaleLowerCase() === text.toLocaleLowerCase(), ); if (option) { element.value = option.value; @@ -505,14 +486,16 @@ const run = async () => { }, id, text.trim(), - ID_ATTRIBUTE + ID_ATTRIBUTE, ); break; - case "k": + } + case "k": { // This command is necessary because the Squeak ProcessWrapper is unable to terminate processes. await terminate(); break; - case "l": + } + case "l": { const url = payload.readString(); console.error(`Navigating to ${url}`); try { @@ -521,7 +504,8 @@ const run = async () => { console.error(error); } break; - case "e": + } + case "e": { // TODO check read boundaries for each event type const eventType = payload.readUInt8(); console.error("Received event type", eventType); @@ -545,7 +529,7 @@ const run = async () => { page.mouse.move(x, y); break; } - case 5: + case 5: { let squeakKeyString = payload.readString(size, "ascii"); let keyName; @@ -590,7 +574,7 @@ const run = async () => { "": "PageDown", "": "PageUp", // '': '', // TODO - "": "Insert" + "": "Insert", }; keyName = conversion[squeakKeyString]; if (keyName === undefined) { @@ -602,13 +586,14 @@ const run = async () => { } console.error("Typing", squeakKeyString, modifiers); try { - await Promise.all(modifiers.map(key => page.keyboard.down(key))); + await Promise.all(modifiers.map((key) => page.keyboard.down(key))); await page.keyboard.press(keyName); - await Promise.all(modifiers.map(key => page.keyboard.up(key))); + await Promise.all(modifiers.map((key) => page.keyboard.up(key))); } catch (error) { console.error(error); } break; + } case 6: { const x = payload.readUInt32LE(); const y = payload.readUInt32LE(); @@ -618,7 +603,7 @@ const run = async () => { case 7: { const y = payload.readUInt32LE(); console.error("scroll", y); - page.evaluate(y => window.scrollBy(0, y == 0 ? -20 : 20), y); + page.evaluate((y) => window.scrollBy(0, y == 0 ? -20 : 20), y); break; } case 8: { @@ -629,12 +614,7 @@ const run = async () => { let elements; try { - elements = await page.evaluate( - getElements, - "extractElements", - x, - y - ); + elements = await page.evaluate(getElements, "extractElements", x, y); } catch (error) { elements = []; console.error(error); @@ -650,7 +630,7 @@ const run = async () => { x: element.x, y: element.y, w: element.w, - h: element.h + h: element.h, }); sendPortalDataCommand(element); @@ -668,9 +648,10 @@ const run = async () => { } } break; + } } } }; // We catch all errors, log them to the console and exit. -run().catch(error => console.error(error)); +run().catch((error) => console.error(error)); diff --git a/yarn.lock b/yarn.lock index f1cc018..4b9bc75 100644 --- a/yarn.lock +++ b/yarn.lock @@ -20,6 +20,35 @@ "@babel/helper-validator-identifier" "^7.15.7" to-fast-properties "^2.0.0" +"@eslint/eslintrc@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.5.tgz#33f1b838dbf1f923bfa517e008362b78ddbbf318" + integrity sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.2.0" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@humanwhocodes/config-array@^0.9.2": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.2.tgz#68be55c737023009dfc5fe245d51181bb6476914" + integrity sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -46,6 +75,16 @@ resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== +acorn-jsx@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.6.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.6.0.tgz#e3692ba0eb1a0c83eaa4f37f5fa7368dd7142895" + integrity sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw== + agent-base@6: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" @@ -60,7 +99,7 @@ agent-base@^4.3.0: dependencies: es6-promisify "^5.0.0" -ajv@^6.12.3: +ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -70,6 +109,11 @@ ajv@^6.12.3: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -107,6 +151,11 @@ are-we-there-yet@~1.1.2: delegates "^1.0.0" readable-stream "^2.0.6" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" @@ -213,6 +262,11 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -227,7 +281,7 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -336,6 +390,15 @@ cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + cwise-compiler@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/cwise-compiler/-/cwise-compiler-1.1.3.tgz#f4d667410e850d3a313a7d2db7b1e505bb034cc5" @@ -355,7 +418,7 @@ data-uri-to-buffer@0.0.3: resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-0.0.3.tgz#18ae979a6a0ca994b0625853916d2662bbae0b1a" integrity sha1-GK6XmmoMqZSwYlhTkW0mYruuCxo= -debug@4, debug@^4.1.0: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2: version "4.3.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== @@ -388,7 +451,7 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -deep-is@~0.1.3: +deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== @@ -415,6 +478,13 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -435,6 +505,13 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + es6-promise@^4.0.3: version "4.2.8" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" @@ -457,6 +534,11 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + escodegen@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" @@ -469,12 +551,109 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" +eslint-config-prettier@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" + integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== + +eslint-scope@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.0.tgz#c1f6ea30ac583031f203d65c73e723b01298f153" + integrity sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz#eee4acea891814cda67a7d8812d9647dd0179af2" + integrity sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA== + +eslint@^8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.5.0.tgz#ddd2c1afd8f412036f87ae2a063d2aa296d3175f" + integrity sha512-tVGSkgNbOfiHyVte8bCM8OmX+xG9PzVG/B4UCF60zx7j61WIVY/AqJECDgpLD4DbbESD0e174gOg3ZlrX15GDg== + dependencies: + "@eslint/eslintrc" "^1.0.5" + "@humanwhocodes/config-array" "^0.9.2" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + enquirer "^2.3.5" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.0" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.1.0" + espree "^9.2.0" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^6.0.1" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.2.0" + semver "^7.2.1" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.2.0.tgz#c50814e01611c2d0f8bd4daa83c369eabba80dbc" + integrity sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg== + dependencies: + acorn "^8.6.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^3.1.0" + esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -estraverse@^5.2.0: +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== @@ -514,7 +693,7 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== -fast-deep-equal@^3.1.1: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== @@ -535,7 +714,7 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= @@ -554,6 +733,13 @@ fd-slicer@~1.1.0: dependencies: pend "~1.2.0" +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -568,6 +754,19 @@ find-yarn-workspace-root@^2.0.0: dependencies: micromatch "^4.0.2" +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2" + integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw== + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -624,6 +823,11 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -679,6 +883,13 @@ glob-parent@^5.1.2: dependencies: is-glob "^4.0.1" +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + glob@^7.1.3: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" @@ -691,6 +902,13 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +globals@^13.6.0, globals@^13.9.0: + version "13.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" + integrity sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg== + dependencies: + type-fest "^0.20.2" + globby@^11.0.4: version "11.0.4" resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" @@ -773,10 +991,28 @@ ieee754@^1.1.13: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + ignore@^5.1.4: - version "5.1.9" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb" - integrity sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ== + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= inflight@^1.0.4: version "1.0.6" @@ -850,7 +1086,7 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-glob@^4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -894,6 +1130,13 @@ jpeg-js@^0.4.1: resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.3.tgz#6158e09f1983ad773813704be80680550eff977b" integrity sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q== +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -909,6 +1152,11 @@ json-schema@0.4.0: resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -947,6 +1195,14 @@ klaw-sync@^6.0.0: dependencies: graceful-fs "^4.1.11" +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -955,6 +1211,11 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -1049,6 +1310,11 @@ napi-build-utils@^1.0.1: resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + ndarray-pack@^1.1.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ndarray-pack/-/ndarray-pack-1.2.1.tgz#8caebeaaa24d5ecf70ff86020637977da8ee585a" @@ -1146,6 +1412,18 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -1156,6 +1434,13 @@ p-is-promise@^3.0.0: resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-3.0.0.tgz#58e78c7dfe2e163cf2a04ff869e7c1dba64a5971" integrity sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ== +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + parse-data-uri@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/parse-data-uri/-/parse-data-uri-0.2.0.tgz#bf04d851dd5c87b0ab238e5d01ace494b604b4c9" @@ -1192,6 +1477,11 @@ path-key@^2.0.1: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + path-parse@^1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" @@ -1281,17 +1571,27 @@ prebuild-install@6.1.4: tar-fs "^2.0.0" tunnel-agent "^0.6.0" +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= +prettier@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" + integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -progress@^2.0.1, progress@^2.0.3: +progress@^2.0.0, progress@^2.0.1, progress@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== @@ -1375,6 +1675,11 @@ readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + request@^2.44.0: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" @@ -1406,6 +1711,11 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + resolve@^1.20.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" @@ -1426,6 +1736,13 @@ rimraf@^2.6.1, rimraf@^2.6.3: dependencies: glob "^7.1.3" +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -1453,7 +1770,7 @@ semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^7.3.5: +semver@^7.2.1, semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== @@ -1472,11 +1789,23 @@ shebang-command@^1.2.0: dependencies: shebang-regex "^1.0.0" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + signal-exit@^3.0.0: version "3.0.6" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" @@ -1584,6 +1913,11 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -1624,6 +1958,11 @@ tar-stream@^2.1.4: inherits "^2.0.3" readable-stream "^3.1.1" +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + through@^2.3.4: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -1678,6 +2017,13 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -1685,6 +2031,11 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -1727,6 +2078,11 @@ uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -1756,6 +2112,13 @@ which@^1.2.9: dependencies: isexe "^2.0.0" +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + wide-align@^1.1.0: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" @@ -1763,7 +2126,7 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2 || 3 || 4" -word-wrap@~1.2.3: +word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==