Fix gelbooru + grab original source when available
parent
73dcfceb5b
commit
5e52bb46af
|
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"printWidth": 120,
|
||||||
|
"tabWidth": 2
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "neo-scraper",
|
"name": "neo-scraper",
|
||||||
"version": "0.2.6",
|
"version": "0.3.0",
|
||||||
"description": "Scrape a booru-like post object from the DOM.",
|
"description": "Scrape a booru-like post object from the DOM.",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"types": "dist/index.d.js",
|
"types": "dist/index.d.js",
|
||||||
|
|
|
||||||
|
|
@ -41,82 +41,82 @@ test("all default scrapers have unique names", () => {
|
||||||
// All links are SFW unless stated otherwise
|
// All links are SFW unless stated otherwise
|
||||||
|
|
||||||
test("get danbooru.donmai.us post 3555872", async () => {
|
test("get danbooru.donmai.us post 3555872", async () => {
|
||||||
var source = "https://danbooru.donmai.us/posts/3555872";
|
var pageUrl = "https://danbooru.donmai.us/posts/3555872";
|
||||||
const res = await scrapeUrl(source);
|
const res = await scrapeUrl(pageUrl);
|
||||||
expect(res.posts.length).toBe(1);
|
expect(res.posts.length).toBe(1);
|
||||||
expect(res.posts[0].source).toBe(source);
|
expect(res.posts[0].pageUrl).toBe(pageUrl);
|
||||||
expect(res.posts[0].imageUrl).toBe("https://danbooru.donmai.us/data/__flint_girls_und_panzer_drawn_by_omachi_slabco__90332299216db81b8793084e4cb7c15d.jpg");
|
expect(res.posts[0].imageUrl).toBe("https://danbooru.donmai.us/data/__flint_girls_und_panzer_drawn_by_omachi_slabco__90332299216db81b8793084e4cb7c15d.jpg");
|
||||||
});
|
});
|
||||||
|
|
||||||
// Gelbooru
|
// Gelbooru
|
||||||
|
|
||||||
test("get safebooru.org post 2871532", async () => {
|
test("get safebooru.org post 2871532", async () => {
|
||||||
var source = "https://safebooru.org/index.php?page=post&s=view&id=2871532";
|
var pageUrl = "https://safebooru.org/index.php?page=post&s=view&id=2871532";
|
||||||
const res = await scrapeUrl(source);
|
const res = await scrapeUrl(pageUrl);
|
||||||
expect(res.posts.length).toBe(1);
|
expect(res.posts.length).toBe(1);
|
||||||
expect(res.posts[0].source).toBe(source);
|
expect(res.posts[0].pageUrl).toBe(pageUrl);
|
||||||
expect(res.posts[0].imageUrl).toBe("https://safebooru.org//images/2757/5f19c7744db918c3d4c4c6035bc65dfa9e18866f.jpg");
|
expect(res.posts[0].imageUrl).toBe("https://safebooru.org//images/2757/5f19c7744db918c3d4c4c6035bc65dfa9e18866f.jpg");
|
||||||
});
|
});
|
||||||
|
|
||||||
test("get gelbooru.com post 4925055", async () => {
|
test("get gelbooru.com post 4925055", async () => {
|
||||||
var source = "https://gelbooru.com/index.php?page=post&s=view&id=4925055&tags=kimetsu_no_yaiba";
|
var pageUrl = "https://gelbooru.com/index.php?page=post&s=view&id=4925055&tags=kimetsu_no_yaiba";
|
||||||
const res = await scrapeUrl(source);
|
const res = await scrapeUrl(pageUrl);
|
||||||
expect(res.posts.length).toBe(1);
|
expect(res.posts.length).toBe(1);
|
||||||
expect(res.posts[0].source).toBe(source);
|
expect(res.posts[0].pageUrl).toBe(pageUrl);
|
||||||
expect(res.posts[0].imageUrl).toBe("https://img2.gelbooru.com/images/3d/03/3d03f6858637805d6473d390a4b1d8c8.jpg");
|
expect(res.posts[0].imageUrl).toBe("https://img2.gelbooru.com/images/3d/03/3d03f6858637805d6473d390a4b1d8c8.jpg");
|
||||||
});
|
});
|
||||||
|
|
||||||
test("get rule34.xxx post 2740994", async () => {
|
test("get rule34.xxx post 2740994", async () => {
|
||||||
var source = "https://rule34.xxx/index.php?page=post&s=view&id=2740994";
|
var pageUrl = "https://rule34.xxx/index.php?page=post&s=view&id=2740994";
|
||||||
const res = await scrapeUrl(source);
|
const res = await scrapeUrl(pageUrl);
|
||||||
expect(res.posts.length).toBe(1);
|
expect(res.posts.length).toBe(1);
|
||||||
expect(res.posts[0].source).toBe(source);
|
expect(res.posts[0].pageUrl).toBe(pageUrl);
|
||||||
expect(res.posts[0].imageUrl).toContain(".rule34.xxx//images/2472/35bf31c98f53a369c047baf9bae496fb.jpeg");
|
expect(res.posts[0].imageUrl).toContain(".rule34.xxx//images/2472/35bf31c98f53a369c047baf9bae496fb.jpeg");
|
||||||
});
|
});
|
||||||
|
|
||||||
// Moebooru
|
// Moebooru
|
||||||
|
|
||||||
test("get yande.re post 438510", async () => {
|
test("get yande.re post 438510", async () => {
|
||||||
var source = "https://yande.re/post/show/438510";
|
var pageUrl = "https://yande.re/post/show/438510";
|
||||||
const res = await scrapeUrl(source);
|
const res = await scrapeUrl(pageUrl);
|
||||||
expect(res.posts.length).toBe(1);
|
expect(res.posts.length).toBe(1);
|
||||||
expect(res.posts[0].source).toBe(source);
|
expect(res.posts[0].pageUrl).toBe(pageUrl);
|
||||||
expect(res.posts[0].imageUrl).toBe("https://files.yande.re/image/49b79bc372716a579d8525dcaccb56e2/yande.re%20438510%20landscape%20link%20nintendo%20princess_zelda%20sword%20the_legend_of_zelda%20the_legend_of_zelda%3A_breath_of_the_wild.jpg");
|
expect(res.posts[0].imageUrl).toBe("https://files.yande.re/image/49b79bc372716a579d8525dcaccb56e2/yande.re%20438510%20landscape%20link%20nintendo%20princess_zelda%20sword%20the_legend_of_zelda%20the_legend_of_zelda%3A_breath_of_the_wild.jpg");
|
||||||
});
|
});
|
||||||
|
|
||||||
test("get konachan.com post 289968", async () => {
|
test("get konachan.com post 289968", async () => {
|
||||||
var source = "https://konachan.com/post/show/289968/ahri_-league_of_legends-akali-animal_ears-blonde_h";
|
var pageUrl = "https://konachan.com/post/show/289968/ahri_-league_of_legends-akali-animal_ears-blonde_h";
|
||||||
const res = await scrapeUrl(source);
|
const res = await scrapeUrl(pageUrl);
|
||||||
expect(res.posts.length).toBe(1);
|
expect(res.posts.length).toBe(1);
|
||||||
expect(res.posts[0].source).toBe(source);
|
expect(res.posts[0].pageUrl).toBe(pageUrl);
|
||||||
expect(res.posts[0].imageUrl).toBe("https://konachan.com/image/e40b38fb704434e4da3eae41e26bca39/Konachan.com%20-%20289968%20akali%20blue_eyes%20breasts%20choker%20cleavage%20evelynn%20foxgirl%20gloves%20group%20hat%20kai%27sa%20long_hair%20microphone%20ponytail%20saphirya%20short_hair%20signed%20watermark.jpg");
|
expect(res.posts[0].imageUrl).toBe("https://konachan.com/image/e40b38fb704434e4da3eae41e26bca39/Konachan.com%20-%20289968%20akali%20blue_eyes%20breasts%20choker%20cleavage%20evelynn%20foxgirl%20gloves%20group%20hat%20kai%27sa%20long_hair%20microphone%20ponytail%20saphirya%20short_hair%20signed%20watermark.jpg");
|
||||||
});
|
});
|
||||||
|
|
||||||
// Reddit
|
// Reddit
|
||||||
|
|
||||||
test("get old.reddit.com post", async () => {
|
test("get old.reddit.com post", async () => {
|
||||||
var source = "https://old.reddit.com/r/IceCreamWaifu/comments/ce0wgh/rtx_2018_neo_luluchan92/";
|
var pageUrl = "https://old.reddit.com/r/IceCreamWaifu/comments/ce0wgh/rtx_2018_neo_luluchan92/";
|
||||||
const res = await scrapeUrl(source);
|
const res = await scrapeUrl(pageUrl);
|
||||||
expect(res.posts.length).toBe(1);
|
expect(res.posts.length).toBe(1);
|
||||||
expect(res.posts[0].source).toBe(source);
|
expect(res.posts[0].pageUrl).toBe(pageUrl);
|
||||||
expect(res.posts[0].imageUrl).toBe("https://i.redd.it/ln8ahz17kpa31.jpg");
|
expect(res.posts[0].imageUrl).toBe("https://i.redd.it/ln8ahz17kpa31.jpg");
|
||||||
});
|
});
|
||||||
|
|
||||||
test("get new.reddit.com post", async () => {
|
test("get new.reddit.com post", async () => {
|
||||||
var source = "https://new.reddit.com/r/IceCreamWaifu/comments/ce0wgh/rtx_2018_neo_luluchan92/";
|
var pageUrl = "https://new.reddit.com/r/IceCreamWaifu/comments/ce0wgh/rtx_2018_neo_luluchan92/";
|
||||||
const res = await scrapeUrl(source);
|
const res = await scrapeUrl(pageUrl);
|
||||||
expect(res.posts.length).toBe(1);
|
expect(res.posts.length).toBe(1);
|
||||||
expect(res.posts[0].source).toBe(source);
|
expect(res.posts[0].pageUrl).toBe(pageUrl);
|
||||||
expect(res.posts[0].imageUrl).toBe("https://i.redd.it/ln8ahz17kpa31.jpg");
|
expect(res.posts[0].imageUrl).toBe("https://i.redd.it/ln8ahz17kpa31.jpg");
|
||||||
});
|
});
|
||||||
|
|
||||||
// Shimmie2
|
// Shimmie2
|
||||||
|
|
||||||
test("get rule34.paheal.net post 2505982", async () => {
|
test("get rule34.paheal.net post 2505982", async () => {
|
||||||
var source = "https://rule34.paheal.net/post/view/2505982"; // Somewhat sketchy
|
var pageUrl = "https://rule34.paheal.net/post/view/2505982"; // Somewhat sketchy
|
||||||
const res = await scrapeUrl(source);
|
const res = await scrapeUrl(pageUrl);
|
||||||
expect(res.posts.length).toBe(1);
|
expect(res.posts.length).toBe(1);
|
||||||
expect(res.posts[0].source).toBe(source);
|
expect(res.posts[0].pageUrl).toBe(pageUrl);
|
||||||
expect(res.posts[0].imageUrl).toContain(".paheal.net/_images/15427ab5ed2cddbeef947e30f5c9cab6/2505982%20-%20Kai%27Sa%20League_of_Legends%20lawzilla.png");
|
expect(res.posts[0].imageUrl).toContain(".paheal.net/_images/15427ab5ed2cddbeef947e30f5c9cab6/2505982%20-%20Kai%27Sa%20League_of_Legends%20lawzilla.png");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -125,9 +125,9 @@ test("get rule34.paheal.net post 2505982", async () => {
|
||||||
test("get twitter.com post", async () => {
|
test("get twitter.com post", async () => {
|
||||||
pending("JSDOM can't parse this page");
|
pending("JSDOM can't parse this page");
|
||||||
// TODO: JSDOM sucks
|
// TODO: JSDOM sucks
|
||||||
// var source = "https://twitter.com/Dishwasher1910/status/1171162651461746688/photo/1";
|
// var pageUrl = "https://twitter.com/Dishwasher1910/status/1171162651461746688/photo/1";
|
||||||
// const res = await scrapeUrl(source);
|
// const res = await scrapeUrl(pageUrl);
|
||||||
// expect(res.posts.length).toBe(1);
|
// expect(res.posts.length).toBe(1);
|
||||||
// expect(res.posts[0].source).toBe(source);
|
// expect(res.posts[0].pageUrl).toBe(pageUrl);
|
||||||
// expect(res.posts[0].imageUrl).toBe("https://pbs.twimg.com/media/EEDOOCdU0AAHX00?format=jpg&name=orig");
|
// expect(res.posts[0].imageUrl).toBe("https://pbs.twimg.com/media/EEDOOCdU0AAHX00?format=jpg&name=orig");
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ export default class NeoScraper {
|
||||||
}
|
}
|
||||||
|
|
||||||
scrapeDocument(document: Document, engines: string[] | null = null, allowFallbackEngine: boolean = false, ignoreCanImport: boolean = false): ScrapeResults {
|
scrapeDocument(document: Document, engines: string[] | null = null, allowFallbackEngine: boolean = false, ignoreCanImport: boolean = false): ScrapeResults {
|
||||||
let res = new ScrapeResults();
|
const res = new ScrapeResults();
|
||||||
|
|
||||||
for (const engine of this.engines) {
|
for (const engine of this.engines) {
|
||||||
if (ignoreCanImport || engine.canImport(document.location)) {
|
if (ignoreCanImport || engine.canImport(document.location)) {
|
||||||
|
|
|
||||||
|
|
@ -1,56 +1,59 @@
|
||||||
import { TagCategory, SafetyRating } from "./BooruTypes";
|
import { TagCategory, SafetyRating } from "./BooruTypes";
|
||||||
|
|
||||||
export class ScrapedPost {
|
export class ScrapedPost {
|
||||||
imageUrl: string = "";
|
imageUrl: string = "";
|
||||||
source: string = "";
|
pageUrl: string = "";
|
||||||
rating: SafetyRating = "safe";
|
rating: SafetyRating = "safe";
|
||||||
tags: ScrapedTag[] = [];
|
tags: ScrapedTag[] = [];
|
||||||
|
source: string | undefined = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class ScrapedTag {
|
export class ScrapedTag {
|
||||||
name: string = "";
|
name: string = "";
|
||||||
category?: TagCategory;
|
category?: TagCategory;
|
||||||
|
|
||||||
constructor(name: string, category?: TagCategory) {
|
constructor(name: string, category?: TagCategory) {
|
||||||
this.name = name.replace(/\s/g, "_").toLowerCase(); // Replace all spaces with underscores and make everything lowercase
|
this.name = name.replace(/\s/g, "_").toLowerCase(); // Replace all spaces with underscores and make everything lowercase
|
||||||
this.category = category;
|
this.category = category;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class ScrapeResult {
|
export class ScrapeResult {
|
||||||
engine: string;
|
engine: string;
|
||||||
description: string = "";
|
description: string = "";
|
||||||
posts: ScrapedPost[] = [];
|
posts: ScrapedPost[] = [];
|
||||||
|
|
||||||
constructor(engine: string) {
|
constructor(engine: string) {
|
||||||
this.engine = engine;
|
this.engine = engine;
|
||||||
}
|
}
|
||||||
|
|
||||||
tryAddPost(post: ScrapedPost) {
|
tryAddPost(post: ScrapedPost) {
|
||||||
if (!post.imageUrl) {
|
if (!post.imageUrl) {
|
||||||
console.log(`[${this.engine}] Not adding post because imageUrl is unset!`);
|
console.log(
|
||||||
} else {
|
`[${this.engine}] Not adding post because imageUrl is unset!`
|
||||||
this.posts.push(post);
|
);
|
||||||
}
|
} else {
|
||||||
|
this.posts.push(post);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class ScrapeResults {
|
export class ScrapeResults {
|
||||||
results: ScrapeResult[] = [];
|
results: ScrapeResult[] = [];
|
||||||
|
|
||||||
get posts(): ScrapedPost[] {
|
get posts(): ScrapedPost[] {
|
||||||
var posts: ScrapedPost[] = [];
|
var posts: ScrapedPost[] = [];
|
||||||
|
|
||||||
for (var res of this.results) {
|
for (var res of this.results) {
|
||||||
posts = posts.concat(res.posts);
|
posts = posts.concat(res.posts);
|
||||||
}
|
|
||||||
|
|
||||||
return posts;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return posts;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ScrapeEngine {
|
export interface ScrapeEngine {
|
||||||
name: string;
|
name: string;
|
||||||
canImport(url: Location): boolean;
|
canImport(url: Location): boolean;
|
||||||
scrapeDocument(document: Document): ScrapeResult;
|
scrapeDocument(document: Document): ScrapeResult;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,84 +2,91 @@ import { ScrapeEngine, ScrapeResult, ScrapedPost, ScrapedTag } from "../ScrapeEn
|
||||||
import { TagCategory } from "../BooruTypes";
|
import { TagCategory } from "../BooruTypes";
|
||||||
|
|
||||||
export default class Danbooru implements ScrapeEngine {
|
export default class Danbooru implements ScrapeEngine {
|
||||||
name = "danbooru";
|
name = "danbooru";
|
||||||
|
|
||||||
canImport(url: Location): boolean {
|
canImport(url: Location): boolean {
|
||||||
return (
|
return url.host == "danbooru.donmai.us" || url.host == "safebooru.donmai.us";
|
||||||
url.host == "danbooru.donmai.us" ||
|
}
|
||||||
url.host == "safebooru.donmai.us"
|
|
||||||
);
|
scrapeDocument(document: Document): ScrapeResult {
|
||||||
|
let result = new ScrapeResult(this.name);
|
||||||
|
let post = new ScrapedPost();
|
||||||
|
post.pageUrl = document.location.href;
|
||||||
|
|
||||||
|
// Set image url
|
||||||
|
const originalImageElements = Array.from(document.querySelectorAll("#post-information > ul > li > a")).filter(
|
||||||
|
(x) => x.parentElement && x.parentElement.innerText.startsWith("Size")
|
||||||
|
);
|
||||||
|
|
||||||
|
if (originalImageElements.length > 0) {
|
||||||
|
post.imageUrl = (originalImageElements[0] as HTMLAnchorElement).href;
|
||||||
}
|
}
|
||||||
|
|
||||||
scrapeDocument(document: Document): ScrapeResult {
|
// Set rating
|
||||||
let result = new ScrapeResult(this.name);
|
const safetyExp = new RegExp("Rating: (.*)");
|
||||||
let post = new ScrapedPost();
|
const safetyElements = Array.from(document.querySelectorAll("#post-information > ul > li"))
|
||||||
post.source = document.location.href;
|
.map((x) => x as HTMLLIElement)
|
||||||
|
.filter((x) => x.innerText.startsWith("Rating"));
|
||||||
|
|
||||||
// Set image url
|
if (safetyElements.length > 0) {
|
||||||
const originalImageElements = Array.from(document.querySelectorAll("#post-information > ul > li > a"))
|
const matches = safetyElements[0].innerText.match(safetyExp);
|
||||||
.filter(x => x.parentElement && x.parentElement.innerText.startsWith("Size"));
|
if (matches && matches.length > 0) {
|
||||||
|
switch (matches[1].toLowerCase()) {
|
||||||
if (originalImageElements.length > 0) {
|
case "safe":
|
||||||
post.imageUrl = (originalImageElements[0] as HTMLAnchorElement).href;
|
post.rating = "safe";
|
||||||
|
break;
|
||||||
|
case "questionable":
|
||||||
|
post.rating = "sketchy";
|
||||||
|
break;
|
||||||
|
case "explicit":
|
||||||
|
post.rating = "unsafe";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// Set rating
|
|
||||||
const safetyExp = new RegExp("Rating: (.*)");
|
|
||||||
const safetyElements = Array.from(document.querySelectorAll("#post-information > ul > li"))
|
|
||||||
.map(x => x as HTMLLIElement)
|
|
||||||
.filter(x => x.innerText.startsWith("Rating"));
|
|
||||||
|
|
||||||
if (safetyElements.length > 0) {
|
|
||||||
const matches = safetyElements[0].innerText.match(safetyExp);
|
|
||||||
if (matches && matches.length > 0) {
|
|
||||||
switch (matches[1].toLowerCase()) {
|
|
||||||
case "safe":
|
|
||||||
post.rating = "safe";
|
|
||||||
break;
|
|
||||||
case "questionable":
|
|
||||||
post.rating = "sketchy";
|
|
||||||
break;
|
|
||||||
case "explicit":
|
|
||||||
post.rating = "unsafe";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set tags
|
|
||||||
const tagElements = Array.from(document.querySelectorAll("#tag-list > ul > li")).map(x => x as HTMLLIElement);
|
|
||||||
for (const tagElement of tagElements) {
|
|
||||||
let tagName: string | undefined;
|
|
||||||
const tagNameElement = tagElement.querySelector(".search-tag") as HTMLAnchorElement;
|
|
||||||
if (tagNameElement) {
|
|
||||||
tagName = tagNameElement.innerText;
|
|
||||||
}
|
|
||||||
|
|
||||||
let category: TagCategory | undefined;
|
|
||||||
switch (tagElement.className) {
|
|
||||||
case "tag-type-3":
|
|
||||||
category = "copyright";
|
|
||||||
break;
|
|
||||||
case "tag-type-4":
|
|
||||||
category = "character";
|
|
||||||
break;
|
|
||||||
case "tag-type-1":
|
|
||||||
category = "artist";
|
|
||||||
break;
|
|
||||||
case "tag-type-5":
|
|
||||||
category = "meta";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tagName) {
|
|
||||||
let tag = new ScrapedTag(tagName, category);
|
|
||||||
post.tags.push(tag);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
result.tryAddPost(post);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set tags
|
||||||
|
const tagElements = Array.from(document.querySelectorAll("#tag-list > ul > li")).map((x) => x as HTMLLIElement);
|
||||||
|
for (const tagElement of tagElements) {
|
||||||
|
let tagName: string | undefined;
|
||||||
|
const tagNameElement = tagElement.querySelector(".search-tag") as HTMLAnchorElement;
|
||||||
|
if (tagNameElement) {
|
||||||
|
tagName = tagNameElement.innerText;
|
||||||
|
}
|
||||||
|
|
||||||
|
let category: TagCategory | undefined;
|
||||||
|
switch (tagElement.className) {
|
||||||
|
case "tag-type-3":
|
||||||
|
category = "copyright";
|
||||||
|
break;
|
||||||
|
case "tag-type-4":
|
||||||
|
category = "character";
|
||||||
|
break;
|
||||||
|
case "tag-type-1":
|
||||||
|
category = "artist";
|
||||||
|
break;
|
||||||
|
case "tag-type-5":
|
||||||
|
category = "meta";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tagName) {
|
||||||
|
let tag = new ScrapedTag(tagName, category);
|
||||||
|
post.tags.push(tag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set source
|
||||||
|
const sourceEl = document.getElementById("post-info-source");
|
||||||
|
if (sourceEl && sourceEl.children.length > 0) {
|
||||||
|
const sourceLink = sourceEl.children[0] as HTMLAnchorElement;
|
||||||
|
if (sourceLink) {
|
||||||
|
post.source = sourceLink.href;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result.tryAddPost(post);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,30 +1,31 @@
|
||||||
import { ScrapeEngine, ScrapeResult, ScrapedPost } from "../ScrapeEngine";
|
import { ScrapeEngine, ScrapeResult, ScrapedPost } from "../ScrapeEngine";
|
||||||
|
|
||||||
export default class Fallback implements ScrapeEngine {
|
export default class Fallback implements ScrapeEngine {
|
||||||
name = "fallback";
|
name = "fallback";
|
||||||
|
|
||||||
canImport(location: Location): boolean {
|
canImport(location: Location): boolean {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
scrapeDocument(document: Document): ScrapeResult {
|
||||||
|
function getSize(el: HTMLImageElement) {
|
||||||
|
return el.width * el.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
scrapeDocument(document: Document): ScrapeResult {
|
// Get largest img element on this page
|
||||||
function getSize(el: HTMLImageElement) {
|
const largestImgElement = Array.from(document.getElementsByTagName("img")).reduce((a, b) =>
|
||||||
return el.width * el.height;
|
getSize(a) > getSize(b) ? a : b
|
||||||
}
|
);
|
||||||
|
|
||||||
// Get largest img element on this page
|
let result = new ScrapeResult(this.name);
|
||||||
const largestImgElement = Array.from(document.getElementsByTagName('img'))
|
|
||||||
.reduce((a, b) => getSize(a) > getSize(b) ? a : b);
|
|
||||||
|
|
||||||
let result = new ScrapeResult(this.name);
|
if (largestImgElement) {
|
||||||
|
let post = new ScrapedPost();
|
||||||
if (largestImgElement) {
|
post.pageUrl = document.location.href;
|
||||||
let post = new ScrapedPost();
|
post.imageUrl = largestImgElement.src;
|
||||||
post.source = document.location.href;
|
result.posts.push(post);
|
||||||
post.imageUrl = largestImgElement.src;
|
|
||||||
result.posts.push(post);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,140 +3,148 @@ import { TagCategory } from "../BooruTypes";
|
||||||
|
|
||||||
// Small hack to avoid screwing with semver
|
// Small hack to avoid screwing with semver
|
||||||
enum Version {
|
enum Version {
|
||||||
v020 = 1, // 0.2.0
|
v020 = 1, // 0.2.0
|
||||||
v025, // 0.2.5
|
v025, // 0.2.5
|
||||||
}
|
}
|
||||||
|
|
||||||
type CategoryMap = Record<string, TagCategory>;
|
type CategoryMap = Record<string, TagCategory>;
|
||||||
|
|
||||||
export default class Gelbooru implements ScrapeEngine {
|
export default class Gelbooru implements ScrapeEngine {
|
||||||
name = "gelbooru";
|
name = "gelbooru";
|
||||||
|
|
||||||
canImport(url: Location): boolean {
|
canImport(url: Location): boolean {
|
||||||
return (
|
return (
|
||||||
url.host == "safebooru.org" ||
|
url.host == "safebooru.org" || url.host == "gelbooru.com" || url.host == "rule34.xxx" || url.host == "tbib.org"
|
||||||
url.host == "gelbooru.com" ||
|
);
|
||||||
url.host == "rule34.xxx" ||
|
}
|
||||||
url.host == "tbib.org"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
scrapeDocument(document: Document): ScrapeResult {
|
|
||||||
let result = new ScrapeResult(this.name);
|
|
||||||
let version: Version | null = null;
|
|
||||||
switch (document.location.host) {
|
|
||||||
case "safebooru.org":
|
|
||||||
case "rule34.xxx":
|
|
||||||
case "tbib.org":
|
|
||||||
version = Version.v020;
|
|
||||||
break;
|
|
||||||
case "gelbooru.com":
|
|
||||||
version = Version.v025;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
console.error("Couldn't guess version");
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log("Gelbooru guessed version: " + version);
|
|
||||||
|
|
||||||
let post = new ScrapedPost();
|
|
||||||
post.source = document.location.href;
|
|
||||||
|
|
||||||
// Set image url
|
|
||||||
Array.from(document.querySelectorAll("li > a"))
|
|
||||||
.map(x => x as HTMLAnchorElement)
|
|
||||||
.filter(x => x && x.innerText == "Original image")
|
|
||||||
.map(x => post.imageUrl = x.href);
|
|
||||||
|
|
||||||
// Set rating
|
|
||||||
const safetyExp = new RegExp("Rating: (.*)");
|
|
||||||
let safetyElements: NodeListOf<Element>;
|
|
||||||
|
|
||||||
if (version == Version.v020) {
|
|
||||||
safetyElements = document.querySelectorAll("#stats > ul > li");
|
|
||||||
} else {
|
|
||||||
safetyElements = document.querySelectorAll("#tag-list > div > li");
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const idx in safetyElements) {
|
|
||||||
const el = safetyElements[idx] as HTMLLIElement;
|
|
||||||
if (el && el.innerText) {
|
|
||||||
// matches is an array where (index)
|
|
||||||
// 0: full string
|
|
||||||
// 1: capture group 1 (rating, so 'Safe', 'Questionable', 'Explicit')
|
|
||||||
const matches = el.innerText.match(safetyExp);
|
|
||||||
if (matches && matches.length > 0) {
|
|
||||||
switch (matches[1].toLowerCase()) {
|
|
||||||
case "safe":
|
|
||||||
post.rating = "safe";
|
|
||||||
break;
|
|
||||||
case "questionable":
|
|
||||||
post.rating = "sketchy";
|
|
||||||
break;
|
|
||||||
case "explicit":
|
|
||||||
post.rating = "unsafe";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set tags
|
|
||||||
let tagElements: NodeListOf<Element>;
|
|
||||||
|
|
||||||
if (version == Version.v020) {
|
|
||||||
tagElements = document.querySelectorAll("#tag-sidebar > li");
|
|
||||||
} else {
|
|
||||||
tagElements = document.querySelectorAll("#tag-list > div > li[class^='tag-type']");
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const idx in tagElements) {
|
|
||||||
const el = tagElements[idx] as HTMLLIElement;
|
|
||||||
if (el && el.innerText) {
|
|
||||||
let tagName: string;
|
|
||||||
|
|
||||||
if (version == Version.v020) {
|
|
||||||
const nameElements = el.getElementsByTagName("a");
|
|
||||||
|
|
||||||
// Some <li/> don't actually contain a name.
|
|
||||||
// E.g. the sub-headers ("Copyright", "Character", "General", "Meta") on rule34.xxx
|
|
||||||
if (nameElements.length > 0) {
|
|
||||||
tagName = el.getElementsByTagName("a")[0].innerText;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// First <a> is "?"
|
|
||||||
// Second <a> is "actual_tag_name"
|
|
||||||
tagName = el.getElementsByTagName("a")[1].innerText;
|
|
||||||
}
|
|
||||||
|
|
||||||
let category: TagCategory | undefined;
|
|
||||||
|
|
||||||
const classNameToCategoryMap: CategoryMap = {
|
|
||||||
"tag-type-copyright": "copyright",
|
|
||||||
"tag-type-character": "character",
|
|
||||||
"tag-type-artist": "artist",
|
|
||||||
"tag-type-metadata": "meta"
|
|
||||||
};
|
|
||||||
|
|
||||||
// Loop over all classes, because some websites use multiple. E.g. `class="tag tag-type-copyright"`
|
|
||||||
for (const className of el.classList) {
|
|
||||||
if (classNameToCategoryMap[className]) {
|
|
||||||
category = classNameToCategoryMap[className];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let tag = new ScrapedTag(tagName, category);
|
|
||||||
post.tags.push(tag);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
result.tryAddPost(post);
|
|
||||||
|
|
||||||
|
scrapeDocument(document: Document): ScrapeResult {
|
||||||
|
let result = new ScrapeResult(this.name);
|
||||||
|
let version: Version | null = null;
|
||||||
|
switch (document.location.host) {
|
||||||
|
case "safebooru.org":
|
||||||
|
case "rule34.xxx":
|
||||||
|
case "tbib.org":
|
||||||
|
version = Version.v020;
|
||||||
|
break;
|
||||||
|
case "gelbooru.com":
|
||||||
|
version = Version.v025;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
console.error("Couldn't guess version");
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log("Gelbooru guessed version: " + version);
|
||||||
|
|
||||||
|
let post = new ScrapedPost();
|
||||||
|
post.pageUrl = document.location.href;
|
||||||
|
|
||||||
|
// Set image url
|
||||||
|
Array.from(document.querySelectorAll("li > a"))
|
||||||
|
.map((x) => x as HTMLAnchorElement)
|
||||||
|
.filter((x) => x && x.innerText == "Original image")
|
||||||
|
.map((x) => (post.imageUrl = x.href));
|
||||||
|
|
||||||
|
// Set rating and source
|
||||||
|
const regex = new RegExp("(.*): (.*)");
|
||||||
|
let statsElements: NodeListOf<Element>;
|
||||||
|
|
||||||
|
if (version == Version.v020) {
|
||||||
|
statsElements = document.querySelectorAll("#stats > ul > li");
|
||||||
|
} else {
|
||||||
|
statsElements = document.querySelectorAll(".tag-list > li");
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const idx in statsElements) {
|
||||||
|
const el = statsElements[idx] as HTMLLIElement;
|
||||||
|
if (el && el.innerText) {
|
||||||
|
// matches is an array where (index)
|
||||||
|
// 0: full string
|
||||||
|
// 1: capture group 1, the type of the statistic. E.g. 'Rating', 'Source'
|
||||||
|
// 2: capture group 2, the value of the statistic.
|
||||||
|
const matches = el.innerText.match(regex);
|
||||||
|
if (matches && matches.length == 3) {
|
||||||
|
// If Source element
|
||||||
|
if (matches[1] == "Source") {
|
||||||
|
if (version == Version.v020) {
|
||||||
|
post.source = matches[2];
|
||||||
|
} else {
|
||||||
|
post.source = (el.children[0] as HTMLAnchorElement).href;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// If Rating element
|
||||||
|
else if (matches[1] == "Rating") {
|
||||||
|
switch (matches[2].toLowerCase()) {
|
||||||
|
case "safe":
|
||||||
|
post.rating = "safe";
|
||||||
|
break;
|
||||||
|
case "questionable":
|
||||||
|
post.rating = "sketchy";
|
||||||
|
break;
|
||||||
|
case "explicit":
|
||||||
|
post.rating = "unsafe";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set tags
|
||||||
|
let tagElements: NodeListOf<Element>;
|
||||||
|
|
||||||
|
if (version == Version.v020) {
|
||||||
|
tagElements = document.querySelectorAll("#tag-sidebar > li");
|
||||||
|
} else {
|
||||||
|
tagElements = document.querySelectorAll(".tag-list > li[class^='tag-type']");
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const idx in tagElements) {
|
||||||
|
const el = tagElements[idx] as HTMLLIElement;
|
||||||
|
if (el && el.innerText) {
|
||||||
|
let tagName: string;
|
||||||
|
|
||||||
|
if (version == Version.v020) {
|
||||||
|
const nameElements = el.getElementsByTagName("a");
|
||||||
|
|
||||||
|
// Some <li/> don't actually contain a name.
|
||||||
|
// E.g. the sub-headers ("Copyright", "Character", "General", "Meta") on rule34.xxx
|
||||||
|
if (nameElements.length > 0) {
|
||||||
|
tagName = el.getElementsByTagName("a")[0].innerText;
|
||||||
|
} else {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// First <a> is "?"
|
||||||
|
// Second <a> is "actual_tag_name"
|
||||||
|
tagName = el.getElementsByTagName("a")[1].innerText;
|
||||||
|
}
|
||||||
|
|
||||||
|
let category: TagCategory | undefined;
|
||||||
|
|
||||||
|
const classNameToCategoryMap: CategoryMap = {
|
||||||
|
"tag-type-copyright": "copyright",
|
||||||
|
"tag-type-character": "character",
|
||||||
|
"tag-type-artist": "artist",
|
||||||
|
"tag-type-metadata": "meta",
|
||||||
|
};
|
||||||
|
|
||||||
|
// Loop over all classes, because some websites use multiple. E.g. `class="tag tag-type-copyright"`
|
||||||
|
for (const className of el.classList) {
|
||||||
|
if (classNameToCategoryMap[className]) {
|
||||||
|
category = classNameToCategoryMap[className];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let tag = new ScrapedTag(tagName, category);
|
||||||
|
post.tags.push(tag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result.tryAddPost(post);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,94 +2,95 @@ import { ScrapeEngine, ScrapeResult, ScrapedPost, ScrapedTag } from "../ScrapeEn
|
||||||
import { TagCategory } from "../BooruTypes";
|
import { TagCategory } from "../BooruTypes";
|
||||||
|
|
||||||
export default class Moebooru implements ScrapeEngine {
|
export default class Moebooru implements ScrapeEngine {
|
||||||
name = "moebooru";
|
name = "moebooru";
|
||||||
|
|
||||||
canImport(url: Location): boolean {
|
canImport(url: Location): boolean {
|
||||||
return (
|
return url.host == "yande.re" || url.host == "konachan.com";
|
||||||
url.host == "yande.re" ||
|
}
|
||||||
url.host == "konachan.com"
|
|
||||||
);
|
scrapeDocument(document: Document): ScrapeResult {
|
||||||
|
let result = new ScrapeResult(this.name);
|
||||||
|
let post = new ScrapedPost();
|
||||||
|
post.pageUrl = document.location.href;
|
||||||
|
|
||||||
|
// Set image url
|
||||||
|
const originalImageElement = document.querySelector("#highres") as HTMLAnchorElement;
|
||||||
|
if (originalImageElement) {
|
||||||
|
post.imageUrl = originalImageElement.href;
|
||||||
}
|
}
|
||||||
|
|
||||||
scrapeDocument(document: Document): ScrapeResult {
|
// Set rating and source
|
||||||
let result = new ScrapeResult(this.name);
|
// Same method as Gelbooru v025.
|
||||||
let post = new ScrapedPost();
|
const regex = new RegExp("(.*): (.*)");
|
||||||
post.source = document.location.href;
|
const statsElements = Array.from(document.querySelectorAll("#stats > ul > li")).map((x) => x as HTMLLIElement);
|
||||||
|
|
||||||
// Set image url
|
for (const el of statsElements) {
|
||||||
const originalImageElement = document.querySelector("#highres") as HTMLAnchorElement;
|
const matches = el.innerText.match(regex);
|
||||||
if (originalImageElement) {
|
if (matches && matches.length == 3) {
|
||||||
post.imageUrl = originalImageElement.href;
|
// If Source element
|
||||||
|
if (matches[1] == "Source") {
|
||||||
|
post.source = (el.children[0] as HTMLAnchorElement).href;
|
||||||
}
|
}
|
||||||
|
// If Rating element
|
||||||
// Set safety
|
else if (matches[1] == "Rating") {
|
||||||
// Same method as Gelbooru but cleaner code
|
switch (matches[2].toLowerCase()) {
|
||||||
const safetyExp = new RegExp("Rating: (.*)");
|
case "safe":
|
||||||
const safetyElements = Array.from(document.querySelectorAll("#stats > ul > li"))
|
post.rating = "safe";
|
||||||
.map(x => x as HTMLLIElement)
|
break;
|
||||||
.filter(x => x.innerText.startsWith("Rating:"));
|
case "questionable":
|
||||||
|
post.rating = "sketchy";
|
||||||
if (safetyElements.length > 0) {
|
break;
|
||||||
const matches = safetyElements[0].innerText.match(safetyExp);
|
case "explicit":
|
||||||
if (matches && matches.length > 0) {
|
post.rating = "unsafe";
|
||||||
switch (matches[1].toLowerCase()) {
|
break;
|
||||||
case "safe":
|
}
|
||||||
post.rating = "safe";
|
|
||||||
break;
|
|
||||||
case "questionable":
|
|
||||||
post.rating = "sketchy";
|
|
||||||
break;
|
|
||||||
case "explicit":
|
|
||||||
post.rating = "unsafe";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// Set tags
|
|
||||||
const tagElements = Array.from(document.querySelectorAll("#tag-sidebar > li"))
|
|
||||||
.map(x => x as HTMLLIElement);
|
|
||||||
|
|
||||||
for (const el of tagElements) {
|
|
||||||
let tagName: string;
|
|
||||||
let tagNameElements = el.getElementsByTagName("a");
|
|
||||||
|
|
||||||
if (tagNameElements.length > 1) {
|
|
||||||
// First <a> is "?"
|
|
||||||
// Second <a> is "actual_tag_name"
|
|
||||||
tagName = tagNameElements[1].innerText;
|
|
||||||
} else {
|
|
||||||
// Skip if no tag name is found
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
let category: TagCategory | undefined;
|
|
||||||
|
|
||||||
// Loop over all classes because some sites (konachan)
|
|
||||||
// have mutliple classes, e.g. "tag-link tag-type-copyright"
|
|
||||||
for (const className of Array.from(el.classList)) {
|
|
||||||
switch (className) {
|
|
||||||
case "tag-type-copyright":
|
|
||||||
category = "copyright";
|
|
||||||
break;
|
|
||||||
case "tag-type-character":
|
|
||||||
category = "character";
|
|
||||||
break;
|
|
||||||
case "tag-type-artist":
|
|
||||||
category = "artist";
|
|
||||||
break;
|
|
||||||
case "tag-type-metadata":
|
|
||||||
category = "meta";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let tag = new ScrapedTag(tagName, category);
|
|
||||||
post.tags.push(tag);
|
|
||||||
}
|
|
||||||
|
|
||||||
result.tryAddPost(post);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set tags
|
||||||
|
const tagElements = Array.from(document.querySelectorAll("#tag-sidebar > li")).map((x) => x as HTMLLIElement);
|
||||||
|
|
||||||
|
for (const el of tagElements) {
|
||||||
|
let tagName: string;
|
||||||
|
let tagNameElements = el.getElementsByTagName("a");
|
||||||
|
|
||||||
|
if (tagNameElements.length > 1) {
|
||||||
|
// First <a> is "?"
|
||||||
|
// Second <a> is "actual_tag_name"
|
||||||
|
tagName = tagNameElements[1].innerText;
|
||||||
|
} else {
|
||||||
|
// Skip if no tag name is found
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
let category: TagCategory | undefined;
|
||||||
|
|
||||||
|
// Loop over all classes because some sites (konachan)
|
||||||
|
// have mutliple classes, e.g. "tag-link tag-type-copyright"
|
||||||
|
for (const className of Array.from(el.classList)) {
|
||||||
|
switch (className) {
|
||||||
|
case "tag-type-copyright":
|
||||||
|
category = "copyright";
|
||||||
|
break;
|
||||||
|
case "tag-type-character":
|
||||||
|
category = "character";
|
||||||
|
break;
|
||||||
|
case "tag-type-artist":
|
||||||
|
category = "artist";
|
||||||
|
break;
|
||||||
|
case "tag-type-metadata":
|
||||||
|
category = "meta";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let tag = new ScrapedTag(tagName, category);
|
||||||
|
post.tags.push(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
result.tryAddPost(post);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ export default class Pixiv implements ScrapeEngine {
|
||||||
|
|
||||||
for (const imgLink of imgLinks) {
|
for (const imgLink of imgLinks) {
|
||||||
let post = new ScrapedPost();
|
let post = new ScrapedPost();
|
||||||
post.source = document.location.href;
|
post.pageUrl = document.location.href;
|
||||||
post.imageUrl = imgLink.href;
|
post.imageUrl = imgLink.href;
|
||||||
result.tryAddPost(post);
|
result.tryAddPost(post);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ export default class Reddit implements ScrapeEngine {
|
||||||
scrapeDocument(document: Document): ScrapeResult {
|
scrapeDocument(document: Document): ScrapeResult {
|
||||||
let result = new ScrapeResult(this.name);
|
let result = new ScrapeResult(this.name);
|
||||||
let post = new ScrapedPost();
|
let post = new ScrapedPost();
|
||||||
post.source = document.location.href;
|
post.pageUrl = document.location.href;
|
||||||
|
|
||||||
// Set image url
|
// Set image url
|
||||||
// For old.reddit.com
|
// For old.reddit.com
|
||||||
|
|
|
||||||
|
|
@ -2,80 +2,80 @@ import { ScrapeEngine, ScrapeResult, ScrapedPost, ScrapedTag } from "../ScrapeEn
|
||||||
import { TagCategory } from "../BooruTypes";
|
import { TagCategory } from "../BooruTypes";
|
||||||
|
|
||||||
export default class SankakuComplex implements ScrapeEngine {
|
export default class SankakuComplex implements ScrapeEngine {
|
||||||
name = "sankakucomplex";
|
name = "sankakucomplex";
|
||||||
|
|
||||||
canImport(url: Location): boolean {
|
canImport(url: Location): boolean {
|
||||||
return url.host == "chan.sankakucomplex.com";
|
return url.host == "chan.sankakucomplex.com";
|
||||||
|
}
|
||||||
|
|
||||||
|
scrapeDocument(document: Document): ScrapeResult {
|
||||||
|
let result = new ScrapeResult(this.name);
|
||||||
|
let post = new ScrapedPost();
|
||||||
|
post.pageUrl = document.location.href;
|
||||||
|
|
||||||
|
// Set image url
|
||||||
|
const originalImageElement = document.getElementById("highres") as HTMLAnchorElement;
|
||||||
|
|
||||||
|
if (originalImageElement) {
|
||||||
|
post.imageUrl = originalImageElement.href;
|
||||||
}
|
}
|
||||||
|
|
||||||
scrapeDocument(document: Document): ScrapeResult {
|
// Set rating
|
||||||
let result = new ScrapeResult(this.name);
|
const safetyExp = new RegExp("Rating: (.*)");
|
||||||
let post = new ScrapedPost();
|
const safetyElements = Array.from(document.querySelectorAll("#stats > ul > li"))
|
||||||
post.source = document.location.href;
|
.map((x) => x as HTMLLIElement)
|
||||||
|
.filter((x) => x.innerText.startsWith("Rating"));
|
||||||
|
|
||||||
// Set image url
|
if (safetyElements.length > 0) {
|
||||||
const originalImageElement = document.getElementById("highres") as HTMLAnchorElement;
|
const matches = safetyElements[0].innerText.match(safetyExp);
|
||||||
|
if (matches && matches.length > 0) {
|
||||||
if (originalImageElement) {
|
switch (matches[1].toLowerCase()) {
|
||||||
post.imageUrl = originalImageElement.href;
|
case "safe":
|
||||||
|
post.rating = "safe";
|
||||||
|
break;
|
||||||
|
case "questionable":
|
||||||
|
post.rating = "sketchy";
|
||||||
|
break;
|
||||||
|
case "explicit":
|
||||||
|
post.rating = "unsafe";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// Set rating
|
|
||||||
const safetyExp = new RegExp("Rating: (.*)");
|
|
||||||
const safetyElements = Array.from(document.querySelectorAll("#stats > ul > li"))
|
|
||||||
.map(x => x as HTMLLIElement)
|
|
||||||
.filter(x => x.innerText.startsWith("Rating"));
|
|
||||||
|
|
||||||
if (safetyElements.length > 0) {
|
|
||||||
const matches = safetyElements[0].innerText.match(safetyExp);
|
|
||||||
if (matches && matches.length > 0) {
|
|
||||||
switch (matches[1].toLowerCase()) {
|
|
||||||
case "safe":
|
|
||||||
post.rating = "safe";
|
|
||||||
break;
|
|
||||||
case "questionable":
|
|
||||||
post.rating = "sketchy";
|
|
||||||
break;
|
|
||||||
case "explicit":
|
|
||||||
post.rating = "unsafe";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set tags
|
|
||||||
const tagElements = Array.from(document.querySelectorAll("#tag-sidebar > li")).map(x => x as HTMLLIElement);
|
|
||||||
for (const tagElement of tagElements) {
|
|
||||||
let tagName: string | undefined;
|
|
||||||
const tagNameElement = tagElement.querySelector("a") as HTMLAnchorElement;
|
|
||||||
if (tagNameElement) {
|
|
||||||
tagName = tagNameElement.innerText;
|
|
||||||
}
|
|
||||||
|
|
||||||
let category: TagCategory | undefined;
|
|
||||||
switch (tagElement.className) {
|
|
||||||
case "tag-type-copyright":
|
|
||||||
category = "copyright";
|
|
||||||
break;
|
|
||||||
case "tag-type-character":
|
|
||||||
category = "character";
|
|
||||||
break;
|
|
||||||
case "tag-type-artist":
|
|
||||||
category = "artist";
|
|
||||||
break;
|
|
||||||
case "tag-type-medium":
|
|
||||||
category = "meta";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tagName) {
|
|
||||||
let tag = new ScrapedTag(tagName, category);
|
|
||||||
post.tags.push(tag);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
result.tryAddPost(post);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set tags
|
||||||
|
const tagElements = Array.from(document.querySelectorAll("#tag-sidebar > li")).map((x) => x as HTMLLIElement);
|
||||||
|
for (const tagElement of tagElements) {
|
||||||
|
let tagName: string | undefined;
|
||||||
|
const tagNameElement = tagElement.querySelector("a") as HTMLAnchorElement;
|
||||||
|
if (tagNameElement) {
|
||||||
|
tagName = tagNameElement.innerText;
|
||||||
|
}
|
||||||
|
|
||||||
|
let category: TagCategory | undefined;
|
||||||
|
switch (tagElement.className) {
|
||||||
|
case "tag-type-copyright":
|
||||||
|
category = "copyright";
|
||||||
|
break;
|
||||||
|
case "tag-type-character":
|
||||||
|
category = "character";
|
||||||
|
break;
|
||||||
|
case "tag-type-artist":
|
||||||
|
category = "artist";
|
||||||
|
break;
|
||||||
|
case "tag-type-medium":
|
||||||
|
category = "meta";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tagName) {
|
||||||
|
let tag = new ScrapedTag(tagName, category);
|
||||||
|
post.tags.push(tag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result.tryAddPost(post);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,48 +1,51 @@
|
||||||
import { ScrapeEngine, ScrapeResult, ScrapedPost, ScrapedTag } from "../ScrapeEngine";
|
import { ScrapeEngine, ScrapeResult, ScrapedPost, ScrapedTag } from "../ScrapeEngine";
|
||||||
|
|
||||||
export default class Shimmie2 implements ScrapeEngine {
|
export default class Shimmie2 implements ScrapeEngine {
|
||||||
name = "shimmie2";
|
name = "shimmie2";
|
||||||
|
|
||||||
canImport(url: Location): boolean {
|
canImport(url: Location): boolean {
|
||||||
return (
|
return url.host == "rule34.paheal.net" || url.host == "rule34hentai.net";
|
||||||
url.host == "rule34.paheal.net" ||
|
}
|
||||||
url.host == "rule34hentai.net"
|
|
||||||
);
|
scrapeDocument(document: Document): ScrapeResult {
|
||||||
|
let result = new ScrapeResult(this.name);
|
||||||
|
let post = new ScrapedPost();
|
||||||
|
post.pageUrl = document.location.href;
|
||||||
|
|
||||||
|
// Set image url
|
||||||
|
const originalImageElements = Array.from(document.querySelectorAll(".image_info > tbody > tr > td > a"))
|
||||||
|
.map((x) => x as HTMLAnchorElement)
|
||||||
|
.filter((x) => x.innerText == "Image Only" || x.innerText == "File Only");
|
||||||
|
|
||||||
|
if (originalImageElements.length > 0) {
|
||||||
|
post.imageUrl = originalImageElements[0].href;
|
||||||
|
} else {
|
||||||
|
const dowloadBtnEl = document.querySelector("a[download]") as HTMLAnchorElement;
|
||||||
|
if (dowloadBtnEl) {
|
||||||
|
post.imageUrl = dowloadBtnEl.href;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
scrapeDocument(document: Document): ScrapeResult {
|
// Set safety
|
||||||
let result = new ScrapeResult(this.name);
|
post.rating = "unsafe"; // Usually it is unsafe
|
||||||
let post = new ScrapedPost();
|
|
||||||
post.source = document.location.href;
|
|
||||||
|
|
||||||
// Set image url
|
// Set tags
|
||||||
const originalImageElements = Array.from(document.querySelectorAll(".image_info > tbody > tr > td > a"))
|
// Shimmie2 doesn't support categories so we don't need to worry about those.
|
||||||
.map(x => x as HTMLAnchorElement)
|
// They also use uppercase tags, so we toLowerCase() those.
|
||||||
.filter(x => x.innerText == "Image Only");
|
// Tags might not match with other booru-likes, but that is for the user to figure out.
|
||||||
|
// For example by deleting 'wrong' tags or setting up some aliases in szurubooru.
|
||||||
|
post.tags = Array.from(document.querySelectorAll("a.tag_name"))
|
||||||
|
.map((x) => (x as HTMLAnchorElement).innerText)
|
||||||
|
.map((x) => new ScrapedTag(x));
|
||||||
|
|
||||||
if (originalImageElements.length > 0) {
|
// Set source
|
||||||
post.imageUrl = originalImageElements[0].href;
|
const sourceEl = document.querySelector(".image_info > tbody > tr > td > div > a") as HTMLAnchorElement;
|
||||||
} else {
|
if (sourceEl) {
|
||||||
const dowloadBtnEl = document.querySelector("a[download]") as HTMLAnchorElement;
|
post.source = sourceEl.href;
|
||||||
if (dowloadBtnEl) {
|
|
||||||
post.imageUrl = dowloadBtnEl.href;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set safety
|
|
||||||
post.rating = "unsafe"; // Usually it is unsafe
|
|
||||||
|
|
||||||
// Set tags
|
|
||||||
// Shimmie2 doesn't support categories so we don't need to worry about those.
|
|
||||||
// They also use uppercase tags, so we toLowerCase() those.
|
|
||||||
// Tags might not match with other booru-likes, but that is for the user to figure out.
|
|
||||||
// For example by deleting 'wrong' tags or setting up some aliases in szurubooru.
|
|
||||||
post.tags = Array.from(document.querySelectorAll("a.tag_name"))
|
|
||||||
.map(x => (x as HTMLAnchorElement).innerText)
|
|
||||||
.map(x => new ScrapedTag(x));
|
|
||||||
|
|
||||||
result.tryAddPost(post);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
result.tryAddPost(post);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ export default class Shuushuu implements ScrapeEngine {
|
||||||
scrapeDocument(document: Document): ScrapeResult {
|
scrapeDocument(document: Document): ScrapeResult {
|
||||||
let result = new ScrapeResult(this.name);
|
let result = new ScrapeResult(this.name);
|
||||||
let post = new ScrapedPost();
|
let post = new ScrapedPost();
|
||||||
post.source = document.location.href;
|
post.pageUrl = document.location.href;
|
||||||
|
|
||||||
// Set image url
|
// Set image url
|
||||||
const imgElement = document.querySelector(".thumb_image") as HTMLAnchorElement;
|
const imgElement = document.querySelector(".thumb_image") as HTMLAnchorElement;
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ export default class Twitter implements ScrapeEngine {
|
||||||
scrapeDocument(document: Document): ScrapeResult {
|
scrapeDocument(document: Document): ScrapeResult {
|
||||||
let result = new ScrapeResult(this.name);
|
let result = new ScrapeResult(this.name);
|
||||||
let post = new ScrapedPost();
|
let post = new ScrapedPost();
|
||||||
post.source = document.location.href;
|
post.pageUrl = document.location.href;
|
||||||
|
|
||||||
// Set image url
|
// Set image url
|
||||||
// When clicked on post (not fullscreen, with post text etc)
|
// When clicked on post (not fullscreen, with post text etc)
|
||||||
|
|
|
||||||
|
|
@ -2,72 +2,72 @@ import { ScrapeEngine, ScrapeResult, ScrapedPost, ScrapedTag } from "../ScrapeEn
|
||||||
import { TagCategory } from "../BooruTypes";
|
import { TagCategory } from "../BooruTypes";
|
||||||
|
|
||||||
export default class Zerochan implements ScrapeEngine {
|
export default class Zerochan implements ScrapeEngine {
|
||||||
name = "zerochan";
|
name = "zerochan";
|
||||||
|
|
||||||
canImport(url: Location): boolean {
|
canImport(url: Location): boolean {
|
||||||
return url.host.endsWith("zerochan.net");
|
return url.host.endsWith("zerochan.net");
|
||||||
|
}
|
||||||
|
|
||||||
|
scrapeDocument(document: Document): ScrapeResult {
|
||||||
|
let result = new ScrapeResult(this.name);
|
||||||
|
let post = new ScrapedPost();
|
||||||
|
post.pageUrl = document.location.href;
|
||||||
|
|
||||||
|
// Set image url
|
||||||
|
const previewElements = document.getElementsByClassName("preview");
|
||||||
|
if (previewElements.length > 0) {
|
||||||
|
// The preview element only exists when there is a larger size available. Preview's img element contains a downscaled version.
|
||||||
|
post.imageUrl = (previewElements[0] as HTMLAnchorElement).href;
|
||||||
|
} else {
|
||||||
|
// When there is no larger version available just use the displayed version.
|
||||||
|
const imgElement = document.querySelector("img[title='No larger size available']") as HTMLImageElement;
|
||||||
|
if (imgElement) {
|
||||||
|
post.imageUrl = imgElement.src;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
scrapeDocument(document: Document): ScrapeResult {
|
// Set rating
|
||||||
let result = new ScrapeResult(this.name);
|
post.rating = "safe";
|
||||||
let post = new ScrapedPost();
|
|
||||||
post.source = document.location.href;
|
|
||||||
|
|
||||||
// Set image url
|
// Set tags
|
||||||
const previewElements = document.getElementsByClassName("preview");
|
const tagElements = Array.from(document.getElementById("tags")!.children);
|
||||||
if (previewElements.length > 0) {
|
|
||||||
// The preview element only exists when there is a larger size available. Preview's img element contains a downscaled version.
|
|
||||||
post.imageUrl = (previewElements[0] as HTMLAnchorElement).href;
|
|
||||||
} else {
|
|
||||||
// When there is no larger version available just use the displayed version.
|
|
||||||
const imgElement = document.querySelector("img[title='No larger size available']") as HTMLImageElement;
|
|
||||||
if (imgElement) {
|
|
||||||
post.imageUrl = imgElement.src;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set rating
|
for (const tagElement of tagElements) {
|
||||||
post.rating = "safe";
|
// Get tag name from url, because some longer tags are shortened.
|
||||||
|
// Eg. "Tate no Yuusha no Nariagari" -> "Tate no Yuusha no Nariaga..."
|
||||||
|
// (ironically this is longer, but you get the idea)
|
||||||
|
const tagUrl = (tagElement.children[0] as HTMLAnchorElement).pathname.substr(1);
|
||||||
|
const tagName = decodeURIComponent(tagUrl.replace(/\+/g, "_")).toLowerCase();
|
||||||
|
|
||||||
// Set tags
|
let tagType = "";
|
||||||
const tagElements = Array.from(document.getElementById("tags")!.children);
|
if (tagElement.childNodes.length > 1 && tagElement.childNodes[1].textContent)
|
||||||
|
tagType = tagElement.childNodes[1].textContent.trim().toLowerCase();
|
||||||
|
|
||||||
for (const tagElement of tagElements) {
|
let category: TagCategory | undefined;
|
||||||
// Get tag name from url, because some longer tags are shortened.
|
switch (tagType) {
|
||||||
// Eg. "Tate no Yuusha no Nariagari" -> "Tate no Yuusha no Nariaga..."
|
case "game":
|
||||||
// (ironically this is longer, but you get the idea)
|
case "series":
|
||||||
const tagUrl = (tagElement.children[0] as HTMLAnchorElement).pathname.substr(1);
|
category = "copyright";
|
||||||
const tagName = decodeURIComponent(tagUrl.replace(/\+/g, '_')).toLowerCase();
|
break;
|
||||||
|
case "character":
|
||||||
|
category = "character";
|
||||||
|
break;
|
||||||
|
case "mangaka":
|
||||||
|
category = "artist";
|
||||||
|
break;
|
||||||
|
case "source":
|
||||||
|
// Skip these type of tags, because they are not 'booru-like'
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
let tagType = "";
|
if (tagName) {
|
||||||
if (tagElement.childNodes.length > 1 && tagElement.childNodes[1].textContent)
|
let tag = new ScrapedTag(tagName, category);
|
||||||
tagType = tagElement.childNodes[1].textContent.trim().toLowerCase();
|
post.tags.push(tag);
|
||||||
|
}
|
||||||
let category: TagCategory | undefined;
|
|
||||||
switch (tagType) {
|
|
||||||
case "game":
|
|
||||||
case "series":
|
|
||||||
category = "copyright";
|
|
||||||
break;
|
|
||||||
case "character":
|
|
||||||
category = "character";
|
|
||||||
break;
|
|
||||||
case "mangaka":
|
|
||||||
category = "artist";
|
|
||||||
break;
|
|
||||||
case "source":
|
|
||||||
// Skip these type of tags, because they are not 'booru-like'
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tagName) {
|
|
||||||
let tag = new ScrapedTag(tagName, category);
|
|
||||||
post.tags.push(tag);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
result.tryAddPost(post);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
result.tryAddPost(post);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,67 +2,73 @@ import { ScrapeEngine, ScrapeResult, ScrapedPost, ScrapedTag } from "../ScrapeEn
|
||||||
import { TagCategory } from "../BooruTypes";
|
import { TagCategory } from "../BooruTypes";
|
||||||
|
|
||||||
export default class e621 implements ScrapeEngine {
|
export default class e621 implements ScrapeEngine {
|
||||||
name = "e621";
|
name = "e621";
|
||||||
|
|
||||||
canImport(url: Location): boolean {
|
canImport(url: Location): boolean {
|
||||||
return url.host == "e621.net";
|
return url.host == "e621.net";
|
||||||
|
}
|
||||||
|
|
||||||
|
scrapeDocument(document: Document): ScrapeResult {
|
||||||
|
let result = new ScrapeResult(this.name);
|
||||||
|
|
||||||
|
let post = new ScrapedPost();
|
||||||
|
post.source = document.location.href;
|
||||||
|
|
||||||
|
// Set image url
|
||||||
|
const downloadEl = document.querySelector("#image-download-link > a") as HTMLAnchorElement;
|
||||||
|
post.imageUrl = downloadEl?.href;
|
||||||
|
|
||||||
|
// Set rating
|
||||||
|
const ratingEl = document.getElementById("post-rating-text") as HTMLSpanElement;
|
||||||
|
switch (ratingEl?.innerText) {
|
||||||
|
case "Safe":
|
||||||
|
post.rating = "safe";
|
||||||
|
break;
|
||||||
|
case "Questionable":
|
||||||
|
post.rating = "sketchy";
|
||||||
|
break;
|
||||||
|
case "Explicit":
|
||||||
|
post.rating = "unsafe";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
scrapeDocument(document: Document): ScrapeResult {
|
// Set tags
|
||||||
let result = new ScrapeResult(this.name);
|
const tagEls = Array.from(document.querySelectorAll("#tag-list > ul > li")).map((x) => x as HTMLLIElement);
|
||||||
|
|
||||||
let post = new ScrapedPost();
|
for (const el of tagEls) {
|
||||||
post.source = document.location.href;
|
const tagName = (el.querySelector(".search-tag") as HTMLAnchorElement)?.innerText;
|
||||||
|
let category: TagCategory | undefined;
|
||||||
|
|
||||||
// Set image url
|
switch (el.className) {
|
||||||
const downloadEl = document.querySelector("#image-download-link > a") as HTMLAnchorElement;
|
case "category-3":
|
||||||
post.imageUrl = downloadEl?.href;
|
category = "copyright";
|
||||||
|
break;
|
||||||
|
case "category-4":
|
||||||
|
category = "character";
|
||||||
|
break;
|
||||||
|
case "category-1":
|
||||||
|
category = "artist";
|
||||||
|
break;
|
||||||
|
case "category-7":
|
||||||
|
category = "meta";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
// Set rating
|
if (tagName) {
|
||||||
const ratingEl = document.getElementById("post-rating-text") as HTMLSpanElement;
|
let tag = new ScrapedTag(tagName, category);
|
||||||
switch (ratingEl?.innerText) {
|
post.tags.push(tag);
|
||||||
case "Safe":
|
}
|
||||||
post.rating = "safe";
|
|
||||||
break;
|
|
||||||
case "Questionable":
|
|
||||||
post.rating = "sketchy";
|
|
||||||
break;
|
|
||||||
case "Explicit":
|
|
||||||
post.rating = "unsafe";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set tags
|
|
||||||
const tagEls = Array.from(document.querySelectorAll("#tag-list > ul > li"))
|
|
||||||
.map(x => x as HTMLLIElement);
|
|
||||||
|
|
||||||
for (const el of tagEls) {
|
|
||||||
const tagName = (el.querySelector(".search-tag") as HTMLAnchorElement)?.innerText;
|
|
||||||
let category: TagCategory | undefined;
|
|
||||||
|
|
||||||
switch (el.className) {
|
|
||||||
case "category-3":
|
|
||||||
category = "copyright";
|
|
||||||
break;
|
|
||||||
case "category-4":
|
|
||||||
category = "character";
|
|
||||||
break;
|
|
||||||
case "category-1":
|
|
||||||
category = "artist";
|
|
||||||
break;
|
|
||||||
case "category-7":
|
|
||||||
category = "meta";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tagName) {
|
|
||||||
let tag = new ScrapedTag(tagName, category);
|
|
||||||
post.tags.push(tag);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
result.tryAddPost(post);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set source
|
||||||
|
const sourceEls = Array.from(document.querySelectorAll(".source-link > a")).map((x) => x as HTMLAnchorElement);
|
||||||
|
// We currently only support one source.
|
||||||
|
if (sourceEls.length > 0) {
|
||||||
|
post.source = sourceEls[0].href;
|
||||||
|
}
|
||||||
|
|
||||||
|
result.tryAddPost(post);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
529
yarn.lock
529
yarn.lock
|
|
@ -2,137 +2,137 @@
|
||||||
# yarn lockfile v1
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4":
|
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.11":
|
||||||
version "7.10.4"
|
version "7.12.11"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a"
|
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f"
|
||||||
integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==
|
integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/highlight" "^7.10.4"
|
"@babel/highlight" "^7.10.4"
|
||||||
|
|
||||||
"@babel/core@^7.1.0":
|
"@babel/core@^7.1.0":
|
||||||
version "7.11.4"
|
version "7.12.10"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.4.tgz#4301dfdfafa01eeb97f1896c5501a3f0655d4229"
|
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.10.tgz#b79a2e1b9f70ed3d84bbfb6d8c4ef825f606bccd"
|
||||||
integrity sha512-5deljj5HlqRXN+5oJTY7Zs37iH3z3b++KjiKtIsJy1NrjOOVSEaJHEetLBhyu0aQOSNNZ/0IuEAan9GzRuDXHg==
|
integrity sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/code-frame" "^7.10.4"
|
"@babel/code-frame" "^7.10.4"
|
||||||
"@babel/generator" "^7.11.4"
|
"@babel/generator" "^7.12.10"
|
||||||
"@babel/helper-module-transforms" "^7.11.0"
|
"@babel/helper-module-transforms" "^7.12.1"
|
||||||
"@babel/helpers" "^7.10.4"
|
"@babel/helpers" "^7.12.5"
|
||||||
"@babel/parser" "^7.11.4"
|
"@babel/parser" "^7.12.10"
|
||||||
"@babel/template" "^7.10.4"
|
"@babel/template" "^7.12.7"
|
||||||
"@babel/traverse" "^7.11.0"
|
"@babel/traverse" "^7.12.10"
|
||||||
"@babel/types" "^7.11.0"
|
"@babel/types" "^7.12.10"
|
||||||
convert-source-map "^1.7.0"
|
convert-source-map "^1.7.0"
|
||||||
debug "^4.1.0"
|
debug "^4.1.0"
|
||||||
gensync "^1.0.0-beta.1"
|
gensync "^1.0.0-beta.1"
|
||||||
json5 "^2.1.2"
|
json5 "^2.1.2"
|
||||||
lodash "^4.17.19"
|
lodash "^4.17.19"
|
||||||
resolve "^1.3.2"
|
|
||||||
semver "^5.4.1"
|
semver "^5.4.1"
|
||||||
source-map "^0.5.0"
|
source-map "^0.5.0"
|
||||||
|
|
||||||
"@babel/generator@^7.11.0", "@babel/generator@^7.11.4", "@babel/generator@^7.4.0":
|
"@babel/generator@^7.12.10", "@babel/generator@^7.12.11", "@babel/generator@^7.4.0":
|
||||||
version "7.11.4"
|
version "7.12.11"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.4.tgz#1ec7eec00defba5d6f83e50e3ee72ae2fee482be"
|
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.11.tgz#98a7df7b8c358c9a37ab07a24056853016aba3af"
|
||||||
integrity sha512-Rn26vueFx0eOoz7iifCN2UHT6rGtnkSGWSoDRIy8jZN3B91PzeSULbswfLoOWuTuAcNwpG/mxy+uCTDnZ9Mp1g==
|
integrity sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/types" "^7.11.0"
|
"@babel/types" "^7.12.11"
|
||||||
jsesc "^2.5.1"
|
jsesc "^2.5.1"
|
||||||
source-map "^0.5.0"
|
source-map "^0.5.0"
|
||||||
|
|
||||||
"@babel/helper-function-name@^7.10.4":
|
"@babel/helper-function-name@^7.12.11":
|
||||||
version "7.10.4"
|
version "7.12.11"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a"
|
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz#1fd7738aee5dcf53c3ecff24f1da9c511ec47b42"
|
||||||
integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==
|
integrity sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-get-function-arity" "^7.10.4"
|
"@babel/helper-get-function-arity" "^7.12.10"
|
||||||
"@babel/template" "^7.10.4"
|
"@babel/template" "^7.12.7"
|
||||||
"@babel/types" "^7.10.4"
|
"@babel/types" "^7.12.11"
|
||||||
|
|
||||||
"@babel/helper-get-function-arity@^7.10.4":
|
"@babel/helper-get-function-arity@^7.12.10":
|
||||||
version "7.10.4"
|
version "7.12.10"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2"
|
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf"
|
||||||
integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==
|
integrity sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/types" "^7.10.4"
|
"@babel/types" "^7.12.10"
|
||||||
|
|
||||||
"@babel/helper-member-expression-to-functions@^7.10.4":
|
"@babel/helper-member-expression-to-functions@^7.12.7":
|
||||||
version "7.11.0"
|
version "7.12.7"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df"
|
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz#aa77bd0396ec8114e5e30787efa78599d874a855"
|
||||||
integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==
|
integrity sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/types" "^7.11.0"
|
"@babel/types" "^7.12.7"
|
||||||
|
|
||||||
"@babel/helper-module-imports@^7.10.4":
|
"@babel/helper-module-imports@^7.12.1":
|
||||||
version "7.10.4"
|
version "7.12.5"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620"
|
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb"
|
||||||
integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==
|
integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/types" "^7.10.4"
|
"@babel/types" "^7.12.5"
|
||||||
|
|
||||||
"@babel/helper-module-transforms@^7.11.0":
|
"@babel/helper-module-transforms@^7.12.1":
|
||||||
version "7.11.0"
|
version "7.12.1"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359"
|
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c"
|
||||||
integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==
|
integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-module-imports" "^7.10.4"
|
"@babel/helper-module-imports" "^7.12.1"
|
||||||
"@babel/helper-replace-supers" "^7.10.4"
|
"@babel/helper-replace-supers" "^7.12.1"
|
||||||
"@babel/helper-simple-access" "^7.10.4"
|
"@babel/helper-simple-access" "^7.12.1"
|
||||||
"@babel/helper-split-export-declaration" "^7.11.0"
|
"@babel/helper-split-export-declaration" "^7.11.0"
|
||||||
|
"@babel/helper-validator-identifier" "^7.10.4"
|
||||||
"@babel/template" "^7.10.4"
|
"@babel/template" "^7.10.4"
|
||||||
"@babel/types" "^7.11.0"
|
"@babel/traverse" "^7.12.1"
|
||||||
|
"@babel/types" "^7.12.1"
|
||||||
lodash "^4.17.19"
|
lodash "^4.17.19"
|
||||||
|
|
||||||
"@babel/helper-optimise-call-expression@^7.10.4":
|
"@babel/helper-optimise-call-expression@^7.12.10":
|
||||||
version "7.10.4"
|
version "7.12.10"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673"
|
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz#94ca4e306ee11a7dd6e9f42823e2ac6b49881e2d"
|
||||||
integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==
|
integrity sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/types" "^7.10.4"
|
"@babel/types" "^7.12.10"
|
||||||
|
|
||||||
"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0":
|
"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0":
|
||||||
version "7.10.4"
|
version "7.10.4"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375"
|
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375"
|
||||||
integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==
|
integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==
|
||||||
|
|
||||||
"@babel/helper-replace-supers@^7.10.4":
|
"@babel/helper-replace-supers@^7.12.1":
|
||||||
version "7.10.4"
|
version "7.12.11"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf"
|
resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz#ea511658fc66c7908f923106dd88e08d1997d60d"
|
||||||
integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==
|
integrity sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-member-expression-to-functions" "^7.10.4"
|
"@babel/helper-member-expression-to-functions" "^7.12.7"
|
||||||
"@babel/helper-optimise-call-expression" "^7.10.4"
|
"@babel/helper-optimise-call-expression" "^7.12.10"
|
||||||
"@babel/traverse" "^7.10.4"
|
"@babel/traverse" "^7.12.10"
|
||||||
"@babel/types" "^7.10.4"
|
"@babel/types" "^7.12.11"
|
||||||
|
|
||||||
"@babel/helper-simple-access@^7.10.4":
|
"@babel/helper-simple-access@^7.12.1":
|
||||||
version "7.10.4"
|
version "7.12.1"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461"
|
resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136"
|
||||||
integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==
|
integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==
|
||||||
|
dependencies:
|
||||||
|
"@babel/types" "^7.12.1"
|
||||||
|
|
||||||
|
"@babel/helper-split-export-declaration@^7.11.0", "@babel/helper-split-export-declaration@^7.12.11":
|
||||||
|
version "7.12.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz#1b4cc424458643c47d37022223da33d76ea4603a"
|
||||||
|
integrity sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==
|
||||||
|
dependencies:
|
||||||
|
"@babel/types" "^7.12.11"
|
||||||
|
|
||||||
|
"@babel/helper-validator-identifier@^7.10.4", "@babel/helper-validator-identifier@^7.12.11":
|
||||||
|
version "7.12.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed"
|
||||||
|
integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==
|
||||||
|
|
||||||
|
"@babel/helpers@^7.12.5":
|
||||||
|
version "7.12.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e"
|
||||||
|
integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/template" "^7.10.4"
|
"@babel/template" "^7.10.4"
|
||||||
"@babel/types" "^7.10.4"
|
"@babel/traverse" "^7.12.5"
|
||||||
|
"@babel/types" "^7.12.5"
|
||||||
"@babel/helper-split-export-declaration@^7.11.0":
|
|
||||||
version "7.11.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f"
|
|
||||||
integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==
|
|
||||||
dependencies:
|
|
||||||
"@babel/types" "^7.11.0"
|
|
||||||
|
|
||||||
"@babel/helper-validator-identifier@^7.10.4":
|
|
||||||
version "7.10.4"
|
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2"
|
|
||||||
integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==
|
|
||||||
|
|
||||||
"@babel/helpers@^7.10.4":
|
|
||||||
version "7.10.4"
|
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044"
|
|
||||||
integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==
|
|
||||||
dependencies:
|
|
||||||
"@babel/template" "^7.10.4"
|
|
||||||
"@babel/traverse" "^7.10.4"
|
|
||||||
"@babel/types" "^7.10.4"
|
|
||||||
|
|
||||||
"@babel/highlight@^7.10.4":
|
"@babel/highlight@^7.10.4":
|
||||||
version "7.10.4"
|
version "7.10.4"
|
||||||
|
|
@ -143,10 +143,10 @@
|
||||||
chalk "^2.0.0"
|
chalk "^2.0.0"
|
||||||
js-tokens "^4.0.0"
|
js-tokens "^4.0.0"
|
||||||
|
|
||||||
"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.0", "@babel/parser@^7.11.4", "@babel/parser@^7.4.3":
|
"@babel/parser@^7.1.0", "@babel/parser@^7.12.10", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7", "@babel/parser@^7.4.3":
|
||||||
version "7.11.4"
|
version "7.12.11"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.4.tgz#6fa1a118b8b0d80d0267b719213dc947e88cc0ca"
|
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.11.tgz#9ce3595bcd74bc5c466905e86c535b8b25011e79"
|
||||||
integrity sha512-MggwidiH+E9j5Sh8pbrX5sJvMcsqS5o+7iB42M9/k0CD63MjYbdP4nhSh7uB5wnv2/RVzTZFTxzF/kIa5mrCqA==
|
integrity sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==
|
||||||
|
|
||||||
"@babel/plugin-syntax-object-rest-spread@^7.0.0":
|
"@babel/plugin-syntax-object-rest-spread@^7.0.0":
|
||||||
version "7.8.3"
|
version "7.8.3"
|
||||||
|
|
@ -155,36 +155,36 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.8.0"
|
"@babel/helper-plugin-utils" "^7.8.0"
|
||||||
|
|
||||||
"@babel/template@^7.10.4", "@babel/template@^7.4.0":
|
"@babel/template@^7.10.4", "@babel/template@^7.12.7", "@babel/template@^7.4.0":
|
||||||
version "7.10.4"
|
version "7.12.7"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278"
|
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc"
|
||||||
integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==
|
integrity sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/code-frame" "^7.10.4"
|
"@babel/code-frame" "^7.10.4"
|
||||||
"@babel/parser" "^7.10.4"
|
"@babel/parser" "^7.12.7"
|
||||||
"@babel/types" "^7.10.4"
|
"@babel/types" "^7.12.7"
|
||||||
|
|
||||||
"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.0", "@babel/traverse@^7.4.3":
|
"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5", "@babel/traverse@^7.4.3":
|
||||||
version "7.11.0"
|
version "7.12.12"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.0.tgz#9b996ce1b98f53f7c3e4175115605d56ed07dd24"
|
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.12.tgz#d0cd87892704edd8da002d674bc811ce64743376"
|
||||||
integrity sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==
|
integrity sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/code-frame" "^7.10.4"
|
"@babel/code-frame" "^7.12.11"
|
||||||
"@babel/generator" "^7.11.0"
|
"@babel/generator" "^7.12.11"
|
||||||
"@babel/helper-function-name" "^7.10.4"
|
"@babel/helper-function-name" "^7.12.11"
|
||||||
"@babel/helper-split-export-declaration" "^7.11.0"
|
"@babel/helper-split-export-declaration" "^7.12.11"
|
||||||
"@babel/parser" "^7.11.0"
|
"@babel/parser" "^7.12.11"
|
||||||
"@babel/types" "^7.11.0"
|
"@babel/types" "^7.12.12"
|
||||||
debug "^4.1.0"
|
debug "^4.1.0"
|
||||||
globals "^11.1.0"
|
globals "^11.1.0"
|
||||||
lodash "^4.17.19"
|
lodash "^4.17.19"
|
||||||
|
|
||||||
"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0":
|
"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.12", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.4.0":
|
||||||
version "7.11.0"
|
version "7.12.12"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.0.tgz#2ae6bf1ba9ae8c3c43824e5861269871b206e90d"
|
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.12.tgz#4608a6ec313abbd87afa55004d373ad04a96c299"
|
||||||
integrity sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==
|
integrity sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-validator-identifier" "^7.10.4"
|
"@babel/helper-validator-identifier" "^7.12.11"
|
||||||
lodash "^4.17.19"
|
lodash "^4.17.19"
|
||||||
to-fast-properties "^2.0.0"
|
to-fast-properties "^2.0.0"
|
||||||
|
|
||||||
|
|
@ -345,9 +345,9 @@
|
||||||
"@types/yargs" "^13.0.0"
|
"@types/yargs" "^13.0.0"
|
||||||
|
|
||||||
"@types/babel__core@^7.1.0":
|
"@types/babel__core@^7.1.0":
|
||||||
version "7.1.9"
|
version "7.1.12"
|
||||||
resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.9.tgz#77e59d438522a6fb898fa43dc3455c6e72f3963d"
|
resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d"
|
||||||
integrity sha512-sY2RsIJ5rpER1u3/aQ8OFSI7qGIy8o1NEEbgb2UaJcvOtXOMpd39ko723NBpjQFg9SIX7TXtjejZVGeIMLhoOw==
|
integrity sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/parser" "^7.1.0"
|
"@babel/parser" "^7.1.0"
|
||||||
"@babel/types" "^7.0.0"
|
"@babel/types" "^7.0.0"
|
||||||
|
|
@ -356,24 +356,24 @@
|
||||||
"@types/babel__traverse" "*"
|
"@types/babel__traverse" "*"
|
||||||
|
|
||||||
"@types/babel__generator@*":
|
"@types/babel__generator@*":
|
||||||
version "7.6.1"
|
version "7.6.2"
|
||||||
resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04"
|
resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8"
|
||||||
integrity sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==
|
integrity sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/types" "^7.0.0"
|
"@babel/types" "^7.0.0"
|
||||||
|
|
||||||
"@types/babel__template@*":
|
"@types/babel__template@*":
|
||||||
version "7.0.2"
|
version "7.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307"
|
resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be"
|
||||||
integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==
|
integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/parser" "^7.1.0"
|
"@babel/parser" "^7.1.0"
|
||||||
"@babel/types" "^7.0.0"
|
"@babel/types" "^7.0.0"
|
||||||
|
|
||||||
"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6":
|
"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6":
|
||||||
version "7.0.13"
|
version "7.11.0"
|
||||||
resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.13.tgz#1874914be974a492e1b4cb00585cabb274e8ba18"
|
resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.0.tgz#b9a1efa635201ba9bc850323a8793ee2d36c04a0"
|
||||||
integrity sha512-i+zS7t6/s9cdQvbqKDARrcbrPvtJGlbYsMkazo03nTAK3RX9FNrLllXys22uiTGJapPOTZTQ35nHh4ISph4SLQ==
|
integrity sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/types" "^7.3.0"
|
"@babel/types" "^7.3.0"
|
||||||
|
|
||||||
|
|
@ -414,9 +414,9 @@
|
||||||
parse5 "^4.0.0"
|
parse5 "^4.0.0"
|
||||||
|
|
||||||
"@types/node@*":
|
"@types/node@*":
|
||||||
version "14.6.0"
|
version "14.14.21"
|
||||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.6.0.tgz#7d4411bf5157339337d7cff864d9ff45f177b499"
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.21.tgz#d934aacc22424fe9622ebf6857370c052eae464e"
|
||||||
integrity sha512-mikldZQitV94akrc4sCcSjtJfsTKt4p+e/s0AGscVA6XArQ9kFclP+ZiYUMnq987rc6QlYxXv/EivqlfSLxpKA==
|
integrity sha512-cHYfKsnwllYhjOzuC5q1VpguABBeecUp24yFluHpn/BQaVxB1CuQ1FSRZCzrPxrkIfWISXV2LbeoBthLWg0+0A==
|
||||||
|
|
||||||
"@types/stack-utils@^1.0.1":
|
"@types/stack-utils@^1.0.1":
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
|
|
@ -429,21 +429,21 @@
|
||||||
integrity sha512-I99sngh224D0M7XgW1s120zxCt3VYQ3IQsuw3P3jbq5GG4yc79+ZjyKznyOGIQrflfylLgcfekeZW/vk0yng6A==
|
integrity sha512-I99sngh224D0M7XgW1s120zxCt3VYQ3IQsuw3P3jbq5GG4yc79+ZjyKznyOGIQrflfylLgcfekeZW/vk0yng6A==
|
||||||
|
|
||||||
"@types/yargs-parser@*":
|
"@types/yargs-parser@*":
|
||||||
version "15.0.0"
|
version "20.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d"
|
resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9"
|
||||||
integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==
|
integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==
|
||||||
|
|
||||||
"@types/yargs@^13.0.0":
|
"@types/yargs@^13.0.0":
|
||||||
version "13.0.10"
|
version "13.0.11"
|
||||||
resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.10.tgz#e77bf3fc73c781d48c2eb541f87c453e321e5f4b"
|
resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.11.tgz#def2f0c93e4bdf2c61d7e34899b17e34be28d3b1"
|
||||||
integrity sha512-MU10TSgzNABgdzKvQVW1nuuT+sgBMWeXNc3XOs5YXV5SDAK+PPja2eUuBNB9iqElu03xyEDqlnGw0jgl4nbqGQ==
|
integrity sha512-NRqD6T4gktUrDi1o1wLH3EKC1o2caCr7/wR87ODcbVITQF106OM3sFN92ysZ++wqelOd1CTzatnOBRDYYG6wGQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/yargs-parser" "*"
|
"@types/yargs-parser" "*"
|
||||||
|
|
||||||
abab@^2.0.0:
|
abab@^2.0.0:
|
||||||
version "2.0.4"
|
version "2.0.5"
|
||||||
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.4.tgz#6dfa57b417ca06d21b2478f0e638302f99c2405c"
|
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"
|
||||||
integrity sha512-Eu9ELJWCz/c1e9gTiCY+FceWxcqzjYEbqMgtndnuSqZSUCOL73TWNK2mHfIj4Cw2E/ongOp+JISVNCmovt2KYQ==
|
integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==
|
||||||
|
|
||||||
acorn-globals@^4.1.0, acorn-globals@^4.3.2:
|
acorn-globals@^4.1.0, acorn-globals@^4.3.2:
|
||||||
version "4.3.4"
|
version "4.3.4"
|
||||||
|
|
@ -464,19 +464,19 @@ acorn@^5.5.3:
|
||||||
integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==
|
integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==
|
||||||
|
|
||||||
acorn@^6.0.1:
|
acorn@^6.0.1:
|
||||||
version "6.4.1"
|
version "6.4.2"
|
||||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474"
|
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
|
||||||
integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==
|
integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==
|
||||||
|
|
||||||
acorn@^7.1.0:
|
acorn@^7.1.0:
|
||||||
version "7.4.0"
|
version "7.4.1"
|
||||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c"
|
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
|
||||||
integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==
|
integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
|
||||||
|
|
||||||
ajv@^6.12.3:
|
ajv@^6.12.3:
|
||||||
version "6.12.4"
|
version "6.12.6"
|
||||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234"
|
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
|
||||||
integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==
|
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
|
||||||
dependencies:
|
dependencies:
|
||||||
fast-deep-equal "^3.1.1"
|
fast-deep-equal "^3.1.1"
|
||||||
fast-json-stable-stringify "^2.0.0"
|
fast-json-stable-stringify "^2.0.0"
|
||||||
|
|
@ -581,9 +581,9 @@ aws-sign2@~0.7.0:
|
||||||
integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
|
integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
|
||||||
|
|
||||||
aws4@^1.8.0:
|
aws4@^1.8.0:
|
||||||
version "1.10.1"
|
version "1.11.0"
|
||||||
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428"
|
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
|
||||||
integrity sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==
|
integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
|
||||||
|
|
||||||
babel-jest@^24.9.0:
|
babel-jest@^24.9.0:
|
||||||
version "24.9.0"
|
version "24.9.0"
|
||||||
|
|
@ -725,6 +725,14 @@ cache-base@^1.0.1:
|
||||||
union-value "^1.0.0"
|
union-value "^1.0.0"
|
||||||
unset-value "^1.0.0"
|
unset-value "^1.0.0"
|
||||||
|
|
||||||
|
call-bind@^1.0.0:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
|
||||||
|
integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
|
||||||
|
dependencies:
|
||||||
|
function-bind "^1.1.1"
|
||||||
|
get-intrinsic "^1.0.2"
|
||||||
|
|
||||||
callsites@^3.0.0:
|
callsites@^3.0.0:
|
||||||
version "3.1.0"
|
version "3.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
|
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
|
||||||
|
|
@ -903,11 +911,11 @@ debug@^2.2.0, debug@^2.3.3:
|
||||||
ms "2.0.0"
|
ms "2.0.0"
|
||||||
|
|
||||||
debug@^4.1.0, debug@^4.1.1:
|
debug@^4.1.0, debug@^4.1.1:
|
||||||
version "4.1.1"
|
version "4.3.1"
|
||||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
|
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
|
||||||
integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
|
integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
ms "^2.1.1"
|
ms "2.1.2"
|
||||||
|
|
||||||
decamelize@^1.2.0:
|
decamelize@^1.2.0:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
|
|
@ -924,7 +932,7 @@ deep-is@~0.1.3:
|
||||||
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
|
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
|
||||||
integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
|
integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
|
||||||
|
|
||||||
define-properties@^1.1.2, define-properties@^1.1.3:
|
define-properties@^1.1.3:
|
||||||
version "1.1.3"
|
version "1.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
|
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
|
||||||
integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
|
integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
|
||||||
|
|
@ -1002,20 +1010,21 @@ error-ex@^1.3.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
is-arrayish "^0.2.1"
|
is-arrayish "^0.2.1"
|
||||||
|
|
||||||
es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5:
|
es-abstract@^1.18.0-next.1:
|
||||||
version "1.17.6"
|
version "1.18.0-next.1"
|
||||||
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a"
|
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68"
|
||||||
integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==
|
integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==
|
||||||
dependencies:
|
dependencies:
|
||||||
es-to-primitive "^1.2.1"
|
es-to-primitive "^1.2.1"
|
||||||
function-bind "^1.1.1"
|
function-bind "^1.1.1"
|
||||||
has "^1.0.3"
|
has "^1.0.3"
|
||||||
has-symbols "^1.0.1"
|
has-symbols "^1.0.1"
|
||||||
is-callable "^1.2.0"
|
is-callable "^1.2.2"
|
||||||
is-regex "^1.1.0"
|
is-negative-zero "^2.0.0"
|
||||||
object-inspect "^1.7.0"
|
is-regex "^1.1.1"
|
||||||
|
object-inspect "^1.8.0"
|
||||||
object-keys "^1.1.1"
|
object-keys "^1.1.1"
|
||||||
object.assign "^4.1.0"
|
object.assign "^4.1.1"
|
||||||
string.prototype.trimend "^1.0.1"
|
string.prototype.trimend "^1.0.1"
|
||||||
string.prototype.trimstart "^1.0.1"
|
string.prototype.trimstart "^1.0.1"
|
||||||
|
|
||||||
|
|
@ -1033,6 +1042,11 @@ escape-string-regexp@^1.0.5:
|
||||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
||||||
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
|
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
|
||||||
|
|
||||||
|
escape-string-regexp@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
|
||||||
|
integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
|
||||||
|
|
||||||
escodegen@^1.11.1, escodegen@^1.9.1:
|
escodegen@^1.11.1, escodegen@^1.9.1:
|
||||||
version "1.14.3"
|
version "1.14.3"
|
||||||
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503"
|
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503"
|
||||||
|
|
@ -1196,6 +1210,13 @@ find-up@^3.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
locate-path "^3.0.0"
|
locate-path "^3.0.0"
|
||||||
|
|
||||||
|
for-each@^0.3.3:
|
||||||
|
version "0.3.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
|
||||||
|
integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
|
||||||
|
dependencies:
|
||||||
|
is-callable "^1.1.3"
|
||||||
|
|
||||||
for-in@^1.0.2:
|
for-in@^1.0.2:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
|
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
|
||||||
|
|
@ -1241,15 +1262,24 @@ function-bind@^1.1.1:
|
||||||
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
|
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
|
||||||
|
|
||||||
gensync@^1.0.0-beta.1:
|
gensync@^1.0.0-beta.1:
|
||||||
version "1.0.0-beta.1"
|
version "1.0.0-beta.2"
|
||||||
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269"
|
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
|
||||||
integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==
|
integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
|
||||||
|
|
||||||
get-caller-file@^2.0.1:
|
get-caller-file@^2.0.1:
|
||||||
version "2.0.5"
|
version "2.0.5"
|
||||||
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
|
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
|
||||||
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
|
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
|
||||||
|
|
||||||
|
get-intrinsic@^1.0.2:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.2.tgz#6820da226e50b24894e08859469dc68361545d49"
|
||||||
|
integrity sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==
|
||||||
|
dependencies:
|
||||||
|
function-bind "^1.1.1"
|
||||||
|
has "^1.0.3"
|
||||||
|
has-symbols "^1.0.1"
|
||||||
|
|
||||||
get-stream@^4.0.0:
|
get-stream@^4.0.0:
|
||||||
version "4.1.0"
|
version "4.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
|
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
|
||||||
|
|
@ -1314,7 +1344,7 @@ has-flag@^3.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
|
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
|
||||||
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
|
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
|
||||||
|
|
||||||
has-symbols@^1.0.0, has-symbols@^1.0.1:
|
has-symbols@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
|
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
|
||||||
integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
|
integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
|
||||||
|
|
@ -1452,10 +1482,10 @@ is-buffer@^1.1.5:
|
||||||
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
|
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
|
||||||
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
|
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
|
||||||
|
|
||||||
is-callable@^1.1.4, is-callable@^1.2.0:
|
is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.2:
|
||||||
version "1.2.0"
|
version "1.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb"
|
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9"
|
||||||
integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==
|
integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==
|
||||||
|
|
||||||
is-ci@^2.0.0:
|
is-ci@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
|
|
@ -1464,6 +1494,13 @@ is-ci@^2.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
ci-info "^2.0.0"
|
ci-info "^2.0.0"
|
||||||
|
|
||||||
|
is-core-module@^2.1.0:
|
||||||
|
version "2.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a"
|
||||||
|
integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==
|
||||||
|
dependencies:
|
||||||
|
has "^1.0.3"
|
||||||
|
|
||||||
is-data-descriptor@^0.1.4:
|
is-data-descriptor@^0.1.4:
|
||||||
version "0.1.4"
|
version "0.1.4"
|
||||||
resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
|
resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
|
||||||
|
|
@ -1523,6 +1560,11 @@ is-generator-fn@^2.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
|
resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
|
||||||
integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
|
integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
|
||||||
|
|
||||||
|
is-negative-zero@^2.0.0:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24"
|
||||||
|
integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==
|
||||||
|
|
||||||
is-number@^3.0.0:
|
is-number@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
|
resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
|
||||||
|
|
@ -1537,7 +1579,7 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4:
|
||||||
dependencies:
|
dependencies:
|
||||||
isobject "^3.0.1"
|
isobject "^3.0.1"
|
||||||
|
|
||||||
is-regex@^1.1.0:
|
is-regex@^1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9"
|
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9"
|
||||||
integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==
|
integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==
|
||||||
|
|
@ -2256,17 +2298,17 @@ micromatch@^3.1.10, micromatch@^3.1.4:
|
||||||
snapdragon "^0.8.1"
|
snapdragon "^0.8.1"
|
||||||
to-regex "^3.0.2"
|
to-regex "^3.0.2"
|
||||||
|
|
||||||
mime-db@1.44.0:
|
mime-db@1.45.0:
|
||||||
version "1.44.0"
|
version "1.45.0"
|
||||||
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92"
|
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea"
|
||||||
integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==
|
integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==
|
||||||
|
|
||||||
mime-types@^2.1.12, mime-types@~2.1.19:
|
mime-types@^2.1.12, mime-types@~2.1.19:
|
||||||
version "2.1.27"
|
version "2.1.28"
|
||||||
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f"
|
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd"
|
||||||
integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==
|
integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
mime-db "1.44.0"
|
mime-db "1.45.0"
|
||||||
|
|
||||||
minimatch@^3.0.4:
|
minimatch@^3.0.4:
|
||||||
version "3.0.4"
|
version "3.0.4"
|
||||||
|
|
@ -2300,15 +2342,15 @@ ms@2.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
||||||
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
|
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
|
||||||
|
|
||||||
ms@^2.1.1:
|
ms@2.1.2:
|
||||||
version "2.1.2"
|
version "2.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
|
||||||
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
|
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
|
||||||
|
|
||||||
nan@^2.12.1:
|
nan@^2.12.1:
|
||||||
version "2.14.1"
|
version "2.14.2"
|
||||||
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01"
|
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19"
|
||||||
integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==
|
integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==
|
||||||
|
|
||||||
nanomatch@^1.2.9:
|
nanomatch@^1.2.9:
|
||||||
version "1.2.13"
|
version "1.2.13"
|
||||||
|
|
@ -2401,12 +2443,12 @@ object-copy@^0.1.0:
|
||||||
define-property "^0.2.5"
|
define-property "^0.2.5"
|
||||||
kind-of "^3.0.3"
|
kind-of "^3.0.3"
|
||||||
|
|
||||||
object-inspect@^1.7.0:
|
object-inspect@^1.8.0:
|
||||||
version "1.8.0"
|
version "1.9.0"
|
||||||
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0"
|
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a"
|
||||||
integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==
|
integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==
|
||||||
|
|
||||||
object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1:
|
object-keys@^1.0.12, object-keys@^1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
|
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
|
||||||
integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
|
integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
|
||||||
|
|
@ -2418,23 +2460,24 @@ object-visit@^1.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
isobject "^3.0.0"
|
isobject "^3.0.0"
|
||||||
|
|
||||||
object.assign@^4.1.0:
|
object.assign@^4.1.1:
|
||||||
version "4.1.0"
|
version "4.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
|
resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"
|
||||||
integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
|
integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==
|
||||||
dependencies:
|
|
||||||
define-properties "^1.1.2"
|
|
||||||
function-bind "^1.1.1"
|
|
||||||
has-symbols "^1.0.0"
|
|
||||||
object-keys "^1.0.11"
|
|
||||||
|
|
||||||
object.getownpropertydescriptors@^2.1.0:
|
|
||||||
version "2.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649"
|
|
||||||
integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==
|
|
||||||
dependencies:
|
dependencies:
|
||||||
|
call-bind "^1.0.0"
|
||||||
define-properties "^1.1.3"
|
define-properties "^1.1.3"
|
||||||
es-abstract "^1.17.0-next.1"
|
has-symbols "^1.0.1"
|
||||||
|
object-keys "^1.1.1"
|
||||||
|
|
||||||
|
object.getownpropertydescriptors@^2.1.1:
|
||||||
|
version "2.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz#0dfda8d108074d9c563e80490c883b6661091544"
|
||||||
|
integrity sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng==
|
||||||
|
dependencies:
|
||||||
|
call-bind "^1.0.0"
|
||||||
|
define-properties "^1.1.3"
|
||||||
|
es-abstract "^1.18.0-next.1"
|
||||||
|
|
||||||
object.pick@^1.3.0:
|
object.pick@^1.3.0:
|
||||||
version "1.3.0"
|
version "1.3.0"
|
||||||
|
|
@ -2603,12 +2646,12 @@ pretty-format@^24.9.0:
|
||||||
react-is "^16.8.4"
|
react-is "^16.8.4"
|
||||||
|
|
||||||
prompts@^2.0.1:
|
prompts@^2.0.1:
|
||||||
version "2.3.2"
|
version "2.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068"
|
resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7"
|
||||||
integrity sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==
|
integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
kleur "^3.0.3"
|
kleur "^3.0.3"
|
||||||
sisteransi "^1.0.4"
|
sisteransi "^1.0.5"
|
||||||
|
|
||||||
psl@^1.1.28:
|
psl@^1.1.28:
|
||||||
version "1.8.0"
|
version "1.8.0"
|
||||||
|
|
@ -2759,11 +2802,12 @@ resolve@1.1.7:
|
||||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
|
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
|
||||||
integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
|
integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
|
||||||
|
|
||||||
resolve@1.x, resolve@^1.10.0, resolve@^1.3.2:
|
resolve@1.x, resolve@^1.10.0:
|
||||||
version "1.17.0"
|
version "1.19.0"
|
||||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
|
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c"
|
||||||
integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
|
integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==
|
||||||
dependencies:
|
dependencies:
|
||||||
|
is-core-module "^2.1.0"
|
||||||
path-parse "^1.0.6"
|
path-parse "^1.0.6"
|
||||||
|
|
||||||
ret@~0.1.10:
|
ret@~0.1.10:
|
||||||
|
|
@ -2879,7 +2923,7 @@ signal-exit@^3.0.0, signal-exit@^3.0.2:
|
||||||
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
|
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
|
||||||
integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
|
integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
|
||||||
|
|
||||||
sisteransi@^1.0.4:
|
sisteransi@^1.0.5:
|
||||||
version "1.0.5"
|
version "1.0.5"
|
||||||
resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
|
resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
|
||||||
integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
|
integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
|
||||||
|
|
@ -2975,9 +3019,9 @@ spdx-expression-parse@^3.0.0:
|
||||||
spdx-license-ids "^3.0.0"
|
spdx-license-ids "^3.0.0"
|
||||||
|
|
||||||
spdx-license-ids@^3.0.0:
|
spdx-license-ids@^3.0.0:
|
||||||
version "3.0.5"
|
version "3.0.7"
|
||||||
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654"
|
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65"
|
||||||
integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==
|
integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==
|
||||||
|
|
||||||
split-string@^3.0.1, split-string@^3.0.2:
|
split-string@^3.0.1, split-string@^3.0.2:
|
||||||
version "3.1.0"
|
version "3.1.0"
|
||||||
|
|
@ -3002,9 +3046,11 @@ sshpk@^1.7.0:
|
||||||
tweetnacl "~0.14.0"
|
tweetnacl "~0.14.0"
|
||||||
|
|
||||||
stack-utils@^1.0.1:
|
stack-utils@^1.0.1:
|
||||||
version "1.0.2"
|
version "1.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8"
|
resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.4.tgz#4b600971dcfc6aed0cbdf2a8268177cc916c87c8"
|
||||||
integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==
|
integrity sha512-IPDJfugEGbfizBwBZRZ3xpccMdRyP5lqsBWXGQWimVjua/ccLCeMOAVjlc1R7LxFjo5sEDhyNIXd8mo/AiDS9w==
|
||||||
|
dependencies:
|
||||||
|
escape-string-regexp "^2.0.0"
|
||||||
|
|
||||||
static-extend@^0.1.1:
|
static-extend@^0.1.1:
|
||||||
version "0.1.2"
|
version "0.1.2"
|
||||||
|
|
@ -3037,20 +3083,20 @@ string-width@^3.0.0, string-width@^3.1.0:
|
||||||
strip-ansi "^5.1.0"
|
strip-ansi "^5.1.0"
|
||||||
|
|
||||||
string.prototype.trimend@^1.0.1:
|
string.prototype.trimend@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913"
|
resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b"
|
||||||
integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==
|
integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==
|
||||||
dependencies:
|
dependencies:
|
||||||
|
call-bind "^1.0.0"
|
||||||
define-properties "^1.1.3"
|
define-properties "^1.1.3"
|
||||||
es-abstract "^1.17.5"
|
|
||||||
|
|
||||||
string.prototype.trimstart@^1.0.1:
|
string.prototype.trimstart@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54"
|
resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa"
|
||||||
integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==
|
integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==
|
||||||
dependencies:
|
dependencies:
|
||||||
|
call-bind "^1.0.0"
|
||||||
define-properties "^1.1.3"
|
define-properties "^1.1.3"
|
||||||
es-abstract "^1.17.5"
|
|
||||||
|
|
||||||
strip-ansi@^4.0.0:
|
strip-ansi@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.0.0"
|
||||||
|
|
@ -3228,9 +3274,9 @@ unset-value@^1.0.0:
|
||||||
isobject "^3.0.0"
|
isobject "^3.0.0"
|
||||||
|
|
||||||
uri-js@^4.2.2:
|
uri-js@^4.2.2:
|
||||||
version "4.2.2"
|
version "4.4.1"
|
||||||
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
|
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
|
||||||
integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
|
integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
|
||||||
dependencies:
|
dependencies:
|
||||||
punycode "^2.1.0"
|
punycode "^2.1.0"
|
||||||
|
|
||||||
|
|
@ -3245,14 +3291,15 @@ use@^3.1.0:
|
||||||
integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
|
integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
|
||||||
|
|
||||||
util.promisify@^1.0.0:
|
util.promisify@^1.0.0:
|
||||||
version "1.0.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee"
|
resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.1.tgz#77832f57ced2c9478174149cae9b96e9918cd54b"
|
||||||
integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==
|
integrity sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==
|
||||||
dependencies:
|
dependencies:
|
||||||
|
call-bind "^1.0.0"
|
||||||
define-properties "^1.1.3"
|
define-properties "^1.1.3"
|
||||||
es-abstract "^1.17.2"
|
for-each "^0.3.3"
|
||||||
has-symbols "^1.0.1"
|
has-symbols "^1.0.1"
|
||||||
object.getownpropertydescriptors "^2.1.0"
|
object.getownpropertydescriptors "^2.1.1"
|
||||||
|
|
||||||
uuid@^3.3.2:
|
uuid@^3.3.2:
|
||||||
version "3.4.0"
|
version "3.4.0"
|
||||||
|
|
@ -3382,9 +3429,9 @@ ws@^5.2.0:
|
||||||
async-limiter "~1.0.0"
|
async-limiter "~1.0.0"
|
||||||
|
|
||||||
ws@^7.0.0:
|
ws@^7.0.0:
|
||||||
version "7.3.1"
|
version "7.4.2"
|
||||||
resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8"
|
resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.2.tgz#782100048e54eb36fe9843363ab1c68672b261dd"
|
||||||
integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==
|
integrity sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA==
|
||||||
|
|
||||||
xml-name-validator@^3.0.0:
|
xml-name-validator@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
|
|
@ -3397,9 +3444,9 @@ xmlchars@^2.1.1:
|
||||||
integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
|
integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
|
||||||
|
|
||||||
y18n@^4.0.0:
|
y18n@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
|
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4"
|
||||||
integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
|
integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==
|
||||||
|
|
||||||
yargs-parser@10.x:
|
yargs-parser@10.x:
|
||||||
version "10.1.0"
|
version "10.1.0"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue