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==