diff --git a/README.md b/README.md index 0df4f82..52f095d 100644 --- a/README.md +++ b/README.md @@ -11,3 +11,4 @@ By submitting a contribution, you agree to license it under the WTFPL/CC0 like t 1. __Store dense information.__ Avoid storing things like raw HTML which mostly contain repetitive/template content. Storing structured data (eg. parsed JSON) is ideal, but things like HTML snippets with high information density are okay too. 2. __Store original information.__ Don't try to parse meaning directly out of the scraped data, other than for discovering new items! Data normalization is a lossy process and should happen in a dedicated normalization task; that way we don't need to rescrape the entire source just because of a small change in the data normalization code. 3. __Store maximum information.__ There's no need to selectively pick out bits of information to store; if it's easy to extract more data than you are strictly looking for (eg. the data is presented in JSON format), then please do so and just store it in the results! This allows for extracting more information from it later, when building other or new search engines. An example of this is how some scrapers store technical properties of components, even though what we're currently looking for is just datasheets. +4. __Scrape politely.__ Try not to make more requests than absolutely necessary. Prefer sitemaps over pagination. If you need to paginate through something, and it uses numeric page offsets rather than item IDs, try to make each page as large as possible - high numeric offsets are hard on a database, so a few huge requests are better than many small ones. Prefer JSON/XML/CSV/etc. over scraping HTML; rendering pages can be very resource-intensive on the server. Don't use text-based search APIs unless *absolutely* necessary. diff --git a/index.js b/index.js index b1c5395..01a62a0 100644 --- a/index.js +++ b/index.js @@ -31,6 +31,14 @@ module.exports = { id: "lcsc:home", tags: [ "lcsc:home" ], data: {} + }, { + id: "mouser:sitemap:index", + tags: [ "mouser:sitemap" ], + data: { url: "https://www.mouser.com/indexgzipwww.xml" } + }, { + id: "tme:sitemap:index", + tags: [ "tme:sitemap" ], + data: { url: "https://www.tme.eu/en/sitemap.xml" } }], tags: { "st:home": [ "st:findCategories" ], @@ -38,7 +46,9 @@ module.exports = { "st:product": [ "st:scrapeProduct", "st:normalizeProduct" ], "lcsc:home": [ "lcsc:findCategories" ], "lcsc:category": [ "lcsc:scrapeCategory" ], - "lcsc:product": [ "lcsc:normalizeProduct" ] + "lcsc:product": [ "lcsc:normalizeProduct" ], + "tme:sitemap": [ "tme:scrapeSitemap" ], + "tme:product": [ "tme:scrapeProduct", "tme:normalizeProduct" ], }, tasks: { "st:findCategories": { @@ -58,7 +68,8 @@ module.exports = { }, "st:normalizeProduct": { dependsOn: [ "st:scrapeProduct" ], - version: "4", + version: "8", + parallelTasks: Infinity, run: stNormalizeProduct(state) }, "lcsc:findCategories": { @@ -72,9 +83,31 @@ module.exports = { run: lcscScrapeCategory(state) }, "lcsc:normalizeProduct": { - version: "3", + version: "7", parallelTasks: Infinity, run: lcscNormalizeProduct(state) }, + "mouser:scrapeSitemap": { + taskInterval: "30s", + run: require("./lib/mouser/task/scrape-sitemap")(state) + }, + "tme:scrapeSitemap": { + ttl: "3d", + taskInterval: "30s", + taskVersion: "1", + run: require("./lib/tme/task/scrape-sitemap")(state) + }, + "tme:scrapeProduct": { + ttl: "60d", + taskInterval: "1s", + taskVersion: "1", + run: require("./lib/tme/task/scrape-product")(state) + }, + "tme:normalizeProduct": { + dependsOn: [ "tme:scrapeProduct" ], + version: "3", + parallelTasks: Infinity, + run: require("./lib/tme/task/normalize-product")(state) + }, } }; diff --git a/lib/lcsc/task/normalize-product.js b/lib/lcsc/task/normalize-product.js index b84d956..f7f8173 100644 --- a/lib/lcsc/task/normalize-product.js +++ b/lib/lcsc/task/normalize-product.js @@ -1,43 +1,19 @@ "use strict"; -const matchValue = require("match-value"); -const mapObj = require("map-obj"); - -const normalizeString = require("../../shared/normalize-string"); -const manufacturerMap = require("../manufacturer-map"); -const pickBestOption = require("../../shared/pick-best-option"); - -let normalizedManufacturerMap = mapObj(manufacturerMap, (key, value) => { - return [ key.toLowerCase(), value ]; -}); +const createDatasheet = require("../../shared/create-datasheet"); module.exports = function lcscNormalizeProduct() { - return async function ({ data, createItem }) { - let url = normalizeString(data.datasheet.pdf); - let manufacturer = normalizeString(data.manufacturer.en); - let model = normalizeString(data.info.number); - let productID = normalizeString(data.number); - let description = normalizeString(data.description); - - let mappedManufacturer = (manufacturer != null) - ? matchValue(manufacturer.toLowerCase(), { - ... normalizedManufacturerMap, - _: manufacturer - }) - : null; + return async function (api) { + let { data } = api; - if (url != null && model != null) { - createItem({ - id: `datasheet:${manufacturer}:${model}`, - update: (data) => pickBestOption(data, { - priority: 0.4, - manufacturer: mappedManufacturer, - productID: productID, - name: model, - description: description, - url: url - }) - }); - } + createDatasheet(api, { + priority: 0.4, + source: "lcsc", + manufacturer: data.manufacturer.en, + productID: data.number, + name: data.info.number, + description: data.description, + url: data.datasheet.pdf + }); }; }; diff --git a/lib/mouser/task/scrape-sitemap.js b/lib/mouser/task/scrape-sitemap.js new file mode 100644 index 0000000..18fcce8 --- /dev/null +++ b/lib/mouser/task/scrape-sitemap.js @@ -0,0 +1,57 @@ +"use strict"; + +const bhttp = require("bhttp"); +const zlib = require("zlib"); +const assert = require("assert"); + +const pipe = require("@promistream/pipe"); +const fromNodeStream = require("@promistream/from-node-stream"); +const simpleSink = require("@promistream/simple-sink"); +const parseSitemap = require("@promistream/parse-sitemap"); +const decodeString = require("@promistream/decode-string"); + +const assureResponse = require("../../shared/assure-response"); + +let session = bhttp.session({ + headers: { + "user-agent": "Mozilla/5.0 (X11; Linux x86_64; rv:86.0) Gecko/20100101 Firefox/86.0", + "accept": "*/*" + } +}); + +// NOTE: WIP, currently running into PerimeterX issues, to be continued later + +module.exports = function mouserScrapeSitemap({ }) { + return async function ({ data, createItem }) { + // console.log((await session.get("https://www.mouser.com/")).statusCode); + // console.log({data}); + console.log("Making request...."); + let response = await session.get(data.url, { stream: true }); + // let response = await session.get("http://localhost:4567", { stream: true }); + console.log("Got response"); + assureResponse(response); + console.log("Valid"); + + await pipe([ + fromNodeStream(response), + (data.url.endsWith(".gz")) + ? fromNodeStream(zlib.createGunzip()) + : null, + decodeString("utf8"), + parseSitemap(), + simpleSink((item) => { + assert(item.url); + + if (item.type === "sitemap") { + createItem({ + id: `mouser:sitemap:${item.url}`, + tags: [ "mouser:sitemap" ], + data: { url: item.url } + }); + } else { + console.log(item); + } + }) + ]).read(); + }; +}; diff --git a/lib/shared/create-datasheet.js b/lib/shared/create-datasheet.js new file mode 100644 index 0000000..c032b37 --- /dev/null +++ b/lib/shared/create-datasheet.js @@ -0,0 +1,51 @@ +"use strict"; + +const assert = require("assert"); + +const pickBestOption = require("./pick-best-option"); +const mapManufacturer = require("./map-manufacturer"); +const normalizeString = require("./normalize-string"); + +module.exports = function createDatasheet(api, data) { + let { createItem, mergeItem } = api; + + let productID = normalizeString(data.productID); + let manufacturer = normalizeString(data.manufacturer); + let model = normalizeString(data.name); + let description = normalizeString(data.description); + let url = normalizeString(data.url); + let source = data.source; + let priority = data.priority; + + assert(manufacturer != null); + assert(model != null); + + if (url != null) { + let mappedManufacturer = mapManufacturer(manufacturer); + + let mappedID = `datasheet:${mappedManufacturer}:${model}`; + let unmappedID = `datasheet:${manufacturer}:${model}`; + + createItem({ + id: mappedID, + update: (data) => pickBestOption(data, { + priority: priority, + source: source, + manufacturer: mappedManufacturer, + productID: productID, + name: model, + description: description, + url: url + }) + }); + + if (mappedID !== unmappedID) { + // NOTE: This is to get rid of items which were created before a mapping for that manufacturer existed; it essentially removes and redirects the old name into the new, normalized name. + mergeItem({ + from: unmappedID, + into: mappedID, + merge: (into, from) => pickBestOption(from, into) + }); + } + } +}; diff --git a/lib/shared/map-manufacturer/index.js b/lib/shared/map-manufacturer/index.js new file mode 100644 index 0000000..b710f2a --- /dev/null +++ b/lib/shared/map-manufacturer/index.js @@ -0,0 +1,19 @@ +"use strict"; + +const mapObject = require("map-obj"); +const matchValue = require("match-value"); + +const mapping = require("./mapping"); + +let normalizedMapping = mapObject(mapping, (key, value) => { + return [ key.toLowerCase(), value ]; +}); + +module.exports = function mapManufacturer(manufacturer) { + return (manufacturer != null) + ? matchValue(manufacturer.toLowerCase(), { + ... normalizedMapping, + _: manufacturer + }) + : null; +}; diff --git a/lib/lcsc/manufacturer-map.js b/lib/shared/map-manufacturer/mapping.js similarity index 95% rename from lib/lcsc/manufacturer-map.js rename to lib/shared/map-manufacturer/mapping.js index 61f1275..cf55412 100644 --- a/lib/lcsc/manufacturer-map.js +++ b/lib/shared/map-manufacturer/mapping.js @@ -11,11 +11,13 @@ module.exports = { "utc(unisonic tech)": "Unisonic", "umw(youtai semiconductor co., ltd.)": "UMW / Youtai", "microchip tech": "Microchip", + "MicrochipTech": "Microchip", "hrs(hirose)": "Hirose", "mornsun guangzhou s& t": "Mornsun", "bothhand enterprise": "Bothhand", "shenzhen sunyuan tech": "Sunyuan", "txc corp": "TXC", + "LITTELFUSE": "Littelfuse", // From https://git.cryto.net/seekseek/scrape-documentation/issues/1 "2Pai Semi": "2Pai Semi", diff --git a/lib/shared/normalize-string.js b/lib/shared/normalize-string.js index 9bb7660..b2ac84b 100644 --- a/lib/shared/normalize-string.js +++ b/lib/shared/normalize-string.js @@ -9,7 +9,8 @@ module.exports = function normalizeString(string) { if (trimmed.length === 0) { return null; } else { - return trimmed; + return trimmed + .replace(/\s+/g, " "); } } }; diff --git a/lib/shared/parse-sitemap-response.js b/lib/shared/parse-sitemap-response.js new file mode 100644 index 0000000..5ed17b2 --- /dev/null +++ b/lib/shared/parse-sitemap-response.js @@ -0,0 +1,19 @@ +"use strict"; + +const zlib = require("zlib"); + +const decodeString = require("@promistream/decode-string"); +const fromNodeStream = require("@promistream/from-node-stream"); +const parseSitemap = require("@promistream/parse-sitemap"); +const pipe = require("@promistream/pipe"); + +module.exports = function parseSitemapResponse(response) { + return pipe([ + fromNodeStream(response), + (response.request.url.endsWith(".gz")) + ? fromNodeStream(zlib.createGunzip()) + : null, + decodeString("utf8"), + parseSitemap(), + ]); +}; diff --git a/lib/shared/pick-best-option.js b/lib/shared/pick-best-option.js index 036d7b3..81f2626 100644 --- a/lib/shared/pick-best-option.js +++ b/lib/shared/pick-best-option.js @@ -3,12 +3,12 @@ module.exports = function pickBestOption(a, b) { if (a == null || a.priority == null) { return b; - } else if (b = null || b.priority == null) { + } else if (b == null || b.priority == null) { return a; } else if (b.priority > a.priority) { return b; } else { - // NOTE: We return the first (ie. original) one in the case of a 'tie' - return a; + // NOTE: We return the second (ie. new) one in the case of a 'tie', to deal with eg. normalization code improvements + return b; } }; diff --git a/lib/st/task/normalize-product.js b/lib/st/task/normalize-product.js index 02ebafc..c64c96a 100644 --- a/lib/st/task/normalize-product.js +++ b/lib/st/task/normalize-product.js @@ -1,26 +1,20 @@ "use strict"; const htmlEntities = require("html-entities"); -const pickBestOption = require("../../shared/pick-best-option"); +const createDatasheet = require("../../shared/create-datasheet"); module.exports = function normalizeProduct() { - return async function ({ data, createItem }) { - let manufacturer = "STMicroelectronics"; - let modelName = data.cellData["XJE010_VT-007"]; - let description = htmlEntities.decode(data.cellData["XJE014_VT-007"]); - let url = data.datasheetLink; - let productID = data.productId; + return async function (api) { + let { data } = api; - createItem({ - id: `datasheet:${manufacturer}:${modelName}`, - update: (data) => pickBestOption(data, { - priority: 0.8, - manufacturer: manufacturer, - productID: productID, - name: modelName, - description: description, - url: url - }) + createDatasheet(api, { + priority: 0.8, + source: "st", + manufacturer: "STMicroelectronics", + productID: data.productId, + name: data.cellData["XJE010_VT-007"], + description: htmlEntities.decode(data.cellData["XJE014_VT-007"]), + url: data.datasheetLink }); }; }; diff --git a/lib/tme/task/normalize-product.js b/lib/tme/task/normalize-product.js new file mode 100644 index 0000000..a0ab51a --- /dev/null +++ b/lib/tme/task/normalize-product.js @@ -0,0 +1,45 @@ +"use strict"; + +const createDatasheet = require("../../shared/create-datasheet"); + +function isEnglish(document) { + return /\sen\s*$/.test(document.description); +} + +module.exports = function tmeNormalizeProduct() { + return async function (api) { + let { data } = api; + + if (data.itemData.documents.length > 0) { + if (typeof data.itemData.documents[0] === "string") { + // Temporary workaround for the dependsOn not taking into account task versions, and some old records existing with a wrong documents structure + return; + } + + let manufacturer = data.itemData.manufacturer; + let modelName = data.itemData.model; + let description = data.itemData.description; + let productID = data.itemData.productID; + + let firstEnglish = data.itemData.documents.find((document) => isEnglish(document)); + + let bestDocument = (firstEnglish != null) + ? firstEnglish + : data.itemData.documents[0]; + + let bestDocumentIsEnglish = isEnglish(bestDocument); + + createDatasheet(api, { + priority: (bestDocumentIsEnglish) + ? 0.6 + : 0.5, + source: "tme", + manufacturer: manufacturer, + productID: productID, + name: modelName, + description: description, + url: bestDocument.url + }); + } + }; +}; diff --git a/lib/tme/task/scrape-product.js b/lib/tme/task/scrape-product.js new file mode 100644 index 0000000..2a215ed --- /dev/null +++ b/lib/tme/task/scrape-product.js @@ -0,0 +1,63 @@ +"use strict"; + +const assert = require("assert"); +const cheerio = require("cheerio"); +const syncpipe = require("syncpipe"); +const url = require("url"); +const defaultValue = require("default-value"); + +const assureResponse = require("../../shared/assure-response"); + +module.exports = function tmeScrapeProduct({ session }) { + return async function ({ data, createAlias, updateData, expireDependents }) { + let response = await session.get(data.url); + assureResponse(response); + + let $ = cheerio.load(response.body); + + let allMetaHeaders = syncpipe($("h2.o-semantic-only-header").toArray(), [ + (_) => _.map((header) => { + let $header = $(header); + + return [ + $header.find(".name").text().trim(), + $header.find(".value").text().trim() + ]; + }), + (_) => Object.fromEntries(_) + ]); + + let itemData = { + productID: $(".pip-product-symbol").eq(0).text().trim(), + manufacturer: $("[data-gtm-event-action='producer_link']").eq(0).text().trim(), + model: defaultValue( + allMetaHeaders["Manufacturer part number:"], + allMetaHeaders["TME Symbol:"] + ), + description: $(".c-pip__sub-name").eq(0).text().trim(), + documents: $("a.c-pip__downloads-file-link").toArray().map((link) => { + return { + description: $(link).text().trim(), + url: url.resolve( + data.url, + $(link).attr("href") + ) + }; + }), + // TODO: Scrape prices + }; + + assert(itemData.productID != null); + assert(itemData.manufacturer != null); + assert(itemData.model != null); + + createAlias({ from: `tme:product:${itemData.productID}` }); + + updateData((oldData) => ({ + ... oldData, + itemData: itemData + })); + + expireDependents(); + }; +}; diff --git a/lib/tme/task/scrape-sitemap.js b/lib/tme/task/scrape-sitemap.js new file mode 100644 index 0000000..3bb61e7 --- /dev/null +++ b/lib/tme/task/scrape-sitemap.js @@ -0,0 +1,50 @@ +"use strict"; + +const assert = require("assert"); + +const pipe = require("@promistream/pipe"); +const simpleSink = require("@promistream/simple-sink"); +const assureResponse = require("../../shared/assure-response"); +const parseSitemapResponse = require("../../shared/parse-sitemap-response"); + +module.exports = function tmeScrapeSitemap({ session }) { + return async function ({ data, createItem }) { + let response = await session.get(data.url, { stream: true }); + assureResponse(response); + + let resultCount = 0; + + await pipe([ + parseSitemapResponse(response), + simpleSink((item) => { + assert(item.url); + + if (item.type === "sitemap") { + // NOTE: We are only interested in the sitemaps that enumerate components, not those that list categories etc. + if (/pip_part[0-9]+\.xml(\.gz)?/.test(item.url)) { + createItem({ + id: `tme:sitemap:${item.url}`, + tags: [ "tme:sitemap" ], + data: { url: item.url } + }); + + resultCount += 1; + } + } else if (item.type === "url") { + if (item.url.startsWith("https://www.tme.eu/en/details/")) { + createItem({ + id: `tme:product:${item.url}`, + tags: [ "tme:product" ], + data: { url: item.url } + }); + + resultCount += 1; + } + } + }) + ]).read(); + + // If we don't get at least *some* items out of a sitemap, something is wrong - eg. the URL format changed and we are no longer matching anything. + assert(resultCount > 0); + }; +}; diff --git a/notes.txt b/notes.txt index 6d0119e..d39efb7 100644 --- a/notes.txt +++ b/notes.txt @@ -25,3 +25,5 @@ let stFieldMapping = { RNP218: "esdHBMMinimum", XJE418: "supplyCurrent" }; + +FIXME: Add a 'no assignment in conditional' rule to eslint config diff --git a/package.json b/package.json index 2eb10fa..22a7d86 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,14 @@ "author": "Sven Slootweg ", "license": "WTFPL OR CC0-1.0", "dependencies": { + "@promistream/decode-string": "^0.1.0", + "@promistream/from-node-stream": "^0.1.0", + "@promistream/pipe": "^0.1.4", + "@promistream/simple-sink": "^0.1.1", "bhttp": "^1.2.8", "bluebird": "^3.7.2", "cheerio": "^1.0.0-rc.5", + "default-value": "^1.0.0", "html-entities": "^2.1.1", "map-obj": "^4.2.0", "match-value": "^1.1.0", diff --git a/yarn.lock b/yarn.lock index a42a5bb..bcff67f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -38,11 +38,452 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@joepie91/consumable@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@joepie91/consumable/-/consumable-1.0.1.tgz#fd223a481b89b43bfe98687bd7f7ce586826f832" + integrity sha512-LUOoJmFAJ6ocqymtVUiADFvx7T+EFQsfsY6LAOvYBKHlxpWQ/LiQGAi/k5tzATxXpH4/vLC4C9ttRl09/g+HRw== + "@joepie91/eslint-config@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@joepie91/eslint-config/-/eslint-config-1.1.0.tgz#9397e6ce0a010cb57dcf8aef8754d3a5ce0ae36a" integrity sha512-XliasRSUfOz1/bAvTBaUlCjWDbceCW4y1DnvFfW7Yw9p2FbNRR0w8WoPdTxTCjKuoZ7/OQMeBxIe2y9Qy6rbYw== +"@joepie91/unreachable@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@joepie91/unreachable/-/unreachable-1.0.0.tgz#8032bb8a5813e81bbbe516cb3031d60818526687" + integrity sha512-vZRJ5UDq4mqP1vgSrcOLD3aIfS/nzwsvGFOOHv5sj5fa1Ss0dT1xnIzrXKLD9pu5EcUvF3K6n6jdaMW8uXpNEQ== + +"@promistream/aborted@^0.1.1": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@promistream/aborted/-/aborted-0.1.2.tgz#49a5c57fa346db14b7cb84e000d473e0852138c6" + integrity sha512-rLQgZTFr0r7yWtDbqA8zT5F4TKDiOiyowlAxSKiSY4XM+XVYeNq7k9SXIxVhLczjKh1Cv0nlvvZ7cZ41UjZPwQ== + dependencies: + default-value "^1.0.0" + error-chain "^0.1.0" + +"@promistream/buffer@^0.1.0", "@promistream/buffer@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@promistream/buffer/-/buffer-0.1.2.tgz#73c63476aa5cfeb111298b791a33d8008384721b" + integrity sha512-EquWW7HTpjngNkMxHhxww0rvODWAaEN715BXQWP9zXkm+CXdhYmadeol7G2kMPTTYuYjKFmiNUdjjfm/z2puyg== + dependencies: + "@joepie91/unreachable" "^1.0.0" + "@promistream/propagate-abort" "^0.1.2" + bluebird "^3.5.4" + +"@promistream/decode-string@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@promistream/decode-string/-/decode-string-0.1.0.tgz#3159e3bfca78fee193ef35e2e0430e558e167512" + integrity sha512-toxQGHcU4oV78QUVhDZlyeqYR0VsuGaAgI2sUqC8+kVTDYj8+riXORbQzpOlYp5KA7xPuvEvM4l0gDd88YHrmg== + dependencies: + "@promistream/buffer" "^0.1.2" + "@promistream/last-will" "^0.1.0" + "@promistream/map" "^0.1.1" + "@promistream/pipe" "^0.1.4" + "@validatem/core" "^0.3.15" + "@validatem/error" "^1.1.0" + "@validatem/required" "^0.1.1" + +"@promistream/end-of-stream@^0.1.0", "@promistream/end-of-stream@^0.1.1": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@promistream/end-of-stream/-/end-of-stream-0.1.2.tgz#45820c8d29353c480c0219920db95ba075396438" + integrity sha512-rOeAIkcVZW6oYox2Jc1z/00iLVx0w0cIlcD/TbR798Qg5M5/nhErtjSG08QAtuaPSxAFKNl5ipAD8HHGV5esJw== + dependencies: + default-value "^1.0.0" + error-chain "^0.1.0" + +"@promistream/from-node-stream@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@promistream/from-node-stream/-/from-node-stream-0.1.1.tgz#053ffbe41394cf7c986ccd73a5ab4f3fc700372e" + integrity sha512-Sd0AtyaTTJwc/GYurNwHJ3RrS/30hdz0VLK3inZPqPs6vfnInnzwxIjExros7jzknIa6OjnoHSuuIMf21mns9g== + dependencies: + "@joepie91/unreachable" "^1.0.0" + "@promistream/buffer" "^0.1.0" + "@promistream/end-of-stream" "^0.1.0" + "@promistream/is-end-of-stream" "^0.1.0" + "@promistream/pipe" "^0.1.1" + "@promistream/propagate-abort" "^0.1.3" + "@promistream/propagate-peek" "^0.1.0" + "@promistream/simple-sink" "^0.1.0" + "@promistream/simple-source" "^0.1.1" + bluebird "^3.7.2" + debug "^4.3.1" + p-event "^4.2.0" + split-filter "^1.1.3" + +"@promistream/is-aborted@^0.1.0", "@promistream/is-aborted@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@promistream/is-aborted/-/is-aborted-0.1.1.tgz#58d714dbd5f20bf851c77339c2213128ac50f0bf" + integrity sha512-2AYo+MFu0wNKXCEDHexaFWoESiUzHfGZgWpazbdA6OyU/AJsHRfMwKzE7awmgi1u0T43k5nLwwJXIiTypajSiw== + +"@promistream/is-end-of-stream@^0.1.0", "@promistream/is-end-of-stream@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@promistream/is-end-of-stream/-/is-end-of-stream-0.1.1.tgz#7f84e630c9e49a92739df6a8c574eff99dd4c09d" + integrity sha512-GZn7W0wrUen7kkgWCcwFFgr0g/ftfuddnuK/Tp0MLWCCJA4hyAboglCZP0JzEJdi34gClEP8lCfDwGekw18LHg== + +"@promistream/last-will@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@promistream/last-will/-/last-will-0.1.0.tgz#22be2b24bcf0e210c6ce70cac195a93c560524c6" + integrity sha512-LPbyF3zlDxIkZfB9N5RlhKkUz3DG1l2lJ0sfDFbvAV3YEtWP+CLZ/8BaiW7SmTq8yNubeNBGC5bG4LNaf6JboA== + dependencies: + "@joepie91/consumable" "^1.0.1" + "@promistream/is-aborted" "^0.1.0" + "@promistream/is-end-of-stream" "^0.1.0" + "@validatem/core" "^0.3.15" + "@validatem/is-function" "^0.1.0" + "@validatem/require-either" "^0.1.0" + "@validatem/wrap-value-as-option" "^0.1.0" + bluebird "^3.7.2" + debug "^4.3.1" + p-pause "^0.1.0" + +"@promistream/map@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@promistream/map/-/map-0.1.1.tgz#2f771372e5d1dd12f41b6efd57874014d406f123" + integrity sha512-ggyNqWlvNXVY9Gf/pLUgbHROK8mEqu46hbpJftmN9etPr724YPhL+vxA7+9b6bBmTLAU1Tw4Th3BWG5EHVBn1g== + dependencies: + "@promistream/propagate-abort" "^0.1.2" + "@promistream/propagate-peek" "^0.1.0" + "@validatem/core" "^0.3.12" + "@validatem/is-function" "^0.1.0" + "@validatem/required" "^0.1.1" + bluebird "^3.5.4" + +"@promistream/pipe@^0.1.1", "@promistream/pipe@^0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@promistream/pipe/-/pipe-0.1.4.tgz#ef05fe582a33768c7eb56ad20635e1b7b48ac95b" + integrity sha512-4js6lhu/aTNEMosIBFcCz8Rkxc1S2V4zzI2QvZp9HqglhL5UTuxnv5VbU2ZlPFAFVID1aJOurZ8KdiVagHfOCw== + dependencies: + "@validatem/allow-extra-properties" "^0.1.0" + "@validatem/anything" "^0.1.0" + "@validatem/array-of" "^0.1.2" + "@validatem/core" "^0.3.15" + "@validatem/error" "^1.1.0" + "@validatem/remove-nullish-items" "^0.1.0" + "@validatem/required" "^0.1.1" + "@validatem/wrap-error" "^0.3.0" + +"@promistream/propagate-abort@^0.1.2", "@promistream/propagate-abort@^0.1.3", "@promistream/propagate-abort@^0.1.6": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@promistream/propagate-abort/-/propagate-abort-0.1.6.tgz#dfc3c78c2e22662b9e5d548afce2180c40584ef5" + integrity sha512-Ap4eDFiIcLb4yuJdin2tQM1+2ZJZm78sYWkKVdqECJY0UGkwNsbaMMeYyfZpFRpJGmW8mCCuOkWs0fQl5H9DGA== + +"@promistream/propagate-peek@^0.1.0", "@promistream/propagate-peek@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@promistream/propagate-peek/-/propagate-peek-0.1.1.tgz#c7dd69efcd894c408d7a3e9713b6a9036f70a501" + integrity sha512-4xfkSmtPQzlvL4+KCquPHX7sPXiAACGJac/y7fB3Sv6ZKXAT/cjTfms1nEjlDGn1nroN0MzReBza2HnpF59deg== + +"@promistream/simple-sink@^0.1.0", "@promistream/simple-sink@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@promistream/simple-sink/-/simple-sink-0.1.1.tgz#e3808179102ffe4bc10d70d681f19c649e1f3811" + integrity sha512-M6dQMUIPjFTRB+xIwBMqIrPghWORoreGoNAl2F/5oshBlX6+X2F+RAeUuz6plDymwq2eoVL5pvSUR4zYdMdRjQ== + dependencies: + "@promistream/is-aborted" "^0.1.1" + "@promistream/is-end-of-stream" "^0.1.1" + "@promistream/propagate-abort" "^0.1.6" + "@promistream/propagate-peek" "^0.1.1" + "@validatem/core" "^0.3.11" + "@validatem/default-to" "^0.1.0" + "@validatem/is-function" "^0.1.0" + "@validatem/required" "^0.1.1" + "@validatem/wrap-value-as-option" "^0.1.0" + bluebird "^3.5.4" + +"@promistream/simple-source@^0.1.1": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@promistream/simple-source/-/simple-source-0.1.3.tgz#8139ed088f8249eb9a93287fc04213008325cf06" + integrity sha512-rmpEW0Ec/9Ajrgnx0FHV+mYk4uZ+X3tRhACexUjeal6Jxgzp1oITES59+y2FZA86/a7VPCaadXBA6sWuRfcc3w== + dependencies: + "@joepie91/unreachable" "^1.0.0" + "@promistream/aborted" "^0.1.1" + "@promistream/end-of-stream" "^0.1.1" + "@promistream/is-end-of-stream" "^0.1.0" + "@validatem/core" "^0.3.12" + "@validatem/is-function" "^0.1.0" + "@validatem/required" "^0.1.1" + "@validatem/wrap-value-as-option" "^0.1.0" + bluebird "^3.7.2" + error-chain "^0.1.0" + +"@validatem/allow-extra-properties@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@validatem/allow-extra-properties/-/allow-extra-properties-0.1.0.tgz#e8c434818d6fd74b8cb237cfaa4d548295de13c1" + integrity sha512-9jihpYxw1vp4FdjnbN0bTVZMLYv//9OjFNTsVLG5OV4xHESwtgkgQEF5/N5rY1iBwoH/pcKuRl44MBZ8eMdrKw== + dependencies: + "@validatem/with-context" "^0.1.0" + +"@validatem/annotate-errors@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@validatem/annotate-errors/-/annotate-errors-0.1.2.tgz#fa9152bb30f4f42b69496b527e38f0c31ff605a9" + integrity sha512-EuX7pzdYI/YpTmZcgdPG481Oi3elAg8JWh/LYXuE1h6MaZk3A8eP5DD33/l7EoKzrysn6y8nCsqNa1ngei562w== + dependencies: + "@validatem/match-validation-error" "^0.1.0" + +"@validatem/any-property@^0.1.0": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@validatem/any-property/-/any-property-0.1.3.tgz#fc7768c1922a8bacff9369ae48913672e5350f52" + integrity sha512-jYWxif5ff9pccu7566LIQ/4+snlApXEJUimBywzAriBgS3r4eDBbz3oZFHuiPmhxNK/NNof5YUS+L6Sk3zaMfg== + dependencies: + "@validatem/annotate-errors" "^0.1.2" + "@validatem/combinator" "^0.1.0" + "@validatem/error" "^1.0.0" + "@validatem/validation-result" "^0.1.1" + "@validatem/virtual-property" "^0.1.0" + default-value "^1.0.0" + +"@validatem/anything@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@validatem/anything/-/anything-0.1.0.tgz#09b57720476b9f7ab072c3e5d0a3d4234b721435" + integrity sha512-VJcygPpLw2fAhh29m2qL1AybHY7Ewl7xpvVgNIZpqUwMsSZXWSmzmbZhqE4Sr6Wy2n6FbZVzVoUFREO589SPcQ== + +"@validatem/array-of@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@validatem/array-of/-/array-of-0.1.2.tgz#59c09879fb41c583e45b210e7f7c78fd7f86ac33" + integrity sha512-3YjrZOxxlburFfRdJyPWbNoAA7a72E3/2nPCyVGTE8lekQy9NZSyrPjntMozwE14rsnGGLWFLCgNWKu73cyhxQ== + dependencies: + "@validatem/annotate-errors" "^0.1.2" + "@validatem/combinator" "^0.1.0" + "@validatem/is-array" "^0.1.0" + "@validatem/validation-result" "^0.1.1" + +"@validatem/combinator@^0.1.0", "@validatem/combinator@^0.1.1": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@validatem/combinator/-/combinator-0.1.2.tgz#eab893d55f1643b9c6857eaf6ff7ed2a728e89ff" + integrity sha512-vE8t1tNXknmN62FlN6LxQmA2c6TwVKZ+fl/Wit3H2unFdOhu7SZj2kRPGjAXdK/ARh/3svYfUBeD75pea0j1Sw== + +"@validatem/core@^0.3.10", "@validatem/core@^0.3.11", "@validatem/core@^0.3.12", "@validatem/core@^0.3.15": + version "0.3.15" + resolved "https://registry.yarnpkg.com/@validatem/core/-/core-0.3.15.tgz#645a0734dbc6efa3a5c39c62c5f2d8fa773f89f3" + integrity sha512-4nBLGzgpPrPsZ5DDXDXwL5p+GUEvpAFt6I3/YUHoah+ckYmKNh9qwmWKkFZHxJVdRrTewGFRj0FPw5fqje1yxA== + dependencies: + "@validatem/annotate-errors" "^0.1.2" + "@validatem/any-property" "^0.1.0" + "@validatem/error" "^1.0.0" + "@validatem/match-validation-error" "^0.1.0" + "@validatem/match-versioned-special" "^0.1.0" + "@validatem/match-virtual-property" "^0.1.0" + "@validatem/normalize-rules" "^0.1.0" + "@validatem/required" "^0.1.0" + "@validatem/validation-result" "^0.1.1" + "@validatem/virtual-property" "^0.1.0" + as-expression "^1.0.0" + assure-array "^1.0.0" + create-error "^0.3.1" + default-value "^1.0.0" + execall "^2.0.0" + flatten "^1.0.3" + indent-string "^4.0.0" + is-arguments "^1.0.4" + supports-color "^7.1.0" + syncpipe "^1.0.0" + +"@validatem/default-to@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@validatem/default-to/-/default-to-0.1.0.tgz#62766a3ca24d2f61a96c713bcb629a5b3c6427c5" + integrity sha512-UE/mJ6ZcHFlBLUhX75PQHDRYf80GFFhB+vZfIcsEWduh7Nm6lTMDnCPj4MI+jd9E/A7HV5D1yCZhaRSwoWo4vg== + dependencies: + is-callable "^1.1.5" + +"@validatem/dynamic@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@validatem/dynamic/-/dynamic-0.1.2.tgz#70e4b238631328874f03ffa1f062f41b71512230" + integrity sha512-TNZMUO9McL2kFYdLWTYSD+zxxZ9fbK9Si+3X5u/JngOWAq7PFxbU7o2oxREkwiSIZi5cjBCK/hvrZMWyl+FWEA== + dependencies: + "@validatem/combinator" "^0.1.1" + +"@validatem/either@^0.1.9": + version "0.1.9" + resolved "https://registry.yarnpkg.com/@validatem/either/-/either-0.1.9.tgz#0d753ef8fe04486d2b7122de3dd3ac51b3acaacf" + integrity sha512-cUqlRjy02qDcZ166/D6duk8lrtqrHynHuSakU0TvMGMBiLzjWpMJ+3beAWHe+kILB5/dlXVyc68ZIjSNhBi8Kw== + dependencies: + "@validatem/combinator" "^0.1.1" + "@validatem/error" "^1.0.0" + "@validatem/match-validation-error" "^0.1.0" + "@validatem/validation-result" "^0.1.2" + flatten "^1.0.3" + +"@validatem/error@^1.0.0", "@validatem/error@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@validatem/error/-/error-1.1.0.tgz#bef46e7066c39761b494ebe3eec2ecdc7348f4ed" + integrity sha512-gZJEoZq1COi/8/5v0fVKQ9uX54x5lb5HbV7mzIOhY6dqjmLNfxdQmpECZPQrCAOpcRkRMJ7zaFhq4UTslpY9yA== + +"@validatem/forbidden@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@validatem/forbidden/-/forbidden-0.1.0.tgz#f96a5ac38e322a411eb74c9be1458f80e30348a0" + integrity sha512-5GpgXt33z15oXZJwd+BKzEcX56YrU1Ysqe3NM20L9OzuSCJYbWU6xR6mMHkYVfF3TDLfkC8csOiKG2UnduCLhw== + dependencies: + "@validatem/error" "^1.0.0" + +"@validatem/has-shape@^0.1.0": + version "0.1.8" + resolved "https://registry.yarnpkg.com/@validatem/has-shape/-/has-shape-0.1.8.tgz#dff0f0449c12b96d150091b7a980154d810ae63d" + integrity sha512-x2i8toW1uraFF2Vl6WBl4CScbBeg5alrtoCKMyXbJkHf2B5QxL/ftUh2RQRcBzx6U0i7KUb8vdShcWAa+fehRQ== + dependencies: + "@validatem/annotate-errors" "^0.1.2" + "@validatem/combinator" "^0.1.0" + "@validatem/error" "^1.0.0" + "@validatem/validation-result" "^0.1.1" + array-union "^2.1.0" + as-expression "^1.0.0" + assure-array "^1.0.0" + default-value "^1.0.0" + flatten "^1.0.3" + +"@validatem/is-array@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@validatem/is-array/-/is-array-0.1.1.tgz#fbe15ca8c97c30b622a5bbeb536d341e99cfc2c5" + integrity sha512-XD3C+Nqfpnbb4oO//Ufodzvui7SsCIW/stxZ39dP/fyRsBHrdERinkFATH5HepegtDlWMQswm5m1XFRbQiP2oQ== + dependencies: + "@validatem/error" "^1.0.0" + +"@validatem/is-boolean@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@validatem/is-boolean/-/is-boolean-0.1.1.tgz#b7fafd4143ab6d23bca597c86d8c4e0ba6f6cacf" + integrity sha512-eIFq+mCBEDgAp4ezaPn1mbVZd2H+IkQG3CcEFnLSlqfg1XKY5uv8AOI08+UqeWS+C7AIFk3rEqRg63+OuPCpsg== + dependencies: + "@validatem/error" "^1.0.0" + is-boolean-object "^1.0.1" + +"@validatem/is-function@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@validatem/is-function/-/is-function-0.1.0.tgz#15a2e95259dc5e32256e8c21872455661437d069" + integrity sha512-UtVrwTGhaIdIJ0mPG5XkAmYZUeWgRoMP1G9ZEHbKvAZJ4+SXf/prC0jPgE0pw+sPjdQG4hblsXSfo/9Bf3PGdQ== + dependencies: + "@validatem/error" "^1.0.0" + is-callable "^1.1.5" + +"@validatem/is-plain-object@^0.1.0", "@validatem/is-plain-object@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@validatem/is-plain-object/-/is-plain-object-0.1.1.tgz#b7a3ef8ef960882c7c41e84ed709fa0bfb932e93" + integrity sha512-aNGbNIbKRpYI0lRBczlTBbiA+nqN52ADAASdySKg2/QeSCVtYS4uOIeCNIJRAgXe/5sUnLTuL4pgq628uAl7Kw== + dependencies: + "@validatem/error" "^1.0.0" + is-plain-obj "^2.1.0" + +"@validatem/is-string@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@validatem/is-string/-/is-string-0.1.1.tgz#0710d8cebedd4d6861b4a8c63d7803ed6d2f9d6c" + integrity sha512-iyRVYRPgRt2ZlWyc7pzN1WkO6apzE8at39XQa4WUr8qRPfJn12V4khS9MumWbZs8N2qqajrxMigB2LJUCKOCRg== + dependencies: + "@validatem/error" "^1.0.0" + is-string "^1.0.5" + +"@validatem/match-special@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@validatem/match-special/-/match-special-0.1.0.tgz#4e0c28f1aee5bf53c1ef30bbf8c755d4946ae0ff" + integrity sha512-TFiq9Wk/1Hoja4PK85WwNYnwBXk3+Lgoj59ZIMxm2an1qmNYp8j+BnSvkKBflba451yIn6V1laU9NJf+/NYZgw== + +"@validatem/match-validation-error@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@validatem/match-validation-error/-/match-validation-error-0.1.0.tgz#fa87f5f1836e7c1d9bf6b75b2addf0a5b21e4c1e" + integrity sha512-6akGTk7DdulOreyqDiGdikwRSixQz/AlvARSX18dcWaTFc79KxCLouL2hyoFcor9IIUhu5RTY4/i756y4T1yxA== + dependencies: + "@validatem/match-versioned-special" "^0.1.0" + +"@validatem/match-versioned-special@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@validatem/match-versioned-special/-/match-versioned-special-0.1.0.tgz#2eacc48debecdbbe7e3d02f0c0a665afaea9bedf" + integrity sha512-xoOTY0bdA2ELj+ntcDVJ8YyMEFIJpjZ4HNPL9lGcbnRFwJBhQcHUAhUpZwkMxu02zH9wkNM1FvYGHxPz40745Q== + +"@validatem/match-virtual-property@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@validatem/match-virtual-property/-/match-virtual-property-0.1.0.tgz#4de2de1075987b5f3b356d3f2bcf6c0be5b5fb83" + integrity sha512-ssd3coFgwbLuqvZftLZTy3eHN0TFST8oTS2XTViQdXJPXVoJmwEKBpFhXgwnb5Ly1CE037R/KWpjhd1TP/56kQ== + +"@validatem/normalize-rules@^0.1.0": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@validatem/normalize-rules/-/normalize-rules-0.1.3.tgz#59fd6193b1091ff97b5c723b32c9bb1fe2a9dc9c" + integrity sha512-HHPceAP2ce9NWymIZrgLCTzpdwXNRBCCB5H6ZPc5ggOrbmh4STpT83fLazleHtvYNlqgXZ4GjQOvCwrjaM+qEA== + dependencies: + "@validatem/has-shape" "^0.1.0" + "@validatem/is-plain-object" "^0.1.0" + "@validatem/match-special" "^0.1.0" + assure-array "^1.0.0" + default-value "^1.0.0" + flatten "^1.0.3" + is-plain-obj "^2.1.0" + +"@validatem/one-of@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@validatem/one-of/-/one-of-0.1.1.tgz#df40f6d2780021b8557b640b99c7b217bda10b95" + integrity sha512-lIgxnkNRouPx5Ydddi8OaAxmzp1ox44OJnrJPRrJkU4ccz9Yb7GSJ+wQJNVkAZCar+DGTDMoXoy51NwDnsf4sw== + dependencies: + "@validatem/error" "^1.0.0" + +"@validatem/remove-nullish-items@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@validatem/remove-nullish-items/-/remove-nullish-items-0.1.0.tgz#fe1a8b64d11276b506fae2bd2c41da4985a5b5ff" + integrity sha512-cs4YSF47TA/gHnV5muSUUqGi5PwybP5ztu5SYnPKxQVTyubvcbrFat51nOvJ2PmUasyrIccoYMmATiviXkTi6g== + +"@validatem/require-either@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@validatem/require-either/-/require-either-0.1.0.tgz#250e35ab06f124ea90f3925d74b5f53a083923b0" + integrity sha512-UyZtJieT3aJhO9tj1OJp47V9jpHCE7RSohue9jg3FyDGwmIBVYXCfASeM19mWg9W0lp6IevsqTmaGQhqQOQYJg== + dependencies: + "@validatem/allow-extra-properties" "^0.1.0" + "@validatem/either" "^0.1.9" + "@validatem/forbidden" "^0.1.0" + "@validatem/required" "^0.1.1" + assure-array "^1.0.0" + flatten "^1.0.3" + +"@validatem/required@^0.1.0", "@validatem/required@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@validatem/required/-/required-0.1.1.tgz#64f4a87333fc5955511634036b7f8948ed269170" + integrity sha512-vI4NzLfay4RFAzp7xyU34PHb8sAo6w/3frrNh1EY9Xjnw2zxjY5oaxwmbFP1jVevBE6QQEnKogtzUHz/Zuvh6g== + +"@validatem/validation-result@^0.1.1", "@validatem/validation-result@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@validatem/validation-result/-/validation-result-0.1.2.tgz#4e75cfd87305fc78f8d05ac84921a2c99a0348e0" + integrity sha512-okmP8JarIwIgfpaVcvZGuQ1yOsLKT3Egt49Ynz6h1MAeGsP/bGHXkkXtbiWOVsk5Tzku5vDVFSrFnF+5IEHKxw== + dependencies: + default-value "^1.0.0" + +"@validatem/virtual-property@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@validatem/virtual-property/-/virtual-property-0.1.0.tgz#880540dfd149f98ecf1095d93912e34443381fe4" + integrity sha512-JUUvWtdqoSkOwlsl20oB3qFHYIL05a/TAfdY4AJcs55QeVTiX5iI1b8IoQW644sIWWooBuLv+XwoxjRsQFczlQ== + +"@validatem/with-context@^0.1.0": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@validatem/with-context/-/with-context-0.1.2.tgz#3645c04897664f70995104961277e07b61b4f615" + integrity sha512-noAWf4CsmU+BCz+KOg3GPq9+R9BQLWOQnOgWVfkYHFdLnnbLhl8w/ONdzvFzUYGHIZGKZwsWVCp+Kwz/tAfMnA== + dependencies: + "@validatem/combinator" "^0.1.1" + +"@validatem/wrap-error@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@validatem/wrap-error/-/wrap-error-0.1.3.tgz#2470d24c17325ad97d852a21be6c0227da908d3c" + integrity sha512-86ANJACPGbH8jD/C/tUTZNgQh9xCePUKq4wf5ZRcwOvtIDaZO98FI9cdoT2/zS1CzQCp3VWlwz16YT6FNjJJJA== + dependencies: + "@validatem/combinator" "^0.1.1" + "@validatem/error" "^1.0.0" + "@validatem/match-validation-error" "^0.1.0" + "@validatem/validation-result" "^0.1.2" + as-expression "^1.0.0" + default-value "^1.0.0" + split-filter-n "^1.1.2" + +"@validatem/wrap-error@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@validatem/wrap-error/-/wrap-error-0.3.0.tgz#f8d170e79b6fdd68321d82c60581ad345be7d6b9" + integrity sha512-km5v6F/Xm7j8W/tmCmht2BTzxMLSpBUJ5MdhJD7ABEut/fdO0tNca1u1imTnWCULCJcdDHbNtpSmDMvXFg3E7Q== + dependencies: + "@validatem/combinator" "^0.1.1" + "@validatem/error" "^1.0.0" + "@validatem/match-validation-error" "^0.1.0" + "@validatem/validation-result" "^0.1.2" + as-expression "^1.0.0" + default-value "^1.0.0" + split-filter-n "^1.1.2" + +"@validatem/wrap-value-as-option@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@validatem/wrap-value-as-option/-/wrap-value-as-option-0.1.0.tgz#57fa8d535f6cdf40cf8c8846ad45f4dd68f44568" + integrity sha512-gWDkfyU0DOsbinE9iqvRSJ+NxuynChyueJsC+AFm3EYbe8+s7V2gRs3qkJ4mq7hOlUbEh8tgCWQfZZvr+IdVFw== + dependencies: + "@validatem/either" "^0.1.9" + "@validatem/is-plain-object" "^0.1.1" + acorn-jsx@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" @@ -64,9 +505,9 @@ ajv@^6.10.0, ajv@^6.12.4: uri-js "^4.2.2" ajv@^7.0.2: - version "7.2.3" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.2.3.tgz#ca78d1cf458d7d36d1c3fa0794dd143406db5772" - integrity sha512-idv5WZvKVXDqKralOImQgPM9v6WOdLNa0IY3B3doOjw/YxRGT8I+allIJ6kd7Uaj+SF1xZUSU+nPM5aDNBVtnw== + version "7.2.4" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.2.4.tgz#8e239d4d56cf884bccca8cca362f508446dc160f" + integrity sha512-nBeQgg/ZZA3u3SYxyaDvpvDtgZ/EZPF547ARgZBrG9Bhu1vKDwAIjtIf+sDtJUKa2zOcEbmRLBRSyMraS/Oy1A== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -104,6 +545,16 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +as-expression@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/as-expression/-/as-expression-1.0.0.tgz#7bc620ca4cb2fe0ee90d86729bd6add33b8fd831" + integrity sha512-Iqh4GxNUfxbJdGn6b7/XMzc8m1Dz2ZHouBQ9DDTzyMRO3VPPIAXeoY/sucRxxxXKbUtzwzWZSN6jPR3zfpYHHA== + assure-array@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assure-array/-/assure-array-1.0.0.tgz#4f4ad16a87659d6200a4fb7103462033d216ec1f" @@ -144,7 +595,7 @@ bluebird@^2.6.2, bluebird@^2.8.1, bluebird@^2.8.2: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1" integrity sha1-U0uQM8AiyVecVro7Plpcqvu2UOE= -bluebird@^3.7.2: +bluebird@^3.5.4, bluebird@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -167,12 +618,20 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== +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: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -chalk@^2.0.0: +chalk@^2.0.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -213,6 +672,13 @@ cheerio@^1.0.0-rc.5: parse5 "^6.0.0" parse5-htmlparser2-tree-adapter "^6.0.0" +clone-regexp@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-2.2.0.tgz#7d65e00885cd8796405c35a737e7a86b7429e36f" + integrity sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q== + dependencies: + is-regexp "^2.0.0" + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -266,6 +732,11 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +create-error@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/create-error/-/create-error-0.3.1.tgz#69810245a629e654432bf04377360003a5351a23" + integrity sha1-aYECRaYp5lRDK/BDdzYAA6U1GiM= + cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -298,7 +769,7 @@ debug@^2.1.1: dependencies: ms "2.0.0" -debug@^4.0.1, debug@^4.1.1: +debug@^4.0.1, debug@^4.1.1, debug@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== @@ -310,6 +781,13 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= +default-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-value/-/default-value-1.0.0.tgz#8c6f52a5a1193fe78fdc9f86eb71d16c9757c83a" + integrity sha1-jG9SpaEZP+eP3J+G63HRbJdXyDo= + dependencies: + es6-promise-try "0.0.1" + dev-null@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/dev-null/-/dev-null-0.1.1.tgz#5a205ce3c2b2ef77b6238d6ba179eb74c6a0e818" @@ -374,11 +852,39 @@ entities@~2.1.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== +error-chain@^0.1.0: + version "0.1.3" + resolved "https://registry.yarnpkg.com/error-chain/-/error-chain-0.1.3.tgz#5575bdeca295224f6301123bb85b52a79547bdcd" + integrity sha512-Hx/Yd7w6ku+bTIGzPxdgKAoZSADCf4EnM9CEcIyr75vw/FH/wbZ23YnKKv7ZQB80F4s7ZSVJ/9UPXk03SQsACQ== + dependencies: + "@validatem/allow-extra-properties" "^0.1.0" + "@validatem/core" "^0.3.10" + "@validatem/default-to" "^0.1.0" + "@validatem/dynamic" "^0.1.2" + "@validatem/error" "^1.1.0" + "@validatem/forbidden" "^0.1.0" + "@validatem/is-boolean" "^0.1.1" + "@validatem/is-function" "^0.1.0" + "@validatem/is-plain-object" "^0.1.1" + "@validatem/is-string" "^0.1.1" + "@validatem/one-of" "^0.1.1" + "@validatem/required" "^0.1.1" + "@validatem/wrap-error" "^0.1.3" + chalk "^2.4.2" + fromentries "^1.2.0" + is.object "^1.0.0" + syncpipe "^1.0.0" + errors@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/errors/-/errors-0.2.0.tgz#0f51e889daa3e11b19e7186d11f104aa66eb2403" integrity sha1-D1Hoidqj4RsZ5xhtEfEEqmbrJAM= +es6-promise-try@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/es6-promise-try/-/es6-promise-try-0.0.1.tgz#10f140dad27459cef949973e5d21a087f7274b20" + integrity sha1-EPFA2tJ0Wc75SZc+XSGgh/cnSyA= + escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -410,9 +916,9 @@ eslint-visitor-keys@^2.0.0: integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== eslint@^7.22.0: - version "7.22.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.22.0.tgz#07ecc61052fec63661a2cab6bd507127c07adc6f" - integrity sha512-3VawOtjSJUQiiqac8MQc+w457iGLfuNGLFn8JmF051tTKbh5/x/0vlcEj8OgDCaw7Ysa2Jn8paGshV7x2abKXg== + version "7.23.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.23.0.tgz#8d029d252f6e8cf45894b4bee08f5493f8e94325" + integrity sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q== dependencies: "@babel/code-frame" "7.12.11" "@eslint/eslintrc" "^0.4.0" @@ -495,6 +1001,13 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +execall@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/execall/-/execall-2.0.0.tgz#16a06b5fe5099df7d00be5d9c06eecded1663b45" + integrity sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow== + dependencies: + clone-regexp "^2.1.0" + extend@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-2.0.2.tgz#1b74985400171b85554894459c978de6ef453ab7" @@ -535,6 +1048,11 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== +flatten@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" + integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== + form-data2@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/form-data2/-/form-data2-1.0.4.tgz#9f91ebd83003f9e117f94f1ebd72665ae0b49a40" @@ -551,16 +1069,35 @@ form-fix-array@^1.0.0: resolved "https://registry.yarnpkg.com/form-fix-array/-/form-fix-array-1.0.0.tgz#a1347a47e53117ab7bcdbf3e2f3ec91c66769bc8" integrity sha1-oTR6R+UxF6t7zb8+Lz7JHGZ2m8g= +fromentries@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" + integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +get-intrinsic@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + glob-parent@^5.0.0: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -604,10 +1141,22 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-symbols@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + html-entities@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.1.1.tgz#faa5fc521e2d18499627835d22be3554c202208f" - integrity sha512-HjNLgm9Ba8zKd6NDMkXa0mMPn3eDUxOUnEIm/qy2Rm6rnqRHgI9DpMYIv1Fndu8haUmfMQHNYNrlNKmdU8GMnQ== + version "2.3.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.1.tgz#3a61f1ce9dc098267ad161f1e7b7eca81361e80e" + integrity sha512-GqonC/ZciYWdIh/yI0R8dlWNbI6sUbqi04r0x2lzvESNGvNn9Axt9g89Zo0itnpTuAT/Fh+hezP3DioCDvwcNw== htmlparser2@^6.0.0: version "6.0.1" @@ -637,6 +1186,11 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -650,6 +1204,25 @@ inherits@2, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +is-arguments@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" + integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + dependencies: + call-bind "^1.0.0" + +is-boolean-object@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0" + integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== + dependencies: + call-bind "^1.0.0" + +is-callable@^1.1.5: + version "1.2.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" + integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -667,6 +1240,26 @@ is-glob@^4.0.0, is-glob@^4.0.1: dependencies: is-extglob "^2.1.1" +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-regexp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-2.1.0.tgz#cd734a56864e23b956bf4e7c66c396a4c0b22c2d" + integrity sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA== + +is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + +is.object@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is.object/-/is.object-1.0.0.tgz#e4f4117e9f083b35c8df5cf817ea3efb0452fdfa" + integrity sha1-5PQRfp8IOzXI31z4F+o++wRS/fo= + isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" @@ -803,6 +1396,37 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" +p-defer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-3.0.0.tgz#d1dceb4ee9b2b604b1d94ffec83760175d4e6f83" + integrity sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw== + +p-event@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/p-event/-/p-event-4.2.0.tgz#af4b049c8acd91ae81083ebd1e6f5cae2044c1b5" + integrity sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ== + dependencies: + p-timeout "^3.1.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-pause@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/p-pause/-/p-pause-0.1.0.tgz#4c4e0ca27005f7493d0f1e26ed588f018e057e3b" + integrity sha512-Sq78nqjN+aOSQrUDPsK1QGs7ZVzWIgAZz/fK8i+YweUOQV/WnGA6i+gVoAGexClPw1WDi456bv+08TQc2kWMug== + dependencies: + p-defer "^3.0.0" + +p-timeout@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== + dependencies: + p-finally "^1.0.0" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -908,9 +1532,9 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== semver@^7.2.1: - version "7.3.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" - integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" @@ -935,6 +1559,16 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" +split-filter-n@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/split-filter-n/-/split-filter-n-1.1.2.tgz#268be1ec9c4d93dfb27b030c06165ac1b6f70f66" + integrity sha512-+hXSQYpKe1uyXPXI4zQtAJAlaF2EzEc+BaF2goMeNL5oUD5YLqrVcpjxELJxpomXfwMCUaYLAszEbdY9gKVdHQ== + +split-filter@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/split-filter/-/split-filter-1.1.3.tgz#c68cc598783d88f60d16e7b452dacfe95ba60539" + integrity sha512-2xXwhWeJUFrYE8CL+qoy9mCohu5/E+uglvpqL1FVXz1XbvTwivafVC6oTDeg/9ksOAxg6DvyCF44Dvf5crFU0w== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"