├── .gitignore ├── 01-basics ├── example.gif ├── index.html └── script.js ├── 02-basic-physics ├── example.gif ├── index.html └── script.js ├── 03-advanced-animation ├── car_red.png ├── car_yellow.png ├── example.gif ├── index.html └── script.js ├── 04-mouse ├── example.gif ├── index.html └── script.js ├── 05-image-data ├── example.gif ├── girl.png ├── index.html └── script.js ├── 06-lines ├── example.gif ├── girl.png ├── index.html └── script.js ├── 07-city-cars ├── example.png ├── index.html └── script.js ├── 08-p5js ├── index.html ├── p5.js └── script.js ├── LICENSE.md ├── README.md ├── package.json ├── src ├── programmatic-animations.js └── styles.css └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | -------------------------------------------------------------------------------- /01-basics/example.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomsoderlund/programmatic-animations/4fea30d27ecc90c265480344c166cde2d7b2a8fd/01-basics/example.gif -------------------------------------------------------------------------------- /01-basics/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Example 01: Basics 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 |
20 | 21 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /01-basics/script.js: -------------------------------------------------------------------------------- 1 | // ----- Coordinates ----- 2 | 3 | const getRandomPosition = (maxValue) => ({ 4 | x: Math.floor(Math.random() * maxValue), 5 | y: Math.floor(Math.random() * maxValue) 6 | }) 7 | 8 | // ----- Main ----- 9 | 10 | let lastPosition 11 | 12 | const initCanvas = function (canvas, context) { 13 | context.fillStyle = 'white' 14 | context.fillRect(0, 0, canvas.width, canvas.height) 15 | } 16 | 17 | const updateCanvas = function (canvas, context, frameCount) { 18 | context.strokeStyle = 'deeppink' 19 | context.lineWidth = 5 20 | if (!lastPosition) lastPosition = getRandomPosition(CANVAS_SIZE) 21 | context.beginPath() 22 | context.moveTo(lastPosition.x, lastPosition.y) 23 | lastPosition = getRandomPosition(CANVAS_SIZE) 24 | context.lineTo(lastPosition.x, lastPosition.y) 25 | context.stroke() 26 | } 27 | -------------------------------------------------------------------------------- /02-basic-physics/example.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomsoderlund/programmatic-animations/4fea30d27ecc90c265480344c166cde2d7b2a8fd/02-basic-physics/example.gif -------------------------------------------------------------------------------- /02-basic-physics/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Example 02: Basic Physics 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 |
21 | 22 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /02-basic-physics/script.js: -------------------------------------------------------------------------------- 1 | // ----- Drawing on Canvas ----- 2 | 3 | // From https://github.com/liabru/matter-js/wiki/Getting-started 4 | 5 | var BOX_SIZE = percentToPixel(25) 6 | 7 | // module aliases 8 | var Engine = Matter.Engine 9 | var Render = Matter.Render 10 | var World = Matter.World 11 | var Composite = Matter.Composite 12 | var Bodies = Matter.Bodies 13 | 14 | // create an engine 15 | var engine = Engine.create() 16 | 17 | // create two boxes and a ground 18 | var boxA = Bodies.rectangle(CANVAS_SIZE / 2, -CANVAS_SIZE / 2 - BOX_SIZE / 2, BOX_SIZE, BOX_SIZE) 19 | boxA.color = 'dodgerblue' 20 | var boxB = Bodies.rectangle(CANVAS_SIZE / 2 + BOX_SIZE * 2 / 3, -CANVAS_SIZE / 2 - BOX_SIZE * 2, BOX_SIZE, BOX_SIZE) 21 | boxB.color = 'tomato' 22 | var ground = Bodies.rectangle(CANVAS_SIZE / 2, CANVAS_SIZE - (100 / 2), CANVAS_SIZE - 100, 100, { isStatic: true }) 23 | 24 | // add all of the bodies to the world 25 | World.add(engine.world, [boxA, boxB, ground]) 26 | 27 | // run the engine 28 | Engine.run(engine) 29 | 30 | // create a renderer 31 | // var render = Render.create({ 32 | // element: document.body, 33 | // engine: engine 34 | // }); 35 | 36 | // run the renderer 37 | // Render.run(render); 38 | 39 | const fillCanvas = function (canvas, context, color = 'white') { 40 | context.fillStyle = color 41 | context.fillRect(0, 0, canvas.width, canvas.height) 42 | } 43 | 44 | const fillCanvasGradient = function (canvas, context, colorInner = 'red', colorOuter = 'blue') { 45 | var gradient = context.createRadialGradient(canvas.width / 2, canvas.height / 2, 10, canvas.width / 2, canvas.height / 2, canvas.width / 2 * 1.414) // x0,y0,r0,x1,y1,r1 46 | gradient.addColorStop(0, colorInner) 47 | gradient.addColorStop(1, colorOuter) 48 | context.fillStyle = gradient 49 | context.fillRect(0, 0, canvas.width, canvas.height) 50 | } 51 | 52 | // From https://stackoverflow.com/questions/18838202/fill-polygon-on-canvas/18838472#18838472 53 | const drawPolygon = function (context, body) { 54 | context.beginPath() 55 | // context.strokeStyle = body.color || 'silver'; 56 | context.fillStyle = body.color || 'silver' 57 | context.lineWidth = 10 58 | context.lineCap = 'round' 59 | for (var i = 0; i < body.vertices.length; i++) { 60 | context.lineTo(body.vertices[i].x, body.vertices[i].y) 61 | } 62 | context.lineTo(body.vertices[0].x, body.vertices[0].y) 63 | context.closePath() 64 | context.fill() 65 | // context.stroke(); 66 | } 67 | 68 | const initCanvas = function (canvas, context) { 69 | fillCanvas(canvas, context) 70 | } 71 | 72 | const updateCanvas = function (canvas, context, frameCount) { 73 | fillCanvasGradient(canvas, context, '#ccc', '#444') 74 | var bodies = Composite.allBodies(engine.world) 75 | for (var i = 0; i < bodies.length; i += 1) { 76 | drawPolygon(context, bodies[i]) 77 | }; 78 | } 79 | -------------------------------------------------------------------------------- /03-advanced-animation/car_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomsoderlund/programmatic-animations/4fea30d27ecc90c265480344c166cde2d7b2a8fd/03-advanced-animation/car_red.png -------------------------------------------------------------------------------- /03-advanced-animation/car_yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomsoderlund/programmatic-animations/4fea30d27ecc90c265480344c166cde2d7b2a8fd/03-advanced-animation/car_yellow.png -------------------------------------------------------------------------------- /03-advanced-animation/example.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomsoderlund/programmatic-animations/4fea30d27ecc90c265480344c166cde2d7b2a8fd/03-advanced-animation/example.gif -------------------------------------------------------------------------------- /03-advanced-animation/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Example 03: Advanced Animation 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 |
21 | 22 | 28 | 29 |

Car sprite made by sheikh_tuhin.

30 | 31 | 32 | -------------------------------------------------------------------------------- /03-advanced-animation/script.js: -------------------------------------------------------------------------------- 1 | // ----- Drawing on Canvas ----- 2 | 3 | // Adapted from http://ocanvas.org/demos/4 4 | 5 | var CAR_SPEED = 5 6 | 7 | var ocanvas 8 | var invisibleLineCar1, invisibleLineCar2 9 | 10 | const initCanvas = function (canvas, context) { 11 | ocanvas = oCanvas.create({ 12 | canvas: '#canvasElement', 13 | background: '#84B317', 14 | fps: FRAME_RATE, 15 | disableScrolling: true 16 | }) 17 | 18 | var radius = 25 19 | var distance = 32 20 | 21 | // Track 22 | ocanvas.display.register( 23 | 'track', 24 | { shapeType: 'radial' }, 25 | function (ctx) { 26 | // Asphalt 27 | ctx.strokeStyle = '#858480' 28 | ctx.lineWidth = percentToPixel(10) 29 | ctx.beginPath() 30 | ctx.arc(this.abs_x, this.abs_y, this.radius_x, 0, 2 * Math.PI) 31 | ctx.stroke() 32 | // Center line 33 | ctx.strokeStyle = '#B8B7B4' 34 | ctx.lineWidth = percentToPixel(0.5) 35 | ctx.setLineDash([percentToPixel(3), percentToPixel(1)]) 36 | ctx.beginPath() 37 | ctx.arc(this.abs_x, this.abs_y, this.radius_x, 0, 2 * Math.PI) 38 | ctx.stroke() 39 | } 40 | ) 41 | ocanvas.addChild(ocanvas.display.track({ 42 | x: percentToPixel(distance), 43 | y: percentToPixel(distance), 44 | radius_x: percentToPixel(radius) 45 | })) 46 | ocanvas.addChild(ocanvas.display.track({ 47 | x: percentToPixel(100 - distance), 48 | y: percentToPixel(100 - distance), 49 | radius_x: percentToPixel(radius) 50 | })) 51 | 52 | // Car 1: line that car will follow 53 | invisibleLineCar1 = ocanvas.display.ellipse({ 54 | x: percentToPixel(distance), 55 | y: percentToPixel(distance), 56 | radius_x: percentToPixel(radius), 57 | radius_y: percentToPixel(radius) 58 | }) 59 | ocanvas.addChild(invisibleLineCar1) 60 | // Car 1: car sprite 61 | var car1 = ocanvas.display.image({ 62 | x: 0, 63 | y: percentToPixel(-distance + 7), 64 | origin: { x: 'center', y: 'center' }, 65 | image: 'car_red.png' 66 | }) 67 | car1.scale(0.2) 68 | invisibleLineCar1.addChild(car1) 69 | 70 | // Car 2: line that car will follow 71 | invisibleLineCar2 = ocanvas.display.ellipse({ 72 | x: percentToPixel(100 - distance), 73 | y: percentToPixel(100 - distance), 74 | radius_x: percentToPixel(radius), 75 | radius_y: percentToPixel(radius) 76 | }) 77 | ocanvas.addChild(invisibleLineCar2) 78 | // Car 2: car sprite 79 | var car2 = ocanvas.display.image({ 80 | x: 0, 81 | y: percentToPixel(-distance + 7), 82 | origin: { x: 'center', y: 'center' }, 83 | image: 'car_yellow.png' 84 | }) 85 | car2.scale(0.2) 86 | invisibleLineCar2.addChild(car2) 87 | invisibleLineCar2.rotateTo(100) 88 | } 89 | 90 | const updateCanvas = function (canvas, context, frameCount) { 91 | invisibleLineCar1.rotation += CAR_SPEED 92 | invisibleLineCar2.rotation += CAR_SPEED 93 | ocanvas.draw.redraw() 94 | } 95 | -------------------------------------------------------------------------------- /04-mouse/example.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomsoderlund/programmatic-animations/4fea30d27ecc90c265480344c166cde2d7b2a8fd/04-mouse/example.gif -------------------------------------------------------------------------------- /04-mouse/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Example 04: Mouse 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 |
21 | 22 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /04-mouse/script.js: -------------------------------------------------------------------------------- 1 | // ----- Triangles model ----- 2 | 3 | const TRIANGLE_SIZE = 80 4 | const BASE_COLOR = '#333' 5 | 6 | const triangles = [] 7 | 8 | const forEachTriangle = function (func) { 9 | for (var c = 0; c < triangles.length; c++) { 10 | for (var r = 0; r < triangles[c].length; r++) { 11 | func(triangles[c][r], c, r) 12 | }; 13 | }; 14 | } 15 | 16 | const getTriangleAtCoordinates = function (x, y) { 17 | const c = Math.round(x / TRIANGLE_SIZE * 2) 18 | const r = Math.round(y / TRIANGLE_SIZE) 19 | return { 20 | triangle: triangles[c][r], 21 | c, 22 | r 23 | } 24 | } 25 | 26 | const setTriangle = function (c, r, value) { 27 | triangles[c][r] = value 28 | } 29 | 30 | const initTriangleData = function (canvas) { 31 | const columns = canvas.width / TRIANGLE_SIZE * 2 32 | const rows = canvas.height / TRIANGLE_SIZE * 2 33 | for (var c = 0; c < columns; c++) { 34 | triangles[c] = [] 35 | for (var r = 0; r < rows; r++) { 36 | triangles[c][r] = 0 37 | }; 38 | }; 39 | } 40 | 41 | const updateTriangleData = function () { 42 | forEachTriangle(function (triangle, c, r) { 43 | if (triangle > 0) { 44 | setTriangle(c, r, Math.max(0, triangle - 0.02)) 45 | } 46 | }) 47 | } 48 | 49 | // ----- Drawing ----- 50 | 51 | const fillCanvas = function (canvas, context, color = 'white') { 52 | context.fillStyle = color 53 | context.fillRect(0, 0, canvas.width, canvas.height) 54 | } 55 | 56 | const drawTriangle = function (context, x, y, size = 100, flipped = false, fillStyle = '#FFCC00', debugText) { 57 | const TRI_HEIGHT = 0.35 58 | const FLIP_ADJUST = -0.16 * TRIANGLE_SIZE 59 | // Triangle coordinates 60 | context.beginPath() 61 | if (!flipped) { 62 | context.moveTo(x, y - size / 2) 63 | context.lineTo(x - size / 2, y + size * TRI_HEIGHT) 64 | context.lineTo(x + size / 2, y + size * TRI_HEIGHT) 65 | } else { 66 | // Upside down 67 | context.moveTo(x, y + size / 2 + FLIP_ADJUST) 68 | context.lineTo(x - size / 2, y - size * TRI_HEIGHT + FLIP_ADJUST) 69 | context.lineTo(x + size / 2, y - size * TRI_HEIGHT + FLIP_ADJUST) 70 | } 71 | context.closePath() 72 | // Fill it with color 73 | context.fillStyle = fillStyle 74 | context.fill() 75 | // Debug 76 | // context.beginPath(); 77 | // context.arc(x, y, 2, 0, 2*Math.PI); 78 | // context.fill(); 79 | // context.fillStyle = 'tomato'; 80 | // context.font = '10px Arial'; 81 | // if (debugText) context.fillText(debugText, x, y); 82 | } 83 | 84 | const drawAllTriangles = function (context) { 85 | const HEIGHT_CONSTANT = 0.85 86 | forEachTriangle(function (triangle, c, r) { 87 | const baseColor = tinycolor(BASE_COLOR) 88 | const triangleColor = baseColor.lighten(triangle * 20) 89 | drawTriangle(context, c * TRIANGLE_SIZE / 2, TRIANGLE_SIZE / 2 + r * TRIANGLE_SIZE * HEIGHT_CONSTANT, TRIANGLE_SIZE, (c % 2 === 1), triangleColor.toHexString(), `${triangle * 10}`) 90 | }) 91 | } 92 | 93 | // ----- Mouse ----- 94 | 95 | // From https://www.html5canvastutorials.com/advanced/html5-canvas-mouse-coordinates/ 96 | const getMousePos = function (canvas, event) { 97 | const clientParent = event.touches ? event.touches[0] : event 98 | const rect = canvas.getBoundingClientRect() 99 | return { 100 | x: clientParent.clientX - rect.left, 101 | y: clientParent.clientY - rect.top 102 | } 103 | } 104 | 105 | const onMouseMove = function (event) { 106 | const mousePos = getMousePos(canvas, event) 107 | const triangleData = getTriangleAtCoordinates(mousePos.x, mousePos.y) 108 | setTriangle(triangleData.c, triangleData.r, 1) 109 | } 110 | 111 | const initMouse = function (canvas, context) { 112 | canvas.addEventListener('mousemove', onMouseMove, false) 113 | canvas.addEventListener('touchmove', onMouseMove, false) 114 | } 115 | 116 | // ----- Main ----- 117 | 118 | const initCanvas = function (canvas, context) { 119 | initTriangleData(canvas) 120 | initMouse(canvas, context) 121 | fillCanvas(canvas, context, BASE_COLOR) 122 | } 123 | 124 | const updateCanvas = function (canvas, context, frameCount) { 125 | updateTriangleData() 126 | drawAllTriangles(context) 127 | } 128 | -------------------------------------------------------------------------------- /05-image-data/example.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomsoderlund/programmatic-animations/4fea30d27ecc90c265480344c166cde2d7b2a8fd/05-image-data/example.gif -------------------------------------------------------------------------------- /05-image-data/girl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomsoderlund/programmatic-animations/4fea30d27ecc90c265480344c166cde2d7b2a8fd/05-image-data/girl.png -------------------------------------------------------------------------------- /05-image-data/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Example 05: Image Data 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 |
21 | 22 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /05-image-data/script.js: -------------------------------------------------------------------------------- 1 | // ----- Triangles model ----- 2 | 3 | const TRIANGLE_SIZE = 20 4 | const BASE_COLOR = '#333' 5 | 6 | const triangles = [] 7 | 8 | const forEachTriangle = function (func) { 9 | for (var c = 0; c < triangles.length; c++) { 10 | for (var r = 0; r < triangles[c].length; r++) { 11 | func(triangles[c][r], c, r) 12 | }; 13 | }; 14 | } 15 | 16 | const getTriangleAtCoordinates = function (x, y) { 17 | const c = Math.round(x / TRIANGLE_SIZE * 2) 18 | const r = Math.round(y / TRIANGLE_SIZE) 19 | return { 20 | triangle: triangles[c][r], 21 | c, 22 | r 23 | } 24 | } 25 | 26 | const setTriangle = function (c, r, value) { 27 | triangles[c][r] = value 28 | } 29 | 30 | const initTriangleData = function (canvas) { 31 | const columns = canvas.width / TRIANGLE_SIZE * 2 32 | const rows = canvas.height / TRIANGLE_SIZE * 2 33 | for (var c = 0; c < columns; c++) { 34 | triangles[c] = [] 35 | for (var r = 0; r < rows; r++) { 36 | triangles[c][r] = 0 37 | }; 38 | }; 39 | } 40 | 41 | const updateTriangleData = function () { 42 | forEachTriangle(function (triangle, c, r) { 43 | if (triangle > 0) { 44 | setTriangle(c, r, Math.max(0, triangle - 0.02)) 45 | } 46 | }) 47 | } 48 | 49 | // ----- Drawing ----- 50 | 51 | const fillCanvas = function (canvas, context, color = 'white') { 52 | context.fillStyle = color 53 | context.fillRect(0, 0, canvas.width, canvas.height) 54 | } 55 | 56 | const drawTriangle = function (context, x, y, size = 100, flipped = false, fillStyle = '#FFCC00', debugText) { 57 | const TRI_HEIGHT = 0.35 58 | const FLIP_ADJUST = -0.16 * TRIANGLE_SIZE 59 | // Triangle coordinates 60 | context.beginPath() 61 | if (!flipped) { 62 | context.moveTo(x, y - size / 2) 63 | context.lineTo(x - size / 2, y + size * TRI_HEIGHT) 64 | context.lineTo(x + size / 2, y + size * TRI_HEIGHT) 65 | } else { 66 | // Upside down 67 | context.moveTo(x, y + size / 2 + FLIP_ADJUST) 68 | context.lineTo(x - size / 2, y - size * TRI_HEIGHT + FLIP_ADJUST) 69 | context.lineTo(x + size / 2, y - size * TRI_HEIGHT + FLIP_ADJUST) 70 | } 71 | context.closePath() 72 | // Fill it with color 73 | context.fillStyle = fillStyle 74 | context.fill() 75 | // Debug 76 | // context.beginPath(); 77 | // context.arc(x, y, 2, 0, 2*Math.PI); 78 | // context.fill(); 79 | // context.fillStyle = 'tomato'; 80 | // context.font = '10px Arial'; 81 | // if (debugText) context.fillText(debugText, x, y); 82 | } 83 | 84 | const drawAllTriangles = function (context) { 85 | const HEIGHT_CONSTANT = 0.85 86 | forEachTriangle(function (triangle, c, r) { 87 | // const baseColor = tinycolor(BASE_COLOR); 88 | const colorValues = imageData.getPixel(c, Math.round(r * 1.8)) 89 | const RANDOM_VARIATION = 10 90 | const randomColorValues = { 91 | r: colorValues.r + getRandomValue(-RANDOM_VARIATION, RANDOM_VARIATION), 92 | g: colorValues.g + getRandomValue(-RANDOM_VARIATION, RANDOM_VARIATION), 93 | b: colorValues.b + getRandomValue(-RANDOM_VARIATION, RANDOM_VARIATION) 94 | } 95 | const triangleColor = tinycolor(randomColorValues) 96 | drawTriangle(context, c * TRIANGLE_SIZE / 2, TRIANGLE_SIZE / 2 + r * TRIANGLE_SIZE * HEIGHT_CONSTANT, TRIANGLE_SIZE, (c % 2 === 1), triangleColor.toHexString(), `${triangle * 10}`) 97 | }) 98 | } 99 | 100 | // ----- Image Data ----- 101 | 102 | var imageData 103 | 104 | const initImageData = function (canvas, context) { 105 | imageData = new ImagePixels('girl.png', 12 / TRIANGLE_SIZE, function (property) { 106 | console.log('imageData.getPixels():', imageData.getPixel(0, 0)) 107 | }) 108 | } 109 | 110 | // ----- Main ----- 111 | 112 | const initCanvas = function (canvas, context) { 113 | initTriangleData(canvas) 114 | initImageData(canvas, context) 115 | fillCanvas(canvas, context, BASE_COLOR) 116 | } 117 | 118 | const updateCanvas = function (canvas, context, frameCount) { 119 | updateTriangleData() 120 | drawAllTriangles(context) 121 | } 122 | -------------------------------------------------------------------------------- /06-lines/example.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomsoderlund/programmatic-animations/4fea30d27ecc90c265480344c166cde2d7b2a8fd/06-lines/example.gif -------------------------------------------------------------------------------- /06-lines/girl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomsoderlund/programmatic-animations/4fea30d27ecc90c265480344c166cde2d7b2a8fd/06-lines/girl.png -------------------------------------------------------------------------------- /06-lines/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Example 06: Lines 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 |
20 | 21 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /06-lines/script.js: -------------------------------------------------------------------------------- 1 | // ----- Lines model ----- 2 | 3 | const GRID_RESOLUTION = 15 4 | const BASE_COLOR = '#333' 5 | const LINE_COLOR = '#F0F0F0' 6 | 7 | const lines = [] 8 | 9 | const forEachLinePoint = function (func) { 10 | for (var r = 0; r < lines.length; r++) { 11 | for (var c = 0; c < lines[r].length; c++) { 12 | func(lines[r][c], r, c) 13 | }; 14 | }; 15 | } 16 | 17 | const forEachLine = function (func) { 18 | for (var r = 0; r < lines.length; r++) { 19 | func(lines[r], r) 20 | }; 21 | } 22 | 23 | const getLineAtCoordinates = function (x, y) { 24 | const c = Math.round(x / GRID_RESOLUTION) 25 | const r = Math.round(y / GRID_RESOLUTION) 26 | return { 27 | line: lines[r][c], 28 | r, 29 | c 30 | } 31 | } 32 | 33 | const setLine = function (r, c, value) { 34 | lines[c][r] = value 35 | } 36 | 37 | const initLineData = function (canvas) { 38 | const columns = canvas.width / GRID_RESOLUTION 39 | const rows = canvas.height / GRID_RESOLUTION 40 | console.log(`${rows} rows * ${columns} columns`) 41 | for (var r = 0; r < rows; r++) { 42 | lines[r] = [] 43 | for (var c = 0; c < columns; c++) { 44 | lines[r][c] = 0 45 | }; 46 | }; 47 | } 48 | 49 | const updateLineData = function () { 50 | forEachLinePoint(function (line, r, c) { 51 | if (line > 0) { 52 | setLine(r, c, Math.max(0, line - 0.02)) 53 | } 54 | }) 55 | } 56 | 57 | // ----- Drawing ----- 58 | 59 | const fillCanvas = function (canvas, context, color = BASE_COLOR) { 60 | context.fillStyle = color 61 | context.fillRect(0, 0, canvas.width, canvas.height) 62 | } 63 | 64 | const getPointCoordinates = function (r, c, frameCount) { 65 | var imageValue = imageData.getPixel(c, r).r ? (imageData.getPixel(c, r).r) / 7.5 : 0 66 | var sinValue = Math.sin(frameCount / 10 + c / 10) * 10 67 | var coords = { 68 | x: c * GRID_RESOLUTION / 2, 69 | y: (r * GRID_RESOLUTION + imageValue + sinValue) / 2 70 | } 71 | return coords 72 | } 73 | 74 | const drawLine = function (context, frameCount, line, r) { 75 | var coords1 = getPointCoordinates(r, 0, frameCount) 76 | context.beginPath() 77 | context.moveTo(coords1.x, coords1.y) 78 | var lastPoint = coords1 79 | for (var c = 1; c <= line.length; c++) { 80 | var coords2 = getPointCoordinates(r, c, frameCount) 81 | context.lineTo(coords2.x, coords2.y) 82 | lastPoint = coords2 83 | }; 84 | context.stroke() 85 | } 86 | 87 | const drawAllLines = function (context, frameCount) { 88 | forEachLine(drawLine.bind(undefined, context, frameCount)) 89 | } 90 | 91 | // ----- Image Data ----- 92 | 93 | var imageData 94 | 95 | const initImageData = function (canvas, context) { 96 | imageData = new ImagePixels('girl.png', CANVAS_SIZE / GRID_RESOLUTION / 50, function (property) { 97 | console.log('imageData', imageData) 98 | }) 99 | } 100 | 101 | // ----- Main ----- 102 | 103 | const initCanvas = function (canvas, context) { 104 | context.strokeStyle = LINE_COLOR 105 | context.lineWidth = 1 106 | initLineData(canvas) 107 | initImageData(canvas, context) 108 | fillCanvas(canvas, context) 109 | } 110 | 111 | const updateCanvas = function (canvas, context, frameCount) { 112 | // updateLineData(); 113 | fillCanvas(canvas, context) 114 | drawAllLines(context, frameCount) 115 | } 116 | -------------------------------------------------------------------------------- /07-city-cars/example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomsoderlund/programmatic-animations/4fea30d27ecc90c265480344c166cde2d7b2a8fd/07-city-cars/example.png -------------------------------------------------------------------------------- /07-city-cars/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Example 07: The City 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 |
21 | 22 | 28 | 29 |

