├── README.md ├── react-local-dev-and-cypress ├── .github │ └── workflows │ │ └── main.yml ├── .gitignore ├── .prettierignore ├── README.md ├── craco.config.js ├── cypress.json ├── cypress │ ├── fixtures │ │ └── example.json │ ├── integration │ │ └── app.spec.js │ ├── plugins │ │ └── index.js │ └── support │ │ ├── commands.js │ │ └── index.js ├── netlify.toml ├── package.json ├── prettier.config.js ├── public │ ├── favicon.ico │ ├── index.html │ └── manifest.json ├── src │ ├── App.css │ ├── App.js │ ├── __tests__ │ │ └── App.test.js │ ├── components │ │ ├── About.js │ │ └── Todos.js │ ├── index.js │ ├── server.js │ └── setupTests.js ├── tailwind.config.js └── yarn.lock ├── react-native ├── .expo-shared │ └── assets.json ├── .gitignore ├── App.js ├── App.test.js ├── README.md ├── app.json ├── assets │ ├── icon.png │ └── splash.png ├── babel.config.js ├── jest.config.js ├── jest.setup.js ├── package.json ├── server.js └── yarn.lock ├── react-typescript ├── .eslintrc ├── .gitignore ├── .prettierignore ├── README.md ├── craco.config.js ├── package.json ├── prettier.config.js ├── public │ ├── favicon.ico │ ├── index.html │ └── manifest.json ├── src │ ├── App.css │ ├── App.test.tsx │ ├── App.tsx │ ├── components │ │ ├── People.tsx │ │ └── Profile.tsx │ ├── fetchers.ts │ ├── index.tsx │ ├── mirage │ │ └── index.ts │ ├── react-app-env.d.ts │ └── setupTests.ts ├── tailwind.config.js ├── tsconfig.json └── yarn.lock ├── svelte-local-dev ├── .eslintrc ├── .gitignore ├── README.md ├── netlify.toml ├── package.json ├── postcss.config.js ├── prettier.config.js ├── public │ ├── favicon.png │ ├── global.css │ ├── index.html │ └── tailwind.css ├── rollup.config.js ├── src │ ├── App.svelte │ ├── components │ │ ├── About.svelte │ │ ├── Todo.svelte │ │ └── Todos.svelte │ ├── main.js │ └── server.js ├── tailwind.js └── yarn.lock ├── vue-axios-test-utils ├── .gitignore ├── README.md ├── babel.config.js ├── package.json ├── public │ ├── favicon.ico │ └── index.html ├── src │ ├── App.vue │ ├── assets │ │ └── logo.png │ ├── components │ │ └── HelloWorld.vue │ ├── main.js │ └── server.js ├── tests │ └── unit │ │ └── example.spec.js └── yarn.lock └── vue-cli-local-dev-and-cypress ├── .gitignore ├── README.md ├── babel.config.js ├── cypress.json ├── cypress ├── fixtures │ └── example.json ├── integration │ └── example.spec.js ├── plugins │ └── index.js └── support │ ├── commands.js │ └── index.js ├── netlify.toml ├── package.json ├── postcss.config.js ├── public ├── favicon.ico └── index.html ├── src ├── App.vue ├── assets │ └── tailwind.css ├── components │ ├── About.vue │ ├── Todo.vue │ ├── Todos.vue │ └── icons │ │ └── Cloud.vue ├── main.js └── server.js ├── tailwind.config.js ├── vue.config.js └── yarn.lock /README.md: -------------------------------------------------------------------------------- 1 | # Mirage Examples 2 | 3 | If you don't see an example with what you're looking for, feel free to [open an issue](https://github.com/miragejs/examples/issues/new)! 4 | -------------------------------------------------------------------------------- /react-local-dev-and-cypress/.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: [push] 4 | 5 | jobs: 6 | 7 | test: 8 | runs-on: ubuntu-latest 9 | env: 10 | CI: true 11 | steps: 12 | - uses: actions/checkout@v1 13 | - uses: actions/setup-node@v1 14 | 15 | - name: Get yarn cache 16 | id: yarn-cache 17 | run: echo "::set-output name=dir::$(yarn cache dir)" 18 | 19 | - uses: actions/cache@v1 20 | with: 21 | path: ${{ steps.yarn-cache.outputs.dir }} 22 | key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} 23 | restore-keys: | 24 | ${{ runner.os }}-yarn- 25 | 26 | - run: yarn install 27 | - run: yarn test 28 | 29 | - uses: cypress-io/github-action@v1.16.1 30 | with: 31 | start: yarn start 32 | wait-on: 'http://localhost:3000' 33 | 34 | - uses: actions/upload-artifact@v1 35 | if: always() 36 | with: 37 | name: cypress-videos 38 | path: cypress/videos 39 | -------------------------------------------------------------------------------- /react-local-dev-and-cypress/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | /cypress/videos/ 11 | 12 | # production 13 | /build 14 | 15 | # misc 16 | .DS_Store 17 | .env.local 18 | .env.development.local 19 | .env.test.local 20 | .env.production.local 21 | .vscode/ 22 | 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | -------------------------------------------------------------------------------- /react-local-dev-and-cypress/.prettierignore: -------------------------------------------------------------------------------- 1 | build -------------------------------------------------------------------------------- /react-local-dev-and-cypress/README.md: -------------------------------------------------------------------------------- 1 | # React Local Dev, React Testing Library, and Cypress Testing 2 | 3 | This app is set up with Mirage for both local development and UI testing with Cypress. 4 | 5 | The Mirage server is in [src/server.js](./src/server.js). The React Testing Library test is in [src/**tests**/App.test.js](./src/__tests__/App.test.js). The Cypress test is in [cypress/integration/app.spec.js](./cypress/integration/app.spec.js). 6 | 7 | ## How to use 8 | 9 | Pull down the repo and install deps: 10 | 11 | ```sh 12 | git clone git@github.com:miragejs/examples.git 13 | cd examples/react-local-dev-and-cypress 14 | yarn 15 | ``` 16 | 17 | To run this app in development against a local Mirage server: 18 | 19 | ```sh 20 | yarn start 21 | ``` 22 | 23 | To run the React Testing Library tests: 24 | 25 | ```sh 26 | yarn test 27 | ``` 28 | 29 | To run the Cypress tests: 30 | 31 | ```sh 32 | yarn cypress:dev 33 | ``` 34 | -------------------------------------------------------------------------------- /react-local-dev-and-cypress/craco.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | style: { 3 | postcss: { 4 | plugins: [require("tailwindcss")], 5 | }, 6 | }, 7 | }; 8 | -------------------------------------------------------------------------------- /react-local-dev-and-cypress/cypress.json: -------------------------------------------------------------------------------- 1 | { 2 | "baseUrl": "http://localhost:3000" 3 | } 4 | -------------------------------------------------------------------------------- /react-local-dev-and-cypress/cypress/fixtures/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Using fixtures to represent data", 3 | "email": "hello@cypress.io", 4 | "body": "Fixtures are a great way to mock data for responses to routes" 5 | } -------------------------------------------------------------------------------- /react-local-dev-and-cypress/cypress/integration/app.spec.js: -------------------------------------------------------------------------------- 1 | import { makeServer } from "../../src/server"; 2 | 3 | let server; 4 | 5 | beforeEach(() => { 6 | server = makeServer({ environment: "test" }); 7 | }); 8 | 9 | afterEach(() => { 10 | server.shutdown(); 11 | }); 12 | 13 | it("shows a loading message", () => { 14 | cy.visit("/"); 15 | 16 | cy.get("[data-testid=loading]").should("be.visible"); 17 | }); 18 | 19 | it("shows a message if there are no todos", () => { 20 | cy.visit("/"); 21 | 22 | cy.get("[data-testid='no-todos']").should("be.visible"); 23 | }); 24 | 25 | it("can create a todo", () => { 26 | cy.visit("/"); 27 | 28 | cy.get("[data-testid='new-todo-form'] input").type("Walk the dog{enter}"); 29 | 30 | cy.get("[data-testid='saving']").should("be.visible"); 31 | 32 | cy.get("[data-testid='todo'] input[type='checkbox']").should( 33 | "not.be.checked" 34 | ); 35 | cy.get("[data-testid='todo'] input[type='text']").should( 36 | "have.value", 37 | "Walk the dog" 38 | ); 39 | 40 | cy.should(() => { 41 | expect(server.db.todos).to.have.lengthOf(1); 42 | expect(server.db.todos[0].text).to.equal("Walk the dog"); 43 | }); 44 | }); 45 | 46 | it("shows existing todos", () => { 47 | server.createList("todo", 3); 48 | 49 | cy.visit("/"); 50 | 51 | cy.get("[data-testid='todo']").should("have.lengthOf", 3); 52 | }); 53 | 54 | it("can complete a todo", () => { 55 | server.create("todo", { text: "Todo 1", isDone: false }); 56 | server.create("todo", { text: "Todo 2", isDone: false }); 57 | 58 | cy.visit("/"); 59 | 60 | cy.get("[data-testid='todo'] input[type='checkbox']") 61 | .eq(1) 62 | .check(); 63 | 64 | cy.get("[data-testid='todo'] input[type='checkbox']") 65 | .eq(1) 66 | .should("be.checked"); 67 | 68 | cy.get("[data-testid='todo'] input[type='checkbox']") 69 | .first() 70 | .should("not.be.checked"); 71 | 72 | cy.should(() => { 73 | expect(server.db.todos[1].isDone).to.be.true; 74 | }); 75 | }); 76 | -------------------------------------------------------------------------------- /react-local-dev-and-cypress/cypress/plugins/index.js: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example plugins/index.js can be used to load plugins 3 | // 4 | // You can change the location of this file or turn off loading 5 | // the plugins file with the 'pluginsFile' configuration option. 6 | // 7 | // You can read more here: 8 | // https://on.cypress.io/plugins-guide 9 | // *********************************************************** 10 | 11 | // This function is called when a project is opened or re-opened (e.g. due to 12 | // the project's config changing) 13 | 14 | module.exports = (on, config) => { 15 | // `on` is used to hook into various events Cypress emits 16 | // `config` is the resolved Cypress config 17 | }; 18 | -------------------------------------------------------------------------------- /react-local-dev-and-cypress/cypress/support/commands.js: -------------------------------------------------------------------------------- 1 | // *********************************************** 2 | // This example commands.js shows you how to 3 | // create various custom commands and overwrite 4 | // existing commands. 5 | // 6 | // For more comprehensive examples of custom 7 | // commands please read more here: 8 | // https://on.cypress.io/custom-commands 9 | // *********************************************** 10 | // 11 | // 12 | // -- This is a parent command -- 13 | // Cypress.Commands.add("login", (email, password) => { ... }) 14 | // 15 | // 16 | // -- This is a child command -- 17 | // Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) 18 | // 19 | // 20 | // -- This is a dual command -- 21 | // Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }) 22 | // 23 | // 24 | // -- This will overwrite an existing command -- 25 | // Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) 26 | -------------------------------------------------------------------------------- /react-local-dev-and-cypress/cypress/support/index.js: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example support/index.js is processed and 3 | // loaded automatically before your test files. 4 | // 5 | // This is a great place to put global configuration and 6 | // behavior that modifies Cypress. 7 | // 8 | // You can change the location of this file or turn off 9 | // automatically serving support files with the 10 | // 'supportFile' configuration option. 11 | // 12 | // You can read more here: 13 | // https://on.cypress.io/configuration 14 | // *********************************************************** 15 | 16 | // Import commands.js using ES2015 syntax: 17 | import "./commands"; 18 | 19 | // Alternatively you can use CommonJS syntax: 20 | // require('./commands') 21 | 22 | Cypress.on("window:before:load", win => { 23 | win.handleFromCypress = function(request) { 24 | return fetch(request.url, { 25 | method: request.method, 26 | body: request.requestBody 27 | }).then(res => { 28 | if (res.headers.map["content-type"] === "application/json") { 29 | return res.json(); 30 | } else { 31 | return ""; 32 | } 33 | }); 34 | }; 35 | }); 36 | -------------------------------------------------------------------------------- /react-local-dev-and-cypress/netlify.toml: -------------------------------------------------------------------------------- 1 | # SPA push state routing 2 | [[redirects]] 3 | from = "/*" 4 | to = "/index.html" 5 | status = 200 -------------------------------------------------------------------------------- /react-local-dev-and-cypress/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-mirage-demo", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "@craco/craco": "^5.6.4", 7 | "@testing-library/jest-dom": "^5.11.4", 8 | "@testing-library/react": "^9.5.0", 9 | "miragejs": "^0.1.41", 10 | "react": "^16.13.1", 11 | "react-dom": "^16.13.1", 12 | "react-router-dom": "^5.2.0", 13 | "react-scripts": "3.4.1", 14 | "swr": "^0.2.3", 15 | "tailwindcss": "^1.8.10" 16 | }, 17 | "scripts": { 18 | "start": "craco start", 19 | "start:proxy": "REACT_APP_PROXY=true craco start", 20 | "build": "craco build", 21 | "test": "craco test", 22 | "cypress:open": "cypress open", 23 | "cypress:run": "cypress run", 24 | "cypress:dev": "start-server-and-test start http://localhost:3000 cypress:open", 25 | "cypress:ci": "start-server-and-test start http://localhost:3000 cypress:run", 26 | "eject": "react-scripts eject" 27 | }, 28 | "proxy": "http://localhost:3001", 29 | "eslintConfig": { 30 | "extends": [ 31 | "react-app", 32 | "plugin:cypress/recommended" 33 | ] 34 | }, 35 | "browserslist": [ 36 | ">0.2%", 37 | "not dead", 38 | "not ie <= 11", 39 | "not op_mini all" 40 | ], 41 | "devDependencies": { 42 | "@testing-library/user-event": "^10.4.1", 43 | "cypress": "^4.12.1", 44 | "eslint-plugin-cypress": "^2.11.1", 45 | "prettier": "^2.1.2", 46 | "start-server-and-test": "^1.11.4" 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /react-local-dev-and-cypress/prettier.config.js: -------------------------------------------------------------------------------- 1 | module.exports = {}; 2 | -------------------------------------------------------------------------------- /react-local-dev-and-cypress/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miragejs/examples/0fd7c5ddcc7a9b212974f116ad9c6aec0d949cb5/react-local-dev-and-cypress/public/favicon.ico -------------------------------------------------------------------------------- /react-local-dev-and-cypress/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 15 | 16 | 25 | Mirage + React demo 26 | 27 | 28 | 29 |
30 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /react-local-dev-and-cypress/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | } 10 | ], 11 | "start_url": ".", 12 | "display": "standalone", 13 | "theme_color": "#000000", 14 | "background_color": "#ffffff" 15 | } 16 | -------------------------------------------------------------------------------- /react-local-dev-and-cypress/src/App.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | -------------------------------------------------------------------------------- /react-local-dev-and-cypress/src/App.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import "./App.css"; 3 | import { 4 | BrowserRouter as Router, 5 | Switch, 6 | Route, 7 | NavLink 8 | } from "react-router-dom"; 9 | import Home from "./components/Todos"; 10 | import About from "./components/About"; 11 | 12 | export default function App() { 13 | return ( 14 |
15 | 16 |
17 |
18 | 24 | Home 25 | 26 | 31 | About 32 | 33 |
34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 |
44 |
45 |
46 | ); 47 | } 48 | -------------------------------------------------------------------------------- /react-local-dev-and-cypress/src/__tests__/App.test.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { 3 | render, 4 | waitForElement, 5 | waitForElementToBeRemoved, 6 | fireEvent 7 | } from "@testing-library/react"; 8 | import userEvent from "@testing-library/user-event"; 9 | import RawApp from "../App"; 10 | import { makeServer } from "../server"; 11 | import { SWRConfig, cache } from "swr"; 12 | 13 | const App = () => ( 14 | 15 | 16 | 17 | ); 18 | 19 | let server; 20 | 21 | beforeEach(() => { 22 | server = makeServer({ environment: "test" }); 23 | }); 24 | 25 | afterEach(() => { 26 | server.shutdown(); 27 | cache.clear(); 28 | }); 29 | 30 | it("shows a loading message", () => { 31 | const { getByTestId } = render(); 32 | 33 | expect(getByTestId("loading")).toBeInTheDocument(); 34 | }); 35 | 36 | it("shows a message if there are no todos", async () => { 37 | const { getByTestId } = render(); 38 | await waitForElementToBeRemoved(() => getByTestId("loading")); 39 | 40 | expect(getByTestId("no-todos")).toBeInTheDocument(); 41 | }); 42 | 43 | it("can create a todo", async () => { 44 | const { getByTestId } = render(); 45 | await waitForElementToBeRemoved(() => getByTestId("loading")); 46 | 47 | const newTodoForm = await waitForElement(() => getByTestId("new-todo-form")); 48 | userEvent.type(newTodoForm.querySelector("input"), "Walk the dog"); 49 | fireEvent.submit(getByTestId("new-todo-form")); 50 | await waitForElementToBeRemoved(() => getByTestId("saving")); 51 | 52 | const todo = getByTestId("todo"); 53 | expect(todo.querySelector('input[type="checkbox"]').checked).toBe(false); 54 | expect(todo.querySelector('input[type="text"]').value).toBe("Walk the dog"); 55 | expect(server.db.todos.length).toBe(1); 56 | expect(server.db.todos[0].text).toBe("Walk the dog"); 57 | }); 58 | 59 | it("shows existing todos", async () => { 60 | server.createList("todo", 3); 61 | 62 | const { getByTestId, getAllByTestId } = render(); 63 | await waitForElementToBeRemoved(() => getByTestId("loading")); 64 | 65 | expect(getAllByTestId("todo")).toHaveLength(3); 66 | }); 67 | 68 | it("can complete a todo", async () => { 69 | server.create("todo", { text: "Todo 1", isDone: false }); 70 | server.create("todo", { text: "Todo 2", isDone: false }); 71 | 72 | const { getByTestId, getAllByTestId } = render(); 73 | await waitForElementToBeRemoved(() => getByTestId("loading")); 74 | const todos = getAllByTestId("todo"); 75 | userEvent.click(todos[1].querySelector("input[type='checkbox']")); 76 | 77 | expect(getByTestId("completed-todos")).toHaveTextContent("1 / 2 complete"); 78 | 79 | await waitForElementToBeRemoved(() => getByTestId("saving")); 80 | 81 | expect(todos[0].querySelector('input[type="checkbox"]').checked).toBe(false); 82 | expect(todos[1].querySelector('input[type="checkbox"]').checked).toBe(true); 83 | expect(server.db.todos[1].isDone).toBe(true); 84 | }); 85 | 86 | it("can clear completed todos", async () => { 87 | server.create("todo", { text: "Todo 1", isDone: true }); 88 | server.create("todo", { text: "Todo 2", isDone: false }); 89 | 90 | const { getByTestId } = render(); 91 | await waitForElementToBeRemoved(() => getByTestId("loading")); 92 | expect(getByTestId("completed-todos")).toHaveTextContent("1 / 2 complete"); 93 | 94 | userEvent.click(getByTestId("clear-completed")); 95 | await waitForElementToBeRemoved(() => getByTestId("saving")); 96 | 97 | expect(getByTestId("completed-todos")).toHaveTextContent("0 / 1 complete"); 98 | expect(server.db.todos).toHaveLength(1); 99 | }); 100 | -------------------------------------------------------------------------------- /react-local-dev-and-cypress/src/components/About.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function() { 4 | return ( 5 |
6 |

About this app

7 |

8 | This is an SPA made with{" "} 9 | 13 | Mirage 14 | {" "} 15 | and{" "} 16 | 20 | React 21 | 22 | . It has two routes to help demonstrate how Mirage's in-memory database 23 | enables realistic data fetching and persistence during a single 24 | application session. 25 |

26 |

27 | Mirage's state is reset whenever the application is reloaded. 28 |

29 |

30 | 34 | View the code on GitHub → 35 | 36 |

37 |
38 | ); 39 | } 40 | -------------------------------------------------------------------------------- /react-local-dev-and-cypress/src/components/Todos.js: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState, useRef } from "react"; 2 | import useSWR from "swr"; 3 | 4 | const fetcher = (url, options) => 5 | fetch(url, { 6 | headers: { 7 | Accept: "application/json", 8 | "Content-Type": "application/json" 9 | }, 10 | ...options 11 | }).then(r => { 12 | if (r?.headers?.get("content-type")?.match("json")) { 13 | return r.json(); 14 | } 15 | }); 16 | 17 | const useIsMountedRef = () => { 18 | const isMounted = useRef(true); 19 | 20 | useEffect(() => { 21 | return () => { 22 | isMounted.current = false; 23 | }; 24 | }, []); 25 | 26 | return isMounted; 27 | }; 28 | 29 | let tempIdCounter = 1; 30 | 31 | function useRequestManager() { 32 | let [pendingRequestIds, setPendingRequestIds] = useState([]); 33 | 34 | function create() { 35 | const requestId = Symbol(); 36 | setPendingRequestIds([...pendingRequestIds, requestId]); 37 | 38 | return { 39 | done() { 40 | setPendingRequestIds(pendingRequestIds => 41 | pendingRequestIds.filter(id => id !== requestId) 42 | ); 43 | } 44 | }; 45 | } 46 | 47 | return { 48 | create, 49 | hasPendingRequests: pendingRequestIds.length > 0 50 | }; 51 | } 52 | 53 | export default function Todos() { 54 | let manager = useRequestManager(); 55 | let isMountedRef = useIsMountedRef(); 56 | let [newTodoRef, setNewTodoRef] = useRefState({ text: "", isDone: false }); 57 | 58 | let isSaving = manager.hasPendingRequests; 59 | 60 | async function createTodo(event) { 61 | event.preventDefault(); 62 | let newTodo = { ...newTodoRef.current }; 63 | let tempId = `t${tempIdCounter}`; 64 | tempIdCounter++; 65 | let localNewTodo = { ...newTodo, ...{ id: tempId } }; 66 | 67 | // Optimistic UI update 68 | updateTodosCache({ todos: [...todos, localNewTodo] }, false); 69 | 70 | // Resetting the new todo textbox 71 | setNewTodoRef({ text: "", isDone: false }); 72 | 73 | // Create the todo 74 | let request = manager.create(); 75 | let newTodoJson = await fetcher("/api/todos", { 76 | method: "POST", 77 | body: JSON.stringify({ todo: newTodo }) 78 | }); 79 | 80 | if (isMountedRef.current) { 81 | request.done(); 82 | } 83 | 84 | // Update client side cache with record from server 85 | updateTodosCache(cache => { 86 | let changedIndex = cache.todos.findIndex(todo => todo.id === tempId); 87 | 88 | return { 89 | todos: cache.todos.map((oldTodo, i) => 90 | i === changedIndex ? newTodoJson.todo : oldTodo 91 | ) 92 | }; 93 | }, false); 94 | } 95 | 96 | async function saveTodo(todo) { 97 | // Optimistic UI update 98 | let changedIndex = todos.findIndex(t => t.id === todo.id); 99 | updateTodosCache( 100 | { 101 | todos: todos.map((oldTodo, i) => (i === changedIndex ? todo : oldTodo)) 102 | }, 103 | false 104 | ); 105 | 106 | // Save the updated todo 107 | let request = manager.create(); 108 | await fetcher(`/api/todos/${todo.id}`, { 109 | method: "PATCH", 110 | body: JSON.stringify({ todo }) 111 | }); 112 | if (isMountedRef.current) { 113 | request.done(); 114 | } 115 | } 116 | 117 | async function deleteCompleted() { 118 | let request = manager.create(); 119 | let completedTodos = todos.filter(t => t.isDone); 120 | let remainingTodos = todos.filter(t => !t.isDone); 121 | 122 | // Optimistic UI update 123 | updateTodosCache({ todos: remainingTodos }, false); 124 | 125 | // Delete all completed todos 126 | await Promise.all( 127 | completedTodos.map(todo => 128 | fetcher(`/api/todos/${todo.id}`, { method: "DELETE" }) 129 | ) 130 | ); 131 | 132 | if (isMountedRef.current) { 133 | request.done(); 134 | } 135 | } 136 | 137 | function handleChange(event) { 138 | setNewTodoRef({ ...newTodoRef.current, ...{ text: event.target.value } }); 139 | } 140 | 141 | const { data, mutate: updateTodosCache } = useSWR("/api/todos", fetcher); 142 | 143 | let todos = data?.todos; 144 | let done = todos?.filter(todo => todo.isDone).length; 145 | 146 | return ( 147 |
148 |
149 |

Todos

150 | 151 |
152 | {isSaving && ( 153 | 158 | 159 | 160 | )} 161 |
162 |
163 | 164 |
165 | {!todos ? ( 166 |

167 | Loading... 168 |

169 | ) : ( 170 |
171 |
172 |
173 | 180 |
181 |
182 | 183 | {data.todos.length > 0 ? ( 184 |
    185 | {data.todos.map(todo => ( 186 | 187 | ))} 188 |
189 | ) : ( 190 |

194 | Everything's done! 195 |

196 | )} 197 | 198 |
199 | {todos.length > 0 ? ( 200 |

201 | {done} / {todos.length} complete 202 |

203 | ) : null} 204 | {done > 0 ? ( 205 | 212 | ) : null} 213 |
214 |
215 | )} 216 |
217 |
218 | ); 219 | } 220 | 221 | function useRefState(initialState) { 222 | let [state, setState] = useState(initialState); 223 | let ref = useRef(state); 224 | 225 | function updateRefAndSetState(newState) { 226 | ref.current = newState; 227 | setState(newState); 228 | } 229 | 230 | return [ref, updateRefAndSetState]; 231 | } 232 | 233 | function Todo({ todo, onChange }) { 234 | let [isFocused, setIsFocused] = useState(false); 235 | let [localTodoRef, setLocalTodo] = useRefState({ ...todo }); 236 | 237 | function handleChange(event) { 238 | setLocalTodo({ ...localTodoRef.current, ...{ text: event.target.value } }); 239 | } 240 | 241 | function handleCheck(event) { 242 | setLocalTodo({ 243 | ...localTodoRef.current, 244 | ...{ isDone: event.target.checked } 245 | }); 246 | 247 | commitChanges(); 248 | } 249 | 250 | function handleSubmit(event) { 251 | event.preventDefault(); 252 | commitChanges(localTodoRef.current); 253 | } 254 | 255 | function commitChanges() { 256 | setIsFocused(false); 257 | 258 | let hasChanges = 259 | localTodoRef.current.text !== todo.text || 260 | localTodoRef.current.isDone !== todo.isDone; 261 | 262 | if (hasChanges) { 263 | onChange(localTodoRef.current); 264 | } 265 | } 266 | 267 | return ( 268 |
  • 278 | 284 | 285 |
    286 | setIsFocused(true)} 292 | onBlur={commitChanges} 293 | className={` 294 | bg-transparent focus:outline-none px-3 py-1 block w-full 295 | ${localTodoRef.current.isDone && !isFocused ? "line-through" : ""} 296 | `} 297 | /> 298 |
    299 |
  • 300 | ); 301 | } 302 | -------------------------------------------------------------------------------- /react-local-dev-and-cypress/src/index.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ReactDOM from "react-dom"; 3 | import App from "./App"; 4 | import { makeServer } from "./server"; 5 | import { Server } from "miragejs"; 6 | 7 | if (window.Cypress) { 8 | // mirage cypress server 9 | let cyServer = new Server({ 10 | routes() { 11 | ["get", "put", "patch", "post", "delete"].forEach(method => { 12 | this[method]("/*", (schema, request) => { 13 | return window.handleFromCypress(request); 14 | }); 15 | }); 16 | } 17 | }); 18 | cyServer.logging = false; 19 | } else if (!process.env.REACT_APP_PROXY) { 20 | // mirage dev server 21 | makeServer(); 22 | } 23 | 24 | ReactDOM.render(, document.getElementById("root")); 25 | -------------------------------------------------------------------------------- /react-local-dev-and-cypress/src/server.js: -------------------------------------------------------------------------------- 1 | import { Server, Model, Factory } from "miragejs"; 2 | 3 | export function makeServer({ environment = "development" } = {}) { 4 | let server = new Server({ 5 | environment, 6 | 7 | models: { 8 | todo: Model 9 | }, 10 | 11 | factories: { 12 | todo: Factory.extend({ 13 | text(i) { 14 | return `Todo ${i + 1}`; 15 | }, 16 | 17 | isDone: false 18 | }) 19 | }, 20 | 21 | seeds(server) { 22 | server.create("todo", { text: "Buy groceries", isDone: false }); 23 | server.create("todo", { text: "Walk the dog", isDone: false }); 24 | server.create("todo", { text: "Do laundry", isDone: false }); 25 | }, 26 | 27 | routes() { 28 | this.namespace = "api"; 29 | this.timing = 750; 30 | 31 | this.get("/todos", schema => { 32 | return schema.todos.all(); 33 | }); 34 | 35 | this.patch("/todos/:id", (schema, request) => { 36 | let attrs = JSON.parse(request.requestBody).todo; 37 | 38 | return schema.todos.find(request.params.id).update(attrs); 39 | }); 40 | 41 | this.post( 42 | "/todos", 43 | (schema, request) => { 44 | let attrs = JSON.parse(request.requestBody).todo; 45 | 46 | return schema.todos.create(attrs); 47 | }, 48 | { timing: 2000 } 49 | ); 50 | 51 | this.delete("/todos/:id", (schema, request) => { 52 | return schema.todos.find(request.params.id).destroy(); 53 | }); 54 | } 55 | }); 56 | 57 | return server; 58 | } 59 | -------------------------------------------------------------------------------- /react-local-dev-and-cypress/src/setupTests.js: -------------------------------------------------------------------------------- 1 | // this adds jest-dom's custom assertions 2 | import "@testing-library/jest-dom/extend-expect"; 3 | -------------------------------------------------------------------------------- /react-local-dev-and-cypress/tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | theme: {}, 3 | variants: {}, 4 | plugins: [], 5 | }; 6 | -------------------------------------------------------------------------------- /react-native/.expo-shared/assets.json: -------------------------------------------------------------------------------- 1 | { 2 | "f9155ac790fd02fadcdeca367b02581c04a353aa6d5aa84409a59f6804c87acd": true, 3 | "89ed26367cdb9b771858e026f2eb95bfdb90e5ae943e716575327ec325f39c44": true 4 | } -------------------------------------------------------------------------------- /react-native/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/**/* 2 | .expo/* 3 | npm-debug.* 4 | *.jks 5 | *.p8 6 | *.p12 7 | *.key 8 | *.mobileprovision 9 | *.orig.* 10 | web-build/ 11 | web-report/ 12 | 13 | # macOS 14 | .DS_Store 15 | -------------------------------------------------------------------------------- /react-native/App.js: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from "react"; 2 | import { SafeAreaView, View, Text } from "react-native"; 3 | import { makeServer } from "./server"; 4 | 5 | if (process.env.NODE_ENV === "development") { 6 | if (window.server) { 7 | window.server.shutdown(); 8 | } 9 | window.server = makeServer(); 10 | } 11 | 12 | export default function App() { 13 | let [users, setUsers] = useState(); 14 | let [serverError, setServerError] = useState(); 15 | 16 | useEffect(() => { 17 | let fetchUsers = async () => { 18 | try { 19 | let res = await fetch("/api/users"); 20 | let data = await res.json(); 21 | data.error ? setServerError(data.error) : setUsers(data.users); 22 | } catch (error) { 23 | setServerError(error.message); 24 | } 25 | }; 26 | 27 | fetchUsers(); 28 | }, []); 29 | 30 | return ( 31 | 32 | {serverError ? ( 33 | {serverError} 34 | ) : !users ? ( 35 | Loading... 36 | ) : users.length === 0 ? ( 37 | No users! 38 | ) : ( 39 | 40 | {users.map((user) => ( 41 | 42 | {user.name} 43 | 44 | ))} 45 | 46 | )} 47 | 48 | ); 49 | } 50 | -------------------------------------------------------------------------------- /react-native/App.test.js: -------------------------------------------------------------------------------- 1 | // src/__tests__/App.test.js 2 | import React from "react"; 3 | import { render, waitForElement, waitFor } from "@testing-library/react-native"; 4 | import App from "./App"; 5 | import { makeServer } from "./server"; 6 | import { Response } from "miragejs"; 7 | 8 | let server; 9 | 10 | beforeEach(() => { 11 | server = makeServer({ environment: "test" }); 12 | }); 13 | 14 | afterEach(() => { 15 | server.shutdown(); 16 | }); 17 | 18 | it("shows a message if there are no users", async () => { 19 | // Don't create any users 20 | 21 | const { findByTestId } = render(); 22 | 23 | await expect(findByTestId("no-users")).resolves.toHaveTextContent( 24 | "No users!" 25 | ); 26 | }); 27 | 28 | it("shows the users from our server", async () => { 29 | server.create("user", { name: "Luke" }); 30 | server.create("user", { name: "Leia" }); 31 | 32 | const { getByTestId } = render(); 33 | 34 | await waitFor(() => expect(getByTestId("user-1-name"))); 35 | 36 | expect(getByTestId("user-1-name")).toHaveTextContent("Luke"); 37 | expect(getByTestId("user-2-name")).toHaveTextContent("Leia"); 38 | }); 39 | 40 | it("handles error responses from the server", async () => { 41 | // Override Mirage's route handler for /users, just for this test 42 | server.get("/api/users", () => { 43 | return new Response( 44 | 500, 45 | {}, 46 | { 47 | error: "The database is on vacation.", 48 | } 49 | ); 50 | }); 51 | 52 | const { findByTestId } = render(); 53 | 54 | await expect(findByTestId("server-error")).resolves.toHaveTextContent( 55 | "The database is on vacation." 56 | ); 57 | }); 58 | -------------------------------------------------------------------------------- /react-native/README.md: -------------------------------------------------------------------------------- 1 | # React Native Local Dev and React Testing Library 2 | 3 | This React Native app is set up with Mirage for both local development and UI testing with React Testing Library. 4 | 5 | The Mirage server is in [src/server.js](./server.js). The test is in [App.test.js](./App.test.js). 6 | 7 | ## How to use 8 | 9 | Pull down the repo and install deps: 10 | 11 | ```sh 12 | git clone git@github.com:miragejs/examples.git 13 | cd examples/react-native 14 | yarn 15 | ``` 16 | 17 | To run this app in development against a local Mirage server: 18 | 19 | ```sh 20 | yarn start 21 | ``` 22 | 23 | To run the React Testing Library tests: 24 | 25 | ```sh 26 | yarn test 27 | ``` 28 | -------------------------------------------------------------------------------- /react-native/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "expo": { 3 | "name": "Blank Template", 4 | "slug": "react-native", 5 | "privacy": "public", 6 | "sdkVersion": "36.0.0", 7 | "platforms": [ 8 | "ios", 9 | "android", 10 | "web" 11 | ], 12 | "version": "1.0.0", 13 | "orientation": "portrait", 14 | "icon": "./assets/icon.png", 15 | "splash": { 16 | "image": "./assets/splash.png", 17 | "resizeMode": "contain", 18 | "backgroundColor": "#ffffff" 19 | }, 20 | "updates": { 21 | "fallbackToCacheTimeout": 0 22 | }, 23 | "assetBundlePatterns": [ 24 | "**/*" 25 | ], 26 | "ios": { 27 | "supportsTablet": true 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /react-native/assets/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miragejs/examples/0fd7c5ddcc7a9b212974f116ad9c6aec0d949cb5/react-native/assets/icon.png -------------------------------------------------------------------------------- /react-native/assets/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miragejs/examples/0fd7c5ddcc7a9b212974f116ad9c6aec0d949cb5/react-native/assets/splash.png -------------------------------------------------------------------------------- /react-native/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = function(api) { 2 | api.cache(true); 3 | return { 4 | presets: ['babel-preset-expo'], 5 | }; 6 | }; 7 | -------------------------------------------------------------------------------- /react-native/jest.config.js: -------------------------------------------------------------------------------- 1 | // const jestPreset = require("@testing-library/react-native/jest-preset"); 2 | 3 | module.exports = { 4 | preset: "jest-expo", 5 | // setupFiles: [...jestPreset.setupFiles], 6 | setupFilesAfterEnv: ["./jest.setup.js"], 7 | }; 8 | -------------------------------------------------------------------------------- /react-native/jest.setup.js: -------------------------------------------------------------------------------- 1 | require("@testing-library/jest-native/extend-expect"); 2 | 3 | // jest.setup.js 4 | global.self = global; 5 | global.window = {}; 6 | global.XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest; 7 | -------------------------------------------------------------------------------- /react-native/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "main": "node_modules/expo/AppEntry.js", 3 | "scripts": { 4 | "start": "expo start", 5 | "android": "expo start --android", 6 | "ios": "expo start --ios", 7 | "web": "expo start --web", 8 | "eject": "expo eject", 9 | "test": "jest" 10 | }, 11 | "dependencies": { 12 | "expo": "~39.0.3", 13 | "expo-status-bar": "~1.0.2", 14 | "faker": "^5.1.0", 15 | "react": "~16.13.1", 16 | "react-dom": "~16.13.1", 17 | "react-native": "0.63.2", 18 | "react-native-vector-icons": "^7.1.0", 19 | "react-native-web": "~0.13.14" 20 | }, 21 | "devDependencies": { 22 | "@babel/core": "^7.0.0", 23 | "@testing-library/jest-native": "^3.1.0", 24 | "@testing-library/react-native": "^7.0.2", 25 | "babel-preset-expo": "~8.3.0", 26 | "jest-expo": "^39.0.0", 27 | "miragejs": "0.1.41", 28 | "xmlhttprequest": "^1.8.0" 29 | }, 30 | "private": true 31 | } 32 | -------------------------------------------------------------------------------- /react-native/server.js: -------------------------------------------------------------------------------- 1 | import { Server, Model, Factory } from "miragejs"; 2 | import faker from "faker"; 3 | 4 | export function makeServer({ environment = "development" } = {}) { 5 | let server = new Server({ 6 | environment, 7 | 8 | models: { 9 | user: Model, 10 | }, 11 | 12 | factories: { 13 | user: Factory.extend({ 14 | name() { 15 | return faker.name.findName(); 16 | }, 17 | avatarUrl(i) { 18 | let c = i % 2 ? "men" : "women"; 19 | return `https://randomuser.me/api/portraits/${c}/${i}.jpg`; 20 | }, 21 | title() { 22 | return faker.name.title(); 23 | }, 24 | }), 25 | }, 26 | 27 | seeds(server) { 28 | server.createList("user", 25); 29 | }, 30 | 31 | routes() { 32 | this.get("/api/users", (schema) => { 33 | return schema.users.all(); 34 | }); 35 | }, 36 | }); 37 | 38 | return server; 39 | } 40 | -------------------------------------------------------------------------------- /react-typescript/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "react-app", 4 | "plugin:prettier/recommended", 5 | "prettier/@typescript-eslint" 6 | ] 7 | } -------------------------------------------------------------------------------- /react-typescript/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /react-typescript/.prettierignore: -------------------------------------------------------------------------------- 1 | build -------------------------------------------------------------------------------- /react-typescript/README.md: -------------------------------------------------------------------------------- 1 | # React Typescript 2 | 3 | This app is set up with Typescript and Mirage 4 | 5 | ## How to use 6 | 7 | Pull down the repo and install deps: 8 | 9 | ```sh 10 | git clone git@github.com:miragejs/examples.git 11 | cd examples/react-typescript 12 | yarn 13 | ``` 14 | 15 | To run this app in development against a local Mirage server: 16 | 17 | ```sh 18 | yarn start 19 | ``` -------------------------------------------------------------------------------- /react-typescript/craco.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | style: { 3 | postcss: { 4 | plugins: [require("tailwindcss")], 5 | }, 6 | }, 7 | }; 8 | -------------------------------------------------------------------------------- /react-typescript/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-typescript", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "@tailwindcss/typography": "^0.2.0", 7 | "@testing-library/jest-dom": "^4.2.4", 8 | "@testing-library/react": "^9.3.2", 9 | "@testing-library/user-event": "^7.1.2", 10 | "@types/jest": "^24.0.0", 11 | "@types/node": "^12.0.0", 12 | "@types/react": "^16.9.0", 13 | "@types/react-dom": "^16.9.0", 14 | "react": "^17.0.0", 15 | "react-dom": "^17.0.0", 16 | "react-scripts": "3.4.4", 17 | "swr": "^0.3.6", 18 | "tailwindcss": "^1.9.5", 19 | "typescript": "~3.7.2" 20 | }, 21 | "scripts": { 22 | "start": "craco start", 23 | "build": "craco build", 24 | "test": "craco test", 25 | "eject": "react-scripts eject" 26 | }, 27 | "browserslist": { 28 | "production": [ 29 | ">0.2%", 30 | "not dead", 31 | "not op_mini all" 32 | ], 33 | "development": [ 34 | "last 1 chrome version", 35 | "last 1 firefox version", 36 | "last 1 safari version" 37 | ] 38 | }, 39 | "devDependencies": { 40 | "@craco/craco": "^5.7.0", 41 | "@types/faker": "^5.1.2", 42 | "eslint-config-prettier": "^6.14.0", 43 | "eslint-plugin-prettier": "^3.1.4", 44 | "faker": "^5.1.0", 45 | "miragejs": "^0.1.41", 46 | "prettier": "^2.1.2" 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /react-typescript/prettier.config.js: -------------------------------------------------------------------------------- 1 | module.exports = {}; 2 | -------------------------------------------------------------------------------- /react-typescript/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miragejs/examples/0fd7c5ddcc7a9b212974f116ad9c6aec0d949cb5/react-typescript/public/favicon.ico -------------------------------------------------------------------------------- /react-typescript/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | 17 | 18 | 27 | React App 28 | 29 | 30 | 31 |
    32 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /react-typescript/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | } 10 | ], 11 | "start_url": ".", 12 | "display": "standalone", 13 | "theme_color": "#000000", 14 | "background_color": "#ffffff" 15 | } 16 | -------------------------------------------------------------------------------- /react-typescript/src/App.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | -------------------------------------------------------------------------------- /react-typescript/src/App.test.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { render } from "@testing-library/react"; 3 | import App from "./App"; 4 | 5 | test("renders learn react link", () => { 6 | const { getByText } = render(); 7 | const linkElement = getByText(/learn react/i); 8 | expect(linkElement).toBeInTheDocument(); 9 | }); 10 | -------------------------------------------------------------------------------- /react-typescript/src/App.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import "./App.css"; 3 | import { People } from "./components/People"; 4 | 5 | function App() { 6 | return ( 7 |
    8 | 9 |
    10 | ); 11 | } 12 | 13 | export default App; 14 | -------------------------------------------------------------------------------- /react-typescript/src/components/People.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import useSWR from "swr"; 3 | import { Profile } from "./Profile"; 4 | import { fetchPeople } from "../fetchers"; 5 | 6 | export function People() { 7 | const { data, error } = useSWR("/api/people", fetchPeople); 8 | 9 | if (error) return
    failed to load
    ; 10 | if (!data) return
    loading...
    ; 11 | return ( 12 | <> 13 |
    14 |

    15 | 16 | ✨ 17 | 18 | People 19 | 20 | ✨ 21 | 22 |

    23 |
    24 | 25 |
    26 | {data.people.map((person) => ( 27 | 28 | ))} 29 |
    30 | 31 | ); 32 | } 33 | -------------------------------------------------------------------------------- /react-typescript/src/components/Profile.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Person } from "../fetchers"; 3 | 4 | export function Profile(props: Person) { 5 | return ( 6 |
    7 |
    Name
    8 |
    {props.name}
    9 |
    Street address
    10 |
    {props.streetAddress}
    11 |
    City, State Zip
    12 |
    {props.cityStateZip}
    13 |
    Phone number
    14 |
    {props.phone}
    15 |
    Username
    16 |
    {props.username}
    17 |
    Password
    18 |
    {props.password}
    19 |
    Email
    20 |
    {props.email}
    21 |
    Avatar
    22 |
    23 | {props.name} 28 |
    29 |
    30 | ); 31 | } 32 | -------------------------------------------------------------------------------- /react-typescript/src/fetchers.ts: -------------------------------------------------------------------------------- 1 | export type Person = { 2 | id: string; 3 | firstName: string; 4 | lastName: string; 5 | name: string; 6 | streetAddress: string; 7 | cityStateZip: string; 8 | phone: string; 9 | username: string; 10 | password: string; 11 | email: string; 12 | avatar: string; 13 | }; 14 | 15 | type PeopleResponse = { 16 | people: Person[]; 17 | }; 18 | 19 | export const fetchPeople = (url: string) => 20 | fetch(url).then((r) => r.json()); 21 | -------------------------------------------------------------------------------- /react-typescript/src/index.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ReactDOM from "react-dom"; 3 | import App from "./App"; 4 | 5 | import { makeServer } from "./mirage/index"; 6 | 7 | const environment = process.env.NODE_ENV; 8 | 9 | if (environment !== "production") { 10 | makeServer({ environment }); 11 | } 12 | 13 | ReactDOM.render( 14 | 15 | 16 | , 17 | document.getElementById("root") 18 | ); 19 | -------------------------------------------------------------------------------- /react-typescript/src/mirage/index.ts: -------------------------------------------------------------------------------- 1 | import { createServer, Model, Factory } from "miragejs"; 2 | import faker from "faker"; 3 | import { Person } from "../fetchers"; 4 | 5 | export function makeServer({ environment = "test" }) { 6 | return createServer({ 7 | environment, 8 | 9 | factories: { 10 | person: Factory.extend>({ 11 | get firstName() { 12 | return faker.name.firstName(); 13 | }, 14 | get lastName() { 15 | return faker.name.lastName(); 16 | }, 17 | get name() { 18 | return faker.name.findName(this.firstName, this.lastName); 19 | }, 20 | get streetAddress() { 21 | return faker.address.streetAddress(); 22 | }, 23 | get cityStateZip() { 24 | return faker.fake( 25 | "{{address.city}}, {{address.stateAbbr}} {{address.zipCode}}" 26 | ); 27 | }, 28 | get phone() { 29 | return faker.phone.phoneNumber(); 30 | }, 31 | get username() { 32 | return faker.internet.userName(this.firstName, this.lastName); 33 | }, 34 | get password() { 35 | return faker.internet.password(); 36 | }, 37 | get email() { 38 | return faker.internet.email(this.firstName, this.lastName); 39 | }, 40 | get avatar() { 41 | return faker.internet.avatar(); 42 | }, 43 | }), 44 | }, 45 | 46 | models: { 47 | person: Model.extend>({}), 48 | }, 49 | 50 | routes() { 51 | this.namespace = "api"; 52 | 53 | this.get("people"); 54 | }, 55 | 56 | seeds(server) { 57 | server.createList("person", 20); 58 | }, 59 | }); 60 | } 61 | -------------------------------------------------------------------------------- /react-typescript/src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /react-typescript/src/setupTests.ts: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import "@testing-library/jest-dom/extend-expect"; 6 | -------------------------------------------------------------------------------- /react-typescript/tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | purge: ["./src/**/*.tsx"], 3 | theme: {}, 4 | variants: {}, 5 | plugins: [require("@tailwindcss/typography")], 6 | }; 7 | -------------------------------------------------------------------------------- /react-typescript/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": [ 5 | "dom", 6 | "dom.iterable", 7 | "esnext" 8 | ], 9 | "allowJs": true, 10 | "skipLibCheck": true, 11 | "esModuleInterop": true, 12 | "allowSyntheticDefaultImports": true, 13 | "strict": true, 14 | "forceConsistentCasingInFileNames": true, 15 | "module": "esnext", 16 | "moduleResolution": "node", 17 | "resolveJsonModule": true, 18 | "isolatedModules": true, 19 | "noEmit": true, 20 | "jsx": "react" 21 | }, 22 | "include": [ 23 | "src" 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /svelte-local-dev/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "es6": true 5 | }, 6 | "parserOptions": { 7 | "ecmaVersion": 2019, 8 | "sourceType": "module" 9 | }, 10 | "plugins": ["svelte3"], 11 | "extends": ["eslint:recommended"], 12 | "overrides": [ 13 | { 14 | "files": ["**/*.svelte"], 15 | "processor": "svelte3/svelte3" 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /svelte-local-dev/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /public/build/ 3 | /public/index.css 4 | 5 | .DS_Store 6 | -------------------------------------------------------------------------------- /svelte-local-dev/README.md: -------------------------------------------------------------------------------- 1 | # Svelte Local Dev 2 | 3 | This is a Svelte app set up with Mirage for local development. 4 | 5 | The Mirage server is in [src/server.js](./src/server.js). 6 | 7 | ## How to use 8 | 9 | Pull down the repo and install deps: 10 | 11 | ```sh 12 | git clone git@github.com:miragejs/examples.git 13 | cd examples/svelte-local-dev 14 | yarn 15 | ``` 16 | 17 | To run this app in development against a local Mirage server: 18 | 19 | ```sh 20 | yarn dev 21 | ``` 22 | -------------------------------------------------------------------------------- /svelte-local-dev/netlify.toml: -------------------------------------------------------------------------------- 1 | # SPA push state routing 2 | [[redirects]] 3 | from = "/*" 4 | to = "/index.html" 5 | status = 200 -------------------------------------------------------------------------------- /svelte-local-dev/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "svelte-app", 3 | "version": "1.0.0", 4 | "scripts": { 5 | "watch:tailwind": "postcss public/tailwind.css -o public/index.css -w", 6 | "build:tailwind": "NODE_ENV=production postcss public/tailwind.css -o public/index.css", 7 | "dev": "run-p start:dev autobuild watch:tailwind", 8 | "build": "npm run build:tailwind && rollup -c", 9 | "autobuild": "rollup -c -w", 10 | "start": "sirv public", 11 | "start:dev": "sirv public --dev", 12 | "lint": "eslint ./src/**/*.{svelte,js}", 13 | "format": "prettier --list-different -- 'src/**/*.{html,js,svelte}'", 14 | "format:fix": "prettier --write 'src/**/*.{html,js,svelte}'" 15 | }, 16 | "devDependencies": { 17 | "@rollup/plugin-commonjs": "^11.0.0", 18 | "@rollup/plugin-node-resolve": "^7.0.0", 19 | "eslint": "^6.8.0", 20 | "eslint-plugin-svelte3": "^2.7.3", 21 | "miragejs": "^0.1.37", 22 | "npm-run-all": "^4.1.5", 23 | "postcss-cli": "^7.1.0", 24 | "prettier": "^1.19.1", 25 | "prettier-plugin-svelte": "^0.7.0", 26 | "rollup": "^1.20.0", 27 | "rollup-plugin-livereload": "^1.0.0", 28 | "rollup-plugin-svelte": "^5.0.3", 29 | "rollup-plugin-terser": "^5.1.2", 30 | "svelte": "^3.0.0", 31 | "tailwindcss": "^1.2.0" 32 | }, 33 | "dependencies": { 34 | "@fullhuman/postcss-purgecss": "^2.1.2", 35 | "sirv-cli": "^0.4.4", 36 | "svelte-routing": "^1.4.2" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /svelte-local-dev/postcss.config.js: -------------------------------------------------------------------------------- 1 | const tailwindcss = require("tailwindcss"); 2 | 3 | // only needed if you want to purge 4 | const purgecss = require("@fullhuman/postcss-purgecss")({ 5 | content: ["./src/**/*.svelte", "./public/**/*.html"], 6 | defaultExtractor: content => content.match(/[A-Za-z0-9-_:/]+/g) || [] 7 | }); 8 | 9 | module.exports = { 10 | plugins: [ 11 | tailwindcss("./tailwind.js"), 12 | 13 | // only needed if you want to purge 14 | ...(process.env.NODE_ENV === "production" ? [purgecss] : []) 15 | ] 16 | }; -------------------------------------------------------------------------------- /svelte-local-dev/prettier.config.js: -------------------------------------------------------------------------------- 1 | module.exports = {}; 2 | -------------------------------------------------------------------------------- /svelte-local-dev/public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miragejs/examples/0fd7c5ddcc7a9b212974f116ad9c6aec0d949cb5/svelte-local-dev/public/favicon.png -------------------------------------------------------------------------------- /svelte-local-dev/public/global.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miragejs/examples/0fd7c5ddcc7a9b212974f116ad9c6aec0d949cb5/svelte-local-dev/public/global.css -------------------------------------------------------------------------------- /svelte-local-dev/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Svelte app 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /svelte-local-dev/public/tailwind.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; -------------------------------------------------------------------------------- /svelte-local-dev/rollup.config.js: -------------------------------------------------------------------------------- 1 | import svelte from 'rollup-plugin-svelte'; 2 | import resolve from '@rollup/plugin-node-resolve'; 3 | import commonjs from '@rollup/plugin-commonjs'; 4 | import livereload from 'rollup-plugin-livereload'; 5 | import { terser } from 'rollup-plugin-terser'; 6 | 7 | const production = !process.env.ROLLUP_WATCH; 8 | 9 | export default { 10 | input: 'src/main.js', 11 | output: { 12 | sourcemap: true, 13 | format: 'iife', 14 | name: 'app', 15 | file: 'public/build/bundle.js' 16 | }, 17 | plugins: [ 18 | svelte({ 19 | // enable run-time checks when not in production 20 | dev: !production, 21 | // we'll extract any component CSS out into 22 | // a separate file - better for performance 23 | css: css => { 24 | css.write('public/build/bundle.css'); 25 | } 26 | }), 27 | 28 | // If you have external dependencies installed from 29 | // npm, you'll most likely need these plugins. In 30 | // some cases you'll need additional configuration - 31 | // consult the documentation for details: 32 | // https://github.com/rollup/plugins/tree/master/packages/commonjs 33 | resolve({ 34 | browser: true, 35 | dedupe: ['svelte'] 36 | }), 37 | commonjs(), 38 | 39 | // In dev mode, call `npm run start` once 40 | // the bundle has been generated 41 | !production && serve(), 42 | 43 | // Watch the `public` directory and refresh the 44 | // browser on changes when not in production 45 | !production && livereload('public'), 46 | 47 | // If we're building for production (npm run build 48 | // instead of npm run dev), minify 49 | production && terser() 50 | ], 51 | watch: { 52 | clearScreen: false 53 | } 54 | }; 55 | 56 | function serve() { 57 | let started = false; 58 | 59 | return { 60 | writeBundle() { 61 | if (!started) { 62 | started = true; 63 | 64 | require('child_process').spawn('npm', ['run', 'start', '--', '--dev'], { 65 | stdio: ['ignore', 'inherit', 'inherit'], 66 | shell: true 67 | }); 68 | } 69 | } 70 | }; 71 | } 72 | -------------------------------------------------------------------------------- /svelte-local-dev/src/App.svelte: -------------------------------------------------------------------------------- 1 | 12 | 13 | 14 |
    15 |
    16 |
    17 | 23 | Home 24 | 25 | 31 | About 32 | 33 |
    34 | 35 | 36 | 37 | 38 | 39 |
    40 |
    41 |
    42 | -------------------------------------------------------------------------------- /svelte-local-dev/src/components/About.svelte: -------------------------------------------------------------------------------- 1 |
    2 |

    About this app

    3 |

    4 | This is an SPA made with 5 | Mirage 6 | and 7 | Svelte. 8 | It has two routes to help demonstrate how Mirage's in-memory database 9 | enables realistic data fetching and persisting during a single application 10 | session. 11 |

    12 |

    13 | Mirage's state is reset whenever the application is reloaded. 14 |

    15 |
    16 | -------------------------------------------------------------------------------- /svelte-local-dev/src/components/Todo.svelte: -------------------------------------------------------------------------------- 1 | 21 | 22 |
  • 27 | 32 | 33 |
    34 | { 39 | isFocused = true; 40 | }} 41 | on:blur={save} 42 | class={`${localTodo.isDone && !isFocused ? 'line-through' : ''} 43 | bg-transparent focus:outline-none px-3 py-1 block w-full`} /> 44 |
    45 |
  • 46 | -------------------------------------------------------------------------------- /svelte-local-dev/src/components/Todos.svelte: -------------------------------------------------------------------------------- 1 | 66 | 67 |
    68 |
    69 |

    Todos

    70 | 71 |
    72 | {#if isSaving} 73 | 74 | 77 | 78 | {/if} 79 |
    80 |
    81 | 82 |
    83 | {#if isLoading} 84 |

    Loading...

    85 | {:else} 86 |
    87 |
    88 | 94 |
    95 |
    96 | 97 |
      98 | {#each todos as todo (todo.id)} 99 | 100 | {/each} 101 |
    102 | 103 |
    105 | {#if todos.length} 106 |

    {done} / {total} complete

    107 | {/if} 108 | {#if done} 109 | 115 | {/if} 116 |
    117 | {/if} 118 |
    119 |
    120 | -------------------------------------------------------------------------------- /svelte-local-dev/src/main.js: -------------------------------------------------------------------------------- 1 | import App from "./App.svelte"; 2 | import { makeServer } from "./server"; 3 | 4 | makeServer(); 5 | 6 | const app = new App({ 7 | target: document.body, 8 | props: {} 9 | }); 10 | 11 | export default app; 12 | -------------------------------------------------------------------------------- /svelte-local-dev/src/server.js: -------------------------------------------------------------------------------- 1 | import { Server } from "miragejs"; 2 | 3 | export function makeServer({ environment = "development" } = {}) { 4 | let server = new Server({ 5 | environment, 6 | 7 | seeds(server) { 8 | server.db.loadData({ 9 | todos: [ 10 | { text: "Buy groceries", isDone: false }, 11 | { text: "Walk the dog", isDone: false }, 12 | { text: "Do laundry", isDone: false } 13 | ] 14 | }); 15 | }, 16 | 17 | routes() { 18 | this.namespace = "api"; 19 | this.timing = 750; 20 | 21 | this.get("/todos", ({ db }) => { 22 | return db.todos; 23 | }); 24 | 25 | this.patch("/todos/:id", (schema, request) => { 26 | let todo = JSON.parse(request.requestBody).data; 27 | 28 | return schema.db.todos.update(todo.id, todo); 29 | }); 30 | 31 | this.post("/todos", (schema, request) => { 32 | let todo = JSON.parse(request.requestBody).data; 33 | 34 | return schema.db.todos.insert(todo); 35 | }); 36 | 37 | this.delete("/todos/:id", (schema, request) => { 38 | return schema.db.todos.remove(request.params.id); 39 | }); 40 | } 41 | }); 42 | 43 | window.server = server; 44 | 45 | return server; 46 | } 47 | -------------------------------------------------------------------------------- /svelte-local-dev/tailwind.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | theme: { 3 | extend: {}, 4 | }, 5 | variants: {}, 6 | plugins: [], 7 | } 8 | -------------------------------------------------------------------------------- /svelte-local-dev/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", "@babel/code-frame@^7.5.5": 6 | version "7.10.4" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" 8 | integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== 9 | dependencies: 10 | "@babel/highlight" "^7.10.4" 11 | 12 | "@babel/helper-validator-identifier@^7.10.4": 13 | version "7.10.4" 14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" 15 | integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== 16 | 17 | "@babel/highlight@^7.10.4": 18 | version "7.10.4" 19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" 20 | integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.10.4" 23 | chalk "^2.0.0" 24 | js-tokens "^4.0.0" 25 | 26 | "@fullhuman/postcss-purgecss@^2.1.2": 27 | version "2.3.0" 28 | resolved "https://registry.yarnpkg.com/@fullhuman/postcss-purgecss/-/postcss-purgecss-2.3.0.tgz#50a954757ec78696615d3e118e3fee2d9291882e" 29 | integrity sha512-qnKm5dIOyPGJ70kPZ5jiz0I9foVOic0j+cOzNDoo8KoCf6HjicIZ99UfO2OmE7vCYSKAAepEwJtNzpiiZAh9xw== 30 | dependencies: 31 | postcss "7.0.32" 32 | purgecss "^2.3.0" 33 | 34 | "@miragejs/pretender-node-polyfill@^0.1.0": 35 | version "0.1.2" 36 | resolved "https://registry.yarnpkg.com/@miragejs/pretender-node-polyfill/-/pretender-node-polyfill-0.1.2.tgz#d26b6b7483fb70cd62189d05c95d2f67153e43f2" 37 | integrity sha512-M/BexG/p05C5lFfMunxo/QcgIJnMT2vDVCd00wNqK2ImZONIlEETZwWJu1QtLxtmYlSHlCFl3JNzp0tLe7OJ5g== 38 | 39 | "@nodelib/fs.scandir@2.1.3": 40 | version "2.1.3" 41 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" 42 | integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== 43 | dependencies: 44 | "@nodelib/fs.stat" "2.0.3" 45 | run-parallel "^1.1.9" 46 | 47 | "@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": 48 | version "2.0.3" 49 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" 50 | integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== 51 | 52 | "@nodelib/fs.walk@^1.2.3": 53 | version "1.2.4" 54 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" 55 | integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== 56 | dependencies: 57 | "@nodelib/fs.scandir" "2.1.3" 58 | fastq "^1.6.0" 59 | 60 | "@polka/url@^0.5.0": 61 | version "0.5.0" 62 | resolved "https://registry.yarnpkg.com/@polka/url/-/url-0.5.0.tgz#b21510597fd601e5d7c95008b76bf0d254ebfd31" 63 | integrity sha512-oZLYFEAzUKyi3SKnXvj32ZCEGH6RDnao7COuCVhDydMS9NrCSVXhM79VaKyP5+Zc33m0QXEd2DN3UkU7OsHcfw== 64 | 65 | "@rollup/plugin-commonjs@^11.0.0": 66 | version "11.1.0" 67 | resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-11.1.0.tgz#60636c7a722f54b41e419e1709df05c7234557ef" 68 | integrity sha512-Ycr12N3ZPN96Fw2STurD21jMqzKwL9QuFhms3SD7KKRK7oaXUsBU9Zt0jL/rOPHiPYisI21/rXGO3jr9BnLHUA== 69 | dependencies: 70 | "@rollup/pluginutils" "^3.0.8" 71 | commondir "^1.0.1" 72 | estree-walker "^1.0.1" 73 | glob "^7.1.2" 74 | is-reference "^1.1.2" 75 | magic-string "^0.25.2" 76 | resolve "^1.11.0" 77 | 78 | "@rollup/plugin-node-resolve@^7.0.0": 79 | version "7.1.3" 80 | resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz#80de384edfbd7bfc9101164910f86078151a3eca" 81 | integrity sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q== 82 | dependencies: 83 | "@rollup/pluginutils" "^3.0.8" 84 | "@types/resolve" "0.0.8" 85 | builtin-modules "^3.1.0" 86 | is-module "^1.0.0" 87 | resolve "^1.14.2" 88 | 89 | "@rollup/pluginutils@^3.0.8": 90 | version "3.1.0" 91 | resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" 92 | integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== 93 | dependencies: 94 | "@types/estree" "0.0.39" 95 | estree-walker "^1.0.1" 96 | picomatch "^2.2.2" 97 | 98 | "@types/color-name@^1.1.1": 99 | version "1.1.1" 100 | resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" 101 | integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== 102 | 103 | "@types/estree@*": 104 | version "0.0.45" 105 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884" 106 | integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g== 107 | 108 | "@types/estree@0.0.39": 109 | version "0.0.39" 110 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" 111 | integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== 112 | 113 | "@types/node@*": 114 | version "14.11.2" 115 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.2.tgz#2de1ed6670439387da1c9f549a2ade2b0a799256" 116 | integrity sha512-jiE3QIxJ8JLNcb1Ps6rDbysDhN4xa8DJJvuC9prr6w+1tIh+QAbYyNF3tyiZNLDBIuBCf4KEcV2UvQm/V60xfA== 117 | 118 | "@types/resolve@0.0.8": 119 | version "0.0.8" 120 | resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" 121 | integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== 122 | dependencies: 123 | "@types/node" "*" 124 | 125 | acorn-jsx@^5.2.0: 126 | version "5.3.1" 127 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" 128 | integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== 129 | 130 | acorn-node@^1.6.1: 131 | version "1.8.2" 132 | resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" 133 | integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== 134 | dependencies: 135 | acorn "^7.0.0" 136 | acorn-walk "^7.0.0" 137 | xtend "^4.0.2" 138 | 139 | acorn-walk@^7.0.0: 140 | version "7.2.0" 141 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" 142 | integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== 143 | 144 | acorn@^7.0.0, acorn@^7.1.0, acorn@^7.1.1: 145 | version "7.4.0" 146 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" 147 | integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== 148 | 149 | ajv@^6.10.0, ajv@^6.10.2: 150 | version "6.12.5" 151 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.5.tgz#19b0e8bae8f476e5ba666300387775fb1a00a4da" 152 | integrity sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag== 153 | dependencies: 154 | fast-deep-equal "^3.1.1" 155 | fast-json-stable-stringify "^2.0.0" 156 | json-schema-traverse "^0.4.1" 157 | uri-js "^4.2.2" 158 | 159 | ansi-escapes@^4.2.1: 160 | version "4.3.1" 161 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" 162 | integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== 163 | dependencies: 164 | type-fest "^0.11.0" 165 | 166 | ansi-regex@^4.1.0: 167 | version "4.1.0" 168 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 169 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 170 | 171 | ansi-regex@^5.0.0: 172 | version "5.0.0" 173 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" 174 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== 175 | 176 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 177 | version "3.2.1" 178 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 179 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 180 | dependencies: 181 | color-convert "^1.9.0" 182 | 183 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 184 | version "4.2.1" 185 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" 186 | integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== 187 | dependencies: 188 | "@types/color-name" "^1.1.1" 189 | color-convert "^2.0.1" 190 | 191 | anymatch@~3.1.1: 192 | version "3.1.1" 193 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" 194 | integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== 195 | dependencies: 196 | normalize-path "^3.0.0" 197 | picomatch "^2.0.4" 198 | 199 | argparse@^1.0.7: 200 | version "1.0.10" 201 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 202 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 203 | dependencies: 204 | sprintf-js "~1.0.2" 205 | 206 | array-union@^2.1.0: 207 | version "2.1.0" 208 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 209 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 210 | 211 | astral-regex@^1.0.0: 212 | version "1.0.0" 213 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" 214 | integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== 215 | 216 | async-limiter@~1.0.0: 217 | version "1.0.1" 218 | resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" 219 | integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== 220 | 221 | at-least-node@^1.0.0: 222 | version "1.0.0" 223 | resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" 224 | integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== 225 | 226 | autoprefixer@^9.4.5: 227 | version "9.8.6" 228 | resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" 229 | integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== 230 | dependencies: 231 | browserslist "^4.12.0" 232 | caniuse-lite "^1.0.30001109" 233 | colorette "^1.2.1" 234 | normalize-range "^0.1.2" 235 | num2fraction "^1.2.2" 236 | postcss "^7.0.32" 237 | postcss-value-parser "^4.1.0" 238 | 239 | balanced-match@^1.0.0: 240 | version "1.0.0" 241 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 242 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 243 | 244 | binary-extensions@^2.0.0: 245 | version "2.1.0" 246 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" 247 | integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== 248 | 249 | brace-expansion@^1.1.7: 250 | version "1.1.11" 251 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 252 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 253 | dependencies: 254 | balanced-match "^1.0.0" 255 | concat-map "0.0.1" 256 | 257 | braces@^3.0.1, braces@~3.0.2: 258 | version "3.0.2" 259 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 260 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 261 | dependencies: 262 | fill-range "^7.0.1" 263 | 264 | browserslist@^4.12.0: 265 | version "4.14.5" 266 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.5.tgz#1c751461a102ddc60e40993639b709be7f2c4015" 267 | integrity sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA== 268 | dependencies: 269 | caniuse-lite "^1.0.30001135" 270 | electron-to-chromium "^1.3.571" 271 | escalade "^3.1.0" 272 | node-releases "^1.1.61" 273 | 274 | buffer-from@^1.0.0: 275 | version "1.1.1" 276 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 277 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 278 | 279 | builtin-modules@^3.1.0: 280 | version "3.1.0" 281 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" 282 | integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== 283 | 284 | bytes@^3.0.0: 285 | version "3.1.0" 286 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" 287 | integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== 288 | 289 | caller-callsite@^2.0.0: 290 | version "2.0.0" 291 | resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" 292 | integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= 293 | dependencies: 294 | callsites "^2.0.0" 295 | 296 | caller-path@^2.0.0: 297 | version "2.0.0" 298 | resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" 299 | integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= 300 | dependencies: 301 | caller-callsite "^2.0.0" 302 | 303 | callsites@^2.0.0: 304 | version "2.0.0" 305 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" 306 | integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= 307 | 308 | callsites@^3.0.0: 309 | version "3.1.0" 310 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 311 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 312 | 313 | camelcase-css@^2.0.1: 314 | version "2.0.1" 315 | resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" 316 | integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== 317 | 318 | camelcase@^5.0.0: 319 | version "5.3.1" 320 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 321 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 322 | 323 | caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001135: 324 | version "1.0.30001137" 325 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001137.tgz#6f0127b1d3788742561a25af3607a17fc778b803" 326 | integrity sha512-54xKQZTqZrKVHmVz0+UvdZR6kQc7pJDgfhsMYDG19ID1BWoNnDMFm5Q3uSBSU401pBvKYMsHAt9qhEDcxmk8aw== 327 | 328 | chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: 329 | version "2.4.2" 330 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 331 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 332 | dependencies: 333 | ansi-styles "^3.2.1" 334 | escape-string-regexp "^1.0.5" 335 | supports-color "^5.3.0" 336 | 337 | "chalk@^3.0.0 || ^4.0.0", chalk@^4.0.0, chalk@^4.1.0: 338 | version "4.1.0" 339 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" 340 | integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== 341 | dependencies: 342 | ansi-styles "^4.1.0" 343 | supports-color "^7.1.0" 344 | 345 | chardet@^0.7.0: 346 | version "0.7.0" 347 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" 348 | integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== 349 | 350 | chokidar@^3.3.0: 351 | version "3.4.2" 352 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d" 353 | integrity sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A== 354 | dependencies: 355 | anymatch "~3.1.1" 356 | braces "~3.0.2" 357 | glob-parent "~5.1.0" 358 | is-binary-path "~2.1.0" 359 | is-glob "~4.0.1" 360 | normalize-path "~3.0.0" 361 | readdirp "~3.4.0" 362 | optionalDependencies: 363 | fsevents "~2.1.2" 364 | 365 | cli-cursor@^3.1.0: 366 | version "3.1.0" 367 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" 368 | integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== 369 | dependencies: 370 | restore-cursor "^3.1.0" 371 | 372 | cli-width@^3.0.0: 373 | version "3.0.0" 374 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" 375 | integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== 376 | 377 | cliui@^6.0.0: 378 | version "6.0.0" 379 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" 380 | integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== 381 | dependencies: 382 | string-width "^4.2.0" 383 | strip-ansi "^6.0.0" 384 | wrap-ansi "^6.2.0" 385 | 386 | color-convert@^1.9.0, color-convert@^1.9.1: 387 | version "1.9.3" 388 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 389 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 390 | dependencies: 391 | color-name "1.1.3" 392 | 393 | color-convert@^2.0.1: 394 | version "2.0.1" 395 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 396 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 397 | dependencies: 398 | color-name "~1.1.4" 399 | 400 | color-name@1.1.3: 401 | version "1.1.3" 402 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 403 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 404 | 405 | color-name@^1.0.0, color-name@~1.1.4: 406 | version "1.1.4" 407 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 408 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 409 | 410 | color-string@^1.5.2: 411 | version "1.5.3" 412 | resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" 413 | integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== 414 | dependencies: 415 | color-name "^1.0.0" 416 | simple-swizzle "^0.2.2" 417 | 418 | color@^3.1.2: 419 | version "3.1.2" 420 | resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" 421 | integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg== 422 | dependencies: 423 | color-convert "^1.9.1" 424 | color-string "^1.5.2" 425 | 426 | colorette@^1.2.1: 427 | version "1.2.1" 428 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" 429 | integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== 430 | 431 | commander@^2.20.0: 432 | version "2.20.3" 433 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 434 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 435 | 436 | commander@^5.0.0: 437 | version "5.1.0" 438 | resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" 439 | integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== 440 | 441 | commondir@^1.0.1: 442 | version "1.0.1" 443 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" 444 | integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= 445 | 446 | concat-map@0.0.1: 447 | version "0.0.1" 448 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 449 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 450 | 451 | console-clear@^1.1.0: 452 | version "1.1.1" 453 | resolved "https://registry.yarnpkg.com/console-clear/-/console-clear-1.1.1.tgz#995e20cbfbf14dd792b672cde387bd128d674bf7" 454 | integrity sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ== 455 | 456 | cosmiconfig@^5.0.0: 457 | version "5.2.1" 458 | resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" 459 | integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== 460 | dependencies: 461 | import-fresh "^2.0.0" 462 | is-directory "^0.3.1" 463 | js-yaml "^3.13.1" 464 | parse-json "^4.0.0" 465 | 466 | cross-spawn@^6.0.5: 467 | version "6.0.5" 468 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 469 | integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== 470 | dependencies: 471 | nice-try "^1.0.4" 472 | path-key "^2.0.1" 473 | semver "^5.5.0" 474 | shebang-command "^1.2.0" 475 | which "^1.2.9" 476 | 477 | css-unit-converter@^1.1.1: 478 | version "1.1.2" 479 | resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.2.tgz#4c77f5a1954e6dbff60695ecb214e3270436ab21" 480 | integrity sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA== 481 | 482 | cssesc@^3.0.0: 483 | version "3.0.0" 484 | resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" 485 | integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== 486 | 487 | debug@^4.0.1: 488 | version "4.2.0" 489 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" 490 | integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== 491 | dependencies: 492 | ms "2.1.2" 493 | 494 | decamelize@^1.2.0: 495 | version "1.2.0" 496 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 497 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 498 | 499 | deep-is@~0.1.3: 500 | version "0.1.3" 501 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 502 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 503 | 504 | define-properties@^1.1.3: 505 | version "1.1.3" 506 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 507 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 508 | dependencies: 509 | object-keys "^1.0.12" 510 | 511 | defined@^1.0.0: 512 | version "1.0.0" 513 | resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" 514 | integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= 515 | 516 | dependency-graph@^0.9.0: 517 | version "0.9.0" 518 | resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.9.0.tgz#11aed7e203bc8b00f48356d92db27b265c445318" 519 | integrity sha512-9YLIBURXj4DJMFALxXw9K3Y3rwb5Fk0X5/8ipCzaN84+gKxoHK43tVKRNakCQbiEx07E8Uwhuq21BpUagFhZ8w== 520 | 521 | detective@^5.2.0: 522 | version "5.2.0" 523 | resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b" 524 | integrity sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg== 525 | dependencies: 526 | acorn-node "^1.6.1" 527 | defined "^1.0.0" 528 | minimist "^1.1.1" 529 | 530 | dir-glob@^3.0.1: 531 | version "3.0.1" 532 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 533 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 534 | dependencies: 535 | path-type "^4.0.0" 536 | 537 | doctrine@^3.0.0: 538 | version "3.0.0" 539 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 540 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 541 | dependencies: 542 | esutils "^2.0.2" 543 | 544 | electron-to-chromium@^1.3.571: 545 | version "1.3.573" 546 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.573.tgz#6a21e13ee894eb441677333d5fe9fa3a449689a1" 547 | integrity sha512-oypaNmexr8w0m2GX67fGLQ0Xgsd7uXz7GcwaHZ9eW3ZdQ8uA2+V/wXmLdMTk3gcacbqQGAN7CXWG3fOkfKYftw== 548 | 549 | emoji-regex@^7.0.1: 550 | version "7.0.3" 551 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 552 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 553 | 554 | emoji-regex@^8.0.0: 555 | version "8.0.0" 556 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 557 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 558 | 559 | error-ex@^1.3.1: 560 | version "1.3.2" 561 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 562 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 563 | dependencies: 564 | is-arrayish "^0.2.1" 565 | 566 | es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: 567 | version "1.17.6" 568 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" 569 | integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== 570 | dependencies: 571 | es-to-primitive "^1.2.1" 572 | function-bind "^1.1.1" 573 | has "^1.0.3" 574 | has-symbols "^1.0.1" 575 | is-callable "^1.2.0" 576 | is-regex "^1.1.0" 577 | object-inspect "^1.7.0" 578 | object-keys "^1.1.1" 579 | object.assign "^4.1.0" 580 | string.prototype.trimend "^1.0.1" 581 | string.prototype.trimstart "^1.0.1" 582 | 583 | es-abstract@^1.18.0-next.0: 584 | version "1.18.0-next.0" 585 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.0.tgz#b302834927e624d8e5837ed48224291f2c66e6fc" 586 | integrity sha512-elZXTZXKn51hUBdJjSZGYRujuzilgXo8vSPQzjGYXLvSlGiCo8VO8ZGV3kjo9a0WNJJ57hENagwbtlRuHuzkcQ== 587 | dependencies: 588 | es-to-primitive "^1.2.1" 589 | function-bind "^1.1.1" 590 | has "^1.0.3" 591 | has-symbols "^1.0.1" 592 | is-callable "^1.2.0" 593 | is-negative-zero "^2.0.0" 594 | is-regex "^1.1.1" 595 | object-inspect "^1.8.0" 596 | object-keys "^1.1.1" 597 | object.assign "^4.1.0" 598 | string.prototype.trimend "^1.0.1" 599 | string.prototype.trimstart "^1.0.1" 600 | 601 | es-to-primitive@^1.2.1: 602 | version "1.2.1" 603 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" 604 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 605 | dependencies: 606 | is-callable "^1.1.4" 607 | is-date-object "^1.0.1" 608 | is-symbol "^1.0.2" 609 | 610 | escalade@^3.1.0: 611 | version "3.1.0" 612 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.0.tgz#e8e2d7c7a8b76f6ee64c2181d6b8151441602d4e" 613 | integrity sha512-mAk+hPSO8fLDkhV7V0dXazH5pDc6MrjBTPyD3VeKzxnVFjH1MIxbCdqGZB9O8+EwWakZs3ZCbDS4IpRt79V1ig== 614 | 615 | escape-string-regexp@^1.0.5: 616 | version "1.0.5" 617 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 618 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 619 | 620 | eslint-plugin-svelte3@^2.7.3: 621 | version "2.7.3" 622 | resolved "https://registry.yarnpkg.com/eslint-plugin-svelte3/-/eslint-plugin-svelte3-2.7.3.tgz#e793b646b848e717674fe668c21b909cfa025eb3" 623 | integrity sha512-p6HhxyICX9x/x+8WSy6AVk2bmv9ayoznoTSyCvK47th/k/07ksuJixMwbGX9qxJVAmPBaYMjEIMSEZtJHPIN7w== 624 | 625 | eslint-scope@^5.0.0: 626 | version "5.1.1" 627 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 628 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 629 | dependencies: 630 | esrecurse "^4.3.0" 631 | estraverse "^4.1.1" 632 | 633 | eslint-utils@^1.4.3: 634 | version "1.4.3" 635 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" 636 | integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== 637 | dependencies: 638 | eslint-visitor-keys "^1.1.0" 639 | 640 | eslint-visitor-keys@^1.1.0: 641 | version "1.3.0" 642 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" 643 | integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== 644 | 645 | eslint@^6.8.0: 646 | version "6.8.0" 647 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" 648 | integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== 649 | dependencies: 650 | "@babel/code-frame" "^7.0.0" 651 | ajv "^6.10.0" 652 | chalk "^2.1.0" 653 | cross-spawn "^6.0.5" 654 | debug "^4.0.1" 655 | doctrine "^3.0.0" 656 | eslint-scope "^5.0.0" 657 | eslint-utils "^1.4.3" 658 | eslint-visitor-keys "^1.1.0" 659 | espree "^6.1.2" 660 | esquery "^1.0.1" 661 | esutils "^2.0.2" 662 | file-entry-cache "^5.0.1" 663 | functional-red-black-tree "^1.0.1" 664 | glob-parent "^5.0.0" 665 | globals "^12.1.0" 666 | ignore "^4.0.6" 667 | import-fresh "^3.0.0" 668 | imurmurhash "^0.1.4" 669 | inquirer "^7.0.0" 670 | is-glob "^4.0.0" 671 | js-yaml "^3.13.1" 672 | json-stable-stringify-without-jsonify "^1.0.1" 673 | levn "^0.3.0" 674 | lodash "^4.17.14" 675 | minimatch "^3.0.4" 676 | mkdirp "^0.5.1" 677 | natural-compare "^1.4.0" 678 | optionator "^0.8.3" 679 | progress "^2.0.0" 680 | regexpp "^2.0.1" 681 | semver "^6.1.2" 682 | strip-ansi "^5.2.0" 683 | strip-json-comments "^3.0.1" 684 | table "^5.2.3" 685 | text-table "^0.2.0" 686 | v8-compile-cache "^2.0.3" 687 | 688 | espree@^6.1.2: 689 | version "6.2.1" 690 | resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" 691 | integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== 692 | dependencies: 693 | acorn "^7.1.1" 694 | acorn-jsx "^5.2.0" 695 | eslint-visitor-keys "^1.1.0" 696 | 697 | esprima@^4.0.0: 698 | version "4.0.1" 699 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 700 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 701 | 702 | esquery@^1.0.1: 703 | version "1.3.1" 704 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" 705 | integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== 706 | dependencies: 707 | estraverse "^5.1.0" 708 | 709 | esrecurse@^4.3.0: 710 | version "4.3.0" 711 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 712 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 713 | dependencies: 714 | estraverse "^5.2.0" 715 | 716 | estraverse@^4.1.1: 717 | version "4.3.0" 718 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 719 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 720 | 721 | estraverse@^5.1.0, estraverse@^5.2.0: 722 | version "5.2.0" 723 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" 724 | integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== 725 | 726 | estree-walker@^0.6.1: 727 | version "0.6.1" 728 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" 729 | integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== 730 | 731 | estree-walker@^1.0.1: 732 | version "1.0.1" 733 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" 734 | integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== 735 | 736 | esutils@^2.0.2: 737 | version "2.0.3" 738 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 739 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 740 | 741 | external-editor@^3.0.3: 742 | version "3.1.0" 743 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" 744 | integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== 745 | dependencies: 746 | chardet "^0.7.0" 747 | iconv-lite "^0.4.24" 748 | tmp "^0.0.33" 749 | 750 | fake-xml-http-request@^2.1.1: 751 | version "2.1.1" 752 | resolved "https://registry.yarnpkg.com/fake-xml-http-request/-/fake-xml-http-request-2.1.1.tgz#279fdac235840d7a4dff77d98ec44bce9fc690a6" 753 | integrity sha512-Kn2WYYS6cDBS5jq/voOfSGCA0TafOYAUPbEp8mUVpD/DVV5bQIDjlq+MLLvNUokkbTpjBVlLDaM5PnX+PwZMlw== 754 | 755 | fast-deep-equal@^3.1.1: 756 | version "3.1.3" 757 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 758 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 759 | 760 | fast-glob@^3.1.1: 761 | version "3.2.4" 762 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" 763 | integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== 764 | dependencies: 765 | "@nodelib/fs.stat" "^2.0.2" 766 | "@nodelib/fs.walk" "^1.2.3" 767 | glob-parent "^5.1.0" 768 | merge2 "^1.3.0" 769 | micromatch "^4.0.2" 770 | picomatch "^2.2.1" 771 | 772 | fast-json-stable-stringify@^2.0.0: 773 | version "2.1.0" 774 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 775 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 776 | 777 | fast-levenshtein@~2.0.6: 778 | version "2.0.6" 779 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 780 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 781 | 782 | fastq@^1.6.0: 783 | version "1.8.0" 784 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481" 785 | integrity sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q== 786 | dependencies: 787 | reusify "^1.0.4" 788 | 789 | figures@^3.0.0: 790 | version "3.2.0" 791 | resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" 792 | integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== 793 | dependencies: 794 | escape-string-regexp "^1.0.5" 795 | 796 | file-entry-cache@^5.0.1: 797 | version "5.0.1" 798 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" 799 | integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== 800 | dependencies: 801 | flat-cache "^2.0.1" 802 | 803 | fill-range@^7.0.1: 804 | version "7.0.1" 805 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 806 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 807 | dependencies: 808 | to-regex-range "^5.0.1" 809 | 810 | find-up@^4.1.0: 811 | version "4.1.0" 812 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 813 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 814 | dependencies: 815 | locate-path "^5.0.0" 816 | path-exists "^4.0.0" 817 | 818 | flat-cache@^2.0.1: 819 | version "2.0.1" 820 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" 821 | integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== 822 | dependencies: 823 | flatted "^2.0.0" 824 | rimraf "2.6.3" 825 | write "1.0.3" 826 | 827 | flatted@^2.0.0: 828 | version "2.0.2" 829 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" 830 | integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== 831 | 832 | fs-extra@^8.0.0: 833 | version "8.1.0" 834 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" 835 | integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== 836 | dependencies: 837 | graceful-fs "^4.2.0" 838 | jsonfile "^4.0.0" 839 | universalify "^0.1.0" 840 | 841 | fs-extra@^9.0.0: 842 | version "9.0.1" 843 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" 844 | integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== 845 | dependencies: 846 | at-least-node "^1.0.0" 847 | graceful-fs "^4.2.0" 848 | jsonfile "^6.0.1" 849 | universalify "^1.0.0" 850 | 851 | fs.realpath@^1.0.0: 852 | version "1.0.0" 853 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 854 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 855 | 856 | fsevents@~2.1.2: 857 | version "2.1.3" 858 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" 859 | integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== 860 | 861 | function-bind@^1.1.1: 862 | version "1.1.1" 863 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 864 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 865 | 866 | functional-red-black-tree@^1.0.1: 867 | version "1.0.1" 868 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 869 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 870 | 871 | get-caller-file@^2.0.1: 872 | version "2.0.5" 873 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 874 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 875 | 876 | get-port@^3.2.0: 877 | version "3.2.0" 878 | resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" 879 | integrity sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw= 880 | 881 | get-stdin@^8.0.0: 882 | version "8.0.0" 883 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" 884 | integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== 885 | 886 | glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: 887 | version "5.1.1" 888 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" 889 | integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== 890 | dependencies: 891 | is-glob "^4.0.1" 892 | 893 | glob@^7.0.0, glob@^7.1.2, glob@^7.1.3: 894 | version "7.1.6" 895 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 896 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 897 | dependencies: 898 | fs.realpath "^1.0.0" 899 | inflight "^1.0.4" 900 | inherits "2" 901 | minimatch "^3.0.4" 902 | once "^1.3.0" 903 | path-is-absolute "^1.0.0" 904 | 905 | globals@^12.1.0: 906 | version "12.4.0" 907 | resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" 908 | integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== 909 | dependencies: 910 | type-fest "^0.8.1" 911 | 912 | globby@^11.0.0: 913 | version "11.0.1" 914 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" 915 | integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== 916 | dependencies: 917 | array-union "^2.1.0" 918 | dir-glob "^3.0.1" 919 | fast-glob "^3.1.1" 920 | ignore "^5.1.4" 921 | merge2 "^1.3.0" 922 | slash "^3.0.0" 923 | 924 | graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: 925 | version "4.2.4" 926 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" 927 | integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== 928 | 929 | has-flag@^3.0.0: 930 | version "3.0.0" 931 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 932 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 933 | 934 | has-flag@^4.0.0: 935 | version "4.0.0" 936 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 937 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 938 | 939 | has-symbols@^1.0.1: 940 | version "1.0.1" 941 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" 942 | integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== 943 | 944 | has@^1.0.3: 945 | version "1.0.3" 946 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 947 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 948 | dependencies: 949 | function-bind "^1.1.1" 950 | 951 | hosted-git-info@^2.1.4: 952 | version "2.8.8" 953 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" 954 | integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== 955 | 956 | html-tags@^3.1.0: 957 | version "3.1.0" 958 | resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" 959 | integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== 960 | 961 | iconv-lite@^0.4.24: 962 | version "0.4.24" 963 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 964 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 965 | dependencies: 966 | safer-buffer ">= 2.1.2 < 3" 967 | 968 | ignore@^4.0.6: 969 | version "4.0.6" 970 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" 971 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== 972 | 973 | ignore@^5.1.4: 974 | version "5.1.8" 975 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" 976 | integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== 977 | 978 | import-cwd@^2.0.0: 979 | version "2.1.0" 980 | resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" 981 | integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= 982 | dependencies: 983 | import-from "^2.1.0" 984 | 985 | import-fresh@^2.0.0: 986 | version "2.0.0" 987 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" 988 | integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= 989 | dependencies: 990 | caller-path "^2.0.0" 991 | resolve-from "^3.0.0" 992 | 993 | import-fresh@^3.0.0: 994 | version "3.2.1" 995 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" 996 | integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== 997 | dependencies: 998 | parent-module "^1.0.0" 999 | resolve-from "^4.0.0" 1000 | 1001 | import-from@^2.1.0: 1002 | version "2.1.0" 1003 | resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" 1004 | integrity sha1-M1238qev/VOqpHHUuAId7ja387E= 1005 | dependencies: 1006 | resolve-from "^3.0.0" 1007 | 1008 | imurmurhash@^0.1.4: 1009 | version "0.1.4" 1010 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1011 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 1012 | 1013 | indexes-of@^1.0.1: 1014 | version "1.0.1" 1015 | resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" 1016 | integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= 1017 | 1018 | inflected@^2.0.4: 1019 | version "2.1.0" 1020 | resolved "https://registry.yarnpkg.com/inflected/-/inflected-2.1.0.tgz#2816ac17a570bbbc8303ca05bca8bf9b3f959687" 1021 | integrity sha512-hAEKNxvHf2Iq3H60oMBHkB4wl5jn3TPF3+fXek/sRwAB5gP9xWs4r7aweSF95f99HFoz69pnZTcu8f0SIHV18w== 1022 | 1023 | inflight@^1.0.4: 1024 | version "1.0.6" 1025 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1026 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1027 | dependencies: 1028 | once "^1.3.0" 1029 | wrappy "1" 1030 | 1031 | inherits@2: 1032 | version "2.0.4" 1033 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1034 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1035 | 1036 | inquirer@^7.0.0: 1037 | version "7.3.3" 1038 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" 1039 | integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== 1040 | dependencies: 1041 | ansi-escapes "^4.2.1" 1042 | chalk "^4.1.0" 1043 | cli-cursor "^3.1.0" 1044 | cli-width "^3.0.0" 1045 | external-editor "^3.0.3" 1046 | figures "^3.0.0" 1047 | lodash "^4.17.19" 1048 | mute-stream "0.0.8" 1049 | run-async "^2.4.0" 1050 | rxjs "^6.6.0" 1051 | string-width "^4.1.0" 1052 | strip-ansi "^6.0.0" 1053 | through "^2.3.6" 1054 | 1055 | is-arrayish@^0.2.1: 1056 | version "0.2.1" 1057 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1058 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 1059 | 1060 | is-arrayish@^0.3.1: 1061 | version "0.3.2" 1062 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" 1063 | integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== 1064 | 1065 | is-binary-path@~2.1.0: 1066 | version "2.1.0" 1067 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 1068 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 1069 | dependencies: 1070 | binary-extensions "^2.0.0" 1071 | 1072 | is-callable@^1.1.4, is-callable@^1.2.0: 1073 | version "1.2.2" 1074 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" 1075 | integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== 1076 | 1077 | is-date-object@^1.0.1: 1078 | version "1.0.2" 1079 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" 1080 | integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== 1081 | 1082 | is-directory@^0.3.1: 1083 | version "0.3.1" 1084 | resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" 1085 | integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= 1086 | 1087 | is-extglob@^2.1.1: 1088 | version "2.1.1" 1089 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1090 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 1091 | 1092 | is-fullwidth-code-point@^2.0.0: 1093 | version "2.0.0" 1094 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1095 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 1096 | 1097 | is-fullwidth-code-point@^3.0.0: 1098 | version "3.0.0" 1099 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1100 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1101 | 1102 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: 1103 | version "4.0.1" 1104 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 1105 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 1106 | dependencies: 1107 | is-extglob "^2.1.1" 1108 | 1109 | is-module@^1.0.0: 1110 | version "1.0.0" 1111 | resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" 1112 | integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= 1113 | 1114 | is-negative-zero@^2.0.0: 1115 | version "2.0.0" 1116 | resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" 1117 | integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= 1118 | 1119 | is-number@^7.0.0: 1120 | version "7.0.0" 1121 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1122 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1123 | 1124 | is-reference@^1.1.2: 1125 | version "1.2.1" 1126 | resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" 1127 | integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== 1128 | dependencies: 1129 | "@types/estree" "*" 1130 | 1131 | is-regex@^1.1.0, is-regex@^1.1.1: 1132 | version "1.1.1" 1133 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" 1134 | integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== 1135 | dependencies: 1136 | has-symbols "^1.0.1" 1137 | 1138 | is-symbol@^1.0.2: 1139 | version "1.0.3" 1140 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" 1141 | integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== 1142 | dependencies: 1143 | has-symbols "^1.0.1" 1144 | 1145 | isexe@^2.0.0: 1146 | version "2.0.0" 1147 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1148 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1149 | 1150 | jest-worker@^24.9.0: 1151 | version "24.9.0" 1152 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" 1153 | integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== 1154 | dependencies: 1155 | merge-stream "^2.0.0" 1156 | supports-color "^6.1.0" 1157 | 1158 | js-tokens@^4.0.0: 1159 | version "4.0.0" 1160 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1161 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1162 | 1163 | js-yaml@^3.13.1: 1164 | version "3.14.0" 1165 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" 1166 | integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== 1167 | dependencies: 1168 | argparse "^1.0.7" 1169 | esprima "^4.0.0" 1170 | 1171 | json-parse-better-errors@^1.0.1: 1172 | version "1.0.2" 1173 | resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" 1174 | integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== 1175 | 1176 | json-schema-traverse@^0.4.1: 1177 | version "0.4.1" 1178 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1179 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1180 | 1181 | json-stable-stringify-without-jsonify@^1.0.1: 1182 | version "1.0.1" 1183 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1184 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 1185 | 1186 | jsonfile@^4.0.0: 1187 | version "4.0.0" 1188 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" 1189 | integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= 1190 | optionalDependencies: 1191 | graceful-fs "^4.1.6" 1192 | 1193 | jsonfile@^6.0.1: 1194 | version "6.0.1" 1195 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" 1196 | integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== 1197 | dependencies: 1198 | universalify "^1.0.0" 1199 | optionalDependencies: 1200 | graceful-fs "^4.1.6" 1201 | 1202 | kleur@^3.0.0: 1203 | version "3.0.3" 1204 | resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" 1205 | integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== 1206 | 1207 | levn@^0.3.0, levn@~0.3.0: 1208 | version "0.3.0" 1209 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 1210 | integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= 1211 | dependencies: 1212 | prelude-ls "~1.1.2" 1213 | type-check "~0.3.2" 1214 | 1215 | livereload-js@^3.1.0: 1216 | version "3.3.1" 1217 | resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-3.3.1.tgz#61f887468086762e61fb2987412cf9d1dda99202" 1218 | integrity sha512-CBu1gTEfzVhlOK1WASKAAJ9Qx1fHECTq0SUB67sfxwQssopTyvzqTlgl+c0h9pZ6V+Fzd2rc510ppuNusg9teQ== 1219 | 1220 | livereload@^0.9.1: 1221 | version "0.9.1" 1222 | resolved "https://registry.yarnpkg.com/livereload/-/livereload-0.9.1.tgz#65125dabdf2db4fd3f1169e953fe56e3bcc6f477" 1223 | integrity sha512-9g7sua11kkyZNo2hLRCG3LuZZwqexoyEyecSlV8cAsfAVVCZqLzVir6XDqmH0r+Vzgnd5LrdHDMyjtFnJQLAYw== 1224 | dependencies: 1225 | chokidar "^3.3.0" 1226 | livereload-js "^3.1.0" 1227 | opts ">= 1.2.0" 1228 | ws "^6.2.1" 1229 | 1230 | load-json-file@^4.0.0: 1231 | version "4.0.0" 1232 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" 1233 | integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= 1234 | dependencies: 1235 | graceful-fs "^4.1.2" 1236 | parse-json "^4.0.0" 1237 | pify "^3.0.0" 1238 | strip-bom "^3.0.0" 1239 | 1240 | local-access@^1.0.1: 1241 | version "1.0.1" 1242 | resolved "https://registry.yarnpkg.com/local-access/-/local-access-1.0.1.tgz#5121258146d64e869046c642ea4f1dd39ff942bb" 1243 | integrity sha512-ykt2pgN0aqIy6KQC1CqdWTWkmUwNgaOS6dcpHVjyBJONA+Xi7AtSB1vuxC/U/0tjIP3wcRudwQk1YYzUvzk2bA== 1244 | 1245 | locate-path@^5.0.0: 1246 | version "5.0.0" 1247 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 1248 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 1249 | dependencies: 1250 | p-locate "^4.1.0" 1251 | 1252 | lodash.assign@^4.2.0: 1253 | version "4.2.0" 1254 | resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" 1255 | integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc= 1256 | 1257 | lodash.camelcase@^4.3.0: 1258 | version "4.3.0" 1259 | resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" 1260 | integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= 1261 | 1262 | lodash.clonedeep@^4.5.0: 1263 | version "4.5.0" 1264 | resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" 1265 | integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= 1266 | 1267 | lodash.compact@^3.0.1: 1268 | version "3.0.1" 1269 | resolved "https://registry.yarnpkg.com/lodash.compact/-/lodash.compact-3.0.1.tgz#540ce3837745975807471e16b4a2ba21e7256ca5" 1270 | integrity sha1-VAzjg3dFl1gHRx4WtKK6IeclbKU= 1271 | 1272 | lodash.find@^4.6.0: 1273 | version "4.6.0" 1274 | resolved "https://registry.yarnpkg.com/lodash.find/-/lodash.find-4.6.0.tgz#cb0704d47ab71789ffa0de8b97dd926fb88b13b1" 1275 | integrity sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E= 1276 | 1277 | lodash.flatten@^4.4.0: 1278 | version "4.4.0" 1279 | resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" 1280 | integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= 1281 | 1282 | lodash.forin@^4.4.0: 1283 | version "4.4.0" 1284 | resolved "https://registry.yarnpkg.com/lodash.forin/-/lodash.forin-4.4.0.tgz#5d3f20ae564011fbe88381f7d98949c9c9519731" 1285 | integrity sha1-XT8grlZAEfvog4H32YlJyclRlzE= 1286 | 1287 | lodash.get@^4.4.2: 1288 | version "4.4.2" 1289 | resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" 1290 | integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= 1291 | 1292 | lodash.has@^4.5.2: 1293 | version "4.5.2" 1294 | resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862" 1295 | integrity sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI= 1296 | 1297 | lodash.invokemap@^4.6.0: 1298 | version "4.6.0" 1299 | resolved "https://registry.yarnpkg.com/lodash.invokemap/-/lodash.invokemap-4.6.0.tgz#1748cda5d8b0ef8369c4eb3ec54c21feba1f2d62" 1300 | integrity sha1-F0jNpdiw74NpxOs+xUwh/rofLWI= 1301 | 1302 | lodash.isempty@^4.4.0: 1303 | version "4.4.0" 1304 | resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e" 1305 | integrity sha1-b4bL7di+TsmHvpqvM8loTbGzHn4= 1306 | 1307 | lodash.isequal@^4.5.0: 1308 | version "4.5.0" 1309 | resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" 1310 | integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= 1311 | 1312 | lodash.isfunction@^3.0.9: 1313 | version "3.0.9" 1314 | resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051" 1315 | integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw== 1316 | 1317 | lodash.isinteger@^4.0.4: 1318 | version "4.0.4" 1319 | resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" 1320 | integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= 1321 | 1322 | lodash.isplainobject@^4.0.6: 1323 | version "4.0.6" 1324 | resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" 1325 | integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= 1326 | 1327 | lodash.lowerfirst@^4.3.1: 1328 | version "4.3.1" 1329 | resolved "https://registry.yarnpkg.com/lodash.lowerfirst/-/lodash.lowerfirst-4.3.1.tgz#de3c7b12e02c6524a0059c2f6cb7c5c52655a13d" 1330 | integrity sha1-3jx7EuAsZSSgBZwvbLfFxSZVoT0= 1331 | 1332 | lodash.map@^4.6.0: 1333 | version "4.6.0" 1334 | resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" 1335 | integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= 1336 | 1337 | lodash.mapvalues@^4.6.0: 1338 | version "4.6.0" 1339 | resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" 1340 | integrity sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw= 1341 | 1342 | lodash.pick@^4.4.0: 1343 | version "4.4.0" 1344 | resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" 1345 | integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= 1346 | 1347 | lodash.snakecase@^4.1.1: 1348 | version "4.1.1" 1349 | resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" 1350 | integrity sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40= 1351 | 1352 | lodash.toarray@^4.4.0: 1353 | version "4.4.0" 1354 | resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" 1355 | integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= 1356 | 1357 | lodash.uniq@^4.5.0: 1358 | version "4.5.0" 1359 | resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" 1360 | integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= 1361 | 1362 | lodash.uniqby@^4.7.0: 1363 | version "4.7.0" 1364 | resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" 1365 | integrity sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI= 1366 | 1367 | lodash.values@^4.3.0: 1368 | version "4.3.0" 1369 | resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-4.3.0.tgz#a3a6c2b0ebecc5c2cba1c17e6e620fe81b53d347" 1370 | integrity sha1-o6bCsOvsxcLLocF+bmIP6BtT00c= 1371 | 1372 | lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.20: 1373 | version "4.17.20" 1374 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" 1375 | integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== 1376 | 1377 | log-symbols@^2.2.0: 1378 | version "2.2.0" 1379 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" 1380 | integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== 1381 | dependencies: 1382 | chalk "^2.0.1" 1383 | 1384 | magic-string@^0.25.2: 1385 | version "0.25.7" 1386 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" 1387 | integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== 1388 | dependencies: 1389 | sourcemap-codec "^1.4.4" 1390 | 1391 | memorystream@^0.3.1: 1392 | version "0.3.1" 1393 | resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" 1394 | integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= 1395 | 1396 | merge-stream@^2.0.0: 1397 | version "2.0.0" 1398 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 1399 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 1400 | 1401 | merge2@^1.3.0: 1402 | version "1.4.1" 1403 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 1404 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1405 | 1406 | micromatch@^4.0.2: 1407 | version "4.0.2" 1408 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" 1409 | integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== 1410 | dependencies: 1411 | braces "^3.0.1" 1412 | picomatch "^2.0.5" 1413 | 1414 | mime@^2.3.1: 1415 | version "2.4.6" 1416 | resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" 1417 | integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== 1418 | 1419 | mimic-fn@^2.1.0: 1420 | version "2.1.0" 1421 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 1422 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 1423 | 1424 | minimatch@^3.0.4: 1425 | version "3.0.4" 1426 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1427 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1428 | dependencies: 1429 | brace-expansion "^1.1.7" 1430 | 1431 | minimist@^1.1.1, minimist@^1.2.5: 1432 | version "1.2.5" 1433 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 1434 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 1435 | 1436 | miragejs@^0.1.37: 1437 | version "0.1.41" 1438 | resolved "https://registry.yarnpkg.com/miragejs/-/miragejs-0.1.41.tgz#1b06a2d2d9de65624f5bb1cee7ebb4a208f554d0" 1439 | integrity sha512-ur8x7sBskgey64vdzKGVCVC3hgKXWl2Cg5lZbxd6OmKrhr9LCCP/Bv7qh4wsQxIMHZnENxybFATXnrQ+rzSOWQ== 1440 | dependencies: 1441 | "@miragejs/pretender-node-polyfill" "^0.1.0" 1442 | inflected "^2.0.4" 1443 | lodash.assign "^4.2.0" 1444 | lodash.camelcase "^4.3.0" 1445 | lodash.clonedeep "^4.5.0" 1446 | lodash.compact "^3.0.1" 1447 | lodash.find "^4.6.0" 1448 | lodash.flatten "^4.4.0" 1449 | lodash.forin "^4.4.0" 1450 | lodash.get "^4.4.2" 1451 | lodash.has "^4.5.2" 1452 | lodash.invokemap "^4.6.0" 1453 | lodash.isempty "^4.4.0" 1454 | lodash.isequal "^4.5.0" 1455 | lodash.isfunction "^3.0.9" 1456 | lodash.isinteger "^4.0.4" 1457 | lodash.isplainobject "^4.0.6" 1458 | lodash.lowerfirst "^4.3.1" 1459 | lodash.map "^4.6.0" 1460 | lodash.mapvalues "^4.6.0" 1461 | lodash.pick "^4.4.0" 1462 | lodash.snakecase "^4.1.1" 1463 | lodash.uniq "^4.5.0" 1464 | lodash.uniqby "^4.7.0" 1465 | lodash.values "^4.3.0" 1466 | pretender "^3.4.3" 1467 | 1468 | mkdirp@^0.5.1: 1469 | version "0.5.5" 1470 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" 1471 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== 1472 | dependencies: 1473 | minimist "^1.2.5" 1474 | 1475 | mri@^1.1.0: 1476 | version "1.1.6" 1477 | resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.6.tgz#49952e1044db21dbf90f6cd92bc9c9a777d415a6" 1478 | integrity sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ== 1479 | 1480 | ms@2.1.2: 1481 | version "2.1.2" 1482 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1483 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1484 | 1485 | mute-stream@0.0.8: 1486 | version "0.0.8" 1487 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" 1488 | integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== 1489 | 1490 | natural-compare@^1.4.0: 1491 | version "1.4.0" 1492 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1493 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 1494 | 1495 | nice-try@^1.0.4: 1496 | version "1.0.5" 1497 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 1498 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== 1499 | 1500 | node-emoji@^1.8.1: 1501 | version "1.10.0" 1502 | resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" 1503 | integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw== 1504 | dependencies: 1505 | lodash.toarray "^4.4.0" 1506 | 1507 | node-releases@^1.1.61: 1508 | version "1.1.61" 1509 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.61.tgz#707b0fca9ce4e11783612ba4a2fcba09047af16e" 1510 | integrity sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g== 1511 | 1512 | normalize-package-data@^2.3.2: 1513 | version "2.5.0" 1514 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" 1515 | integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== 1516 | dependencies: 1517 | hosted-git-info "^2.1.4" 1518 | resolve "^1.10.0" 1519 | semver "2 || 3 || 4 || 5" 1520 | validate-npm-package-license "^3.0.1" 1521 | 1522 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1523 | version "3.0.0" 1524 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1525 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1526 | 1527 | normalize-range@^0.1.2: 1528 | version "0.1.2" 1529 | resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" 1530 | integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= 1531 | 1532 | normalize.css@^8.0.1: 1533 | version "8.0.1" 1534 | resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3" 1535 | integrity sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg== 1536 | 1537 | npm-run-all@^4.1.5: 1538 | version "4.1.5" 1539 | resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" 1540 | integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== 1541 | dependencies: 1542 | ansi-styles "^3.2.1" 1543 | chalk "^2.4.1" 1544 | cross-spawn "^6.0.5" 1545 | memorystream "^0.3.1" 1546 | minimatch "^3.0.4" 1547 | pidtree "^0.3.0" 1548 | read-pkg "^3.0.0" 1549 | shell-quote "^1.6.1" 1550 | string.prototype.padend "^3.0.0" 1551 | 1552 | num2fraction@^1.2.2: 1553 | version "1.2.2" 1554 | resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" 1555 | integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= 1556 | 1557 | object-assign@^4.1.1: 1558 | version "4.1.1" 1559 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1560 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 1561 | 1562 | object-hash@^2.0.3: 1563 | version "2.0.3" 1564 | resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.0.3.tgz#d12db044e03cd2ca3d77c0570d87225b02e1e6ea" 1565 | integrity sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg== 1566 | 1567 | object-inspect@^1.7.0, object-inspect@^1.8.0: 1568 | version "1.8.0" 1569 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" 1570 | integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== 1571 | 1572 | object-keys@^1.0.12, object-keys@^1.1.1: 1573 | version "1.1.1" 1574 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 1575 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 1576 | 1577 | object.assign@^4.1.0: 1578 | version "4.1.1" 1579 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.1.tgz#303867a666cdd41936ecdedfb1f8f3e32a478cdd" 1580 | integrity sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA== 1581 | dependencies: 1582 | define-properties "^1.1.3" 1583 | es-abstract "^1.18.0-next.0" 1584 | has-symbols "^1.0.1" 1585 | object-keys "^1.1.1" 1586 | 1587 | once@^1.3.0: 1588 | version "1.4.0" 1589 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1590 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1591 | dependencies: 1592 | wrappy "1" 1593 | 1594 | onetime@^5.1.0: 1595 | version "5.1.2" 1596 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" 1597 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== 1598 | dependencies: 1599 | mimic-fn "^2.1.0" 1600 | 1601 | optionator@^0.8.3: 1602 | version "0.8.3" 1603 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" 1604 | integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== 1605 | dependencies: 1606 | deep-is "~0.1.3" 1607 | fast-levenshtein "~2.0.6" 1608 | levn "~0.3.0" 1609 | prelude-ls "~1.1.2" 1610 | type-check "~0.3.2" 1611 | word-wrap "~1.2.3" 1612 | 1613 | "opts@>= 1.2.0": 1614 | version "2.0.2" 1615 | resolved "https://registry.yarnpkg.com/opts/-/opts-2.0.2.tgz#a17e189fbbfee171da559edd8a42423bc5993ce1" 1616 | integrity sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg== 1617 | 1618 | os-tmpdir@~1.0.2: 1619 | version "1.0.2" 1620 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1621 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= 1622 | 1623 | p-limit@^2.2.0: 1624 | version "2.3.0" 1625 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 1626 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 1627 | dependencies: 1628 | p-try "^2.0.0" 1629 | 1630 | p-locate@^4.1.0: 1631 | version "4.1.0" 1632 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 1633 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 1634 | dependencies: 1635 | p-limit "^2.2.0" 1636 | 1637 | p-try@^2.0.0: 1638 | version "2.2.0" 1639 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1640 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1641 | 1642 | parent-module@^1.0.0: 1643 | version "1.0.1" 1644 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1645 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1646 | dependencies: 1647 | callsites "^3.0.0" 1648 | 1649 | parse-json@^4.0.0: 1650 | version "4.0.0" 1651 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" 1652 | integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= 1653 | dependencies: 1654 | error-ex "^1.3.1" 1655 | json-parse-better-errors "^1.0.1" 1656 | 1657 | path-exists@^4.0.0: 1658 | version "4.0.0" 1659 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1660 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1661 | 1662 | path-is-absolute@^1.0.0: 1663 | version "1.0.1" 1664 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1665 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1666 | 1667 | path-key@^2.0.1: 1668 | version "2.0.1" 1669 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 1670 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= 1671 | 1672 | path-parse@^1.0.6: 1673 | version "1.0.6" 1674 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 1675 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 1676 | 1677 | path-type@^3.0.0: 1678 | version "3.0.0" 1679 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" 1680 | integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== 1681 | dependencies: 1682 | pify "^3.0.0" 1683 | 1684 | path-type@^4.0.0: 1685 | version "4.0.0" 1686 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 1687 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1688 | 1689 | picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1, picomatch@^2.2.2: 1690 | version "2.2.2" 1691 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" 1692 | integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== 1693 | 1694 | pidtree@^0.3.0: 1695 | version "0.3.1" 1696 | resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" 1697 | integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== 1698 | 1699 | pify@^2.3.0: 1700 | version "2.3.0" 1701 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 1702 | integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= 1703 | 1704 | pify@^3.0.0: 1705 | version "3.0.0" 1706 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" 1707 | integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= 1708 | 1709 | postcss-cli@^7.1.0: 1710 | version "7.1.2" 1711 | resolved "https://registry.yarnpkg.com/postcss-cli/-/postcss-cli-7.1.2.tgz#ba8d5d918b644bd18e80ad2c698064d4c0da51cd" 1712 | integrity sha512-3mlEmN1v2NVuosMWZM2tP8bgZn7rO5PYxRRrXtdSyL5KipcgBDjJ9ct8/LKxImMCJJi3x5nYhCGFJOkGyEqXBQ== 1713 | dependencies: 1714 | chalk "^4.0.0" 1715 | chokidar "^3.3.0" 1716 | dependency-graph "^0.9.0" 1717 | fs-extra "^9.0.0" 1718 | get-stdin "^8.0.0" 1719 | globby "^11.0.0" 1720 | postcss "^7.0.0" 1721 | postcss-load-config "^2.0.0" 1722 | postcss-reporter "^6.0.0" 1723 | pretty-hrtime "^1.0.3" 1724 | read-cache "^1.0.0" 1725 | yargs "^15.0.2" 1726 | 1727 | postcss-functions@^3.0.0: 1728 | version "3.0.0" 1729 | resolved "https://registry.yarnpkg.com/postcss-functions/-/postcss-functions-3.0.0.tgz#0e94d01444700a481de20de4d55fb2640564250e" 1730 | integrity sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4= 1731 | dependencies: 1732 | glob "^7.1.2" 1733 | object-assign "^4.1.1" 1734 | postcss "^6.0.9" 1735 | postcss-value-parser "^3.3.0" 1736 | 1737 | postcss-js@^2.0.0: 1738 | version "2.0.3" 1739 | resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-2.0.3.tgz#a96f0f23ff3d08cec7dc5b11bf11c5f8077cdab9" 1740 | integrity sha512-zS59pAk3deu6dVHyrGqmC3oDXBdNdajk4k1RyxeVXCrcEDBUBHoIhE4QTsmhxgzXxsaqFDAkUZfmMa5f/N/79w== 1741 | dependencies: 1742 | camelcase-css "^2.0.1" 1743 | postcss "^7.0.18" 1744 | 1745 | postcss-load-config@^2.0.0: 1746 | version "2.1.2" 1747 | resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" 1748 | integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== 1749 | dependencies: 1750 | cosmiconfig "^5.0.0" 1751 | import-cwd "^2.0.0" 1752 | 1753 | postcss-nested@^4.1.1: 1754 | version "4.2.3" 1755 | resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-4.2.3.tgz#c6f255b0a720549776d220d00c4b70cd244136f6" 1756 | integrity sha512-rOv0W1HquRCamWy2kFl3QazJMMe1ku6rCFoAAH+9AcxdbpDeBr6k968MLWuLjvjMcGEip01ak09hKOEgpK9hvw== 1757 | dependencies: 1758 | postcss "^7.0.32" 1759 | postcss-selector-parser "^6.0.2" 1760 | 1761 | postcss-reporter@^6.0.0: 1762 | version "6.0.1" 1763 | resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-6.0.1.tgz#7c055120060a97c8837b4e48215661aafb74245f" 1764 | integrity sha512-LpmQjfRWyabc+fRygxZjpRxfhRf9u/fdlKf4VHG4TSPbV2XNsuISzYW1KL+1aQzx53CAppa1bKG4APIB/DOXXw== 1765 | dependencies: 1766 | chalk "^2.4.1" 1767 | lodash "^4.17.11" 1768 | log-symbols "^2.2.0" 1769 | postcss "^7.0.7" 1770 | 1771 | postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: 1772 | version "6.0.4" 1773 | resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" 1774 | integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== 1775 | dependencies: 1776 | cssesc "^3.0.0" 1777 | indexes-of "^1.0.1" 1778 | uniq "^1.0.1" 1779 | util-deprecate "^1.0.2" 1780 | 1781 | postcss-value-parser@^3.3.0: 1782 | version "3.3.1" 1783 | resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" 1784 | integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== 1785 | 1786 | postcss-value-parser@^4.1.0: 1787 | version "4.1.0" 1788 | resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" 1789 | integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== 1790 | 1791 | postcss@7.0.32: 1792 | version "7.0.32" 1793 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" 1794 | integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== 1795 | dependencies: 1796 | chalk "^2.4.2" 1797 | source-map "^0.6.1" 1798 | supports-color "^6.1.0" 1799 | 1800 | postcss@^6.0.9: 1801 | version "6.0.23" 1802 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" 1803 | integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== 1804 | dependencies: 1805 | chalk "^2.4.1" 1806 | source-map "^0.6.1" 1807 | supports-color "^5.4.0" 1808 | 1809 | postcss@^7.0.0, postcss@^7.0.11, postcss@^7.0.18, postcss@^7.0.32, postcss@^7.0.7: 1810 | version "7.0.34" 1811 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.34.tgz#f2baf57c36010df7de4009940f21532c16d65c20" 1812 | integrity sha512-H/7V2VeNScX9KE83GDrDZNiGT1m2H+UTnlinIzhjlLX9hfMUn1mHNnGeX81a1c8JSBdBvqk7c2ZOG6ZPn5itGw== 1813 | dependencies: 1814 | chalk "^2.4.2" 1815 | source-map "^0.6.1" 1816 | supports-color "^6.1.0" 1817 | 1818 | prelude-ls@~1.1.2: 1819 | version "1.1.2" 1820 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 1821 | integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= 1822 | 1823 | pretender@^3.4.3: 1824 | version "3.4.3" 1825 | resolved "https://registry.yarnpkg.com/pretender/-/pretender-3.4.3.tgz#a3b4160516007075d29127262f3a0063d19896e9" 1826 | integrity sha512-AlbkBly9R8KR+R0sTCJ/ToOeEoUMtt52QVCetui5zoSmeLOU3S8oobFsyPLm1O2txR6t58qDNysqPnA1vVi8Hg== 1827 | dependencies: 1828 | fake-xml-http-request "^2.1.1" 1829 | route-recognizer "^0.3.3" 1830 | 1831 | prettier-plugin-svelte@^0.7.0: 1832 | version "0.7.0" 1833 | resolved "https://registry.yarnpkg.com/prettier-plugin-svelte/-/prettier-plugin-svelte-0.7.0.tgz#5ac0b9f194e0450c88ff1e167cbf3b32d2642df2" 1834 | integrity sha512-SuZSeMh48rx42kCFEpI/xE1XgjxQcS3r22Yo7jIhBYRhwbAa8laNxiIHsfeWWkX8BdyELkEayaTQp4ricckwTQ== 1835 | dependencies: 1836 | tslib "^1.9.3" 1837 | 1838 | prettier@^1.19.1: 1839 | version "1.19.1" 1840 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" 1841 | integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== 1842 | 1843 | pretty-hrtime@^1.0.3: 1844 | version "1.0.3" 1845 | resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" 1846 | integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= 1847 | 1848 | progress@^2.0.0: 1849 | version "2.0.3" 1850 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 1851 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 1852 | 1853 | punycode@^2.1.0: 1854 | version "2.1.1" 1855 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1856 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1857 | 1858 | purgecss@^2.3.0: 1859 | version "2.3.0" 1860 | resolved "https://registry.yarnpkg.com/purgecss/-/purgecss-2.3.0.tgz#5327587abf5795e6541517af8b190a6fb5488bb3" 1861 | integrity sha512-BE5CROfVGsx2XIhxGuZAT7rTH9lLeQx/6M0P7DTXQH4IUc3BBzs9JUzt4yzGf3JrH9enkeq6YJBe9CTtkm1WmQ== 1862 | dependencies: 1863 | commander "^5.0.0" 1864 | glob "^7.0.0" 1865 | postcss "7.0.32" 1866 | postcss-selector-parser "^6.0.2" 1867 | 1868 | randombytes@^2.1.0: 1869 | version "2.1.0" 1870 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 1871 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 1872 | dependencies: 1873 | safe-buffer "^5.1.0" 1874 | 1875 | read-cache@^1.0.0: 1876 | version "1.0.0" 1877 | resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" 1878 | integrity sha1-5mTvMRYRZsl1HNvo28+GtftY93Q= 1879 | dependencies: 1880 | pify "^2.3.0" 1881 | 1882 | read-pkg@^3.0.0: 1883 | version "3.0.0" 1884 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" 1885 | integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= 1886 | dependencies: 1887 | load-json-file "^4.0.0" 1888 | normalize-package-data "^2.3.2" 1889 | path-type "^3.0.0" 1890 | 1891 | readdirp@~3.4.0: 1892 | version "3.4.0" 1893 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" 1894 | integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== 1895 | dependencies: 1896 | picomatch "^2.2.1" 1897 | 1898 | reduce-css-calc@^2.1.6: 1899 | version "2.1.7" 1900 | resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-2.1.7.tgz#1ace2e02c286d78abcd01fd92bfe8097ab0602c2" 1901 | integrity sha512-fDnlZ+AybAS3C7Q9xDq5y8A2z+lT63zLbynew/lur/IR24OQF5x98tfNwf79mzEdfywZ0a2wpM860FhFfMxZlA== 1902 | dependencies: 1903 | css-unit-converter "^1.1.1" 1904 | postcss-value-parser "^3.3.0" 1905 | 1906 | regexpp@^2.0.1: 1907 | version "2.0.1" 1908 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" 1909 | integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== 1910 | 1911 | require-directory@^2.1.1: 1912 | version "2.1.1" 1913 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1914 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 1915 | 1916 | require-main-filename@^2.0.0: 1917 | version "2.0.0" 1918 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 1919 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== 1920 | 1921 | require-relative@^0.8.7: 1922 | version "0.8.7" 1923 | resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de" 1924 | integrity sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4= 1925 | 1926 | resolve-from@^3.0.0: 1927 | version "3.0.0" 1928 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" 1929 | integrity sha1-six699nWiBvItuZTM17rywoYh0g= 1930 | 1931 | resolve-from@^4.0.0: 1932 | version "4.0.0" 1933 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1934 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1935 | 1936 | resolve@^1.10.0, resolve@^1.11.0, resolve@^1.14.2: 1937 | version "1.17.0" 1938 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" 1939 | integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== 1940 | dependencies: 1941 | path-parse "^1.0.6" 1942 | 1943 | restore-cursor@^3.1.0: 1944 | version "3.1.0" 1945 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" 1946 | integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== 1947 | dependencies: 1948 | onetime "^5.1.0" 1949 | signal-exit "^3.0.2" 1950 | 1951 | reusify@^1.0.4: 1952 | version "1.0.4" 1953 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 1954 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1955 | 1956 | rimraf@2.6.3: 1957 | version "2.6.3" 1958 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" 1959 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== 1960 | dependencies: 1961 | glob "^7.1.3" 1962 | 1963 | rollup-plugin-livereload@^1.0.0: 1964 | version "1.3.0" 1965 | resolved "https://registry.yarnpkg.com/rollup-plugin-livereload/-/rollup-plugin-livereload-1.3.0.tgz#8da90df13df6502b9d982997d6ac871092f15fdd" 1966 | integrity sha512-abyqXaB21+nFHo+vJULBqfzNx6zXABC19UyvqgDfdoxR/8pFAd041GO+GIUe8ZYC2DbuMUmioh1Lvbk14YLZgw== 1967 | dependencies: 1968 | livereload "^0.9.1" 1969 | 1970 | rollup-plugin-svelte@^5.0.3: 1971 | version "5.2.3" 1972 | resolved "https://registry.yarnpkg.com/rollup-plugin-svelte/-/rollup-plugin-svelte-5.2.3.tgz#efdc15e3e3fdd9b9f1100fdc14a8532b4e587bc8" 1973 | integrity sha512-513vOht9A93OV7fvmpIq8mD1JFgTZ5LidmpULKM2Od9P1l8oI5KwvO32fwCnASuVJS1EkRfvCnS7vKQ8DF4srg== 1974 | dependencies: 1975 | require-relative "^0.8.7" 1976 | rollup-pluginutils "^2.8.2" 1977 | sourcemap-codec "^1.4.8" 1978 | 1979 | rollup-plugin-terser@^5.1.2: 1980 | version "5.3.1" 1981 | resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz#8c650062c22a8426c64268548957463bf981b413" 1982 | integrity sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w== 1983 | dependencies: 1984 | "@babel/code-frame" "^7.5.5" 1985 | jest-worker "^24.9.0" 1986 | rollup-pluginutils "^2.8.2" 1987 | serialize-javascript "^4.0.0" 1988 | terser "^4.6.2" 1989 | 1990 | rollup-pluginutils@^2.8.2: 1991 | version "2.8.2" 1992 | resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" 1993 | integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== 1994 | dependencies: 1995 | estree-walker "^0.6.1" 1996 | 1997 | rollup@^1.20.0: 1998 | version "1.32.1" 1999 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.32.1.tgz#4480e52d9d9e2ae4b46ba0d9ddeaf3163940f9c4" 2000 | integrity sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A== 2001 | dependencies: 2002 | "@types/estree" "*" 2003 | "@types/node" "*" 2004 | acorn "^7.1.0" 2005 | 2006 | route-recognizer@^0.3.3: 2007 | version "0.3.4" 2008 | resolved "https://registry.yarnpkg.com/route-recognizer/-/route-recognizer-0.3.4.tgz#39ab1ffbce1c59e6d2bdca416f0932611e4f3ca3" 2009 | integrity sha512-2+MhsfPhvauN1O8KaXpXAOfR/fwe8dnUXVM+xw7yt40lJRfPVQxV6yryZm0cgRvAj5fMF/mdRZbL2ptwbs5i2g== 2010 | 2011 | run-async@^2.4.0: 2012 | version "2.4.1" 2013 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" 2014 | integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== 2015 | 2016 | run-parallel@^1.1.9: 2017 | version "1.1.9" 2018 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" 2019 | integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== 2020 | 2021 | rxjs@^6.6.0: 2022 | version "6.6.3" 2023 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" 2024 | integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== 2025 | dependencies: 2026 | tslib "^1.9.0" 2027 | 2028 | sade@^1.4.0: 2029 | version "1.7.3" 2030 | resolved "https://registry.yarnpkg.com/sade/-/sade-1.7.3.tgz#a217ccc4fb4abb2d271648bf48f6628b2636fa1b" 2031 | integrity sha512-m4BctppMvJ60W1dXnHq7jMmFe3hPJZDAH85kQ3ACTo7XZNVUuTItCQ+2HfyaMeV5cKrbw7l4vD/6We3GBxvdJw== 2032 | dependencies: 2033 | mri "^1.1.0" 2034 | 2035 | safe-buffer@^5.1.0: 2036 | version "5.2.1" 2037 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 2038 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 2039 | 2040 | "safer-buffer@>= 2.1.2 < 3": 2041 | version "2.1.2" 2042 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 2043 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 2044 | 2045 | "semver@2 || 3 || 4 || 5", semver@^5.5.0: 2046 | version "5.7.1" 2047 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 2048 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 2049 | 2050 | semver@^6.1.2: 2051 | version "6.3.0" 2052 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 2053 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 2054 | 2055 | serialize-javascript@^4.0.0: 2056 | version "4.0.0" 2057 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" 2058 | integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== 2059 | dependencies: 2060 | randombytes "^2.1.0" 2061 | 2062 | set-blocking@^2.0.0: 2063 | version "2.0.0" 2064 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 2065 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 2066 | 2067 | shebang-command@^1.2.0: 2068 | version "1.2.0" 2069 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 2070 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 2071 | dependencies: 2072 | shebang-regex "^1.0.0" 2073 | 2074 | shebang-regex@^1.0.0: 2075 | version "1.0.0" 2076 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 2077 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 2078 | 2079 | shell-quote@^1.6.1: 2080 | version "1.7.2" 2081 | resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" 2082 | integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== 2083 | 2084 | signal-exit@^3.0.2: 2085 | version "3.0.3" 2086 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" 2087 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== 2088 | 2089 | simple-swizzle@^0.2.2: 2090 | version "0.2.2" 2091 | resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" 2092 | integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= 2093 | dependencies: 2094 | is-arrayish "^0.3.1" 2095 | 2096 | sirv-cli@^0.4.4: 2097 | version "0.4.6" 2098 | resolved "https://registry.yarnpkg.com/sirv-cli/-/sirv-cli-0.4.6.tgz#c28ab20deb3b34637f5a60863dc350f055abca04" 2099 | integrity sha512-/Vj85/kBvPL+n9ibgX6FicLE8VjidC1BhlX67PYPBfbBAphzR6i0k0HtU5c2arejfU3uzq8l3SYPCwl1x7z6Ww== 2100 | dependencies: 2101 | console-clear "^1.1.0" 2102 | get-port "^3.2.0" 2103 | kleur "^3.0.0" 2104 | local-access "^1.0.1" 2105 | sade "^1.4.0" 2106 | sirv "^0.4.6" 2107 | tinydate "^1.0.0" 2108 | 2109 | sirv@^0.4.6: 2110 | version "0.4.6" 2111 | resolved "https://registry.yarnpkg.com/sirv/-/sirv-0.4.6.tgz#185e44eb93d24009dd183b7494285c5180b81f22" 2112 | integrity sha512-rYpOXlNbpHiY4nVXxuDf4mXPvKz1reZGap/LkWp9TvcZ84qD/nPBjjH/6GZsgIjVMbOslnY8YYULAyP8jMn1GQ== 2113 | dependencies: 2114 | "@polka/url" "^0.5.0" 2115 | mime "^2.3.1" 2116 | 2117 | slash@^3.0.0: 2118 | version "3.0.0" 2119 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 2120 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 2121 | 2122 | slice-ansi@^2.1.0: 2123 | version "2.1.0" 2124 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" 2125 | integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== 2126 | dependencies: 2127 | ansi-styles "^3.2.0" 2128 | astral-regex "^1.0.0" 2129 | is-fullwidth-code-point "^2.0.0" 2130 | 2131 | source-map-support@~0.5.12: 2132 | version "0.5.19" 2133 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" 2134 | integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== 2135 | dependencies: 2136 | buffer-from "^1.0.0" 2137 | source-map "^0.6.0" 2138 | 2139 | source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: 2140 | version "0.6.1" 2141 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 2142 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 2143 | 2144 | sourcemap-codec@^1.4.4, sourcemap-codec@^1.4.8: 2145 | version "1.4.8" 2146 | resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" 2147 | integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== 2148 | 2149 | spdx-correct@^3.0.0: 2150 | version "3.1.1" 2151 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" 2152 | integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== 2153 | dependencies: 2154 | spdx-expression-parse "^3.0.0" 2155 | spdx-license-ids "^3.0.0" 2156 | 2157 | spdx-exceptions@^2.1.0: 2158 | version "2.3.0" 2159 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" 2160 | integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== 2161 | 2162 | spdx-expression-parse@^3.0.0: 2163 | version "3.0.1" 2164 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" 2165 | integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== 2166 | dependencies: 2167 | spdx-exceptions "^2.1.0" 2168 | spdx-license-ids "^3.0.0" 2169 | 2170 | spdx-license-ids@^3.0.0: 2171 | version "3.0.6" 2172 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz#c80757383c28abf7296744998cbc106ae8b854ce" 2173 | integrity sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw== 2174 | 2175 | sprintf-js@~1.0.2: 2176 | version "1.0.3" 2177 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 2178 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 2179 | 2180 | string-width@^3.0.0: 2181 | version "3.1.0" 2182 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 2183 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 2184 | dependencies: 2185 | emoji-regex "^7.0.1" 2186 | is-fullwidth-code-point "^2.0.0" 2187 | strip-ansi "^5.1.0" 2188 | 2189 | string-width@^4.1.0, string-width@^4.2.0: 2190 | version "4.2.0" 2191 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" 2192 | integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== 2193 | dependencies: 2194 | emoji-regex "^8.0.0" 2195 | is-fullwidth-code-point "^3.0.0" 2196 | strip-ansi "^6.0.0" 2197 | 2198 | string.prototype.padend@^3.0.0: 2199 | version "3.1.0" 2200 | resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz#dc08f57a8010dc5c153550318f67e13adbb72ac3" 2201 | integrity sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA== 2202 | dependencies: 2203 | define-properties "^1.1.3" 2204 | es-abstract "^1.17.0-next.1" 2205 | 2206 | string.prototype.trimend@^1.0.1: 2207 | version "1.0.1" 2208 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" 2209 | integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== 2210 | dependencies: 2211 | define-properties "^1.1.3" 2212 | es-abstract "^1.17.5" 2213 | 2214 | string.prototype.trimstart@^1.0.1: 2215 | version "1.0.1" 2216 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" 2217 | integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== 2218 | dependencies: 2219 | define-properties "^1.1.3" 2220 | es-abstract "^1.17.5" 2221 | 2222 | strip-ansi@^5.1.0, strip-ansi@^5.2.0: 2223 | version "5.2.0" 2224 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 2225 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 2226 | dependencies: 2227 | ansi-regex "^4.1.0" 2228 | 2229 | strip-ansi@^6.0.0: 2230 | version "6.0.0" 2231 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" 2232 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== 2233 | dependencies: 2234 | ansi-regex "^5.0.0" 2235 | 2236 | strip-bom@^3.0.0: 2237 | version "3.0.0" 2238 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 2239 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= 2240 | 2241 | strip-json-comments@^3.0.1: 2242 | version "3.1.1" 2243 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 2244 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 2245 | 2246 | supports-color@^5.3.0, supports-color@^5.4.0: 2247 | version "5.5.0" 2248 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2249 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 2250 | dependencies: 2251 | has-flag "^3.0.0" 2252 | 2253 | supports-color@^6.1.0: 2254 | version "6.1.0" 2255 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" 2256 | integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== 2257 | dependencies: 2258 | has-flag "^3.0.0" 2259 | 2260 | supports-color@^7.1.0: 2261 | version "7.2.0" 2262 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 2263 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 2264 | dependencies: 2265 | has-flag "^4.0.0" 2266 | 2267 | svelte-routing@^1.4.2: 2268 | version "1.4.2" 2269 | resolved "https://registry.yarnpkg.com/svelte-routing/-/svelte-routing-1.4.2.tgz#291160b537c9c73e711731eb099c48bb24cc3419" 2270 | integrity sha512-CSCKRLeOp9vjsDGGOEgL9DPm9HZLgZuTNehyTCl3K+6fCVH1Aw/K/WicavAVNcbsHmdR4wgF//0YVR9hrcdvGA== 2271 | 2272 | svelte@^3.0.0: 2273 | version "3.28.0" 2274 | resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.28.0.tgz#e257fab5666701cf230bea583ceb470bdda1344c" 2275 | integrity sha512-WJW8wD+aTmU5GUnTUjdhVF35mve2MjylubLgB6fGWoXHpYENdwcwWsWvjMQLayzMynqNH733h1Ck8wJzNR7gdQ== 2276 | 2277 | table@^5.2.3: 2278 | version "5.4.6" 2279 | resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" 2280 | integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== 2281 | dependencies: 2282 | ajv "^6.10.2" 2283 | lodash "^4.17.14" 2284 | slice-ansi "^2.1.0" 2285 | string-width "^3.0.0" 2286 | 2287 | tailwindcss@^1.2.0: 2288 | version "1.8.10" 2289 | resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-1.8.10.tgz#945ef151c401c04a1c95e6a6bc747387a8d1b9dc" 2290 | integrity sha512-7QkERG/cWCzsuMqHMwjOaLMVixOGLNBiXsrkssxlE1aWfkxVbGqiuMokR2162xRyaH2mBIHKxmlf1qb3DvIPqw== 2291 | dependencies: 2292 | "@fullhuman/postcss-purgecss" "^2.1.2" 2293 | autoprefixer "^9.4.5" 2294 | browserslist "^4.12.0" 2295 | bytes "^3.0.0" 2296 | chalk "^3.0.0 || ^4.0.0" 2297 | color "^3.1.2" 2298 | detective "^5.2.0" 2299 | fs-extra "^8.0.0" 2300 | html-tags "^3.1.0" 2301 | lodash "^4.17.20" 2302 | node-emoji "^1.8.1" 2303 | normalize.css "^8.0.1" 2304 | object-hash "^2.0.3" 2305 | postcss "^7.0.11" 2306 | postcss-functions "^3.0.0" 2307 | postcss-js "^2.0.0" 2308 | postcss-nested "^4.1.1" 2309 | postcss-selector-parser "^6.0.0" 2310 | postcss-value-parser "^4.1.0" 2311 | pretty-hrtime "^1.0.3" 2312 | reduce-css-calc "^2.1.6" 2313 | resolve "^1.14.2" 2314 | 2315 | terser@^4.6.2: 2316 | version "4.8.0" 2317 | resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" 2318 | integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== 2319 | dependencies: 2320 | commander "^2.20.0" 2321 | source-map "~0.6.1" 2322 | source-map-support "~0.5.12" 2323 | 2324 | text-table@^0.2.0: 2325 | version "0.2.0" 2326 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 2327 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 2328 | 2329 | through@^2.3.6: 2330 | version "2.3.8" 2331 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 2332 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 2333 | 2334 | tinydate@^1.0.0: 2335 | version "1.3.0" 2336 | resolved "https://registry.yarnpkg.com/tinydate/-/tinydate-1.3.0.tgz#e6ca8e5a22b51bb4ea1c3a2a4fd1352dbd4c57fb" 2337 | integrity sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w== 2338 | 2339 | tmp@^0.0.33: 2340 | version "0.0.33" 2341 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" 2342 | integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== 2343 | dependencies: 2344 | os-tmpdir "~1.0.2" 2345 | 2346 | to-regex-range@^5.0.1: 2347 | version "5.0.1" 2348 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 2349 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 2350 | dependencies: 2351 | is-number "^7.0.0" 2352 | 2353 | tslib@^1.9.0, tslib@^1.9.3: 2354 | version "1.13.0" 2355 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" 2356 | integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== 2357 | 2358 | type-check@~0.3.2: 2359 | version "0.3.2" 2360 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 2361 | integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= 2362 | dependencies: 2363 | prelude-ls "~1.1.2" 2364 | 2365 | type-fest@^0.11.0: 2366 | version "0.11.0" 2367 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" 2368 | integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== 2369 | 2370 | type-fest@^0.8.1: 2371 | version "0.8.1" 2372 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" 2373 | integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== 2374 | 2375 | uniq@^1.0.1: 2376 | version "1.0.1" 2377 | resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" 2378 | integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= 2379 | 2380 | universalify@^0.1.0: 2381 | version "0.1.2" 2382 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" 2383 | integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== 2384 | 2385 | universalify@^1.0.0: 2386 | version "1.0.0" 2387 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" 2388 | integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== 2389 | 2390 | uri-js@^4.2.2: 2391 | version "4.4.0" 2392 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" 2393 | integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== 2394 | dependencies: 2395 | punycode "^2.1.0" 2396 | 2397 | util-deprecate@^1.0.2: 2398 | version "1.0.2" 2399 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2400 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 2401 | 2402 | v8-compile-cache@^2.0.3: 2403 | version "2.1.1" 2404 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" 2405 | integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== 2406 | 2407 | validate-npm-package-license@^3.0.1: 2408 | version "3.0.4" 2409 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 2410 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== 2411 | dependencies: 2412 | spdx-correct "^3.0.0" 2413 | spdx-expression-parse "^3.0.0" 2414 | 2415 | which-module@^2.0.0: 2416 | version "2.0.0" 2417 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 2418 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 2419 | 2420 | which@^1.2.9: 2421 | version "1.3.1" 2422 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 2423 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 2424 | dependencies: 2425 | isexe "^2.0.0" 2426 | 2427 | word-wrap@~1.2.3: 2428 | version "1.2.3" 2429 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 2430 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 2431 | 2432 | wrap-ansi@^6.2.0: 2433 | version "6.2.0" 2434 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" 2435 | integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== 2436 | dependencies: 2437 | ansi-styles "^4.0.0" 2438 | string-width "^4.1.0" 2439 | strip-ansi "^6.0.0" 2440 | 2441 | wrappy@1: 2442 | version "1.0.2" 2443 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2444 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 2445 | 2446 | write@1.0.3: 2447 | version "1.0.3" 2448 | resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" 2449 | integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== 2450 | dependencies: 2451 | mkdirp "^0.5.1" 2452 | 2453 | ws@^6.2.1: 2454 | version "6.2.1" 2455 | resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" 2456 | integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== 2457 | dependencies: 2458 | async-limiter "~1.0.0" 2459 | 2460 | xtend@^4.0.2: 2461 | version "4.0.2" 2462 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 2463 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 2464 | 2465 | y18n@^4.0.0: 2466 | version "4.0.0" 2467 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" 2468 | integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== 2469 | 2470 | yargs-parser@^18.1.2: 2471 | version "18.1.3" 2472 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" 2473 | integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== 2474 | dependencies: 2475 | camelcase "^5.0.0" 2476 | decamelize "^1.2.0" 2477 | 2478 | yargs@^15.0.2: 2479 | version "15.4.1" 2480 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" 2481 | integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== 2482 | dependencies: 2483 | cliui "^6.0.0" 2484 | decamelize "^1.2.0" 2485 | find-up "^4.1.0" 2486 | get-caller-file "^2.0.1" 2487 | require-directory "^2.1.1" 2488 | require-main-filename "^2.0.0" 2489 | set-blocking "^2.0.0" 2490 | string-width "^4.2.0" 2491 | which-module "^2.0.0" 2492 | y18n "^4.0.0" 2493 | yargs-parser "^18.1.2" 2494 | -------------------------------------------------------------------------------- /vue-axios-test-utils/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | # Editor directories and files 17 | .idea 18 | .vscode 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | -------------------------------------------------------------------------------- /vue-axios-test-utils/README.md: -------------------------------------------------------------------------------- 1 | # Vue Local Dev and Vue Test Utils with Axios 2 | 3 | This Vue app is set up with Mirage for both local development and UI testing with Vue Test Utils. 4 | 5 | It uses Axios for its network requests, and the test shows how to force Axios to use `window.XMLHttpRequest` so Mirage can intercept the Vue app's network requests. 6 | 7 | The Mirage server is in [src/server.js](./src/server.js). The test is in [tests/unit/example.spec.js](./tests/unit/example.spec.js). 8 | 9 | ## How to use 10 | 11 | Pull down the repo and install deps: 12 | 13 | ```sh 14 | git clone git@github.com:miragejs/examples.git 15 | cd examples/vue-axios-test-utils 16 | yarn 17 | ``` 18 | 19 | To run this app in development against a local Mirage server: 20 | 21 | ```sh 22 | yarn serve 23 | ``` 24 | 25 | To run the Vue Test Utils test: 26 | 27 | ```sh 28 | yarn test:unit 29 | ``` 30 | -------------------------------------------------------------------------------- /vue-axios-test-utils/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/cli-plugin-babel/preset' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /vue-axios-test-utils/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-axios-mocha", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve", 7 | "build": "vue-cli-service build", 8 | "test:unit": "vue-cli-service test:unit", 9 | "lint": "vue-cli-service lint" 10 | }, 11 | "dependencies": { 12 | "axios": "^0.20.0", 13 | "core-js": "^3.6.5", 14 | "flush-promises": "^1.0.2", 15 | "miragejs": "^0.1.41", 16 | "vue": "^2.6.11" 17 | }, 18 | "devDependencies": { 19 | "@vue/cli-plugin-babel": "~4.5.0", 20 | "@vue/cli-plugin-eslint": "~4.5.0", 21 | "@vue/cli-plugin-unit-mocha": "~4.5.0", 22 | "@vue/cli-service": "~4.5.0", 23 | "@vue/test-utils": "^1.0.3", 24 | "babel-eslint": "^10.1.0", 25 | "chai": "^4.1.2", 26 | "eslint": "^6.7.2", 27 | "eslint-plugin-vue": "^6.2.2", 28 | "vue-template-compiler": "^2.6.11" 29 | }, 30 | "eslintConfig": { 31 | "root": true, 32 | "env": { 33 | "node": true 34 | }, 35 | "extends": [ 36 | "plugin:vue/essential", 37 | "eslint:recommended" 38 | ], 39 | "parserOptions": { 40 | "parser": "babel-eslint" 41 | }, 42 | "rules": {}, 43 | "overrides": [ 44 | { 45 | "files": [ 46 | "**/__tests__/*.{j,t}s?(x)", 47 | "**/tests/unit/**/*.spec.{j,t}s?(x)" 48 | ], 49 | "env": { 50 | "mocha": true 51 | } 52 | } 53 | ] 54 | }, 55 | "browserslist": [ 56 | "> 1%", 57 | "last 2 versions", 58 | "not dead" 59 | ] 60 | } 61 | -------------------------------------------------------------------------------- /vue-axios-test-utils/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miragejs/examples/0fd7c5ddcc7a9b212974f116ad9c6aec0d949cb5/vue-axios-test-utils/public/favicon.ico -------------------------------------------------------------------------------- /vue-axios-test-utils/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | <%= htmlWebpackPlugin.options.title %> 9 | 10 | 11 | 14 |
    15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /vue-axios-test-utils/src/App.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 18 | 19 | 29 | -------------------------------------------------------------------------------- /vue-axios-test-utils/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miragejs/examples/0fd7c5ddcc7a9b212974f116ad9c6aec0d949cb5/vue-axios-test-utils/src/assets/logo.png -------------------------------------------------------------------------------- /vue-axios-test-utils/src/components/HelloWorld.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 38 | -------------------------------------------------------------------------------- /vue-axios-test-utils/src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import App from "./App.vue"; 3 | import { makeServer } from "./server"; 4 | 5 | Vue.config.productionTip = false; 6 | 7 | if (process.env.NODE_ENV === "development") { 8 | makeServer(); 9 | } 10 | 11 | new Vue({ 12 | render: (h) => h(App), 13 | }).$mount("#app"); 14 | -------------------------------------------------------------------------------- /vue-axios-test-utils/src/server.js: -------------------------------------------------------------------------------- 1 | import { createServer, Model } from "miragejs"; 2 | 3 | export function makeServer({ environment = "development" } = {}) { 4 | let server = createServer({ 5 | environment, 6 | 7 | models: { 8 | user: Model, 9 | }, 10 | 11 | seeds(server) { 12 | server.create("user", { name: "Bob" }); 13 | server.create("user", { name: "Alice" }); 14 | }, 15 | 16 | routes() { 17 | this.namespace = "api"; 18 | 19 | this.get("/users", (schema) => { 20 | return schema.users.all(); 21 | }); 22 | }, 23 | }); 24 | 25 | return server; 26 | } 27 | -------------------------------------------------------------------------------- /vue-axios-test-utils/tests/unit/example.spec.js: -------------------------------------------------------------------------------- 1 | import { expect } from "chai"; 2 | import { shallowMount } from "@vue/test-utils"; 3 | import HelloWorld from "@/components/HelloWorld.vue"; 4 | import { makeServer } from "../../src/server"; 5 | 6 | describe("HelloWorld.vue", () => { 7 | let server; 8 | let originalXMLHttpRequest = XMLHttpRequest; 9 | 10 | before(() => { 11 | server = makeServer({ environment: "test" }); 12 | // Force node to use the monkey patched window.XMLHttpRequest 13 | // This needs to come after `makeServer()` is called. 14 | // eslint-disable-next-line no-global-assign 15 | XMLHttpRequest = window.XMLHttpRequest; 16 | }); 17 | 18 | after(() => { 19 | server.shutdown(); 20 | // Restore node's original window.XMLHttpRequest. 21 | // eslint-disable-next-line no-global-assign 22 | XMLHttpRequest = originalXMLHttpRequest; 23 | }); 24 | 25 | it("shows users from the server", (done) => { 26 | server.create("user", { name: "Sam" }); 27 | 28 | const wrapper = shallowMount(HelloWorld); 29 | 30 | setTimeout(() => { 31 | expect(wrapper.find('[data-test-id="user-1"]').text()).to.eq("Sam"); 32 | done(); 33 | }, 50); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /vue-cli-local-dev-and-cypress/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | # local env files 6 | .env.local 7 | .env.*.local 8 | 9 | # Log files 10 | npm-debug.log* 11 | yarn-debug.log* 12 | yarn-error.log* 13 | 14 | # Editor directories and files 15 | .idea 16 | .vscode 17 | *.suo 18 | *.ntvs* 19 | *.njsproj 20 | *.sln 21 | *.sw? 22 | -------------------------------------------------------------------------------- /vue-cli-local-dev-and-cypress/README.md: -------------------------------------------------------------------------------- 1 | # Vue CLI Local Dev and Cypress Testing 2 | 3 | This app is set up with Mirage for both local development and UI testing with Cypress. 4 | 5 | The Mirage server is in [src/server.js](./src/server.js). The Cypress spec is in [cypress/integration/example.spec.js](./cypress/integration/example.spec.js). 6 | 7 | ## How to use 8 | 9 | Pull down the repo and install deps: 10 | 11 | ```sh 12 | git clone git@github.com:miragejs/examples.git 13 | cd examples/vue-cli-local-dev-and-cypress 14 | yarn 15 | ``` 16 | 17 | To run this app in development against a local Mirage server: 18 | 19 | ```sh 20 | yarn serve 21 | ``` 22 | 23 | To run the Cypress tests: 24 | 25 | ```sh 26 | yarn e2e 27 | ``` 28 | -------------------------------------------------------------------------------- /vue-cli-local-dev-and-cypress/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/app' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /vue-cli-local-dev-and-cypress/cypress.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /vue-cli-local-dev-and-cypress/cypress/fixtures/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Using fixtures to represent data", 3 | "email": "hello@cypress.io", 4 | "body": "Fixtures are a great way to mock data for responses to routes" 5 | } -------------------------------------------------------------------------------- /vue-cli-local-dev-and-cypress/cypress/integration/example.spec.js: -------------------------------------------------------------------------------- 1 | import { makeServer } from "../../src/server"; 2 | 3 | let server; 4 | 5 | beforeEach(() => { 6 | server = makeServer({ environment: "test" }); 7 | }); 8 | 9 | afterEach(() => { 10 | server.shutdown(); 11 | }); 12 | 13 | it("shows the users from our server", () => { 14 | server.logging = true; 15 | server.db.loadData({ 16 | todos: [{ text: "Buy groceries", isDone: false }], 17 | }); 18 | 19 | cy.visit("/"); 20 | 21 | cy.get('[data-testid="Buy groceries"]') 22 | .get("input") 23 | .should("not.value", "Buy groceries"); 24 | }); 25 | -------------------------------------------------------------------------------- /vue-cli-local-dev-and-cypress/cypress/plugins/index.js: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example plugins/index.js can be used to load plugins 3 | // 4 | // You can change the location of this file or turn off loading 5 | // the plugins file with the 'pluginsFile' configuration option. 6 | // 7 | // You can read more here: 8 | // https://on.cypress.io/plugins-guide 9 | // *********************************************************** 10 | 11 | // This function is called when a project is opened or re-opened (e.g. due to 12 | // the project's config changing) 13 | 14 | module.exports = (on, config) => { 15 | // `on` is used to hook into various events Cypress emits 16 | // `config` is the resolved Cypress config 17 | } 18 | -------------------------------------------------------------------------------- /vue-cli-local-dev-and-cypress/cypress/support/commands.js: -------------------------------------------------------------------------------- 1 | // *********************************************** 2 | // This example commands.js shows you how to 3 | // create various custom commands and overwrite 4 | // existing commands. 5 | // 6 | // For more comprehensive examples of custom 7 | // commands please read more here: 8 | // https://on.cypress.io/custom-commands 9 | // *********************************************** 10 | // 11 | // 12 | // -- This is a parent command -- 13 | // Cypress.Commands.add("login", (email, password) => { ... }) 14 | // 15 | // 16 | // -- This is a child command -- 17 | // Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) 18 | // 19 | // 20 | // -- This is a dual command -- 21 | // Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }) 22 | // 23 | // 24 | // -- This will overwrite an existing command -- 25 | // Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) 26 | -------------------------------------------------------------------------------- /vue-cli-local-dev-and-cypress/cypress/support/index.js: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example support/index.js is processed and 3 | // loaded automatically before your test files. 4 | // 5 | // This is a great place to put global configuration and 6 | // behavior that modifies Cypress. 7 | // 8 | // You can change the location of this file or turn off 9 | // automatically serving support files with the 10 | // 'supportFile' configuration option. 11 | // 12 | // You can read more here: 13 | // https://on.cypress.io/configuration 14 | // *********************************************************** 15 | 16 | // Import commands.js using ES2015 syntax: 17 | import "./commands"; 18 | 19 | // Alternatively you can use CommonJS syntax: 20 | // require('./commands') 21 | 22 | Cypress.on("window:before:load", (win) => { 23 | win.handleFromCypress = function(request) { 24 | return fetch(request.url, { 25 | method: request.method, 26 | headers: request.requestHeaders, 27 | body: request.requestBody, 28 | }).then((res) => { 29 | let content = 30 | res.headers.map && 31 | res.headers.map["content-type"] === "application/json" 32 | ? res.json() 33 | : res.text(); 34 | return new Promise((resolve) => { 35 | content.then((body) => resolve([res.status, res.headers, body])); 36 | }); 37 | }); 38 | }; 39 | }); 40 | -------------------------------------------------------------------------------- /vue-cli-local-dev-and-cypress/netlify.toml: -------------------------------------------------------------------------------- 1 | # SPA push state routing 2 | [[redirects]] 3 | from = "/*" 4 | to = "/index.html" 5 | status = 200 6 | -------------------------------------------------------------------------------- /vue-cli-local-dev-and-cypress/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-demo", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve", 7 | "build": "vue-cli-service build", 8 | "lint": "vue-cli-service lint", 9 | "e2e": "vue-cli-service test:e2e" 10 | }, 11 | "dependencies": { 12 | "@vue/cli-plugin-e2e-cypress": "^4.5.6", 13 | "axios": "^0.19.0", 14 | "core-js": "^2.6.5", 15 | "miragejs": "0.1.41", 16 | "prettier": "^1.18.2", 17 | "tailwindcss": "^1.1.2", 18 | "vue": "^2.6.10", 19 | "vue-router": "^3.1.3" 20 | }, 21 | "devDependencies": { 22 | "@vue/cli-plugin-babel": "^3.11.0", 23 | "@vue/cli-plugin-eslint": "^3.11.0", 24 | "@vue/cli-service": "^3.11.0", 25 | "babel-eslint": "^10.0.1", 26 | "eslint": "^5.16.0", 27 | "eslint-plugin-cypress": "^2.9.0", 28 | "eslint-plugin-vue": "^5.0.0", 29 | "null-loader": "^3.0.0", 30 | "vue-cli-plugin-webpack-bundle-analyzer": "^2.0.0", 31 | "vue-template-compiler": "^2.6.10" 32 | }, 33 | "eslintConfig": { 34 | "root": true, 35 | "env": { 36 | "node": true 37 | }, 38 | "extends": [ 39 | "plugin:vue/essential", 40 | "plugin:cypress/recommended", 41 | "eslint:recommended" 42 | ], 43 | "rules": {}, 44 | "parserOptions": { 45 | "parser": "babel-eslint" 46 | } 47 | }, 48 | "browserslist": [ 49 | "> 1%", 50 | "last 2 versions" 51 | ] 52 | } 53 | -------------------------------------------------------------------------------- /vue-cli-local-dev-and-cypress/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: [require("tailwindcss"), require("autoprefixer")] 3 | }; 4 | -------------------------------------------------------------------------------- /vue-cli-local-dev-and-cypress/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miragejs/examples/0fd7c5ddcc7a9b212974f116ad9c6aec0d949cb5/vue-cli-local-dev-and-cypress/public/favicon.ico -------------------------------------------------------------------------------- /vue-cli-local-dev-and-cypress/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Mirage Vue demo 9 | 10 | 11 | 17 |
    18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /vue-cli-local-dev-and-cypress/src/App.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /vue-cli-local-dev-and-cypress/src/assets/tailwind.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | -------------------------------------------------------------------------------- /vue-cli-local-dev-and-cypress/src/components/About.vue: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /vue-cli-local-dev-and-cypress/src/components/Todo.vue: -------------------------------------------------------------------------------- 1 | 37 | 38 | 78 | -------------------------------------------------------------------------------- /vue-cli-local-dev-and-cypress/src/components/Todos.vue: -------------------------------------------------------------------------------- 1 | 56 | 57 | 147 | 148 | 149 | -------------------------------------------------------------------------------- /vue-cli-local-dev-and-cypress/src/components/icons/Cloud.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /vue-cli-local-dev-and-cypress/src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import VueRouter from "vue-router"; 3 | import App from "./App.vue"; 4 | import { makeServer } from "./server"; 5 | import { createServer, Response } from "miragejs"; 6 | import Todos from "./components/Todos"; 7 | import About from "./components/About"; 8 | 9 | Vue.config.productionTip = false; 10 | Vue.use(VueRouter); 11 | 12 | if (window.Cypress) { 13 | // mirage cypress/test server 14 | createServer({ 15 | environment: "test", 16 | routes() { 17 | let methods = ["get", "put", "patch", "post", "delete"]; 18 | methods.forEach((method) => { 19 | this[method]("/*", async (schema, request) => { 20 | let [status, headers, body] = await window.handleFromCypress(request); 21 | return new Response(status, headers, body); 22 | }); 23 | }); 24 | }, 25 | }); 26 | } else { 27 | // this is the mirage development and production server 28 | makeServer(); 29 | } 30 | 31 | const router = new VueRouter({ 32 | mode: "history", 33 | routes: [ 34 | { path: "/", component: Todos }, 35 | { path: "/about", component: About }, 36 | ], 37 | }); 38 | 39 | new Vue({ 40 | router, 41 | render: (h) => h(App), 42 | }).$mount("#app"); 43 | -------------------------------------------------------------------------------- /vue-cli-local-dev-and-cypress/src/server.js: -------------------------------------------------------------------------------- 1 | import { createServer } from "miragejs"; 2 | 3 | export function makeServer({ environment = "development" } = {}) { 4 | let server = createServer({ 5 | environment, 6 | 7 | seeds(server) { 8 | server.db.loadData({ 9 | todos: [ 10 | { text: "Buy groceries", isDone: false }, 11 | { text: "Walk the dog", isDone: false }, 12 | { text: "Do laundry", isDone: false }, 13 | ], 14 | }); 15 | }, 16 | 17 | routes() { 18 | this.namespace = "api"; 19 | this.timing = 750; 20 | 21 | this.get("/todos", ({ db }) => { 22 | return db.todos; 23 | }); 24 | 25 | this.patch("/todos/:id", (schema, request) => { 26 | let todo = JSON.parse(request.requestBody).data; 27 | 28 | return schema.db.todos.update(todo.id, todo); 29 | }); 30 | 31 | this.post("/todos", (schema, request) => { 32 | let todo = JSON.parse(request.requestBody).data; 33 | 34 | return schema.db.todos.insert(todo); 35 | }); 36 | 37 | this.delete("/todos/:id", (schema, request) => { 38 | return schema.db.todos.remove(request.params.id); 39 | }); 40 | }, 41 | }); 42 | 43 | window.server = server; 44 | 45 | return server; 46 | } 47 | -------------------------------------------------------------------------------- /vue-cli-local-dev-and-cypress/tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | variants: { 3 | backgroundColor: ["responsive", "hover", "focus", "focus-within"], 4 | borderColor: ["responsive", "hover", "focus", "focus-within"] 5 | } 6 | }; 7 | -------------------------------------------------------------------------------- /vue-cli-local-dev-and-cypress/vue.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | pluginOptions: { 3 | webpackBundleAnalyzer: { 4 | openAnalyzer: false, 5 | }, 6 | }, 7 | 8 | chainWebpack: (config) => { 9 | config.resolve.symlinks(false); 10 | 11 | /* 12 | Don't remember exactly why we added this, but it was causing the e2e tests to break 13 | since the app wasn't able to use mirage. I think we might have added this as an example 14 | of how to get rid of mirage in production - but I think we did the sideEffect: false 15 | thing in 1.40 since then, so not sure we still need this. Just want to leave it as a reference 16 | for a bit in case. Can delete if it doesn't come up soon. 17 | */ 18 | // if ( 19 | // process.env.NODE_ENV === "production" && 20 | // process.env.MIRAGE_ENABLED !== "true" 21 | // ) { 22 | // config.module 23 | // .rule("exclude-mirage") 24 | // .test(/node_modules\/miragejs\//) 25 | // .use("null-loader") 26 | // .loader("null-loader"); 27 | // } 28 | }, 29 | }; 30 | --------------------------------------------------------------------------------