From 8ee007c3299a33ee814b0f61b453a1f8a0c355c0 Mon Sep 17 00:00:00 2001 From: Haydn Ewers <27211+haydn@users.noreply.github.com> Date: Sat, 16 Jan 2021 12:09:55 +1100 Subject: [PATCH] Add basic create and update functions --- index.ts | 243 ++++++++++++++++------ package.json | 4 +- test.ts | 570 ++++++++++++++++++++++++++++++++++----------------- yarn.lock | 386 +++++++++++++++++++++++++++++++++- 4 files changed, 943 insertions(+), 260 deletions(-) diff --git a/index.ts b/index.ts index d0d7978..3a191c7 100644 --- a/index.ts +++ b/index.ts @@ -1,9 +1,6 @@ type Graph = { size: number; - adjacencyMatrix: Array>; - // edgeWeight: Array>>; - // vertexData: Array; - // edgeData: Array>; + adjacencyMatrix: { [u: string]: { [v: string]: number } }; }; type D3Graph = { @@ -16,67 +13,122 @@ type D3Graph = { }>; }; -const toD3 = (graph: Graph): D3Graph => { - const nodes = []; - for (let i = 0; i < graph.size; i++) { - nodes[i] = { id: i.toString(10) }; - } +const addEdge = (graph: Graph, edge: [string, string]): Graph => { + const size = graph.size; + const adjacencyMatrix: Graph["adjacencyMatrix"] = {}; - const links = []; - for (let u = 0; u < graph.size; u++) { - for (let v = 0; v < graph.size; v++) { - const edges = graph.adjacencyMatrix[u][v]; - if (edges !== undefined) { - for (let i = 0; i < edges; i++) { - links.push({ - source: u.toString(10), - target: v.toString(10), - }); - } - } + for (let u in graph.adjacencyMatrix) { + adjacencyMatrix[u] = {}; + for (let v in graph.adjacencyMatrix[u]) { + adjacencyMatrix[u][v] = graph.adjacencyMatrix[u][v]; } } - return { nodes, links }; + adjacencyMatrix[edge[0]][edge[1]] += 1; + + return { + size, + adjacencyMatrix, + }; }; -const fromD3 = (graph: D3Graph): Graph => { - const idToIndexMap: { - [id: string]: number; - } = {}; - for (let i = 0; i < graph.nodes.length; i++) { - idToIndexMap[graph.nodes[i].id] = i; +const addVertex = (graph: Graph, vertex: string): Graph => { + if (graph.adjacencyMatrix[vertex]) return graph; + + const size = graph.size + 1; + const adjacencyMatrix: Graph["adjacencyMatrix"] = {}; + + for (let u in graph.adjacencyMatrix) { + adjacencyMatrix[u] = {}; + for (let v in graph.adjacencyMatrix[u]) { + adjacencyMatrix[u][v] = graph.adjacencyMatrix[u][v]; + } } - const adjacencyMatrix: Graph["adjacencyMatrix"] = []; - for (let u = 0; u < graph.nodes.length; u++) { - adjacencyMatrix[u] = []; - for (let v = 0; v < graph.nodes.length; v++) { + for (let v in adjacencyMatrix) adjacencyMatrix[v][vertex] = 0; + adjacencyMatrix[vertex] = {}; + for (let v in adjacencyMatrix) adjacencyMatrix[vertex][v] = 0; + + return { + size, + adjacencyMatrix, + }; +}; + +const create = ( + size: number = 0, + id: (i: number) => string = (i) => i.toString(10) +): Graph => { + const adjacencyMatrix: Graph["adjacencyMatrix"] = {}; + + for (let i = 0; i < size; i++) { + const u = id(i); + adjacencyMatrix[u] = {}; + for (let j = 0; j < size; j++) { + const v = id(j); adjacencyMatrix[u][v] = 0; } } - for (let link of graph.links) { - const u = idToIndexMap[link.source]; - const v = idToIndexMap[link.target]; - adjacencyMatrix[u][v] += 1; + + return { + size, + adjacencyMatrix, + }; +}; + +const fromD3 = (d3Graph: D3Graph): Graph => { + const size = d3Graph.nodes.length; + const adjacencyMatrix: Graph["adjacencyMatrix"] = {}; + + for (let u of d3Graph.nodes) { + adjacencyMatrix[u.id] = {}; + for (let v of d3Graph.nodes) { + adjacencyMatrix[u.id][v.id] = 0; + } + } + + for (let link of d3Graph.links) { + adjacencyMatrix[link.source][link.target] += 1; } return { - size: graph.nodes.length, + size, adjacencyMatrix, }; }; +const inDegrees = (graph: Graph): { [id: string]: number } => { + const result: { [id: string]: number } = {}; + for (let i in graph.adjacencyMatrix) result[i] = 0; + for (let u in graph.adjacencyMatrix) { + for (let v in graph.adjacencyMatrix[u]) { + result[v] += graph.adjacencyMatrix[u][v]; + } + } + return result; +}; + +const isCyclic = (graph: Graph): boolean => { + const visited: Set = new Set(); + const path: Set = new Set(); + for (let i in graph.adjacencyMatrix) { + if (visited.has(i)) continue; + const cycleFound = _isCyclic(graph, visited, path, i); + if (cycleFound) return true; + } + return false; +}; + const _isCyclic = ( graph: Graph, - visited: Set, - path: Set, - vertex: number + visited: Set, + path: Set, + vertex: string ): boolean => { visited.add(vertex); path.add(vertex); - for (let i = 0; i < graph.size; i++) { + for (let i in graph.adjacencyMatrix[vertex]) { if (graph.adjacencyMatrix[vertex][i] > 0) { if (visited.has(i)) { if (path.has(i)) return true; @@ -92,49 +144,92 @@ const _isCyclic = ( return false; }; -const isCyclic = (graph: Graph): boolean => { - const visited: Set = new Set(); - const path: Set = new Set(); - for (let i = 0; i < graph.size; i++) { - if (visited.has(i)) continue; - const cycleFound = _isCyclic(graph, visited, path, i); - if (cycleFound) return true; +const outDegrees = (graph: Graph): { [id: string]: number } => { + const result: { [id: string]: number } = {}; + for (let i in graph.adjacencyMatrix) result[i] = 0; + for (let u in graph.adjacencyMatrix) { + for (let v in graph.adjacencyMatrix[u]) { + result[v] += graph.adjacencyMatrix[v][u]; + } } - return false; + return result; }; -const getInDegrees = (graph: Graph): Array => { - const result: Array = []; - for (let i = 0; i < graph.size; i++) { - result[i] = 0; +const removeEdge = (graph: Graph, edge: [string, string]): Graph => { + const size = graph.size; + const adjacencyMatrix: Graph["adjacencyMatrix"] = {}; + + for (let u in graph.adjacencyMatrix) { + adjacencyMatrix[u] = {}; + for (let v in graph.adjacencyMatrix[u]) { + adjacencyMatrix[u][v] = graph.adjacencyMatrix[u][v]; + } } - for (let u = 0; u < graph.size; u++) { - for (let v = 0; v < graph.size; v++) { - result[v] += graph.adjacencyMatrix[u][v]; + + if (adjacencyMatrix[edge[0]][edge[1]] > 0) { + adjacencyMatrix[edge[0]][edge[1]] -= 1; + } + + return { + size, + adjacencyMatrix, + }; +}; + +const removeVertex = (graph: Graph, vertex: string): Graph => { + const size = graph.size - 1; + const adjacencyMatrix: Graph["adjacencyMatrix"] = {}; + + for (let u in graph.adjacencyMatrix) { + if (u === vertex) continue; + adjacencyMatrix[u] = {}; + for (let v in graph.adjacencyMatrix[u]) { + if (v === vertex) continue; + adjacencyMatrix[u][v] = graph.adjacencyMatrix[u][v]; } } - return result; + + return { + size, + adjacencyMatrix, + }; +}; + +const toD3 = (graph: Graph): D3Graph => { + const nodes = []; + const links = []; + + for (let u in graph.adjacencyMatrix) { + nodes[nodes.length] = { id: u }; + for (let v in graph.adjacencyMatrix[u]) { + for (let i = 0; i < graph.adjacencyMatrix[u][v]; i++) { + links[links.length] = { source: u, target: v }; + } + } + } + + return { nodes, links }; }; -const topologicalSort = (graph: Graph): Array => { +const topologicalSort = (graph: Graph): Array => { if (isCyclic(graph)) throw "Cannot sort a graph that contains cycles."; - const result: Array = []; - const visited: Set = new Set(); - const queue: Array = []; - const inDegree = getInDegrees(graph); - - for (let i = 0; i < graph.size; i++) { + const result: Array = []; + const visited: Set = new Set(); + const queue: Array = []; + const inDegree = inDegrees(graph); + + for (let i in graph.adjacencyMatrix) { if (inDegree[i] === 0) { queue.push(i); visited.add(i); } } - + while (queue.length > 0) { const v = queue.shift(); result.push(v); - for (let i = 0; i < graph.size; i++) { + for (let i in graph.adjacencyMatrix) { if (graph.adjacencyMatrix[v][i] > 0 && !visited.has(i)) { inDegree[i] -= graph.adjacencyMatrix[v][i]; if (inDegree[i] <= 0) { @@ -148,4 +243,18 @@ const topologicalSort = (graph: Graph): Array => { return result; }; -export { Graph, D3Graph, isCyclic, topologicalSort, fromD3, toD3 }; +export { + D3Graph, + Graph, + addEdge, + addVertex, + create, + fromD3, + inDegrees, + isCyclic, + outDegrees, + removeEdge, + removeVertex, + toD3, + topologicalSort, +}; diff --git a/package.json b/package.json index 5fdaa45..f822f41 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "build:cjs": "tsc index.ts --downlevelIteration --target ES2015 --module CommonJS --outDir cjs", "build:umd": "tsc index.ts --downlevelIteration --target ES2015 --module UMD --outDir umd", "build:esm": "tsc index.ts --target ESNext --module ESNext --outDir esm", - "test": "tsc test.ts --downlevelIteration --lib ES2015 && node test.js", + "test": "tsc test.ts --downlevelIteration --lib ES2015 --esModuleInterop && node test.js", "release": "np" }, "files": [ @@ -36,7 +36,9 @@ ], "devDependencies": { "@types/node": "^14.14.12", + "@types/tape": "^4.13.0", "np": "^7.0.0", + "tape": "^5.0.1", "typescript": "^4.1.3" } } diff --git a/test.ts b/test.ts index 1088d25..a97fdd9 100644 --- a/test.ts +++ b/test.ts @@ -1,190 +1,384 @@ -import { fromD3, isCyclic, toD3, topologicalSort } from "./index"; - -import { strict as assert } from "assert"; - -assert.equal( - isCyclic({ - size: 1, - adjacencyMatrix: [[0]], - }), - false -); - -assert.equal( - isCyclic({ - size: 2, - adjacencyMatrix: [ - [0, 0], - [0, 0], - ], - }), - false -); - -assert.equal( - isCyclic({ - size: 2, - adjacencyMatrix: [ - [0, 1], - [0, 0], - ], - }), - false -); - -assert.equal( - isCyclic({ - size: 3, - adjacencyMatrix: [ - [0, 1, 1], - [0, 0, 0], - [0, 0, 0], - ], - }), - false -); - -assert.equal( - isCyclic({ - size: 1, - adjacencyMatrix: [[1]], - }), - true -); - -assert.equal( - isCyclic({ - size: 2, - adjacencyMatrix: [ - [0, 1], - [1, 0], - ], - }), - true -); - -assert.equal( - isCyclic({ - size: 3, - adjacencyMatrix: [ - [0, 1, 0], - [0, 0, 1], - [1, 0, 0], - ], - }), - true -); - -assert.equal( - isCyclic({ - size: 2, - adjacencyMatrix: [ - [1, 0], - [0, 1], - ], - }), - true -); - -assert.deepEqual( - topologicalSort({ - size: 1, - adjacencyMatrix: [[0]], - }), - [0] -); - -assert.deepEqual( - topologicalSort({ - size: 3, - adjacencyMatrix: [ - [0, 0, 0], - [0, 0, 0], - [0, 0, 0], - ], - }), - [0, 1, 2] -); - -assert.deepEqual( - topologicalSort({ - size: 3, - adjacencyMatrix: [ - [0, 1, 0], - [0, 0, 0], - [1, 0, 0], - ], - }), - [2, 0, 1] -); - -assert.deepEqual( - topologicalSort({ - size: 3, - adjacencyMatrix: [ - [0, 0, 0], - [1, 0, 0], - [1, 0, 0], - ], - }), - [1, 2, 0] -); - -assert.deepEqual( - topologicalSort({ - size: 2, - adjacencyMatrix: [ - [0, 0], - [10, 0], - ], - }), - [1, 0] -); - -assert.throws(() => { - topologicalSort({ - size: 2, - adjacencyMatrix: [ - [0, 1], - [1, 0], - ], - }); +import { + addEdge, + addVertex, + create, + fromD3, + inDegrees, + isCyclic, + outDegrees, + removeEdge, + removeVertex, + toD3, + topologicalSort, +} from "./index"; + +import test from "tape"; + +test("addEdge", (t) => { + t.plan(1); + + t.deepEqual( + addEdge( + { + size: 2, + adjacencyMatrix: { + a: { a: 0, b: 0 }, + b: { a: 0, b: 0 }, + }, + }, + ["a", "b"] + ), + { + size: 2, + adjacencyMatrix: { + a: { a: 0, b: 1 }, + b: { a: 0, b: 0 }, + }, + } + ); +}); + +test("addVertex", (t) => { + t.plan(2); + + t.deepEqual( + addVertex( + { + size: 0, + adjacencyMatrix: {}, + }, + "a" + ), + { + size: 1, + adjacencyMatrix: { + a: { a: 0 }, + }, + } + ); + + t.deepEqual( + addVertex( + { + size: 1, + adjacencyMatrix: { + a: { a: 0 }, + }, + }, + "b" + ), + { + size: 2, + adjacencyMatrix: { + a: { a: 0, b: 0 }, + b: { a: 0, b: 0 }, + }, + } + ); +}); + +test("create", (t) => { + t.plan(1); + + t.deepEqual( + create(2, (i) => `${i}!`), + { + size: 2, + adjacencyMatrix: { + "0!": { "0!": 0, "1!": 0 }, + "1!": { "0!": 0, "1!": 0 }, + }, + } + ); +}); + +test("fromD3", (t) => { + t.plan(1); + + t.deepEqual( + fromD3({ + nodes: [{ id: "a" }, { id: "b" }, { id: "c" }], + links: [ + { source: "a", target: "b" }, + { source: "a", target: "c" }, + { source: "a", target: "a" }, + ], + }), + { + size: 3, + adjacencyMatrix: { + a: { a: 1, b: 1, c: 1 }, + b: { a: 0, b: 0, c: 0 }, + c: { a: 0, b: 0, c: 0 }, + }, + } + ); +}); + +test("inDegrees", (t) => { + t.plan(1); + + t.deepEqual( + inDegrees({ + size: 3, + adjacencyMatrix: { + a: { a: 1, b: 1, c: 1 }, + b: { a: 0, b: 1, c: 0 }, + c: { a: 0, b: 0, c: 0 }, + }, + }), + { a: 1, b: 2, c: 1 } + ); +}); + +test("isCyclic", (t) => { + t.plan(8); + + t.equal( + isCyclic({ + size: 1, + adjacencyMatrix: { + a: { a: 0 }, + }, + }), + false + ); + + t.equal( + isCyclic({ + size: 2, + adjacencyMatrix: { + a: { a: 0, b: 0 }, + b: { a: 0, b: 0 }, + }, + }), + false + ); + + t.equal( + isCyclic({ + size: 2, + adjacencyMatrix: { + a: { a: 0, b: 1 }, + b: { a: 0, b: 0 }, + }, + }), + false + ); + + t.equal( + isCyclic({ + size: 3, + adjacencyMatrix: { + a: { a: 0, b: 1, c: 1 }, + b: { a: 0, b: 0, c: 0 }, + c: { a: 0, b: 0, c: 0 }, + }, + }), + false + ); + + t.equal( + isCyclic({ + size: 1, + adjacencyMatrix: { + a: { a: 1 }, + }, + }), + true + ); + + t.equal( + isCyclic({ + size: 2, + adjacencyMatrix: { + a: { a: 0, b: 1 }, + b: { a: 1, b: 0 }, + }, + }), + true + ); + + t.equal( + isCyclic({ + size: 3, + adjacencyMatrix: { + a: { a: 0, b: 1, c: 0 }, + b: { a: 0, b: 0, c: 1 }, + c: { a: 1, b: 0, c: 0 }, + }, + }), + true + ); + + t.equal( + isCyclic({ + size: 2, + adjacencyMatrix: { + a: { a: 1, b: 0 }, + b: { a: 0, b: 1 }, + }, + }), + true + ); +}); + +test("outDegrees", (t) => { + t.plan(1); + + t.deepEqual( + outDegrees({ + size: 3, + adjacencyMatrix: { + a: { a: 1, b: 1, c: 1 }, + b: { a: 0, b: 1, c: 0 }, + c: { a: 0, b: 0, c: 0 }, + }, + }), + { a: 3, b: 1, c: 0 } + ); +}); + +test("removeEdge", (t) => { + t.plan(1); + + t.deepEqual( + removeEdge( + { + size: 3, + adjacencyMatrix: { + a: { a: 0, b: 1, c: 0 }, + b: { a: 0, b: 0, c: 1 }, + c: { a: 1, b: 0, c: 0 }, + }, + }, + ["a", "b"] + ), + { + size: 3, + adjacencyMatrix: { + a: { a: 0, b: 0, c: 0 }, + b: { a: 0, b: 0, c: 1 }, + c: { a: 1, b: 0, c: 0 }, + }, + } + ); }); -assert.deepEqual( - fromD3({ - nodes: [{ id: "a" }, { id: "b" }, { id: "c" }], - links: [ - { source: "a", target: "b" }, - { source: "a", target: "c" }, - { source: "a", target: "a" }, - ], - }), - { - size: 3, - adjacencyMatrix: [ - [1, 1, 1], - [0, 0, 0], - [0, 0, 0], - ], - } -); - -assert.deepEqual( - toD3({ - size: 3, - adjacencyMatrix: [ - [1, 1, 1], - [0, 0, 0], - [0, 0, 0], - ], - }), - { - nodes: [{ id: "0" }, { id: "1" }, { id: "2" }], - links: [ - { source: "0", target: "0" }, - { source: "0", target: "1" }, - { source: "0", target: "2" }, - ], - } -); +test("removeVertex", (t) => { + t.plan(1); + + t.deepEqual( + removeVertex( + { + size: 3, + adjacencyMatrix: { + a: { a: 0, b: 1, c: 0 }, + b: { a: 0, b: 0, c: 1 }, + c: { a: 1, b: 0, c: 0 }, + }, + }, + "b" + ), + { + size: 2, + adjacencyMatrix: { + a: { a: 0, c: 0 }, + c: { a: 1, c: 0 }, + }, + } + ); +}); + +test("toD3", (t) => { + t.plan(1); + t.deepEqual( + toD3({ + size: 3, + adjacencyMatrix: { + a: { a: 1, b: 1, c: 1 }, + b: { a: 0, b: 0, c: 0 }, + c: { a: 0, b: 0, c: 0 }, + }, + }), + { + nodes: [{ id: "a" }, { id: "b" }, { id: "c" }], + links: [ + { source: "a", target: "a" }, + { source: "a", target: "b" }, + { source: "a", target: "c" }, + ], + } + ); +}); + +test("topologicalSort", (t) => { + t.plan(6); + + t.deepEqual( + topologicalSort({ + size: 1, + adjacencyMatrix: { + a: { a: 0 }, + }, + }), + ["a"] + ); + + t.deepEqual( + topologicalSort({ + size: 3, + adjacencyMatrix: { + a: { a: 0, b: 0, c: 0 }, + b: { a: 0, b: 0, c: 0 }, + c: { a: 0, b: 0, c: 0 }, + }, + }), + ["a", "b", "c"] + ); + + t.deepEqual( + topologicalSort({ + size: 3, + adjacencyMatrix: { + a: { a: 0, b: 1, c: 0 }, + b: { a: 0, b: 0, c: 0 }, + c: { a: 1, b: 0, c: 0 }, + }, + }), + ["c", "a", "b"] + ); + + t.deepEqual( + topologicalSort({ + size: 3, + adjacencyMatrix: { + a: { a: 0, b: 0, c: 0 }, + b: { a: 1, b: 0, c: 0 }, + c: { a: 1, b: 0, c: 0 }, + }, + }), + ["b", "c", "a"] + ); + + t.deepEqual( + topologicalSort({ + size: 2, + adjacencyMatrix: { + a: { a: 0, b: 0 }, + b: { a: 10, b: 0 }, + }, + }), + ["b", "a"] + ); + + t.throws(() => { + topologicalSort({ + size: 2, + adjacencyMatrix: { + a: { a: 0, b: 1 }, + b: { a: 1, b: 0 }, + }, + }); + }); +}); diff --git a/yarn.lock b/yarn.lock index 4225c60..3ad946e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -124,6 +124,13 @@ dependencies: "@types/node" "*" +"@types/tape@^4.13.0": + version "4.13.0" + resolved "https://registry.yarnpkg.com/@types/tape/-/tape-4.13.0.tgz#7a3f656f78a7eeee962fe4c8bedf016061e2d0ea" + integrity sha512-0V8cKowBdsiA9nbxAg7531sF2cdPZNiUogcfIUeUGm+bejUBE/bvibz3rH36iQP9bQjO/sOzFwU97/uC5mCyoA== + dependencies: + "@types/node" "*" + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -200,6 +207,11 @@ any-observable@^0.5.1: resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.5.1.tgz#ab7d49ff64ebe6dd3ae26760a3f5a881e8db791e" integrity sha512-8zv01bgDOp9PTmRTNCAHTw64TFP2rvlX4LvtNJLachaXY+AjmIvLT47fABNPCiIe89hKiSCo2n5zmPqI9CElPA== +array-filter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" + integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= + array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" @@ -215,6 +227,13 @@ async-exit-hook@^2.0.1: resolved "https://registry.yarnpkg.com/async-exit-hook/-/async-exit-hook-2.0.1.tgz#8bd8b024b0ec9b1c01cccb9af9db29bd717dfaf3" integrity sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw== +available-typed-arrays@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz#6b098ca9d8039079ee3f77f7b783c4480ba513f5" + integrity sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ== + dependencies: + array-filter "^1.0.0" + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -288,6 +307,14 @@ cacheable-request@^7.0.1: normalize-url "^4.1.0" responselike "^2.0.0" +call-bind@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" + integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.0" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -505,6 +532,27 @@ decompress-response@^5.0.0: dependencies: mimic-response "^2.0.0" +deep-equal@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.0.5.tgz#55cd2fe326d83f9cbf7261ef0e060b3f724c5cb9" + integrity sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw== + dependencies: + call-bind "^1.0.0" + es-get-iterator "^1.1.1" + get-intrinsic "^1.0.1" + is-arguments "^1.0.4" + is-date-object "^1.0.2" + is-regex "^1.1.1" + isarray "^2.0.5" + object-is "^1.1.4" + object-keys "^1.1.1" + object.assign "^4.1.2" + regexp.prototype.flags "^1.3.0" + side-channel "^1.0.3" + which-boxed-primitive "^1.0.1" + which-collection "^1.0.1" + which-typed-array "^1.1.2" + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -520,6 +568,18 @@ defer-to-connect@^2.0.0: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.0.tgz#83d6b199db041593ac84d781b5222308ccf4c2c1" integrity sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg== +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= + del@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952" @@ -548,6 +608,13 @@ dot-prop@^5.2.0: dependencies: is-obj "^2.0.0" +dotignore@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dotignore/-/dotignore-0.1.2.tgz#f942f2200d28c3a76fbdd6f0ee9f3257c8a2e905" + integrity sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw== + dependencies: + minimatch "^3.0.4" + duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" @@ -582,6 +649,64 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" +es-abstract@^1.17.0-next.1: + version "1.17.7" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" + integrity sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-abstract@^1.18.0-next.0, es-abstract@^1.18.0-next.1: + version "1.18.0-next.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" + integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-negative-zero "^2.0.0" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-get-iterator@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.1.tgz#b93ddd867af16d5118e00881396533c1c6647ad9" + integrity sha512-qorBw8Y7B15DVLaJWy6WdEV/ZkieBcu6QCq/xzWzGOKJqgG1j754vXRfZ3NY7HSShneqU43mPB4OkQBTkvHhFw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.1" + has-symbols "^1.0.1" + is-arguments "^1.0.4" + is-map "^2.0.1" + is-set "^2.0.1" + is-string "^1.0.5" + isarray "^2.0.5" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + escape-goat@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" @@ -690,6 +815,18 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.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" + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -700,6 +837,15 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +get-intrinsic@^1.0.0, get-intrinsic@^1.0.1: + 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.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -726,7 +872,7 @@ glob-parent@^5.1.0: dependencies: is-glob "^4.0.1" -glob@^7.1.3: +glob@^7.1.3, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -822,6 +968,11 @@ 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.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + has-yarn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" @@ -919,7 +1070,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2: +inherits@2, inherits@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -976,11 +1127,35 @@ inquirer@^7.0.0, inquirer@^7.3.3: strip-ansi "^6.0.0" through "^2.3.6" +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-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +is-bigint@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2" + integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== + +is-boolean-object@^1.1.0: + 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.3, is-callable@^1.1.4, is-callable@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" + integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== + is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -995,6 +1170,11 @@ is-core-module@^2.1.0: dependencies: has "^1.0.3" +is-date-object@^1.0.1, is-date-object@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + is-docker@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" @@ -1037,11 +1217,26 @@ is-installed-globally@^0.3.2: global-dirs "^2.0.1" is-path-inside "^3.0.1" +is-map@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" + integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== + +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-npm@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== +is-number-object@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" + integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -1079,6 +1274,13 @@ is-promise@^2.1.0: resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== +is-regex@^1.0.5, is-regex@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== + dependencies: + has-symbols "^1.0.1" + is-scoped@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-scoped/-/is-scoped-2.1.0.tgz#fef0713772658bdf5bee418608267ddae6d3566d" @@ -1086,6 +1288,11 @@ is-scoped@^2.1.0: dependencies: scoped-regex "^2.0.0" +is-set@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" + integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== + is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -1096,6 +1303,29 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== +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-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-typed-array@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.4.tgz#1f66f34a283a3c94a4335434661ca53fff801120" + integrity sha512-ILaRgn4zaSrVNXNGtON6iFNotXW3hAPF3+0fB1usg2jFlWqo5fEDdmJkz0zBfoi7Dgskr8Khi2xZ8cXqZEfXNA== + dependencies: + available-typed-arrays "^1.0.2" + call-bind "^1.0.0" + es-abstract "^1.18.0-next.1" + foreach "^2.0.5" + has-symbols "^1.0.1" + is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -1106,6 +1336,16 @@ is-url-superb@^4.0.0: resolved "https://registry.yarnpkg.com/is-url-superb/-/is-url-superb-4.0.0.tgz#b54d1d2499bb16792748ac967aa3ecb41a33a8c2" integrity sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA== +is-weakmap@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" + integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== + +is-weakset@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.1.tgz#e9a0af88dbd751589f5e50d80f4c98b780884f83" + integrity sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw== + is-wsl@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" @@ -1118,6 +1358,11 @@ is-yarn-global@^0.3.0: resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -1410,7 +1655,7 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@^1.2.0: +minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== @@ -1533,6 +1778,34 @@ object-assign@^4.1.0: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= +object-inspect@^1.7.0, object-inspect@^1.8.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" + integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== + +object-is@^1.1.2, object-is@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.4.tgz#63d6c83c00a43f4cbc9434eb9757c8a5b8565068" + integrity sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.0, object.assign@^4.1.1, object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -1806,6 +2079,14 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" +regexp.prototype.flags@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + registry-auth-token@^4.0.0: version "4.2.1" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" @@ -1875,6 +2156,13 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" +resumer@^0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" + integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k= + dependencies: + through "~2.3.4" + reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -1950,6 +2238,14 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +side-channel@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.3.tgz#cdc46b057550bbab63706210838df5d4c19519c3" + integrity sha512-A6+ByhlLkksFoUepsGxfj5x1gTSrs+OydsRptUxeNCabQpCFUvcwIczgOigI8vhY/OJCnPnyE9rGiwgvr9cS1g== + dependencies: + es-abstract "^1.18.0-next.0" + object-inspect "^1.8.0" + signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -2033,6 +2329,31 @@ string-width@^4.0.0, string-width@^4.1.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +string.prototype.trim@^1.2.1: + version "1.2.3" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.3.tgz#d23a22fde01c1e6571a7fadcb9be11decd8061a7" + integrity sha512-16IL9pIBA5asNOSukPfxX2W68BaBvxyiRK16H3RA/lWW9BDosh+w7f+LhomPHpXJ82QEe7w7/rY/S1CV97raLg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + +string.prototype.trimend@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" + integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" + integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -2115,6 +2436,29 @@ symbol-observable@^2.0.3: resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-2.0.3.tgz#5b521d3d07a43c351055fa43b8355b62d33fd16a" integrity sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA== +tape@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/tape/-/tape-5.0.1.tgz#0d70ce90a586387c4efda4393e72872672a416a3" + integrity sha512-wVsOl2shKPcjdJdc8a+PwacvrOdJZJ57cLUXlxW4TQ2R6aihXwG0m0bKm4mA4wjtQNTaLMCrYNEb4f9fjHKUYQ== + dependencies: + deep-equal "^2.0.3" + defined "^1.0.0" + dotignore "^0.1.2" + for-each "^0.3.3" + function-bind "^1.1.1" + glob "^7.1.6" + has "^1.0.3" + inherits "^2.0.4" + is-regex "^1.0.5" + minimist "^1.2.5" + object-inspect "^1.7.0" + object-is "^1.1.2" + object.assign "^4.1.0" + resolve "^1.17.0" + resumer "^0.0.0" + string.prototype.trim "^1.2.1" + through "^2.3.8" + term-size@^2.1.0: version "2.2.1" resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" @@ -2128,7 +2472,7 @@ terminal-link@^2.1.1: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" -through@2, through@^2.3.6, through@^2.3.8: +through@2, through@^2.3.6, through@^2.3.8, through@~2.3.4: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -2263,6 +2607,40 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" +which-boxed-primitive@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-collection@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" + integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== + dependencies: + is-map "^2.0.1" + is-set "^2.0.1" + is-weakmap "^2.0.1" + is-weakset "^2.0.1" + +which-typed-array@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.4.tgz#8fcb7d3ee5adf2d771066fba7cf37e32fe8711ff" + integrity sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA== + dependencies: + available-typed-arrays "^1.0.2" + call-bind "^1.0.0" + es-abstract "^1.18.0-next.1" + foreach "^2.0.5" + function-bind "^1.1.1" + has-symbols "^1.0.1" + is-typed-array "^1.1.3" + which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" -- 2.51.2