Inspired by Romain Trystram’s “Rainy Street”.

30 | 31 | 32 | -------------------------------------------------------------------------------- /07-city-cars/script.js: -------------------------------------------------------------------------------- 1 | // ----- City data model ----- 2 | 3 | var CAR_SPEED = 5 4 | 5 | var allObjects = [] 6 | 7 | const COLORS = { 8 | background: '#150529', 9 | streetBackground: '#601331', 10 | streetLines: 'rgba(255,255,255, 0.33)', 11 | carFill: '#c2907d', 12 | carWindows: '#55073e', 13 | carFrontLights: 'rgba(255,255,255, 0.5)', 14 | carBackLights: '#e43c66' 15 | } 16 | 17 | const STREET_GRID_COLUMNS = 3 18 | const GUTTER_OUTER = 8 19 | const GUTTER = (100 - GUTTER_OUTER * 2) / (STREET_GRID_COLUMNS - 1) 20 | const STREET_GRID = [] 21 | 22 | const initStreetGrid = function (property) { 23 | // Set up points 24 | for (var x = 0; x < STREET_GRID_COLUMNS; x++) { 25 | for (var y = 0; y < STREET_GRID_COLUMNS; y++) { 26 | STREET_GRID.push({ x: GUTTER_OUTER + x * GUTTER, y: GUTTER_OUTER + y * GUTTER, connections: [] }) 27 | }; 28 | }; 29 | // Set up connections/intersections 30 | for (var p1 = 0; p1 < STREET_GRID.length; p1++) { 31 | STREET_GRID[p1].connections = [] 32 | for (var p2 = 0; p2 < STREET_GRID.length; p2++) { 33 | const w = Math.abs(STREET_GRID[p2].x - STREET_GRID[p1].x) 34 | const h = Math.abs(STREET_GRID[p2].y - STREET_GRID[p1].y) 35 | const distance = Math.sqrt(w * w + h * h) 36 | // console.log(`connect: ${p1}->${p2}`, {GUTTER, distance, OK: distance <= (GUTTER+1)}); 37 | if (p2 !== p1 && distance <= (GUTTER + 1)) { 38 | STREET_GRID[p1].connections.push(p2) 39 | } 40 | }; 41 | }; 42 | // console.log(`STREET_GRID:`, STREET_GRID); 43 | } 44 | 45 | initStreetGrid() 46 | 47 | // ----- Drawing on oCanvas ----- 48 | 49 | var ocanvas 50 | 51 | const initCanvas = function (canvas, context) { 52 | ocanvas = oCanvas.create({ 53 | canvas: '#canvasElement', 54 | background: COLORS.background, 55 | fps: FRAME_RATE, 56 | disableScrolling: true 57 | }) 58 | 59 | // Street 60 | ocanvas.display.register( 61 | 'street', 62 | { shapeType: 'rectangular' }, 63 | function (ctx) { 64 | // Asphalt 65 | ctx.strokeStyle = COLORS.streetBackground 66 | ctx.lineWidth = percentToPixel(10) 67 | ctx.lineCap = 'round' 68 | ctx.beginPath() 69 | ctx.moveTo(this.x1, this.y1) 70 | ctx.lineTo(this.x2, this.y2) 71 | ctx.stroke() 72 | // Center line 73 | ctx.strokeStyle = COLORS.streetLines 74 | ctx.lineWidth = percentToPixel(0.3) 75 | ctx.setLineDash([percentToPixel(2), percentToPixel(2)]) 76 | ctx.beginPath() 77 | ctx.moveTo(this.x1, this.y1) 78 | ctx.lineTo(this.x2, this.y2) 79 | ctx.stroke() 80 | } 81 | ) 82 | // Draw street grid 83 | for (var p1 = 0; p1 < STREET_GRID.length; p1++) { 84 | for (var p1c = 0; p1c < STREET_GRID[p1].connections.length; p1c++) { 85 | const p2 = STREET_GRID[p1].connections[p1c] 86 | // console.log(`line: ${p1}->${p2}`, [STREET_GRID[p1].x, STREET_GRID[p1].y], [STREET_GRID[p2].x, STREET_GRID[p2].y]); 87 | ocanvas.addChild(ocanvas.display.street({ 88 | x1: percentToPixel(STREET_GRID[p1].x), 89 | y1: percentToPixel(STREET_GRID[p1].y), 90 | x2: percentToPixel(STREET_GRID[p2].x), 91 | y2: percentToPixel(STREET_GRID[p2].y) 92 | })) 93 | }; 94 | }; 95 | 96 | const xySpeed = (speed, rotationDegrees) => ({ 97 | x: Math.sin(rotationDegrees / 180 * Math.PI) * speed, 98 | y: -Math.cos(rotationDegrees / 180 * Math.PI) * speed 99 | }) 100 | 101 | // Car 102 | ocanvas.display.register( 103 | 'car', 104 | { 105 | shapeType: 'radial', 106 | steerTo: function (degrees) { 107 | console.log('steerTo:', degrees) 108 | this.desiredRotation = degrees 109 | }, 110 | turningSpeed: 2, 111 | updateRotation: function () { 112 | if (this.desiredRotation && this.desiredRotation !== this.rotation) { 113 | this.rotate((this.desiredRotation > this.rotation ? 1 : -1) * this.turningSpeed) 114 | } 115 | }, 116 | update: function () { 117 | // console.log(`thisCar:`, speed, this); 118 | this.updateRotation() 119 | const speed = xySpeed(this.speed, this.rotation) 120 | this.x += speed.x 121 | this.y += speed.y 122 | } 123 | }, 124 | // Draw car 125 | function (ctx) { 126 | const size = { w: 15, h: 22 } 127 | ctx.fillStyle = COLORS.carFill 128 | ctx.fillRect(-size.w / 2, -size.h / 2, size.w, size.h) 129 | // Windows 130 | ctx.fillStyle = COLORS.carWindows 131 | ctx.fillRect(1 - size.w / 2, -size.h / 2 + 5, size.w - 2, 4) 132 | ctx.fillRect(1 - size.w / 2, size.h / 2 - 7, size.w - 2, 3) 133 | // Lights: front 134 | ctx.fillStyle = COLORS.carFrontLights 135 | ctx.fillRect(-size.w / 2, -size.h / 2, 5, 2) 136 | ctx.fillRect(size.w / 2 - 5, -size.h / 2, 5, 2) 137 | // Lights: back 138 | ctx.fillStyle = COLORS.carBackLights 139 | ctx.fillRect(-size.w / 2, size.h / 2 - 2, 5, 2) 140 | ctx.fillRect(size.w / 2 - 5, size.h / 2 - 2, 5, 2) 141 | } 142 | ) 143 | 144 | // Add cars 145 | const CAR_COUNT = 1 146 | const STEERING_DIRECTIONS = [0, 90, 180, -90] 147 | 148 | for (var i = 0; i < CAR_COUNT; i++) { 149 | const startPoint = getRandomFromArray(STREET_GRID) 150 | 151 | const car = ocanvas.display.car({ 152 | x: percentToPixel(i === 0 ? 52.5 : startPoint.x + 2.5), 153 | y: percentToPixel(i === 0 ? 70.0 : startPoint.y + 2.5), 154 | speed: 1.00, 155 | rotation: i === 0 ? 0 : getRandomFromArray(STEERING_DIRECTIONS) 156 | }) 157 | 158 | ocanvas.addChild(car) 159 | allObjects.push(car) 160 | 161 | setInterval(function () { 162 | car.steerTo(getRandomFromArray(STEERING_DIRECTIONS)) 163 | }, 164 | 3000) 165 | }; 166 | } 167 | 168 | const updateCanvas = function (canvas, context, frameCount) { 169 | for (var i in allObjects) { 170 | allObjects[i].update() 171 | } 172 | ocanvas.draw.redraw() 173 | } 174 | -------------------------------------------------------------------------------- /08-p5js/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Example 08: p5.js 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /08-p5js/script.js: -------------------------------------------------------------------------------- 1 | var FRAME_RATE = 30; 2 | 3 | var capturer = new CCapture({ 4 | format: /^((?!chrome|android).)*safari/i.test(navigator.userAgent) ? 'gif' : 'webm', 5 | framerate: FRAME_RATE 6 | }); 7 | 8 | function setup() { 9 | createCanvas(540, 540); 10 | frameRate(FRAME_RATE); 11 | } 12 | 13 | var startMillis; 14 | 15 | var x = 0; 16 | 17 | function draw() { 18 | if (frameCount === 1) { 19 | // start the recording on the first frame 20 | // avoids the code freeze which occurs if capturer.start is called in the setup, since v0.9 of p5.js 21 | capturer.start(); 22 | } 23 | 24 | if (startMillis == null) { 25 | startMillis = millis(); 26 | } 27 | var duration = 3000; 28 | 29 | var elapsed = millis() - startMillis; 30 | var t = map(elapsed, 0, duration, 0, 1); 31 | 32 | if (t > 1) { 33 | noLoop(); 34 | console.log('finished recording.'); 35 | capturer.stop(); 36 | capturer.save(); 37 | return; 38 | } 39 | 40 | // ACTUAL DRAW FUNCTIONS HERE: 41 | background(220); 42 | ellipse(50 + x, 50 + x, 80, 80); 43 | x = x + 5; 44 | 45 | console.log('capturing frame'); 46 | capturer.capture(document.getElementById('defaultCanvas0')); 47 | } 48 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2018 Tom Söderlund 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Programmatic Animations 2 | 3 | 🆕 See also: [https://programmatic-animations.tomorroworld.com/](https://programmatic-animations.tomorroworld.com/) (`touch-art`) 4 | 5 | **Make animations with canvas and JavaScript, and export as video.** 6 | 7 | Export as WebM video files* and then use e.g. [VLC Media Player](https://www.videolan.org) to convert WebM to MP4 (File → Convert/Stream, MP4/MOV and MPEG-4 format). 8 | \ 9 | *Not supported in Safari 10 | 11 | Uses [CCapture.js](https://github.com/spite/ccapture.js) for capturing video frames. 12 | 13 | 14 | ## Examples 15 | 16 | 1. [Basic: drawing lines](https://tomsoderlund.github.io/programmatic-animations/01-basics/) 17 | ![Example](01-basics/example.gif) 18 | 2. [Basic physics](https://tomsoderlund.github.io/programmatic-animations/02-basic-physics/) using [Matter.js](http://brm.io/matter-js/) 19 | ![Example](02-basic-physics/example.gif) 20 | 3. [Advanced animation](https://tomsoderlund.github.io/programmatic-animations/03-advanced-animation/) using [oCanvas](http://ocanvas.org) 21 | ![Example](03-advanced-animation/example.gif) 22 | 4. [Mouse position as input](https://tomsoderlund.github.io/programmatic-animations/04-mouse/) 23 | ![Example](04-mouse/example.gif) 24 | 5. [Image data](https://tomsoderlund.github.io/programmatic-animations/05-image-data/) 25 | ![Example](05-image-data/example.gif) 26 | 6. [Image data 2: lines](https://tomsoderlund.github.io/programmatic-animations/06-lines/) 27 | ![Example](06-lines/example.gif) 28 | 7. [City cars](https://tomsoderlund.github.io/programmatic-animations/07-city-cars) 29 | ![Example](07-city-cars/example.png) 30 | 8. [Using P5.js](https://tomsoderlund.github.io/programmatic-animations/08-p5js) 31 | 32 | 33 | ## Share your work! 34 | 35 | If you make your own animations based on these examples, please share with the hashtag [**#programmaticanimations**](https://www.instagram.com/explore/tags/programmaticanimations/). 36 | 37 | 38 | ## Learn more 39 | 40 | - For more information on [how to draw with HTML Canvas, see this example](https://codepen.io/tomsoderlund/pen/Gdjrdx). 41 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "programmatic-animations", 3 | "version": "0.2.0", 4 | "description": "Make animations with JavaScript and export as video", 5 | "author": "Tom Söderlund", 6 | "license": "MIT", 7 | "scripts": { 8 | "lint": "standard", 9 | "fix": "standard --fix" 10 | }, 11 | "dependencies": { 12 | "ccapture.js": "^1.1.0", 13 | "matter-js": "^0.14.1", 14 | "ocanvas": "^2.9.1", 15 | "tinycolor2": "^1.4.1" 16 | }, 17 | "devDependencies": { 18 | "standard": "^14.3.1" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/programmatic-animations.js: -------------------------------------------------------------------------------- 1 | const FRAME_RATE = 30 2 | const CANVAS_SIZE = 540 3 | 4 | // ----- UI helpers ----- 5 | 6 | const toggleElementDisabled = function (elementId) { 7 | document.getElementById(elementId).getAttribute('disabled') !== null 8 | ? document.getElementById(elementId).removeAttribute('disabled') 9 | : document.getElementById(elementId).setAttribute('disabled', true) 10 | } 11 | 12 | const updateStatus = function () { 13 | frameCount++ 14 | document.getElementById('status').innerHTML = 'Rendering ' + frameCount + ' (' + (frameCount / FRAME_RATE + '').substring(0, 4) + ' s)' 15 | } 16 | 17 | // ----- Rendering and Capturing ----- 18 | 19 | let isRendering = false 20 | let frameCount = 0 21 | let canvas 22 | 23 | const capturer = new CCapture({ 24 | // WebM but GIF for Safari 25 | format: /^((?!chrome|android).)*safari/i.test(navigator.userAgent) ? 'gif' : 'webm', 26 | framerate: FRAME_RATE 27 | // verbose: true, 28 | }) 29 | 30 | const setCanvasElement = function (elementId) { 31 | canvas = document.getElementById(elementId) 32 | canvas.width = CANVAS_SIZE * 2 33 | canvas.height = CANVAS_SIZE * 2 34 | canvas.style.width = CANVAS_SIZE + 'px' 35 | canvas.style.height = CANVAS_SIZE + 'px' 36 | canvas.getContext('2d').scale(2, 2) // Retina screen 37 | } 38 | 39 | const renderNextFrame = function () { 40 | updateStatus() 41 | // Render frame 42 | updateCanvas(canvas, canvas.getContext('2d'), frameCount) 43 | if (isRendering) requestAnimationFrame(renderNextFrame) 44 | // Capture frame with CCapture.js 45 | capturer.capture(canvas) 46 | } 47 | 48 | const percentToPixel = function (percent) { 49 | return percent / 100 * CANVAS_SIZE 50 | } 51 | 52 | const getRandomValue = function (minValue, maxValue) { 53 | return minValue + Math.random() * (maxValue - minValue) 54 | } 55 | 56 | const getRandomFromArray = function (array) { 57 | return array[Math.floor(Math.random() * array.length)] 58 | } 59 | 60 | // ----- Image Data ----- 61 | 62 | const ImagePixels = function (imageUrl, scaleFactor = 1.0, cb) { 63 | const MAX_PIXELS = 500 64 | const imagePixelObject = this 65 | const tempImg = new Image() 66 | tempImg.src = imageUrl 67 | tempImg.onload = function () { 68 | const context = document.createElement('canvas').getContext('2d') 69 | imagePixelObject.imageUrl = imageUrl 70 | imagePixelObject.width = Math.min(Math.round(tempImg.naturalWidth * scaleFactor), MAX_PIXELS) 71 | imagePixelObject.height = Math.min(Math.round(tempImg.naturalHeight * scaleFactor), MAX_PIXELS) 72 | context.drawImage(tempImg, 0, 0, imagePixelObject.width, imagePixelObject.height) 73 | imagePixelObject.pixels = context.getImageData(0, 0, imagePixelObject.width, imagePixelObject.height).data 74 | if (cb) cb() 75 | } 76 | } 77 | ImagePixels.prototype.getPixels = function () { 78 | return this.pixels 79 | } 80 | ImagePixels.prototype.getPixel = function (x, y) { 81 | const pixelIndex = y * this.width * 4 + x * 4 82 | const pixelValues = this.pixels ? this.pixels.slice(pixelIndex, pixelIndex + 4) : [] 83 | return { 84 | r: pixelValues[0], 85 | g: pixelValues[1], 86 | b: pixelValues[2], 87 | a: pixelValues[3] 88 | } 89 | } 90 | 91 | // ----- Button actions ----- 92 | 93 | const onClickStart = function () { 94 | isRendering = true 95 | frameCount = 0 96 | toggleElementDisabled('buttonPause') 97 | toggleElementDisabled('buttonDownload') 98 | setCanvasElement('canvasElement') 99 | initCanvas(canvas, canvas.getContext('2d')) 100 | capturer.start() 101 | renderNextFrame() 102 | } 103 | 104 | const onClickPause = function () { 105 | isRendering = !isRendering 106 | if (isRendering) { 107 | capturer.start() 108 | renderNextFrame() 109 | } else { 110 | capturer.stop() 111 | } 112 | } 113 | 114 | const onClickDownload = function () { 115 | isRendering = false 116 | capturer.stop() 117 | capturer.save() 118 | } 119 | -------------------------------------------------------------------------------- /src/styles.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: sans-serif; 3 | background-color: #eee; 4 | margin: 8px; 5 | } 6 | 7 | canvas { 8 | background-color: white; 9 | } 10 | 11 | .buttons { 12 | display: flex; 13 | flex-direction: row; 14 | justify-content: space-between; 15 | width: 540px; 16 | display: flex; 17 | } 18 | 19 | /* Nice & simple: Button - http://codepen.io/tomsoderlund/pen/qqyzqp */ 20 | button { 21 | background-color: dodgerblue; 22 | color: white; 23 | border-radius: 0.1em; 24 | border: none; 25 | box-sizing: border-box; 26 | cursor: pointer; 27 | font-family: inherit; 28 | font-size: inherit; 29 | font-weight: bold; 30 | outline: none; 31 | padding: 0.6em; 32 | margin: 0 0.1em 0.2em; 33 | transition: all 0.2s; 34 | flex: 1; 35 | } 36 | button:hover:not(:disabled) { 37 | opacity: 0.85; 38 | } 39 | button:hover:active { 40 | opacity: 0.7; 41 | transition: all 0.05s; 42 | } 43 | button:disabled { 44 | cursor: initial; 45 | background-color: silver; 46 | } 47 | 48 | #status { 49 | width: 120px; 50 | text-align: center; 51 | } -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0": 6 | version "7.12.13" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" 8 | integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== 9 | dependencies: 10 | "@babel/highlight" "^7.12.13" 11 | 12 | "@babel/helper-validator-identifier@^7.14.0": 13 | version "7.14.0" 14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288" 15 | integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A== 16 | 17 | "@babel/highlight@^7.12.13": 18 | version "7.14.0" 19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.0.tgz#3197e375711ef6bf834e67d0daec88e4f46113cf" 20 | integrity sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg== 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.14.0" 23 | chalk "^2.0.0" 24 | js-tokens "^4.0.0" 25 | 26 | acorn-jsx@^5.2.0: 27 | version "5.3.1" 28 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" 29 | integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== 30 | 31 | acorn@^7.1.1: 32 | version "7.4.1" 33 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" 34 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== 35 | 36 | ajv@^6.10.0, ajv@^6.10.2: 37 | version "6.12.6" 38 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 39 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 40 | dependencies: 41 | fast-deep-equal "^3.1.1" 42 | fast-json-stable-stringify "^2.0.0" 43 | json-schema-traverse "^0.4.1" 44 | uri-js "^4.2.2" 45 | 46 | ansi-escapes@^4.2.1: 47 | version "4.3.2" 48 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" 49 | integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== 50 | dependencies: 51 | type-fest "^0.21.3" 52 | 53 | ansi-regex@^4.1.0: 54 | version "4.1.0" 55 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 56 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 57 | 58 | ansi-regex@^5.0.0: 59 | version "5.0.0" 60 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" 61 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== 62 | 63 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 64 | version "3.2.1" 65 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 66 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 67 | dependencies: 68 | color-convert "^1.9.0" 69 | 70 | ansi-styles@^4.1.0: 71 | version "4.3.0" 72 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 73 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 74 | dependencies: 75 | color-convert "^2.0.1" 76 | 77 | argparse@^1.0.7: 78 | version "1.0.10" 79 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 80 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 81 | dependencies: 82 | sprintf-js "~1.0.2" 83 | 84 | array-includes@^3.0.3, array-includes@^3.1.1: 85 | version "3.1.3" 86 | resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" 87 | integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== 88 | dependencies: 89 | call-bind "^1.0.2" 90 | define-properties "^1.1.3" 91 | es-abstract "^1.18.0-next.2" 92 | get-intrinsic "^1.1.1" 93 | is-string "^1.0.5" 94 | 95 | astral-regex@^1.0.0: 96 | version "1.0.0" 97 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" 98 | integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== 99 | 100 | balanced-match@^1.0.0: 101 | version "1.0.2" 102 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 103 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 104 | 105 | brace-expansion@^1.1.7: 106 | version "1.1.11" 107 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 108 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 109 | dependencies: 110 | balanced-match "^1.0.0" 111 | concat-map "0.0.1" 112 | 113 | call-bind@^1.0.0, call-bind@^1.0.2: 114 | version "1.0.2" 115 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" 116 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 117 | dependencies: 118 | function-bind "^1.1.1" 119 | get-intrinsic "^1.0.2" 120 | 121 | callsites@^3.0.0: 122 | version "3.1.0" 123 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 124 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 125 | 126 | ccapture.js@^1.1.0: 127 | version "1.1.0" 128 | resolved "https://registry.yarnpkg.com/ccapture.js/-/ccapture.js-1.1.0.tgz#ac4030e8b43847e305242d784abf284d2313beff" 129 | 130 | chalk@^2.0.0, chalk@^2.1.0: 131 | version "2.4.2" 132 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 133 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 134 | dependencies: 135 | ansi-styles "^3.2.1" 136 | escape-string-regexp "^1.0.5" 137 | supports-color "^5.3.0" 138 | 139 | chalk@^4.1.0: 140 | version "4.1.1" 141 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" 142 | integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== 143 | dependencies: 144 | ansi-styles "^4.1.0" 145 | supports-color "^7.1.0" 146 | 147 | chardet@^0.7.0: 148 | version "0.7.0" 149 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" 150 | integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== 151 | 152 | cli-cursor@^3.1.0: 153 | version "3.1.0" 154 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" 155 | integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== 156 | dependencies: 157 | restore-cursor "^3.1.0" 158 | 159 | cli-width@^3.0.0: 160 | version "3.0.0" 161 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" 162 | integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== 163 | 164 | color-convert@^1.9.0: 165 | version "1.9.3" 166 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 167 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 168 | dependencies: 169 | color-name "1.1.3" 170 | 171 | color-convert@^2.0.1: 172 | version "2.0.1" 173 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 174 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 175 | dependencies: 176 | color-name "~1.1.4" 177 | 178 | color-name@1.1.3: 179 | version "1.1.3" 180 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 181 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 182 | 183 | color-name@~1.1.4: 184 | version "1.1.4" 185 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 186 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 187 | 188 | concat-map@0.0.1: 189 | version "0.0.1" 190 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 191 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 192 | 193 | contains-path@^0.1.0: 194 | version "0.1.0" 195 | resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" 196 | integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= 197 | 198 | cross-spawn@^6.0.5: 199 | version "6.0.5" 200 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 201 | integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== 202 | dependencies: 203 | nice-try "^1.0.4" 204 | path-key "^2.0.1" 205 | semver "^5.5.0" 206 | shebang-command "^1.2.0" 207 | which "^1.2.9" 208 | 209 | debug-log@^1.0.0: 210 | version "1.0.1" 211 | resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" 212 | integrity sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8= 213 | 214 | debug@^2.6.9: 215 | version "2.6.9" 216 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 217 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 218 | dependencies: 219 | ms "2.0.0" 220 | 221 | debug@^3.2.7: 222 | version "3.2.7" 223 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" 224 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 225 | dependencies: 226 | ms "^2.1.1" 227 | 228 | debug@^4.0.1: 229 | version "4.3.1" 230 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" 231 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== 232 | dependencies: 233 | ms "2.1.2" 234 | 235 | deep-is@~0.1.3: 236 | version "0.1.3" 237 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 238 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 239 | 240 | define-properties@^1.1.3: 241 | version "1.1.3" 242 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 243 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 244 | dependencies: 245 | object-keys "^1.0.12" 246 | 247 | deglob@^4.0.1: 248 | version "4.0.1" 249 | resolved "https://registry.yarnpkg.com/deglob/-/deglob-4.0.1.tgz#0685c6383992fd6009be10653a2b1116696fad55" 250 | integrity sha512-/g+RDZ7yf2HvoW+E5Cy+K94YhgcFgr6C8LuHZD1O5HoNPkf3KY6RfXJ0DBGlB/NkLi5gml+G9zqRzk9S0mHZCg== 251 | dependencies: 252 | find-root "^1.0.0" 253 | glob "^7.0.5" 254 | ignore "^5.0.0" 255 | pkg-config "^1.1.0" 256 | run-parallel "^1.1.2" 257 | uniq "^1.0.1" 258 | 259 | doctrine@1.5.0: 260 | version "1.5.0" 261 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" 262 | integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= 263 | dependencies: 264 | esutils "^2.0.2" 265 | isarray "^1.0.0" 266 | 267 | doctrine@^2.1.0: 268 | version "2.1.0" 269 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" 270 | integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== 271 | dependencies: 272 | esutils "^2.0.2" 273 | 274 | doctrine@^3.0.0: 275 | version "3.0.0" 276 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 277 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 278 | dependencies: 279 | esutils "^2.0.2" 280 | 281 | emoji-regex@^7.0.1: 282 | version "7.0.3" 283 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 284 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 285 | 286 | emoji-regex@^8.0.0: 287 | version "8.0.0" 288 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 289 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 290 | 291 | error-ex@^1.2.0, error-ex@^1.3.1: 292 | version "1.3.2" 293 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 294 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 295 | dependencies: 296 | is-arrayish "^0.2.1" 297 | 298 | es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: 299 | version "1.18.0" 300 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" 301 | integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== 302 | dependencies: 303 | call-bind "^1.0.2" 304 | es-to-primitive "^1.2.1" 305 | function-bind "^1.1.1" 306 | get-intrinsic "^1.1.1" 307 | has "^1.0.3" 308 | has-symbols "^1.0.2" 309 | is-callable "^1.2.3" 310 | is-negative-zero "^2.0.1" 311 | is-regex "^1.1.2" 312 | is-string "^1.0.5" 313 | object-inspect "^1.9.0" 314 | object-keys "^1.1.1" 315 | object.assign "^4.1.2" 316 | string.prototype.trimend "^1.0.4" 317 | string.prototype.trimstart "^1.0.4" 318 | unbox-primitive "^1.0.0" 319 | 320 | es-to-primitive@^1.2.1: 321 | version "1.2.1" 322 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" 323 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 324 | dependencies: 325 | is-callable "^1.1.4" 326 | is-date-object "^1.0.1" 327 | is-symbol "^1.0.2" 328 | 329 | escape-string-regexp@^1.0.5: 330 | version "1.0.5" 331 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 332 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 333 | 334 | eslint-config-standard-jsx@8.1.0: 335 | version "8.1.0" 336 | resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-8.1.0.tgz#314c62a0e6f51f75547f89aade059bec140edfc7" 337 | integrity sha512-ULVC8qH8qCqbU792ZOO6DaiaZyHNS/5CZt3hKqHkEhVlhPEPN3nfBqqxJCyp59XrjIBZPu1chMYe9T2DXZ7TMw== 338 | 339 | eslint-config-standard@14.1.1: 340 | version "14.1.1" 341 | resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-14.1.1.tgz#830a8e44e7aef7de67464979ad06b406026c56ea" 342 | integrity sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg== 343 | 344 | eslint-import-resolver-node@^0.3.2: 345 | version "0.3.4" 346 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" 347 | integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== 348 | dependencies: 349 | debug "^2.6.9" 350 | resolve "^1.13.1" 351 | 352 | eslint-module-utils@^2.4.0: 353 | version "2.6.1" 354 | resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz#b51be1e473dd0de1c5ea638e22429c2490ea8233" 355 | integrity sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A== 356 | dependencies: 357 | debug "^3.2.7" 358 | pkg-dir "^2.0.0" 359 | 360 | eslint-plugin-es@^2.0.0: 361 | version "2.0.0" 362 | resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-2.0.0.tgz#0f5f5da5f18aa21989feebe8a73eadefb3432976" 363 | integrity sha512-f6fceVtg27BR02EYnBhgWLFQfK6bN4Ll0nQFrBHOlCsAyxeZkn0NHns5O0YZOPrV1B3ramd6cgFwaoFLcSkwEQ== 364 | dependencies: 365 | eslint-utils "^1.4.2" 366 | regexpp "^3.0.0" 367 | 368 | eslint-plugin-import@~2.18.0: 369 | version "2.18.2" 370 | resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz#02f1180b90b077b33d447a17a2326ceb400aceb6" 371 | integrity sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ== 372 | dependencies: 373 | array-includes "^3.0.3" 374 | contains-path "^0.1.0" 375 | debug "^2.6.9" 376 | doctrine "1.5.0" 377 | eslint-import-resolver-node "^0.3.2" 378 | eslint-module-utils "^2.4.0" 379 | has "^1.0.3" 380 | minimatch "^3.0.4" 381 | object.values "^1.1.0" 382 | read-pkg-up "^2.0.0" 383 | resolve "^1.11.0" 384 | 385 | eslint-plugin-node@~10.0.0: 386 | version "10.0.0" 387 | resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-10.0.0.tgz#fd1adbc7a300cf7eb6ac55cf4b0b6fc6e577f5a6" 388 | integrity sha512-1CSyM/QCjs6PXaT18+zuAXsjXGIGo5Rw630rSKwokSs2jrYURQc4R5JZpoanNCqwNmepg+0eZ9L7YiRUJb8jiQ== 389 | dependencies: 390 | eslint-plugin-es "^2.0.0" 391 | eslint-utils "^1.4.2" 392 | ignore "^5.1.1" 393 | minimatch "^3.0.4" 394 | resolve "^1.10.1" 395 | semver "^6.1.0" 396 | 397 | eslint-plugin-promise@~4.2.1: 398 | version "4.2.1" 399 | resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a" 400 | integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw== 401 | 402 | eslint-plugin-react@~7.14.2: 403 | version "7.14.3" 404 | resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.14.3.tgz#911030dd7e98ba49e1b2208599571846a66bdf13" 405 | integrity sha512-EzdyyBWC4Uz2hPYBiEJrKCUi2Fn+BJ9B/pJQcjw5X+x/H2Nm59S4MJIvL4O5NEE0+WbnQwEBxWY03oUk+Bc3FA== 406 | dependencies: 407 | array-includes "^3.0.3" 408 | doctrine "^2.1.0" 409 | has "^1.0.3" 410 | jsx-ast-utils "^2.1.0" 411 | object.entries "^1.1.0" 412 | object.fromentries "^2.0.0" 413 | object.values "^1.1.0" 414 | prop-types "^15.7.2" 415 | resolve "^1.10.1" 416 | 417 | eslint-plugin-standard@~4.0.0: 418 | version "4.0.2" 419 | resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.0.2.tgz#021211a9f077e63a6847e7bb9ab4247327ac8e0c" 420 | integrity sha512-nKptN8l7jksXkwFk++PhJB3cCDTcXOEyhISIN86Ue2feJ1LFyY3PrY3/xT2keXlJSY5bpmbiTG0f885/YKAvTA== 421 | 422 | eslint-scope@^5.0.0: 423 | version "5.1.1" 424 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 425 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 426 | dependencies: 427 | esrecurse "^4.3.0" 428 | estraverse "^4.1.1" 429 | 430 | eslint-utils@^1.4.2, eslint-utils@^1.4.3: 431 | version "1.4.3" 432 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" 433 | integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== 434 | dependencies: 435 | eslint-visitor-keys "^1.1.0" 436 | 437 | eslint-visitor-keys@^1.1.0: 438 | version "1.3.0" 439 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" 440 | integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== 441 | 442 | eslint@~6.8.0: 443 | version "6.8.0" 444 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" 445 | integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== 446 | dependencies: 447 | "@babel/code-frame" "^7.0.0" 448 | ajv "^6.10.0" 449 | chalk "^2.1.0" 450 | cross-spawn "^6.0.5" 451 | debug "^4.0.1" 452 | doctrine "^3.0.0" 453 | eslint-scope "^5.0.0" 454 | eslint-utils "^1.4.3" 455 | eslint-visitor-keys "^1.1.0" 456 | espree "^6.1.2" 457 | esquery "^1.0.1" 458 | esutils "^2.0.2" 459 | file-entry-cache "^5.0.1" 460 | functional-red-black-tree "^1.0.1" 461 | glob-parent "^5.0.0" 462 | globals "^12.1.0" 463 | ignore "^4.0.6" 464 | import-fresh "^3.0.0" 465 | imurmurhash "^0.1.4" 466 | inquirer "^7.0.0" 467 | is-glob "^4.0.0" 468 | js-yaml "^3.13.1" 469 | json-stable-stringify-without-jsonify "^1.0.1" 470 | levn "^0.3.0" 471 | lodash "^4.17.14" 472 | minimatch "^3.0.4" 473 | mkdirp "^0.5.1" 474 | natural-compare "^1.4.0" 475 | optionator "^0.8.3" 476 | progress "^2.0.0" 477 | regexpp "^2.0.1" 478 | semver "^6.1.2" 479 | strip-ansi "^5.2.0" 480 | strip-json-comments "^3.0.1" 481 | table "^5.2.3" 482 | text-table "^0.2.0" 483 | v8-compile-cache "^2.0.3" 484 | 485 | espree@^6.1.2: 486 | version "6.2.1" 487 | resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" 488 | integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== 489 | dependencies: 490 | acorn "^7.1.1" 491 | acorn-jsx "^5.2.0" 492 | eslint-visitor-keys "^1.1.0" 493 | 494 | esprima@^4.0.0: 495 | version "4.0.1" 496 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 497 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 498 | 499 | esquery@^1.0.1: 500 | version "1.4.0" 501 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" 502 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== 503 | dependencies: 504 | estraverse "^5.1.0" 505 | 506 | esrecurse@^4.3.0: 507 | version "4.3.0" 508 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 509 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 510 | dependencies: 511 | estraverse "^5.2.0" 512 | 513 | estraverse@^4.1.1: 514 | version "4.3.0" 515 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 516 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 517 | 518 | estraverse@^5.1.0, estraverse@^5.2.0: 519 | version "5.2.0" 520 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" 521 | integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== 522 | 523 | esutils@^2.0.2: 524 | version "2.0.3" 525 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 526 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 527 | 528 | external-editor@^3.0.3: 529 | version "3.1.0" 530 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" 531 | integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== 532 | dependencies: 533 | chardet "^0.7.0" 534 | iconv-lite "^0.4.24" 535 | tmp "^0.0.33" 536 | 537 | fast-deep-equal@^3.1.1: 538 | version "3.1.3" 539 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 540 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 541 | 542 | fast-json-stable-stringify@^2.0.0: 543 | version "2.1.0" 544 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 545 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 546 | 547 | fast-levenshtein@~2.0.6: 548 | version "2.0.6" 549 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 550 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 551 | 552 | figures@^3.0.0: 553 | version "3.2.0" 554 | resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" 555 | integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== 556 | dependencies: 557 | escape-string-regexp "^1.0.5" 558 | 559 | file-entry-cache@^5.0.1: 560 | version "5.0.1" 561 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" 562 | integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== 563 | dependencies: 564 | flat-cache "^2.0.1" 565 | 566 | find-root@^1.0.0: 567 | version "1.1.0" 568 | resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" 569 | integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== 570 | 571 | find-up@^2.0.0, find-up@^2.1.0: 572 | version "2.1.0" 573 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" 574 | integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= 575 | dependencies: 576 | locate-path "^2.0.0" 577 | 578 | find-up@^3.0.0: 579 | version "3.0.0" 580 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 581 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== 582 | dependencies: 583 | locate-path "^3.0.0" 584 | 585 | flat-cache@^2.0.1: 586 | version "2.0.1" 587 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" 588 | integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== 589 | dependencies: 590 | flatted "^2.0.0" 591 | rimraf "2.6.3" 592 | write "1.0.3" 593 | 594 | flatted@^2.0.0: 595 | version "2.0.2" 596 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" 597 | integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== 598 | 599 | fs.realpath@^1.0.0: 600 | version "1.0.0" 601 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 602 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 603 | 604 | function-bind@^1.1.1: 605 | version "1.1.1" 606 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 607 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 608 | 609 | functional-red-black-tree@^1.0.1: 610 | version "1.0.1" 611 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 612 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 613 | 614 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: 615 | version "1.1.1" 616 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" 617 | integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== 618 | dependencies: 619 | function-bind "^1.1.1" 620 | has "^1.0.3" 621 | has-symbols "^1.0.1" 622 | 623 | get-stdin@^7.0.0: 624 | version "7.0.0" 625 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" 626 | integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== 627 | 628 | glob-parent@^5.0.0: 629 | version "5.1.2" 630 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 631 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 632 | dependencies: 633 | is-glob "^4.0.1" 634 | 635 | glob@^7.0.5, glob@^7.1.3: 636 | version "7.1.7" 637 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" 638 | integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== 639 | dependencies: 640 | fs.realpath "^1.0.0" 641 | inflight "^1.0.4" 642 | inherits "2" 643 | minimatch "^3.0.4" 644 | once "^1.3.0" 645 | path-is-absolute "^1.0.0" 646 | 647 | globals@^12.1.0: 648 | version "12.4.0" 649 | resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" 650 | integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== 651 | dependencies: 652 | type-fest "^0.8.1" 653 | 654 | graceful-fs@^4.1.15, graceful-fs@^4.1.2: 655 | version "4.2.6" 656 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" 657 | integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== 658 | 659 | has-bigints@^1.0.1: 660 | version "1.0.1" 661 | resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" 662 | integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== 663 | 664 | has-flag@^3.0.0: 665 | version "3.0.0" 666 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 667 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 668 | 669 | has-flag@^4.0.0: 670 | version "4.0.0" 671 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 672 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 673 | 674 | has-symbols@^1.0.1, has-symbols@^1.0.2: 675 | version "1.0.2" 676 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" 677 | integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== 678 | 679 | has@^1.0.3: 680 | version "1.0.3" 681 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 682 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 683 | dependencies: 684 | function-bind "^1.1.1" 685 | 686 | hosted-git-info@^2.1.4: 687 | version "2.8.9" 688 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" 689 | integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== 690 | 691 | iconv-lite@^0.4.24: 692 | version "0.4.24" 693 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 694 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 695 | dependencies: 696 | safer-buffer ">= 2.1.2 < 3" 697 | 698 | ignore@^4.0.6: 699 | version "4.0.6" 700 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" 701 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== 702 | 703 | ignore@^5.0.0, ignore@^5.1.1: 704 | version "5.1.8" 705 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" 706 | integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== 707 | 708 | import-fresh@^3.0.0: 709 | version "3.3.0" 710 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 711 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 712 | dependencies: 713 | parent-module "^1.0.0" 714 | resolve-from "^4.0.0" 715 | 716 | imurmurhash@^0.1.4: 717 | version "0.1.4" 718 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 719 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 720 | 721 | inflight@^1.0.4: 722 | version "1.0.6" 723 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 724 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 725 | dependencies: 726 | once "^1.3.0" 727 | wrappy "1" 728 | 729 | inherits@2: 730 | version "2.0.4" 731 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 732 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 733 | 734 | inquirer@^7.0.0: 735 | version "7.3.3" 736 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" 737 | integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== 738 | dependencies: 739 | ansi-escapes "^4.2.1" 740 | chalk "^4.1.0" 741 | cli-cursor "^3.1.0" 742 | cli-width "^3.0.0" 743 | external-editor "^3.0.3" 744 | figures "^3.0.0" 745 | lodash "^4.17.19" 746 | mute-stream "0.0.8" 747 | run-async "^2.4.0" 748 | rxjs "^6.6.0" 749 | string-width "^4.1.0" 750 | strip-ansi "^6.0.0" 751 | through "^2.3.6" 752 | 753 | is-arrayish@^0.2.1: 754 | version "0.2.1" 755 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 756 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 757 | 758 | is-bigint@^1.0.1: 759 | version "1.0.2" 760 | resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" 761 | integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== 762 | 763 | is-boolean-object@^1.1.0: 764 | version "1.1.1" 765 | resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8" 766 | integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== 767 | dependencies: 768 | call-bind "^1.0.2" 769 | 770 | is-callable@^1.1.4, is-callable@^1.2.3: 771 | version "1.2.3" 772 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" 773 | integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== 774 | 775 | is-core-module@^2.2.0: 776 | version "2.4.0" 777 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" 778 | integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== 779 | dependencies: 780 | has "^1.0.3" 781 | 782 | is-date-object@^1.0.1: 783 | version "1.0.4" 784 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5" 785 | integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A== 786 | 787 | is-extglob@^2.1.1: 788 | version "2.1.1" 789 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 790 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 791 | 792 | is-fullwidth-code-point@^2.0.0: 793 | version "2.0.0" 794 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 795 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 796 | 797 | is-fullwidth-code-point@^3.0.0: 798 | version "3.0.0" 799 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 800 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 801 | 802 | is-glob@^4.0.0, is-glob@^4.0.1: 803 | version "4.0.1" 804 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 805 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 806 | dependencies: 807 | is-extglob "^2.1.1" 808 | 809 | is-negative-zero@^2.0.1: 810 | version "2.0.1" 811 | resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" 812 | integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== 813 | 814 | is-number-object@^1.0.4: 815 | version "1.0.5" 816 | resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" 817 | integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== 818 | 819 | is-regex@^1.1.2: 820 | version "1.1.3" 821 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" 822 | integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== 823 | dependencies: 824 | call-bind "^1.0.2" 825 | has-symbols "^1.0.2" 826 | 827 | is-string@^1.0.5: 828 | version "1.0.6" 829 | resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" 830 | integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== 831 | 832 | is-symbol@^1.0.2, is-symbol@^1.0.3: 833 | version "1.0.4" 834 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" 835 | integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== 836 | dependencies: 837 | has-symbols "^1.0.2" 838 | 839 | isarray@^1.0.0: 840 | version "1.0.0" 841 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 842 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 843 | 844 | isexe@^2.0.0: 845 | version "2.0.0" 846 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 847 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 848 | 849 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 850 | version "4.0.0" 851 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 852 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 853 | 854 | js-yaml@^3.13.1: 855 | version "3.14.1" 856 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" 857 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== 858 | dependencies: 859 | argparse "^1.0.7" 860 | esprima "^4.0.0" 861 | 862 | json-parse-better-errors@^1.0.1: 863 | version "1.0.2" 864 | resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" 865 | integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== 866 | 867 | json-schema-traverse@^0.4.1: 868 | version "0.4.1" 869 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 870 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 871 | 872 | json-stable-stringify-without-jsonify@^1.0.1: 873 | version "1.0.1" 874 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 875 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 876 | 877 | jsx-ast-utils@^2.1.0: 878 | version "2.4.1" 879 | resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz#1114a4c1209481db06c690c2b4f488cc665f657e" 880 | integrity sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w== 881 | dependencies: 882 | array-includes "^3.1.1" 883 | object.assign "^4.1.0" 884 | 885 | levn@^0.3.0, levn@~0.3.0: 886 | version "0.3.0" 887 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 888 | integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= 889 | dependencies: 890 | prelude-ls "~1.1.2" 891 | type-check "~0.3.2" 892 | 893 | load-json-file@^2.0.0: 894 | version "2.0.0" 895 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" 896 | integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= 897 | dependencies: 898 | graceful-fs "^4.1.2" 899 | parse-json "^2.2.0" 900 | pify "^2.0.0" 901 | strip-bom "^3.0.0" 902 | 903 | load-json-file@^5.2.0: 904 | version "5.3.0" 905 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3" 906 | integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== 907 | dependencies: 908 | graceful-fs "^4.1.15" 909 | parse-json "^4.0.0" 910 | pify "^4.0.1" 911 | strip-bom "^3.0.0" 912 | type-fest "^0.3.0" 913 | 914 | locate-path@^2.0.0: 915 | version "2.0.0" 916 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" 917 | integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= 918 | dependencies: 919 | p-locate "^2.0.0" 920 | path-exists "^3.0.0" 921 | 922 | locate-path@^3.0.0: 923 | version "3.0.0" 924 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 925 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== 926 | dependencies: 927 | p-locate "^3.0.0" 928 | path-exists "^3.0.0" 929 | 930 | lodash@^4.17.14, lodash@^4.17.19: 931 | version "4.17.21" 932 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 933 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 934 | 935 | loose-envify@^1.4.0: 936 | version "1.4.0" 937 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 938 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 939 | dependencies: 940 | js-tokens "^3.0.0 || ^4.0.0" 941 | 942 | matter-js@^0.14.1: 943 | version "0.14.1" 944 | resolved "https://registry.yarnpkg.com/matter-js/-/matter-js-0.14.1.tgz#71d967f2de858b1616bfccc1002ab38aab9e350a" 945 | 946 | mimic-fn@^2.1.0: 947 | version "2.1.0" 948 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 949 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 950 | 951 | minimatch@^3.0.4: 952 | version "3.0.4" 953 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 954 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 955 | dependencies: 956 | brace-expansion "^1.1.7" 957 | 958 | minimist@^1.2.5: 959 | version "1.2.5" 960 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 961 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 962 | 963 | mkdirp@^0.5.1: 964 | version "0.5.5" 965 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" 966 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== 967 | dependencies: 968 | minimist "^1.2.5" 969 | 970 | ms@2.0.0: 971 | version "2.0.0" 972 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 973 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 974 | 975 | ms@2.1.2: 976 | version "2.1.2" 977 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 978 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 979 | 980 | ms@^2.1.1: 981 | version "2.1.3" 982 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 983 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 984 | 985 | mute-stream@0.0.8: 986 | version "0.0.8" 987 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" 988 | integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== 989 | 990 | natural-compare@^1.4.0: 991 | version "1.4.0" 992 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 993 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 994 | 995 | nice-try@^1.0.4: 996 | version "1.0.5" 997 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 998 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== 999 | 1000 | normalize-package-data@^2.3.2: 1001 | version "2.5.0" 1002 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" 1003 | integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== 1004 | dependencies: 1005 | hosted-git-info "^2.1.4" 1006 | resolve "^1.10.0" 1007 | semver "2 || 3 || 4 || 5" 1008 | validate-npm-package-license "^3.0.1" 1009 | 1010 | object-assign@^4.1.1: 1011 | version "4.1.1" 1012 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1013 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 1014 | 1015 | object-inspect@^1.9.0: 1016 | version "1.10.3" 1017 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" 1018 | integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw== 1019 | 1020 | object-keys@^1.0.12, object-keys@^1.1.1: 1021 | version "1.1.1" 1022 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 1023 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 1024 | 1025 | object.assign@^4.1.0, object.assign@^4.1.2: 1026 | version "4.1.2" 1027 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" 1028 | integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== 1029 | dependencies: 1030 | call-bind "^1.0.0" 1031 | define-properties "^1.1.3" 1032 | has-symbols "^1.0.1" 1033 | object-keys "^1.1.1" 1034 | 1035 | object.entries@^1.1.0: 1036 | version "1.1.3" 1037 | resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.3.tgz#c601c7f168b62374541a07ddbd3e2d5e4f7711a6" 1038 | integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg== 1039 | dependencies: 1040 | call-bind "^1.0.0" 1041 | define-properties "^1.1.3" 1042 | es-abstract "^1.18.0-next.1" 1043 | has "^1.0.3" 1044 | 1045 | object.fromentries@^2.0.0: 1046 | version "2.0.4" 1047 | resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8" 1048 | integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ== 1049 | dependencies: 1050 | call-bind "^1.0.2" 1051 | define-properties "^1.1.3" 1052 | es-abstract "^1.18.0-next.2" 1053 | has "^1.0.3" 1054 | 1055 | object.values@^1.1.0: 1056 | version "1.1.3" 1057 | resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.3.tgz#eaa8b1e17589f02f698db093f7c62ee1699742ee" 1058 | integrity sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw== 1059 | dependencies: 1060 | call-bind "^1.0.2" 1061 | define-properties "^1.1.3" 1062 | es-abstract "^1.18.0-next.2" 1063 | has "^1.0.3" 1064 | 1065 | ocanvas@^2.9.1: 1066 | version "2.9.1" 1067 | resolved "https://registry.yarnpkg.com/ocanvas/-/ocanvas-2.9.1.tgz#7c1b08d8effc1dee2a54bd80bff3874911aa90ed" 1068 | 1069 | once@^1.3.0: 1070 | version "1.4.0" 1071 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1072 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1073 | dependencies: 1074 | wrappy "1" 1075 | 1076 | onetime@^5.1.0: 1077 | version "5.1.2" 1078 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" 1079 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== 1080 | dependencies: 1081 | mimic-fn "^2.1.0" 1082 | 1083 | optionator@^0.8.3: 1084 | version "0.8.3" 1085 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" 1086 | integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== 1087 | dependencies: 1088 | deep-is "~0.1.3" 1089 | fast-levenshtein "~2.0.6" 1090 | levn "~0.3.0" 1091 | prelude-ls "~1.1.2" 1092 | type-check "~0.3.2" 1093 | word-wrap "~1.2.3" 1094 | 1095 | os-tmpdir@~1.0.2: 1096 | version "1.0.2" 1097 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1098 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= 1099 | 1100 | p-limit@^1.1.0: 1101 | version "1.3.0" 1102 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" 1103 | integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== 1104 | dependencies: 1105 | p-try "^1.0.0" 1106 | 1107 | p-limit@^2.0.0: 1108 | version "2.3.0" 1109 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 1110 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 1111 | dependencies: 1112 | p-try "^2.0.0" 1113 | 1114 | p-locate@^2.0.0: 1115 | version "2.0.0" 1116 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" 1117 | integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= 1118 | dependencies: 1119 | p-limit "^1.1.0" 1120 | 1121 | p-locate@^3.0.0: 1122 | version "3.0.0" 1123 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 1124 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== 1125 | dependencies: 1126 | p-limit "^2.0.0" 1127 | 1128 | p-try@^1.0.0: 1129 | version "1.0.0" 1130 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" 1131 | integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= 1132 | 1133 | p-try@^2.0.0: 1134 | version "2.2.0" 1135 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1136 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1137 | 1138 | parent-module@^1.0.0: 1139 | version "1.0.1" 1140 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1141 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1142 | dependencies: 1143 | callsites "^3.0.0" 1144 | 1145 | parse-json@^2.2.0: 1146 | version "2.2.0" 1147 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 1148 | integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= 1149 | dependencies: 1150 | error-ex "^1.2.0" 1151 | 1152 | parse-json@^4.0.0: 1153 | version "4.0.0" 1154 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" 1155 | integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= 1156 | dependencies: 1157 | error-ex "^1.3.1" 1158 | json-parse-better-errors "^1.0.1" 1159 | 1160 | path-exists@^3.0.0: 1161 | version "3.0.0" 1162 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 1163 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 1164 | 1165 | path-is-absolute@^1.0.0: 1166 | version "1.0.1" 1167 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1168 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1169 | 1170 | path-key@^2.0.1: 1171 | version "2.0.1" 1172 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 1173 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= 1174 | 1175 | path-parse@^1.0.6: 1176 | version "1.0.6" 1177 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 1178 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 1179 | 1180 | path-type@^2.0.0: 1181 | version "2.0.0" 1182 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" 1183 | integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= 1184 | dependencies: 1185 | pify "^2.0.0" 1186 | 1187 | pify@^2.0.0: 1188 | version "2.3.0" 1189 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 1190 | integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= 1191 | 1192 | pify@^4.0.1: 1193 | version "4.0.1" 1194 | resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" 1195 | integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== 1196 | 1197 | pkg-conf@^3.1.0: 1198 | version "3.1.0" 1199 | resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-3.1.0.tgz#d9f9c75ea1bae0e77938cde045b276dac7cc69ae" 1200 | integrity sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ== 1201 | dependencies: 1202 | find-up "^3.0.0" 1203 | load-json-file "^5.2.0" 1204 | 1205 | pkg-config@^1.1.0: 1206 | version "1.1.1" 1207 | resolved "https://registry.yarnpkg.com/pkg-config/-/pkg-config-1.1.1.tgz#557ef22d73da3c8837107766c52eadabde298fe4" 1208 | integrity sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q= 1209 | dependencies: 1210 | debug-log "^1.0.0" 1211 | find-root "^1.0.0" 1212 | xtend "^4.0.1" 1213 | 1214 | pkg-dir@^2.0.0: 1215 | version "2.0.0" 1216 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" 1217 | integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= 1218 | dependencies: 1219 | find-up "^2.1.0" 1220 | 1221 | prelude-ls@~1.1.2: 1222 | version "1.1.2" 1223 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 1224 | integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= 1225 | 1226 | progress@^2.0.0: 1227 | version "2.0.3" 1228 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 1229 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 1230 | 1231 | prop-types@^15.7.2: 1232 | version "15.7.2" 1233 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" 1234 | integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== 1235 | dependencies: 1236 | loose-envify "^1.4.0" 1237 | object-assign "^4.1.1" 1238 | react-is "^16.8.1" 1239 | 1240 | punycode@^2.1.0: 1241 | version "2.1.1" 1242 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1243 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1244 | 1245 | queue-microtask@^1.2.2: 1246 | version "1.2.3" 1247 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 1248 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1249 | 1250 | react-is@^16.8.1: 1251 | version "16.13.1" 1252 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" 1253 | integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== 1254 | 1255 | read-pkg-up@^2.0.0: 1256 | version "2.0.0" 1257 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" 1258 | integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= 1259 | dependencies: 1260 | find-up "^2.0.0" 1261 | read-pkg "^2.0.0" 1262 | 1263 | read-pkg@^2.0.0: 1264 | version "2.0.0" 1265 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" 1266 | integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= 1267 | dependencies: 1268 | load-json-file "^2.0.0" 1269 | normalize-package-data "^2.3.2" 1270 | path-type "^2.0.0" 1271 | 1272 | regexpp@^2.0.1: 1273 | version "2.0.1" 1274 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" 1275 | integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== 1276 | 1277 | regexpp@^3.0.0: 1278 | version "3.1.0" 1279 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" 1280 | integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== 1281 | 1282 | resolve-from@^4.0.0: 1283 | version "4.0.0" 1284 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1285 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1286 | 1287 | resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.13.1: 1288 | version "1.20.0" 1289 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" 1290 | integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== 1291 | dependencies: 1292 | is-core-module "^2.2.0" 1293 | path-parse "^1.0.6" 1294 | 1295 | restore-cursor@^3.1.0: 1296 | version "3.1.0" 1297 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" 1298 | integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== 1299 | dependencies: 1300 | onetime "^5.1.0" 1301 | signal-exit "^3.0.2" 1302 | 1303 | rimraf@2.6.3: 1304 | version "2.6.3" 1305 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" 1306 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== 1307 | dependencies: 1308 | glob "^7.1.3" 1309 | 1310 | run-async@^2.4.0: 1311 | version "2.4.1" 1312 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" 1313 | integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== 1314 | 1315 | run-parallel@^1.1.2: 1316 | version "1.2.0" 1317 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 1318 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1319 | dependencies: 1320 | queue-microtask "^1.2.2" 1321 | 1322 | rxjs@^6.6.0: 1323 | version "6.6.7" 1324 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" 1325 | integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== 1326 | dependencies: 1327 | tslib "^1.9.0" 1328 | 1329 | "safer-buffer@>= 2.1.2 < 3": 1330 | version "2.1.2" 1331 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1332 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1333 | 1334 | "semver@2 || 3 || 4 || 5", semver@^5.5.0: 1335 | version "5.7.1" 1336 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 1337 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 1338 | 1339 | semver@^6.1.0, semver@^6.1.2: 1340 | version "6.3.0" 1341 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 1342 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 1343 | 1344 | shebang-command@^1.2.0: 1345 | version "1.2.0" 1346 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 1347 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 1348 | dependencies: 1349 | shebang-regex "^1.0.0" 1350 | 1351 | shebang-regex@^1.0.0: 1352 | version "1.0.0" 1353 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 1354 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 1355 | 1356 | signal-exit@^3.0.2: 1357 | version "3.0.3" 1358 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" 1359 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== 1360 | 1361 | slice-ansi@^2.1.0: 1362 | version "2.1.0" 1363 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" 1364 | integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== 1365 | dependencies: 1366 | ansi-styles "^3.2.0" 1367 | astral-regex "^1.0.0" 1368 | is-fullwidth-code-point "^2.0.0" 1369 | 1370 | spdx-correct@^3.0.0: 1371 | version "3.1.1" 1372 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" 1373 | integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== 1374 | dependencies: 1375 | spdx-expression-parse "^3.0.0" 1376 | spdx-license-ids "^3.0.0" 1377 | 1378 | spdx-exceptions@^2.1.0: 1379 | version "2.3.0" 1380 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" 1381 | integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== 1382 | 1383 | spdx-expression-parse@^3.0.0: 1384 | version "3.0.1" 1385 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" 1386 | integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== 1387 | dependencies: 1388 | spdx-exceptions "^2.1.0" 1389 | spdx-license-ids "^3.0.0" 1390 | 1391 | spdx-license-ids@^3.0.0: 1392 | version "3.0.8" 1393 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.8.tgz#eb1e97ad99b11bf3f82a3b71a0472dd9a00f2ecf" 1394 | integrity sha512-NDgA96EnaLSvtbM7trJj+t1LUR3pirkDCcz9nOUlPb5DMBGsH7oES6C3hs3j7R9oHEa1EMvReS/BUAIT5Tcr0g== 1395 | 1396 | sprintf-js@~1.0.2: 1397 | version "1.0.3" 1398 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 1399 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 1400 | 1401 | standard-engine@^12.0.0: 1402 | version "12.1.0" 1403 | resolved "https://registry.yarnpkg.com/standard-engine/-/standard-engine-12.1.0.tgz#b13dbae583de54c06805207b991ef48a582c0e62" 1404 | integrity sha512-DVJnWM1CGkag4ucFLGdiYWa5/kJURPONmMmk17p8FT5NE4UnPZB1vxWnXnRo2sPSL78pWJG8xEM+1Tu19z0deg== 1405 | dependencies: 1406 | deglob "^4.0.1" 1407 | get-stdin "^7.0.0" 1408 | minimist "^1.2.5" 1409 | pkg-conf "^3.1.0" 1410 | 1411 | standard@^14.3.1: 1412 | version "14.3.4" 1413 | resolved "https://registry.yarnpkg.com/standard/-/standard-14.3.4.tgz#748e80e8cd7b535844a85a12f337755a7e3a0f6e" 1414 | integrity sha512-+lpOkFssMkljJ6eaILmqxHQ2n4csuEABmcubLTb9almFi1ElDzXb1819fjf/5ygSyePCq4kU2wMdb2fBfb9P9Q== 1415 | dependencies: 1416 | eslint "~6.8.0" 1417 | eslint-config-standard "14.1.1" 1418 | eslint-config-standard-jsx "8.1.0" 1419 | eslint-plugin-import "~2.18.0" 1420 | eslint-plugin-node "~10.0.0" 1421 | eslint-plugin-promise "~4.2.1" 1422 | eslint-plugin-react "~7.14.2" 1423 | eslint-plugin-standard "~4.0.0" 1424 | standard-engine "^12.0.0" 1425 | 1426 | string-width@^3.0.0: 1427 | version "3.1.0" 1428 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 1429 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 1430 | dependencies: 1431 | emoji-regex "^7.0.1" 1432 | is-fullwidth-code-point "^2.0.0" 1433 | strip-ansi "^5.1.0" 1434 | 1435 | string-width@^4.1.0: 1436 | version "4.2.2" 1437 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" 1438 | integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== 1439 | dependencies: 1440 | emoji-regex "^8.0.0" 1441 | is-fullwidth-code-point "^3.0.0" 1442 | strip-ansi "^6.0.0" 1443 | 1444 | string.prototype.trimend@^1.0.4: 1445 | version "1.0.4" 1446 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" 1447 | integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== 1448 | dependencies: 1449 | call-bind "^1.0.2" 1450 | define-properties "^1.1.3" 1451 | 1452 | string.prototype.trimstart@^1.0.4: 1453 | version "1.0.4" 1454 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" 1455 | integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== 1456 | dependencies: 1457 | call-bind "^1.0.2" 1458 | define-properties "^1.1.3" 1459 | 1460 | strip-ansi@^5.1.0, strip-ansi@^5.2.0: 1461 | version "5.2.0" 1462 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 1463 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 1464 | dependencies: 1465 | ansi-regex "^4.1.0" 1466 | 1467 | strip-ansi@^6.0.0: 1468 | version "6.0.0" 1469 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" 1470 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== 1471 | dependencies: 1472 | ansi-regex "^5.0.0" 1473 | 1474 | strip-bom@^3.0.0: 1475 | version "3.0.0" 1476 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 1477 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= 1478 | 1479 | strip-json-comments@^3.0.1: 1480 | version "3.1.1" 1481 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1482 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1483 | 1484 | supports-color@^5.3.0: 1485 | version "5.5.0" 1486 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1487 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1488 | dependencies: 1489 | has-flag "^3.0.0" 1490 | 1491 | supports-color@^7.1.0: 1492 | version "7.2.0" 1493 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1494 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1495 | dependencies: 1496 | has-flag "^4.0.0" 1497 | 1498 | table@^5.2.3: 1499 | version "5.4.6" 1500 | resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" 1501 | integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== 1502 | dependencies: 1503 | ajv "^6.10.2" 1504 | lodash "^4.17.14" 1505 | slice-ansi "^2.1.0" 1506 | string-width "^3.0.0" 1507 | 1508 | text-table@^0.2.0: 1509 | version "0.2.0" 1510 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1511 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 1512 | 1513 | through@^2.3.6: 1514 | version "2.3.8" 1515 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1516 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 1517 | 1518 | tinycolor2@^1.4.1: 1519 | version "1.4.1" 1520 | resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8" 1521 | 1522 | tmp@^0.0.33: 1523 | version "0.0.33" 1524 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" 1525 | integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== 1526 | dependencies: 1527 | os-tmpdir "~1.0.2" 1528 | 1529 | tslib@^1.9.0: 1530 | version "1.14.1" 1531 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 1532 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 1533 | 1534 | type-check@~0.3.2: 1535 | version "0.3.2" 1536 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 1537 | integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= 1538 | dependencies: 1539 | prelude-ls "~1.1.2" 1540 | 1541 | type-fest@^0.21.3: 1542 | version "0.21.3" 1543 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" 1544 | integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== 1545 | 1546 | type-fest@^0.3.0: 1547 | version "0.3.1" 1548 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" 1549 | integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== 1550 | 1551 | type-fest@^0.8.1: 1552 | version "0.8.1" 1553 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" 1554 | integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== 1555 | 1556 | unbox-primitive@^1.0.0: 1557 | version "1.0.1" 1558 | resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" 1559 | integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== 1560 | dependencies: 1561 | function-bind "^1.1.1" 1562 | has-bigints "^1.0.1" 1563 | has-symbols "^1.0.2" 1564 | which-boxed-primitive "^1.0.2" 1565 | 1566 | uniq@^1.0.1: 1567 | version "1.0.1" 1568 | resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" 1569 | integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= 1570 | 1571 | uri-js@^4.2.2: 1572 | version "4.4.1" 1573 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 1574 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1575 | dependencies: 1576 | punycode "^2.1.0" 1577 | 1578 | v8-compile-cache@^2.0.3: 1579 | version "2.3.0" 1580 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" 1581 | integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== 1582 | 1583 | validate-npm-package-license@^3.0.1: 1584 | version "3.0.4" 1585 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 1586 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== 1587 | dependencies: 1588 | spdx-correct "^3.0.0" 1589 | spdx-expression-parse "^3.0.0" 1590 | 1591 | which-boxed-primitive@^1.0.2: 1592 | version "1.0.2" 1593 | resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" 1594 | integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== 1595 | dependencies: 1596 | is-bigint "^1.0.1" 1597 | is-boolean-object "^1.1.0" 1598 | is-number-object "^1.0.4" 1599 | is-string "^1.0.5" 1600 | is-symbol "^1.0.3" 1601 | 1602 | which@^1.2.9: 1603 | version "1.3.1" 1604 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 1605 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 1606 | dependencies: 1607 | isexe "^2.0.0" 1608 | 1609 | word-wrap@~1.2.3: 1610 | version "1.2.3" 1611 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 1612 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 1613 | 1614 | wrappy@1: 1615 | version "1.0.2" 1616 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1617 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1618 | 1619 | write@1.0.3: 1620 | version "1.0.3" 1621 | resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" 1622 | integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== 1623 | dependencies: 1624 | mkdirp "^0.5.1" 1625 | 1626 | xtend@^4.0.1: 1627 | version "4.0.2" 1628 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 1629 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 1630 | --------------------------------------------------------------------------------