diff --git a/.browserslistrc b/.browserslistrc
index de555672..e94f8140 100644
--- a/.browserslistrc
+++ b/.browserslistrc
@@ -1 +1 @@
-> 1%
+defaults
diff --git a/.eslintignore b/.eslintignore
new file mode 100644
index 00000000..022b9885
--- /dev/null
+++ b/.eslintignore
@@ -0,0 +1,2 @@
+node_modules
+vendor
diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 00000000..ccfcf30e
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,57 @@
+module.exports = {
+ root: true,
+ parser: "@typescript-eslint/parser",
+ parserOptions: {
+ ecmaVersion: 2018,
+ sourceType: "module",
+ ecmaFeatures: {
+ jsx: true,
+ },
+ },
+ plugins: ["@typescript-eslint", "react-hooks"],
+ extends: [
+ "eslint:recommended",
+ "plugin:react/recommended",
+ "plugin:@typescript-eslint/eslint-recommended",
+ "plugin:@typescript-eslint/recommended",
+ "prettier",
+ ],
+ rules: {
+ "@typescript-eslint/member-delimiter-style": [
+ "error",
+ {
+ multiline: {
+ delimiter: "none",
+ requireLast: true,
+ },
+ singleline: {
+ delimiter: "semi",
+ requireLast: false,
+ },
+ },
+ ],
+ "@typescript-eslint/no-explicit-any": "off",
+ "@typescript-eslint/explicit-function-return-type": "off",
+ "react-hooks/rules-of-hooks": "error",
+ "react-hooks/exhaustive-deps": "warn",
+ },
+ overrides: [
+ {
+ files: ["*.ts", "*.tsx"],
+ rules: {
+ "@typescript-eslint/explicit-function-return-type": [
+ "error",
+ {
+ allowExpressions: true,
+ allowTypedFunctionExpressions: true,
+ },
+ ],
+ },
+ },
+ ],
+ settings: {
+ react: {
+ version: "detect",
+ },
+ },
+}
diff --git a/Gemfile b/Gemfile
index c4319b4c..0261f2bc 100644
--- a/Gemfile
+++ b/Gemfile
@@ -84,4 +84,4 @@ gem 'ajax-datatables-rails'
gem 'actionview-encoded_mail_to'
-gem 'webpacker', '>= 4.0.x'
+gem 'webpacker', '~> 4.x'
diff --git a/Gemfile.lock b/Gemfile.lock
index 31b5f5cb..7e6f48f4 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -253,7 +253,7 @@ GEM
activemodel (>= 5.0)
bindex (>= 0.4.0)
railties (>= 5.0)
- webpacker (4.0.0.rc.7)
+ webpacker (4.0.7)
activesupport (>= 4.2)
rack-proxy (>= 0.6.1)
railties (>= 4.2)
@@ -300,7 +300,7 @@ DEPENDENCIES
uglifier (>= 1.3.0)
unicorn
web-console
- webpacker (>= 4.0.x)
+ webpacker (~> 4.x)
BUNDLED WITH
2.0.2
diff --git a/README.md b/README.md
index 79db2037..5b542d8b 100644
--- a/README.md
+++ b/README.md
@@ -54,8 +54,22 @@ Then:
```
bin/rspec
```
-will run ruby tests.
+will run lots of ruby tests.
+
+
```
yarn test
```
-will run js tests
+will run a few js tests.
+
+
+```
+yarn eslint app/javascript/dance-table.tsx
+```
+will run the js linter on `app/javascript/dance-table.tsx`. This is currently the only file that is even remotely lintable.
+
+
+```
+bin/webpack-dev-server
+```
+This will indirectly run the typescript compiler in watch mode - for some reason ts compile errors don't stop the ruby, so I keep an eye on this terminal.
diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss
index e03797a3..34f2c0d3 100644
--- a/app/assets/stylesheets/application.scss
+++ b/app/assets/stylesheets/application.scss
@@ -54,7 +54,7 @@ body {
background-color: $contra-bg;
}
-#dances-table, #dances-table-vue {
+#dances-table, #dances-table-vue, .dances-table-react {
background-color: white;
}
diff --git a/app/assets/stylesheets/welcome.scss b/app/assets/stylesheets/welcome.scss
index 9157a51a..ed96ea1d 100644
--- a/app/assets/stylesheets/welcome.scss
+++ b/app/assets/stylesheets/welcome.scss
@@ -136,11 +136,12 @@ select.chooser-argument {
.toggle-vis-active {
@extend .btn-default;
+ background-color: white !important;
}
.toggle-vis-inactive {
- background-color: $contra-grey;
@extend .btn-default;
+ background-color: $contra-grey;
}
// Position radios and checkboxes better
@@ -148,3 +149,38 @@ select.chooser-argument {
.chooser-argument input[type="checkbox"] {
margin-top: 0px; /* override 4px in bootstrap */
}
+
+.pagination {
+ @extend .btn-group;
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.flipped-glyphicon {
+ transform: scaleX(-1);
+}
+
+.dance-table-footer {
+ display: flex;
+ justify-content: space-between;
+ align-items: baseline;
+ flex-wrap: wrap;
+}
+
+.floating-loading-indicator {
+ background-color: rgba(255, 255, 255, 0.5);
+ font-size: 300%;
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ transform: translate(-50%, -50%);
+ padding: 0.5em;
+ border-radius: 0.5em;
+ border: 3px dashed black;
+}
+
+.dance-table-th div {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
diff --git a/app/controllers/api/v1/dances_controller.rb b/app/controllers/api/v1/dances_controller.rb
new file mode 100644
index 00000000..a6584d34
--- /dev/null
+++ b/app/controllers/api/v1/dances_controller.rb
@@ -0,0 +1,44 @@
+require 'filter_dances'
+require 'sort_parser'
+
+class Api::V1::DancesController < ApplicationController
+ # small security risk: dialetcs are snoopable with this
+ skip_before_action :verify_authenticity_token
+
+ def index
+ render json:FilterDances.filter_dances(filter,
+ count: count,
+ offset: offset,
+ dialect: dialect,
+ sort_by: sort_by)
+ end
+
+ private
+ def filter
+ params[:filter] || ['figure', '*']
+ end
+
+ def sort_by
+ params[:sort_by] || ""
+ end
+
+ def count
+ default_integer_param(:count, 10)
+ end
+
+ def offset
+ default_integer_param(:offset, 0)
+ end
+
+ def default_integer_param(s, default)
+ p = params[s]
+ case p
+ when Integer # path in production
+ p
+ when String # path for request specs, because: frustration!
+ Integer(p)
+ else
+ default
+ end
+ end
+end
diff --git a/app/javascript/advanced-search.tsx b/app/javascript/advanced-search.tsx
new file mode 100644
index 00000000..c78b713f
--- /dev/null
+++ b/app/javascript/advanced-search.tsx
@@ -0,0 +1,27 @@
+import * as React from "react"
+import { useState } from "react"
+import DanceTable from "./dance-table"
+
+export const AdvancedSearch = () => {
+ const [choreographer, setChoreographer] = useState("")
+ const filter = ["if", ["choreographer", choreographer], ["figure", "*"]]
+
+ return (
+
+
+
+
+
+
+
+ )
+}
+export default AdvancedSearch
diff --git a/app/javascript/dance-table.tsx b/app/javascript/dance-table.tsx
new file mode 100644
index 00000000..60cb897b
--- /dev/null
+++ b/app/javascript/dance-table.tsx
@@ -0,0 +1,460 @@
+import * as React from "react"
+import { useState, useEffect, useCallback } from "react"
+import { useTable, usePagination, useSortBy } from "react-table"
+import { NaturalNumberEditor } from "./natural-number-editor"
+import useDebounce from "./use-debounce"
+
+// TODO: use rails route helpers
+const choreographerPath = (cid: number): string => {
+ return "/choreographers/" + cid
+}
+const dancePath = (danceId: number): string => {
+ return "/dances/" + danceId
+}
+
+const ChoreographerCell = (props: any): JSX.Element => {
+ const values: DanceSearchResult = props.row.original // shouldn't I be looking at props.row.values? It only has the accessor'd field in the column definition.
+ return (
+
+ {values.choreographer_name}
+
+ )
+}
+
+const DanceTitleCell = (props: any): JSX.Element => {
+ const values: DanceSearchResult = props.row.original // shouldn't I be looking at props.row.values? It only has the accessor'd field in the column definition.
+ return {values.title}
+}
+
+// time looks like: '2019-10-13T06:22:08.818Z'
+const DateCell = (time: string): JSX.Element => (
+ <>{new Date(time).toLocaleDateString()}>
+)
+
+const CreatedAtDateCell = (props: any /* Cell */): JSX.Element =>
+ DateCell(props.row.values.created_at)
+
+const UpdatedAtDateCell = (props: any /* Cell */): JSX.Element =>
+ DateCell(props.row.values.updated_at)
+
+const MatchingFiguresHtmlCell = (props: any /* Cell */): JSX.Element => (
+
+)
+
+type ColumnDefinition = {
+ Header: string
+ accessor: string
+ Cell?: (props: any) => JSX.Element
+ show: boolean
+ disableSortBy?: boolean
+}
+
+const columnDefinitions: Array = [
+ {
+ Header: "Title",
+ accessor: "title",
+ Cell: DanceTitleCell,
+ show: true,
+ },
+ {
+ Header: "Choreographer",
+ accessor: "choreographer_name",
+ Cell: ChoreographerCell,
+ show: true,
+ },
+ { Header: "Hook", accessor: "hook", show: true },
+ { Header: "Formation", accessor: "formation", show: true },
+ { Header: "User", accessor: "user_name", show: true },
+ {
+ Header: "Entered",
+ accessor: "created_at",
+ Cell: CreatedAtDateCell,
+ show: true,
+ },
+ {
+ Header: "Updated",
+ accessor: "updated_at",
+ Cell: UpdatedAtDateCell,
+ show: false,
+ },
+ { Header: "Sharing", accessor: "publish", show: false },
+ {
+ Header: "Figures",
+ accessor: "matching_figures_html",
+ show: false,
+ Cell: MatchingFiguresHtmlCell,
+ disableSortBy: true,
+ },
+]
+
+function PaginationSentence({
+ pageOffset,
+ pageCount,
+ matchCount,
+ isFiltered,
+}: {
+ pageOffset: number
+ pageCount: number
+ matchCount: number
+ isFiltered: boolean
+}): JSX.Element {
+ return (
+
+ Showing {pageOffset + 1} to {pageOffset + pageCount} of {matchCount}{" "}
+ {isFiltered && "filtered"} dances.
+
+ )
+}
+
+function DanceTableTh({
+ column,
+}: {
+ column: any // ColumnInstance
+}): JSX.Element {
+ return (
+
+
+ {column.render("Header")} {/* Add a sort direction indicator */}
+ {column.isSorted ? (
+
+ ) : (
+
+ )}
+
+ |
+ )
+}
+
+// see allso the type SortingRule
+type SortByElement = {
+ id: string // "title" | "choreographer_name" | "hook" | "formation" | "user_name" | "created_at" | "updated_at"
+ desc?: boolean
+}
+export type SortBy = Array
+
+export const sortByParam = (sortBy: SortBy): string =>
+ sortBy
+ .map(sbe => (sbe.id ? sbe.id + (sbe.desc ? "D" : "A") : sbe + "A"))
+ .join("")
+
+function Table({
+ dancesGetJson,
+ fetchData,
+ loading,
+ pageCount: controlledPageCount,
+ filter,
+ initialSortBy,
+}: {
+ dancesGetJson: DancesGetJson
+ fetchData: Function
+ loading: boolean
+ pageCount: number
+ filter: any
+ initialSortBy: any // SortBy
+}): JSX.Element {
+ // const tableState = useTableState({ pageIndex: 0 })
+ // const [{ pageIndex, pageSize }] = tableState
+
+ const tableOptions = {
+ columns: columnDefinitions,
+ data: dancesGetJson.dances,
+ manualPagination: true,
+ manualSortBy: true, // after 7.0.0-rc2
+ manualSorting: true, // before 7.0.0-rc2
+ pageCount: controlledPageCount,
+ initialState: { sortBy: initialSortBy },
+ }
+ const {
+ flatColumns: columns,
+ getTableProps,
+ headerGroups,
+ prepareRow,
+ canPreviousPage,
+ canNextPage,
+ pageCount,
+ gotoPage,
+ nextPage,
+ previousPage,
+ setPageSize,
+ getTableBodyProps,
+ rows,
+ state: { sortBy, pageIndex, pageSize },
+ } = useTable(tableOptions, useSortBy, usePagination)
+
+ useEffect(() => {
+ if (columnDefinitions.length !== columns.length)
+ throw new Error("columns and columnDefinitions are not the same length")
+ // first time through hide the columns that should be born hidden
+ for (let i = 0; i < columns.length; i++)
+ if (!columnDefinitions[i].show) columns[i].toggleHidden(true)
+ }, [columns])
+
+ const debouncedFilter = useDebounce(filter, {
+ delay: 800,
+ bouncyFirstRun: true,
+ })
+
+ // again, need to worry about the return value of this first arg to useEffect
+ useEffect(
+ () => fetchData({ pageIndex, pageSize, sortBy, filter: debouncedFilter }),
+ [fetchData, pageIndex, pageSize, sortBy, debouncedFilter]
+ )
+
+ return (
+ <>
+ {loading && loading...
}
+
+
+
+ {headerGroups.map((headerGroup: any) => (
+
+ {headerGroup.headers.map((column: any) => (
+
+ ))}
+
+ ))}
+
+
+ {rows.map((row: any) => {
+ prepareRow(row)
+ return (
+
+ {row.cells.map((cell: any) => (
+ {cell.render("Cell")} |
+ ))}
+
+ )
+ })}
+
+
+
+
+
+
+
+
+ {" "}
+
+
+
+ {
+ gotoPage(0)
+ }}
+ isDisabled={!canPreviousPage}
+ label="<<"
+ />{" "}
+ {" "}
+ {" "}
+ {
+ gotoPage(pageCount - 1)
+ }}
+ isDisabled={!canNextPage}
+ label=">>"
+ />
+
+
+
+ >
+ )
+}
+
+function TurnPageButton({
+ label,
+ onClick,
+ isDisabled = false,
+}: // glyphicon,
+// iconIsFlipped = false,
+{
+ label: "<<" | "<" | ">" | ">>"
+ onClick: () => void
+ isDisabled?: boolean
+ // glyphicon: string
+ // iconIsFlipped?: boolean
+}): JSX.Element {
+ let glyphicon: string
+ if (label === "<<") glyphicon = "glyphicon-fast-backward"
+ else if (label === "<" || label === ">") glyphicon = "glyphicon-play"
+ else if (label === ">>") glyphicon = "glyphicon-fast-forward"
+ else throw new Error("unexpected label " + label)
+ const flipClass: string = label === "<" ? " flipped-glyphicon" : ""
+
+ return (
+
+ )
+}
+
+interface DanceSearchResult {
+ id: number
+ title: string
+ choreographer_id: number
+ choreographer_name: string
+ formation: string
+ hook: string
+ user_id: number
+ user_name: string
+ created_at: string
+ updated_at: string
+ publish: string
+ figures: string
+}
+
+interface DancesGetJson {
+ numberSearched: number
+ numberMatching: number
+ dances: Array
+}
+
+const ColumnVisToggles = ({ columns }: { columns: any[] }): JSX.Element => {
+ return (
+
+
+
+ {columns.map((column, i) => (
+
+ ))}
+
+
+ )
+}
+
+const ColumnVisToggle = ({
+ column,
+ columnDefinition,
+}: {
+ column: any
+ columnDefinition: ColumnDefinition
+}): JSX.Element => {
+ const [vis, setVis] = useState(columnDefinition.show)
+ const toggleVisClass = vis ? "toggle-vis-active" : "toggle-vis-inactive"
+ const className = "btn btn-xs " + toggleVisClass
+ const onChange = (e: any): void => {
+ const e2 = { ...e, target: { checked: !vis } }
+ setVis(!vis)
+ return column.getToggleHiddenProps().onChange(e2)
+ }
+ return (
+
+ )
+}
+
+function DanceTable({ filter }: { filter: any }): JSX.Element {
+ const [dancesGetJson, setDancesGetJson] = useState({
+ dances: [] as DanceSearchResult[],
+ numberSearched: 0,
+ numberMatching: 0,
+ })
+
+ const [pageCount, setPageCount] = React.useState(0)
+ const [loading, setLoading] = React.useState(false)
+ const fetchData = useCallback(({ pageSize, pageIndex, sortBy, filter }) => {
+ setLoading(true)
+ async function fetchData1(): Promise {
+ const offset = pageIndex * pageSize
+ const sort = sortByParam(sortBy)
+ const url = "/api/v1/dances"
+ const headers = { "Content-type": "application/json" }
+ const body = JSON.stringify({
+ count: pageSize,
+ offset: offset,
+ sort_by: sort,
+ filter: filter,
+ })
+ const response = await fetch(url, { method: "POST", headers, body })
+ const json: DancesGetJson = await response.json()
+ setDancesGetJson(json)
+ setPageCount(Math.ceil(json.numberMatching / pageSize))
+ setLoading(false)
+ }
+ fetchData1()
+ // maybe return in-use-ness to prevent a memory leak here?
+ }, [])
+
+ return (
+
+ )
+}
+
+export default DanceTable
diff --git a/app/javascript/natural-number-editor.tsx b/app/javascript/natural-number-editor.tsx
new file mode 100644
index 00000000..51a5c2d4
--- /dev/null
+++ b/app/javascript/natural-number-editor.tsx
@@ -0,0 +1,41 @@
+import * as React from "react"
+import { useState } from "react"
+
+// kidna want a 'min', so that I can set a minimum page number of 1
+
+export function NaturalNumberEditor({
+ value,
+ setValue,
+ inputProperties = {},
+}: {
+ value: number
+ setValue: (n: number) => void
+ inputProperties?: { className?: string; [others: string]: any }
+}) {
+ const [stringValue, setStringValue] = useState(value.toString())
+ let className: string
+ let inputPropertiesWithoutClassName
+ if (inputProperties.className) {
+ className = inputProperties.className + " form-control"
+ inputPropertiesWithoutClassName = { ...inputProperties }
+ delete inputPropertiesWithoutClassName.className
+ } else {
+ className = "form-control"
+ inputPropertiesWithoutClassName = inputProperties
+ }
+
+ return (
+ {
+ const sv = e.target.value.replace(/[^0-9]/g, "")
+ setStringValue(sv)
+ if (sv) setValue(Number(sv))
+ }}
+ className={className}
+ {...inputPropertiesWithoutClassName}
+ />
+ )
+}
+export default NaturalNumberEditor
diff --git a/app/javascript/packs/search.js b/app/javascript/packs/search.js
index e7908aae..7257cf8a 100644
--- a/app/javascript/packs/search.js
+++ b/app/javascript/packs/search.js
@@ -3,13 +3,8 @@
// to the head of your layout file,
// like app/views/layouts/application.html.erb.
-import Vue from "vue/dist/vue.esm"
-import Vuex from "vuex/dist/vuex.esm"
import { SearchEx } from "../search_ex.js"
import LibFigure from "../libfigure/libfigure.js"
-import SearchExEditor from "../search_ex_editor.vue"
-
-Vue.use(Vuex)
function selectChooserNameOptions(dialect) {
return {
@@ -124,71 +119,6 @@ const radioChooserNameOptions = {
chooser_half_or_full: ["*", [0.5, "half"], [1.0, "full"]],
}
-const store = new Vuex.Store({
- state: {
- lisp: ["and", ["figure", "*"], ["progression"]],
- dialect: LibFigure.defaultDialect,
- tagNames: [],
- radioChooserNameOptions: Object.freeze(radioChooserNameOptions),
- },
- getters: {
- searchEx: state => SearchEx.fromLisp(state.lisp),
- selectChooserNameOptions: state => selectChooserNameOptions(state.dialect),
- },
- actions: SearchEx.allProps().reduce(
- (hash, prop) => {
- if (prop !== "op" && prop !== "move") {
- const propName = SearchEx.mutationNameForProp(prop)
- hash[propName] = function({ commit, state, getters }, payload) {
- let searchEx = getters.searchEx.copy()
- getSearchExAtPath(searchEx, payload.path)[prop] = payload[prop]
- commit("setRootSearchEx", searchEx)
- }
- }
- return hash
- },
- {
- setOp({ commit, state, getters }, { path, op }) {
- const rootSearchEx = getters.searchEx.copy()
- const newSearchEx = getSearchExAtPath(rootSearchEx, path).castTo(op)
- commit(
- "setRootSearchEx",
- setSearchExAtPath(newSearchEx, rootSearchEx, path)
- )
- },
- setMove({ commit, state, getters }, payload) {
- const rootSearchEx = getters.searchEx
- const searchEx = getSearchExAtPath(rootSearchEx, payload.path)
- searchEx.move = payload.move // destructive!
- commit("setRootSearchEx", rootSearchEx) // should I be calling some other, more fine-grained mutation?
- },
- setParameter({ commit, state, getters }, { path, index, value }) {
- const rootSearchEx = getters.searchEx
- let searchEx = getSearchExAtPath(rootSearchEx, path)
- searchEx.parameters[index] = value // destructive!
- commit("setRootSearchEx", rootSearchEx) // should I be calling some other, more fine-grained mutation?
- },
- deleteSearchEx({ commit, state, getters }, { path }) {
- const rootSearchEx = getters.searchEx
- if (path.length) {
- let searchEx = rootSearchEx
- for (let i = 0; i < path.length - 1; i++)
- searchEx = searchEx.subexpressions[path[i]]
- searchEx.subexpressions.splice(path[path.length - 1], 1)
- commit("setRootSearchEx", rootSearchEx) // should I be calling some other, more fine-grained mutation?
- } else {
- // silently fail to delete root node. It shouldn't be an option anyway.
- }
- },
- }
- ),
- mutations: {
- setRootSearchEx(state, rootSearchEx) {
- state.lisp = rootSearchEx.toLisp()
- },
- },
-})
-
function getSearchExAtPath(rootSearchEx, path) {
return path.reduce(
(searchEx, subExIndex) => searchEx.subexpressions[subExIndex],
@@ -196,41 +126,12 @@ function getSearchExAtPath(rootSearchEx, path) {
)
}
-// modifies substructure, AND you have to pay attention to the return value.
-function setSearchExAtPath(valueSearchEx, rootSearchEx, path) {
- if (path.length) {
- let searchEx = rootSearchEx
- for (let i = 0; i < path.length - 1; i++) {
- searchEx = searchEx.subexpressions[path[i]]
- }
- searchEx.subexpressions[path[path.length - 1]] = valueSearchEx
- return rootSearchEx
- } else {
- return valueSearchEx
- }
-}
-
-document.addEventListener("DOMContentLoaded", () => {
- var search = new Vue({
- el: "#search-app",
- store,
- data: {},
- template: `
state.lisp: {{$store.state.lisp}}
state.dialect: {{$store.state.dialect}}
`,
- components: {
- SearchExEditor,
- },
- methods: {
- // wrap() {this.$store.commit('wrap', {name: 'wrap'});}
- },
- })
-})
-
////////////////////////////////////////////////////////////////
// init
function initFromDom() {
- store.state.dialect = JSON.parse($("#dialect-json").text())
- store.state.tagNames = JSON.parse($("#tag-names-json").text())
+ // store.state.dialect = JSON.parse($('#dialect-json').text());
+ // store.state.tagNames = JSON.parse($('#tag-names-json').text());
}
$(initFromDom)
diff --git a/app/javascript/packs/search_page.tsx b/app/javascript/packs/search_page.tsx
new file mode 100644
index 00000000..f7acd39f
--- /dev/null
+++ b/app/javascript/packs/search_page.tsx
@@ -0,0 +1,15 @@
+/////////////////////////////////////////////////////////////////
+
+import * as React from "react"
+import * as ReactDOM from "react-dom"
+// import './index.css';
+import AdvancedSearch from "../advanced-search"
+// import * as serviceWorker from './serviceWorker';
+const root = document.getElementById("root")
+
+ReactDOM.render(, root)
+
+// If you want your app to work offline and load faster, you can change
+// unregister() to register() below. Note this comes with some pitfalls.
+// Learn more about service workers: https://bit.ly/CRA-PWA
+// serviceWorker.unregister();
diff --git a/app/javascript/search_chooser.vue b/app/javascript/search_chooser.vue
deleted file mode 100644
index 07bcb807..00000000
--- a/app/javascript/search_chooser.vue
+++ /dev/null
@@ -1,105 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/javascript/search_ex_editor.vue b/app/javascript/search_ex_editor.vue
deleted file mode 100644
index 20ad6716..00000000
--- a/app/javascript/search_ex_editor.vue
+++ /dev/null
@@ -1,280 +0,0 @@
-
-
-
-
-
-
-
diff --git a/app/javascript/types/react-table-config.d.ts b/app/javascript/types/react-table-config.d.ts
new file mode 100644
index 00000000..db5b3b52
--- /dev/null
+++ b/app/javascript/types/react-table-config.d.ts
@@ -0,0 +1,95 @@
+declare module "react-table"
+// import {
+// UseColumnOrderInstanceProps,
+// UseColumnOrderState,
+// UseExpandedInstanceProps,
+// UseExpandedOptions,
+// UseExpandedRowProps,
+// UseExpandedState,
+// UseFiltersColumnOptions,
+// UseFiltersColumnProps,
+// UseFiltersInstanceProps,
+// UseFiltersOptions,
+// UseFiltersState,
+// UseGroupByCellProps,
+// UseGroupByColumnOptions,
+// UseGroupByColumnProps,
+// UseGroupByInstanceProps,
+// UseGroupByOptions,
+// UseGroupByRowProps,
+// UseGroupByState,
+// UsePaginationInstanceProps,
+// UsePaginationOptions,
+// UsePaginationState,
+// UseResizeColumnsColumnOptions,
+// UseResizeColumnsHeaderProps,
+// UseResizeColumnsOptions,
+// UseRowSelectInstanceProps,
+// UseRowSelectOptions,
+// UseRowSelectRowProps,
+// UseRowSelectState,
+// UseRowStateCellProps,
+// UseRowStateInstanceProps,
+// UseRowStateRowProps,
+// UseSortByColumnOptions,
+// UseSortByColumnProps,
+// UseSortByInstanceProps,
+// UseSortByOptions,
+// UseSortByState,
+// UseTableCellProps,
+// } from "react-table"
+// import {} from "react-table"
+
+// declare module "react-table" {
+// // take this file as-is, or comment out the sections that don't apply to your plugin configuration
+
+// export interface TableOptions // UseExpandedOptions, // UseFiltersOptions, // UseGroupByOptions, // UsePaginationOptions, // UseRowSelectOptions, // UseSortByOptions,
+// extends // UseFiltersOptions,
+// // UseResizeColumnsOptions,
+// // note that having Record here allows you to add anything to the options, this matches the spirit of the
+// // underlying js library, but might be cleaner if it's replaced by a more specific type that matches your
+// // feature set, this is a safe default.
+// Record {}
+
+// export interface TableInstance {}
+// // UseColumnOrderInstanceProps,
+// // UseExpandedInstanceProps,
+// // UseFiltersInstanceProps,
+// // UseGroupByInstanceProps,
+// // UsePaginationInstanceProps,
+// // UseRowSelectInstanceProps,
+// // UseRowStateInstanceProps,
+// // UseSortByInstanceProps
+
+// export interface TableState
+// extends UseSortByState {}
+// // UseGroupByState,
+// // UseFiltersState,
+// // UseExpandedState,
+// // UseColumnOrderState,
+// // UsePaginationState,
+// // UseRowSelectState
+
+// export interface Column {}
+// // UseFiltersColumnOptions,
+// // UseGroupByColumnOptions,
+// // UseSortByColumnOptions,
+// // UseResizeColumnsColumnOptions {}
+
+// export interface ColumnInstance
+// extends UseSortByColumnProps {}
+// // UseFiltersColumnProps,
+// // UseGroupByColumnProps,
+// // UseResizeColumnsHeaderProps,
+
+// export interface Cell {}
+// // UseTableCellProps,
+// // UseGroupByCellProps,
+// // UseRowStateCellProps {}
+
+// export interface Row {}
+// // UseExpandedRowProps,
+// // UseGroupByRowProps,
+// // UseRowSelectRowProps,
+// // UseRowStateRowProps {}
+// }
diff --git a/app/javascript/use-debounce.ts b/app/javascript/use-debounce.ts
new file mode 100644
index 00000000..2e12389e
--- /dev/null
+++ b/app/javascript/use-debounce.ts
@@ -0,0 +1,33 @@
+// from https://dev.to/gabe_ragland/debouncing-with-react-hooks-jci
+
+import React, { useState, useEffect, useRef } from "react"
+
+export default function useDebounce(
+ value: T,
+ {
+ delay = 800,
+ bouncyFirstRun = false,
+ }: { delay: number; bouncyFirstRun: boolean } = {
+ delay: 800,
+ bouncyFirstRun: false,
+ }
+): T {
+ const [debouncedValue, setDebouncedValue] = useState(value)
+ const isFirstRun = useRef(true)
+ useEffect(() => {
+ if (bouncyFirstRun && isFirstRun.current) {
+ isFirstRun.current = false
+ setDebouncedValue(value)
+ } else {
+ const handler = setTimeout(() => {
+ console.log("setTimeout resolve")
+ setDebouncedValue(value)
+ }, delay)
+ return () => {
+ clearTimeout(handler)
+ }
+ }
+ }, [value])
+
+ return debouncedValue
+}
diff --git a/app/views/welcome/search.html.erb b/app/views/welcome/search.html.erb
index 498224a7..89c8c917 100644
--- a/app/views/welcome/search.html.erb
+++ b/app/views/welcome/search.html.erb
@@ -1,30 +1,11 @@
-<%= javascript_pack_tag 'search' %>
-
- Find Dances
-
+<%= javascript_pack_tag 'search_page', defer: true %>
+<%= stylesheet_pack_tag 'search_page' %>
-
+
+ Find Dances
-
-
-
- Title |
- Choreographer |
- Hook |
- Formation |
- User |
- Entered |
- Updated |
- Sharing |
- Figures |
-
-
-
-
-
+
+
<%= @dialect_json %>
diff --git a/babel.config.js b/babel.config.js
index f930f3e0..91a7b7c2 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -30,9 +30,17 @@ module.exports = function(api) {
{
forceAllTransforms: true,
useBuiltIns: 'entry',
+ corejs: 3,
modules: false,
exclude: ['transform-typeof-symbol']
}
+ ],
+ [
+ require('@babel/preset-react').default,
+ {
+ development: isDevelopmentEnv || isTestEnv,
+ useBuiltIns: true
+ }
]
].filter(Boolean),
plugins: [
@@ -56,7 +64,8 @@ module.exports = function(api) {
require('@babel/plugin-transform-runtime').default,
{
helpers: false,
- regenerator: true
+ regenerator: true,
+ corejs: false
}
],
[
@@ -64,6 +73,12 @@ module.exports = function(api) {
{
async: false
}
+ ],
+ isProductionEnv && [
+ require('babel-plugin-transform-react-remove-prop-types').default,
+ {
+ removeImport: true
+ }
]
].filter(Boolean)
}
diff --git a/config/routes.rb b/config/routes.rb
index 77a82cd0..b68cd92f 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -73,4 +73,9 @@
# # (app/controllers/admin/products_controller.rb)
# resources :products
# end
+ namespace :api do
+ namespace :v1 do
+ post 'dances' => "dances#index"
+ end
+ end
end
diff --git a/config/webpack/environment.js b/config/webpack/environment.js
index 6ef014b0..f10aeb53 100644
--- a/config/webpack/environment.js
+++ b/config/webpack/environment.js
@@ -1,7 +1,5 @@
const { environment } = require('@rails/webpacker')
-const { VueLoaderPlugin } = require('vue-loader')
-const vue = require('./loaders/vue')
+const typescript = require('./loaders/typescript')
-environment.plugins.prepend('VueLoaderPlugin', new VueLoaderPlugin())
-environment.loaders.prepend('vue', vue)
+environment.loaders.prepend('typescript', typescript)
module.exports = environment
diff --git a/config/webpack/loaders/typescript.js b/config/webpack/loaders/typescript.js
new file mode 100644
index 00000000..2f5e1790
--- /dev/null
+++ b/config/webpack/loaders/typescript.js
@@ -0,0 +1,11 @@
+const PnpWebpackPlugin = require('pnp-webpack-plugin')
+
+module.exports = {
+ test: /\.(ts|tsx)?(\.erb)?$/,
+ use: [
+ {
+ loader: 'ts-loader',
+ options: PnpWebpackPlugin.tsLoaderOptions()
+ }
+ ]
+}
diff --git a/config/webpack/loaders/vue.js b/config/webpack/loaders/vue.js
deleted file mode 100644
index 509c742b..00000000
--- a/config/webpack/loaders/vue.js
+++ /dev/null
@@ -1,6 +0,0 @@
-module.exports = {
- test: /\.vue(\.erb)?$/,
- use: [{
- loader: 'vue-loader'
- }]
-}
diff --git a/config/webpacker.yml b/config/webpacker.yml
index 125c36bf..c42c2349 100644
--- a/config/webpacker.yml
+++ b/config/webpacker.yml
@@ -34,7 +34,9 @@ default: &default
- .woff2
extensions:
- - .vue
+ - .tsx
+ - .ts
+ - .jsx
- .mjs
- .js
- .sass
@@ -53,7 +55,7 @@ development:
<<: *default
compile: true
- # Verifies that versions and hashed value of the package contents in the project's package.json
+ # Verifies that correct packages and versions are installed by inspecting package.json, yarn.lock, and node_modules
check_yarn_integrity: true
# Reference: https://webpack.js.org/configuration/dev-server/
diff --git a/lib/filter_dances.rb b/lib/filter_dances.rb
new file mode 100644
index 00000000..a171c880
--- /dev/null
+++ b/lib/filter_dances.rb
@@ -0,0 +1,316 @@
+# coding: utf-8
+require 'set'
+require 'search_match'
+require 'sort_parser'
+
+module FilterDances
+ def self.filter_dances(filter,
+ dialect:,
+ count: 10,
+ offset: 0,
+ sort_by: "")
+ filter.is_a?(Array) or raise "filter must be an array, but got #{filter.inspect} of class #{filter.class}"
+ query = Dance.includes(:choreographer, :user).references(:choreographer, :user).order(*SortParser.parse(sort_by))
+ number_searched = 0
+ number_matching = 0
+ filter_results = []
+ query.map do |dance|
+ number_searched += 1
+ mf = matching_figures(filter, dance)
+ if mf
+ number_matching += 1
+ send_this_dance = offset < number_matching && number_matching <= offset + count
+ if send_this_dance
+ mf_html = matching_figures_html(mf, dance, dialect)
+ filter_results << filter_result_to_json(dance, mf_html)
+ end
+ end
+ end
+ {
+ numberSearched: number_searched,
+ numberMatching: number_matching,
+ dances: filter_results
+ }
+ end
+
+ def self.matching_figures_html(matching_figures, dance, dialect)
+ matching_indicies = SearchMatch.flatten_set_to_index_a(matching_figures)
+ if matching_indicies.length === dance.figures.length
+ 'whole dance'
+ else
+ matching_indicies.map {|i| JSLibFigure.figure_to_html(dance.figures[i], dialect)}.join('
').html_safe
+ end
+ end
+
+ def self.filter_result_to_json(dance, matching_figures_html)
+ {
+ "id" => dance.id,
+ "title" => dance.title,
+ "choreographer_id" => dance.choreographer_id,
+ "choreographer_name" => dance.choreographer.name,
+ "formation" => dance.start_type,
+ "hook" => dance.hook,
+ "user_id" => dance.user_id,
+ "user_name" => dance.user.name,
+ "created_at" => dance.created_at.as_json,
+ "updated_at" => dance.updated_at.as_json,
+ "publish" => dance_publish_cell(dance.publish),
+ # TODO: render this client-side. Send JSON of matching figures:
+ "matching_figures_html" => matching_figures_html
+ }
+ end
+
+ # this code is duplicated in dance_helper, but I can't figure out how to cleanly import it.
+ def self.dance_publish_cell(enum_value)
+ case enum_value
+ when 'off'
+ 'private'
+ when 'sketchbook'
+ 'sketchbook'
+ when 'all'
+ 'everywhere'
+ else
+ raise 'fell through enum case'
+ end
+ end
+
+ # matching_figures and matching_figures_* functions return either nil (failure) or a set of SearchMatches
+ #
+ # The set may have zero elements, which means a successful match, but no specific index matches all criteria.
+ # To see an example of that, think of the dance (and (figure 'chain') (figure 'right left through')), which can
+ # match because it has a chain, and a right left through, but no figure satisfies both of those exactly.
+
+ def self.matching_figures(filter, dance)
+ operator = filter.first
+ nm = case operator
+ when '&'
+ 'figurewise_and'
+ else
+ operator.gsub(' ', '_')
+ end
+ fn = :"matching_figures_for_#{nm}"
+ raise "#{operator.inspect} is not a valid operator in #{filter.inspect}" unless self.respond_to?(fn, true)
+ matches = send(fn, filter, dance)
+ # puts "matching_figures #{dance.title} #{filter.inspect} = #{matches.inspect}"
+ matches
+ end
+
+ def self.matching_figures_for_figure(filter, dance)
+ filter_move = filter[1]
+ nfigures = dance.figures.length
+ if '*' == filter_move # wildcard
+ nfigures > 0 ? all_figures_match(nfigures) : nil
+ else
+ formals = JSLibFigure.is_move?(filter_move) ? JSLibFigure.formal_parameters(filter_move) : []
+ search_matches = Set[]
+ dance.figures.each_with_index do |figure, figure_index|
+ actuals = JSLibFigure.parameter_values(figure)
+ filter_canonical = JSLibFigure.de_alias_move(filter_move)
+ filter_is_alias = filter_canonical != filter_move
+ param_filters = filter.drop(2)
+ param_filters = JSLibFigure.alias_filter(filter_move) if filter_is_alias && param_filters.empty?
+ it_matches = JSLibFigure.move(figure) == filter_canonical &&
+ param_filters.each_with_index.all? {|param_filter, i| param_passes_filter?(formals[i], actuals[i], param_filter)}
+ search_matches << SearchMatch.new(figure_index, nfigures) if it_matches
+ end
+ search_matches.present? ? search_matches : nil
+ end
+ end
+
+ def self.param_passes_filter?(formal_param, dance_param, param_filter)
+ if JSLibFigure.parameter_uses_chooser(formal_param, JSLibFigure.chooser('chooser_text'))
+ # substring search
+ keywords = param_filter.split(' ')
+ keywords.any? {|keyword| dance_param.include?(keyword)}
+ elsif JSLibFigure.parameter_uses_chooser(formal_param, JSLibFigure.chooser('chooser_half_or_full'))
+ param_filter == '*' || param_filter.to_f === dance_param.to_f
+ elsif JSLibFigure.formal_param_is_dancers(formal_param)
+ param_filter == '*' || JSLibFigure.dancers_category(dance_param) === param_filter
+ elsif param_filter == '*' || param_filter.to_s === dance_param.to_s
+ # DEFUALT CASE: asterisk always matches, or exact match
+ true
+ elsif JSLibFigure.parameter_uses_chooser(formal_param, JSLibFigure.chooser('chooser_hey_length'))
+ # some easy hey length cases - half/full exact match - are already handled above.
+ meet_times = JSLibFigure.hey_length_meet_times(dance_param)
+ if dance_param.in?(%w(half full))
+ false
+ else
+ param_filter === 'less than half' && meet_times <= 1 or
+ param_filter === 'between half and full' && meet_times == 2
+ end
+ else
+ false
+ end
+ end
+
+ def self.matching_figures_for_formation(filter, dance)
+ filter_formation = filter[1]
+ if filter_formation == 'everything else'
+ FILTER_FORMATION_TO_RE.values.none? {|re| re =~ dance.start_type} ? Set[] : nil
+ else
+ filter_re = FILTER_FORMATION_TO_RE[filter_formation]
+ filter_re or raise "unrecognised formation filter #{filter_formation.inspect}"
+ filter_re =~ dance.start_type ? Set[] : nil
+ end
+ end
+
+ FILTER_FORMATION_TO_RE = {'improper' => /improper/i,
+ 'Becket *' => /Becket/i,
+ 'Becket cw' => /Becket(?!.*ccw).*$/i,
+ 'Becket ccw' => /Becket ccw/i,
+ 'proper' => /^proper/i}
+
+ def self.matching_figures_for_progression(filter, dance)
+ nfigures = dance.figures.length
+ s = Set[]
+ dance.figures.each_with_index {|f,i| s << SearchMatch.new(i, nfigures) if JSLibFigure.progression(f)}
+ s.present? ? s : nil
+ end
+
+ def self.matching_figures_for_if(filter, dance)
+ _op, if_, then_, else_ = filter
+ if matching_figures(if_, dance)
+ matching_figures(then_, dance)
+ elsif else_
+ matching_figures(else_, dance)
+ else
+ nil
+ end
+ end
+
+ def self.matching_figures_for_no(filter, dance)
+ subfilter = filter[1]
+ if matching_figures(subfilter, dance)
+ nil
+ else
+ all_figures_match(dance.figures.length)
+ end
+ end
+
+ def self.matching_figures_for_all(filter, dance)
+ subfilter = filter[1]
+ matches = matching_figures(subfilter, dance)
+ if dance.figures.length == 0
+ Set[]
+ elsif matches && dance.figures.length.times.all? {|i| matches.any? {|search_match| search_match.include?(i)}}
+ matches
+ else
+ nil
+ end
+ end
+
+ def self.matching_figures_for_or(filter, dance)
+ subfilters = filter.drop(1)
+ matches = Set[]
+ subfilters.each do |subfilter|
+ matches |= matching_figures(subfilter, dance) || Set[]
+ end
+ matches.present? ? matches : nil
+ end
+
+ def self.matching_figures_for_and(filter, dance)
+ subfilters = filter.drop(1)
+ if subfilters.empty?
+ Set[] # should arguably return the infinitely large set of all searchmatches instead
+ else
+ matches = subfilters.map {|subfilter| matching_figures(subfilter, dance) or return nil}
+ m = matches.first
+ matches.drop(1).each {|x| m &= x} # naive intersection, treating SearchMatch(1,8) as not intersecting with SearchMatch(1,8, count: 2)
+ m
+ end
+ end
+
+ def self.matching_figures_for_figurewise_and(filter, dance)
+ a = matching_figures_for_and(filter, dance)
+ a.present? ? a : nil
+ end
+
+ # figurewise_not
+ def self.matching_figures_for_not(filter, dance)
+ subfilter = filter[1]
+ matches = all_figures_match(dance.figures.length) - dice_search_matches(matching_figures(subfilter, dance) || Set[])
+ matches.present? ? matches : nil
+ end
+
+ def self.matching_figures_for_then(filter, dance)
+ going_concerns = all_empty_matches(dance.figures.length)
+ subfilters = filter.drop(1)
+ subfilters.each do |subfilter|
+ m = matching_figures(subfilter, dance)
+ m or return nil
+ new_concerns = Set[]
+ going_concerns.each do |search_match_head|
+ m.each do |search_match_tail|
+ new_concern = search_match_head.abut(search_match_tail)
+ new_concerns << new_concern if new_concern
+ end
+ end
+ going_concerns = new_concerns
+ return nil unless going_concerns.present?
+ end
+ going_concerns
+ end
+
+ def self.matching_figures_for_choreographer(filter, dance)
+ choreographer = filter[1].downcase
+ dance.choreographer.name.downcase.include?(choreographer) ? Set[] : nil
+ end
+
+ COMPARISON_STRING_TO_RUBY_OP = {'≥' => :'>=',
+ '≤' => :'<=',
+ '≠' => :'!=',
+ '=' => :'==',
+ '>' => :'>',
+ '<' => :'<'}.freeze
+
+ def self.matching_figures_for_count(filter, dance)
+ _filter, subfilter, comparison_str, number_string = filter
+ m = matching_figures(subfilter, dance)
+ m_count = m.nil? ? 0 : m.length
+ comparison = COMPARISON_STRING_TO_RUBY_OP.fetch(comparison_str)
+ number = number_string.to_i
+ if m_count.public_send(comparison, number) # for example 'count >= 3'
+ m || Set[]
+ else
+ nil
+ end
+ end
+
+ def self.matching_figures_for_compare(filter, dance)
+ _filter, left, comparison_str, right = filter
+ l = eval_numeric_ex(left, dance)
+ r = eval_numeric_ex(right, dance)
+ comparison = COMPARISON_STRING_TO_RUBY_OP.fetch(comparison_str)
+ l.public_send(comparison, r) ? Set[] : nil
+ end
+
+ def self.eval_numeric_ex(nex, dance)
+ case nex.first
+ when 'constant'
+ Integer(nex.second) # Hm, is THIS the place to parse this string?
+ when 'tag'
+ tag_id = Tag.where(name: nex.second).pluck(:id).first
+ tag_id ? Dut.where(tag_id: tag_id, dance_id: dance.id).count : 0
+ when 'count-matches'
+ subfilter = nex.second
+ matches = matching_figures(subfilter, dance)
+ matches ? matches.length : 0
+ else
+ raise "I do not know how to evaluate #{nex.first} expressions."
+ end
+ end
+
+ def self.all_empty_matches(nfigures)
+ Set.new(nfigures.times.map{|i| SearchMatch.new(i, nfigures, count: 0)})
+ end
+
+ def self.all_figures_match(nfigures)
+ Set.new(nfigures.times.map{|i| SearchMatch.new(i, nfigures)})
+ end
+
+ # given a set of search matches, return a set of new search matches with count: 1 search matches for every index anywhere in the set
+ def self.dice_search_matches(set)
+ Set.new(
+ set.map {|search_match| search_match.map {|i| SearchMatch.new(i, search_match.nfigures)}}.flatten)
+ end
+end
diff --git a/lib/sort_parser.rb b/lib/sort_parser.rb
new file mode 100644
index 00000000..f5faf290
--- /dev/null
+++ b/lib/sort_parser.rb
@@ -0,0 +1,35 @@
+module SortParser
+ def self.parse(p)
+ p_is_valid = p.match?(/\A((?:title|choreographer_name|hook|formation|user_name|created_at|updated_at|publish)[AD])*\z/)
+ if p_is_valid
+ a = parse_valid_string(p)
+ a.empty? ? DEFAULT_SORT : a
+ else
+ raise "SortParser could not read #{p.inspect}"
+ end
+ end
+ # "title",
+ # {hook: :desc},
+ # Choreographer.arel_table[:name].desc
+ private
+ def self.parse_valid_string(p)
+ p.split(/(?<=[AD])/).map do |s|
+ column, a_or_d = s.match(/^([a-z_]*)([AD])$/).to_a.drop(1)
+ is_ascending = a_or_d == 'A'
+ case column
+ when 'choreographer_name'
+ is_ascending ? 'choreographers.name' : Choreographer.arel_table[:name].desc
+ when 'user_name'
+ is_ascending ? 'users.name' : User.arel_table[:name].desc
+ when 'formation'
+ is_ascending ? 'start_type' : {'start_type' => :desc}
+ when 'created_at', 'updated_at', 'publish'
+ is_ascending ? "dances.#{column}" : Dance.arel_table[column.to_sym].desc
+ else
+ is_ascending ? column : {column => :desc}
+ end
+ end
+ end
+
+ DEFAULT_SORT = [{created_at: :desc}]
+end
diff --git a/package.json b/package.json
index 69444f8e..e11ac8e9 100644
--- a/package.json
+++ b/package.json
@@ -1,18 +1,31 @@
{
"dependencies": {
- "@babel/core": "^7.2.2",
- "@babel/preset-env": "^7.3.1",
- "@rails/webpacker": "^4.0.0-rc.7",
- "babel-loader": "^8.0.5",
- "vue": "^2.5.22",
- "vue-bootstrap-toggle": "^1.1.4",
- "vue-loader": "^15.6.2",
- "vue-template-compiler": "^2.5.22",
- "vuex": "^3.1.0"
+ "@babel/preset-react": "^7.6.3",
+ "@rails/webpacker": "^4.0.7",
+ "@types/react": "^16.9.11",
+ "@types/react-dom": "^16.9.3",
+ "babel-plugin-transform-react-remove-prop-types": "^0.4.24",
+ "namor": "^1.1.3",
+ "prop-types": "^15.7.2",
+ "react": "^16.11.0",
+ "react-dom": "^16.11.0",
+ "react-table": "^7.0.0-rc.15",
+ "ts-loader": "^6.2.1",
+ "typescript": "^3.6.4"
},
"devDependencies": {
+ "@testing-library/jest-dom": "^4.2.4",
+ "@testing-library/react": "^9.3.2",
+ "@types/jest": "^24.0.23",
+ "@typescript-eslint/eslint-plugin": "^2.12.0",
+ "@typescript-eslint/parser": "^2.12.0",
+ "eslint": "^6.8.0",
+ "eslint-config-prettier": "^6.7.0",
+ "eslint-plugin-react": "^7.17.0",
+ "eslint-plugin-react-hooks": "^2.3.0",
"jest": "^24.8.0",
"prettier": "1.18.2",
+ "ts-jest": "^24.2.0",
"webpack-dev-server": "^3.1.14"
},
"scripts": {
@@ -20,9 +33,20 @@
"test": "jest"
},
"jest": {
+ "preset": "ts-jest",
"roots": [
"spec/javascript"
],
+ "transform": {
+ "^.+\\.(ts|tsx)$": "ts-jest",
+ "^.+\\.(js|jsx)$": "babel-jest"
+ },
+ "testMatch": [
+ "**/*.spec.(ts|tsx|js|jsx)"
+ ],
+ "setupFilesAfterEnv": [
+ "/spec/jest-setup.ts"
+ ],
"moduleDirectories": [
"node_modules",
"app/javascript"
diff --git a/spec/features/welcome/search_spe_vue_old.rb b/spec/features/welcome/search_spe_vue_old.rb
new file mode 100644
index 00000000..ab675039
--- /dev/null
+++ b/spec/features/welcome/search_spe_vue_old.rb
@@ -0,0 +1,193 @@
+# coding: utf-8
+
+require 'rails_helper'
+
+describe 'Search page', js: true do
+ it 'exercise formation filter' do
+ visit '/s'
+ expect(page).to have_css('.figure-filter-op', count: 3)
+ all('.figure-filter-op')[1].select('formation')
+ select('proper')
+ expect(page).to have_text('state.lisp: [ "and", [ "formation", "proper" ], [ "progression" ] ]')
+ end
+
+ describe 'casts' do
+ it "cast from 'and' to 'or'" do
+ visit '/s'
+ expect(page).to have_css('.figure-filter-op', count: 3)
+ first('.figure-filter-op').select('or')
+ expect(page).to have_text('state.lisp: [ "or", [ "figure", "*" ], [ "progression" ] ]')
+ end
+
+ it "cast to 'not'" do
+ visit '/s'
+ expect(page).to have_css('.figure-filter-op', count: 3)
+ first('.figure-filter-op').select('not')
+ expect(page).to have_text('state.lisp: [ "not", [ "and", [ "figure", "*" ], [ "progression" ] ] ]')
+ expect(page).to have_css('.figure-filter-op', count: 4)
+ end
+ end
+
+ describe 'deletion' do
+ it "works" do
+ visit '/s'
+ expect(page).to have_css('.figure-filter-op', count: 3)
+ all('.figure-filter-menu-hamburger')[-1].click
+ find('a.figure-filter-menu-delete').click
+ expect(page).to have_text('[ "and", [ "figure", "*" ] ]')
+ end
+
+ it "menu item isn't visible for the root node" do
+ visit '/s'
+ expect(page).to have_css('.figure-filter-op', count: 3)
+ first('.figure-filter-menu-hamburger').click
+ expect(page).to_not have_css('.figure-filter-menu-delete')
+ end
+
+ it "menu item isn't visible for a subexpression that's required" do
+ visit '/s'
+ expect(page).to have_css('.figure-filter-op', count: 3)
+ first('.figure-filter-op').select('not')
+ expect(page).to have_css('.figure-filter-op', count: 4)
+ expect(page).to have_text('state.lisp: [ "not", [ "and", [ "figure", "*" ], [ "progression" ] ] ]')
+ all('.figure-filter-menu-hamburger')[1].click
+ expect(page).to have_css('.figure-filter-menu')
+ expect(page).to_not have_css('.figure-filter-menu-delete')
+ end
+ end
+
+ describe 'datatable' do
+ let (:dances) {[:dance, :box_the_gnat_contra, :call_me, :you_cant_get_there_from_here].map {|d| FactoryGirl.create(d)}}
+
+ it 'works (and test formation filter)' do
+ dances
+ visit '/s'
+ dances.each {|dance|
+ expect(page).to have_link(dance.title, href: dance_path(dance))
+ }
+ expect(page).to have_css('.figure-filter-op', count: 3)
+ all('.figure-filter-op')[1].select('formation')
+ select('Becket *')
+ dances.each do |dance|
+ to_or_to_not = dance.start_type.include?("Becket") ? :to : :to_not
+ expect(page).send(to_or_to_not, have_link(dance.title, href: dance_path(dance)))
+ end
+ end
+
+ it 'count filter' do
+ dances
+ visit '/s'
+ first('.figure-filter-op').select('figure')
+ first('.figure-filter-op').select('number of')
+ select('≠')
+ select('7')
+ matches = 0
+ dances.each do |dance|
+ not_seven = dance.figures.length != 7
+ matches += 1 if not_seven
+ to_or_to_not = not_seven ? :to : :to_not
+ expect(page).send(to_or_to_not, have_link(dance.title, href: dance_path(dance)))
+ end
+ expect(matches).to eq(1)
+ end
+
+ it 'tag and compare filters' do
+ verified = FactoryGirl.create(:tag, :verified)
+ broken = FactoryGirl.create(:tag, :please_review)
+ call_me = dances.find {|dance| dance.title == "Call Me"}
+ the_rendevouz = dances.find {|dance| dance.title == "The Rendevouz"}
+ 1.times { FactoryGirl.create(:dut, tag: verified, dance: call_me) }
+ 2.times { FactoryGirl.create(:dut, tag: broken, dance: the_rendevouz) }
+ visit '/s'
+ first('.figure-filter-op').select('compare')
+ find_all('.figure-filter-op', count: 3)[1].select('tag')
+ dances.each do |dance|
+ if dance.id == call_me.id
+ expect(page).to have_link(dance.title)
+ else
+ expect(page).to_not have_link(dance.title)
+ end
+ end
+ select '1'
+ dances.each do |dance|
+ expect(page).to_not have_link(dance.title)
+ end
+ select 'please review'
+ dances.each do |dance|
+ if dance.id == the_rendevouz.id
+ expect(page).to have_link(dance.title)
+ else
+ expect(page).to_not have_link(dance.title)
+ end
+ end
+ end
+
+ it 'count-matches and compare filters' do
+ dances
+ visit '/s'
+ first('.figure-filter-op').select('compare')
+ find_all('.figure-filter-op', count: 3)[1].select('count matches')
+ select('≠')
+ select('7')
+ matches = 0
+ dances.each do |dance|
+ not_seven = dance.figures.length != 7
+ matches += 1 if not_seven
+ to_or_to_not = not_seven ? :to : :to_not
+ expect(page).send(to_or_to_not, have_link(dance.title, href: dance_path(dance)))
+ end
+ expect(matches).to eq(1)
+ end
+
+ it '& filter' do
+ dances
+ visit '/s'
+ expect(page).to have_css('.figure-filter-op', count: 3)
+ first('.figure-filter-op').select('&')
+ select('chain')
+ expect(page).to have_text('state.lisp: [ "&", [ "figure", "chain" ], [ "progression" ] ]')
+ expect(page).to_not have_link('The Rendevouz')
+ expect(page).to_not have_link('Call Me')
+ expect(page).to_not have_link("You Can't Get There From Here")
+ expect(page).to have_link('Box the Gnat Contra')
+ end
+
+ describe 'figure filter' do
+ it 'move works' do
+ dances
+ visit '/s'
+ select 'chain'
+ expect(page).to_not have_link('The Rendevouz')
+ expect(page).to have_link('Call Me')
+ expect(page).to have_link('Box the Gnat Contra')
+ expect(page).to_not have_link("You Can't Get There From Here")
+ end
+
+ it 'parameters' do
+ dances
+ visit '/s'
+ select 'circle'
+ open_ellipsis
+ select('4 places')
+
+ expect(page).to_not have_content('Box the Gnat Contra') # no circles
+ expect(page).to_not have_content('Call Me') # has circle left 3 places
+ expect(page).to have_content('The Rendevouz') # has circle left 3 & 4 places
+ expect(page).to_not have_content("You Can't Get There From Here") # circles 3 places
+
+ select('do si do')
+ select('neighbors')
+
+ expect(page).to have_content('[ "figure", "do si do", "neighbors", "*", "*", "*" ]')
+ expect(page).to_not have_content('The Rendevouz')
+ expect(page).to_not have_content('Box the Gnat Contra')
+ expect(page).to_not have_content('Call Me')
+ expect(page).to have_content("You Can't Get There From Here")
+ end
+ end
+ end
+
+ def open_ellipsis
+ find('.toggle-off').click
+ end
+end
diff --git a/spec/features/welcome/search_spec.rb b/spec/features/welcome/search_spec.rb
index ab675039..3f6a19bb 100644
--- a/spec/features/welcome/search_spec.rb
+++ b/spec/features/welcome/search_spec.rb
@@ -3,191 +3,287 @@
require 'rails_helper'
describe 'Search page', js: true do
- it 'exercise formation filter' do
- visit '/s'
- expect(page).to have_css('.figure-filter-op', count: 3)
- all('.figure-filter-op')[1].select('formation')
- select('proper')
- expect(page).to have_text('state.lisp: [ "and", [ "formation", "proper" ], [ "progression" ] ]')
- end
-
- describe 'casts' do
- it "cast from 'and' to 'or'" do
- visit '/s'
- expect(page).to have_css('.figure-filter-op', count: 3)
- first('.figure-filter-op').select('or')
- expect(page).to have_text('state.lisp: [ "or", [ "figure", "*" ], [ "progression" ] ]')
- end
-
- it "cast to 'not'" do
- visit '/s'
- expect(page).to have_css('.figure-filter-op', count: 3)
- first('.figure-filter-op').select('not')
- expect(page).to have_text('state.lisp: [ "not", [ "and", [ "figure", "*" ], [ "progression" ] ] ]')
- expect(page).to have_css('.figure-filter-op', count: 4)
+ let (:now) { DateTime.now }
+ it "works" do
+ dances = 12.times.map {|i| FactoryGirl.create(:dance, title: "Dance #{i}.", created_at: now - i.days)}
+ visit(s_path)
+ dances.each_with_index do |dance, i|
+ to_probably = i < 10 ? :to : :to_not
+ expect(page).send to_probably, have_link(dance.title, href: dance_path(dance))
+ expect(page).send to_probably, have_link(dance.choreographer.name, href: choreographer_path(dance.choreographer_id))
+ expect(page).send to_probably, have_text(dance.created_at.localtime.strftime("%-m/%-d/%Y"))
end
end
- describe 'deletion' do
- it "works" do
- visit '/s'
- expect(page).to have_css('.figure-filter-op', count: 3)
- all('.figure-filter-menu-hamburger')[-1].click
- find('a.figure-filter-menu-delete').click
- expect(page).to have_text('[ "and", [ "figure", "*" ] ]')
+ describe 'pagination' do
+ def have_turn_page_button(*args)
+ have_css(turn_page_button_css(*args))
end
- it "menu item isn't visible for the root node" do
- visit '/s'
- expect(page).to have_css('.figure-filter-op', count: 3)
- first('.figure-filter-menu-hamburger').click
- expect(page).to_not have_css('.figure-filter-menu-delete')
+ def turn_page_button_css(label, disabled=false)
+ "button[data-testid=#{label.inspect}]#{disabled ? '[disabled]' : ''}"
end
- it "menu item isn't visible for a subexpression that's required" do
- visit '/s'
- expect(page).to have_css('.figure-filter-op', count: 3)
- first('.figure-filter-op').select('not')
- expect(page).to have_css('.figure-filter-op', count: 4)
- expect(page).to have_text('state.lisp: [ "not", [ "and", [ "figure", "*" ], [ "progression" ] ] ]')
- all('.figure-filter-menu-hamburger')[1].click
- expect(page).to have_css('.figure-filter-menu')
- expect(page).to_not have_css('.figure-filter-menu-delete')
+ let! (:dances) { 52.times.map {|i| FactoryGirl.create(:dance, title: "dance-#{i}.", created_at: now - i.hours)} }
+ it "turning pages" do
+ visit(s_path)
+ # first page
+ 10.times {|i| expect(page).to have_link("dance-#{i}.")}
+ expect(page).to have_text('Showing 1 to 10 of 52 dances')
+ expect(page).to have_turn_page_button('<<', disabled: true)# have_css('button[data-testid="<<"][disabled]')
+ expect(page).to have_turn_page_button('<', disabled: true)
+ expect(page).to have_turn_page_button('>')
+ expect(page).to have_turn_page_button('>>')
+ page.find(turn_page_button_css('>')).click
+ # second page
+ 10.times {|i| expect(page).to have_link("dance-#{i+10}.")}
+ expect(page).to have_text('Showing 11 to 20 of 52 dances')
+ expect(page).to have_turn_page_button('<<')
+ expect(page).to have_turn_page_button('<')
+ expect(page).to have_turn_page_button('>')
+ expect(page).to have_turn_page_button('>>')
+ page.find(turn_page_button_css('<')).click
+ # first page
+ 10.times {|i| expect(page).to have_link("dance-#{i}.")}
+ expect(page).to have_text('Showing 1 to 10 of 52 dances')
+ expect(page).to have_turn_page_button('<<', disabled: true)
+ expect(page).to have_turn_page_button('<', disabled: true)
+ expect(page).to have_turn_page_button('>')
+ expect(page).to have_turn_page_button('>>')
+ # third page via numeric input
+ find('.page-number-entry').fill_in(with: '3') # third page
+ 10.times {|i| expect(page).to have_link("dance-#{i+20}.")}
+ expect(page).to have_text('Showing 21 to 30 of 52 dances')
+ expect(page).to have_turn_page_button('<<')
+ expect(page).to have_turn_page_button('<')
+ expect(page).to have_turn_page_button('>')
+ expect(page).to have_turn_page_button('>>')
+ page.find(turn_page_button_css('>>')).click
+ # last (partial) page
+ 2.times {|i| expect(page).to have_link("dance-#{i+50}.")}
+ expect(page).to have_text('Showing 51 to 52 of 52 dances')
+ expect(page).to have_turn_page_button('<<')
+ expect(page).to have_turn_page_button('<')
+ expect(page).to have_turn_page_button('>', disabled: true)
+ expect(page).to have_turn_page_button('>>', disabled: true)
+ page.find(turn_page_button_css('<<')).click
+ # first page
+ 10.times {|i| expect(page).to have_link("dance-#{i}.")}
+ expect(page).to have_text('Showing 1 to 10 of 52 dances')
+ expect(page).to have_turn_page_button('<<', disabled: true)
+ expect(page).to have_turn_page_button('<', disabled: true)
+ expect(page).to have_turn_page_button('>')
+ expect(page).to have_turn_page_button('>>')
end
- end
- describe 'datatable' do
- let (:dances) {[:dance, :box_the_gnat_contra, :call_me, :you_cant_get_there_from_here].map {|d| FactoryGirl.create(d)}}
-
- it 'works (and test formation filter)' do
- dances
- visit '/s'
- dances.each {|dance|
- expect(page).to have_link(dance.title, href: dance_path(dance))
- }
- expect(page).to have_css('.figure-filter-op', count: 3)
- all('.figure-filter-op')[1].select('formation')
- select('Becket *')
- dances.each do |dance|
- to_or_to_not = dance.start_type.include?("Becket") ? :to : :to_not
- expect(page).send(to_or_to_not, have_link(dance.title, href: dance_path(dance)))
+ it "page size select menu" do
+ visit(s_path)
+ expect(page).to have_text("Showing 1 to 10 of 52 dances.")
+ select('30')
+ expect(page).to have_text("Showing 1 to 30 of 52 dances.")
+ page.find(turn_page_button_css('>')).click
+ expect(page).to have_text("Showing 31 to 52 of 52 dances.")
+ (dances.length-30).times do |i|
+ expect(page).to have_link("dance-#{i+30}.")
end
end
+ end
- it 'count filter' do
+ describe 'columns' do
+ let (:dances) {[:dance, :box_the_gnat_contra, :call_me].map {|d| FactoryGirl.create(d)}}
+ it "Clicking vis toggles buttons cause columns to disappear" do
dances
- visit '/s'
- first('.figure-filter-op').select('figure')
- first('.figure-filter-op').select('number of')
- select('≠')
- select('7')
- matches = 0
- dances.each do |dance|
- not_seven = dance.figures.length != 7
- matches += 1 if not_seven
- to_or_to_not = not_seven ? :to : :to_not
- expect(page).send(to_or_to_not, have_link(dance.title, href: dance_path(dance)))
+ visit(s_path)
+ %w[Title Choreographer Formation Hook User Entered].each do |col|
+ expect(page).to have_css('.dances-table-react th', text: col)
+ expect(page).to have_css('button.toggle-vis-active', text: col)
+ expect(page).to_not have_css('button.toggle-vis-inactive', text: col)
+ click_button col
+ expect(page).to_not have_css('.dances-table-react th', text: col)
+ expect(page).to have_css('button.toggle-vis-inactive', text: col)
+ expect(page).to_not have_css('button.toggle-vis-active', text: col)
+ click_button col
+ expect(page).to have_css('.dances-table-react th', text: col)
+ expect(page).to have_css('button.toggle-vis-active', text: col)
+ expect(page).to_not have_css('button.toggle-vis-inactive', text: col)
+ end
+ %w[Updated Sharing Figures].each do |col|
+ expect(page).to_not have_css('.dances-table-react th', text: col)
+ expect(page).to_not have_css('button.toggle-vis-active', text: col)
+ expect(page).to have_css('button.toggle-vis-inactive', text: col)
+ click_button col
+ expect(page).to have_css('.dances-table-react th', text: col)
+ expect(page).to_not have_css('button.toggle-vis-inactive', text: col)
+ expect(page).to have_css('button.toggle-vis-active', text: col)
+ click_button col
+ expect(page).to_not have_css('.dances-table-react th', text: col)
+ expect(page).to have_css('button.toggle-vis-inactive', text: col)
+ expect(page).to_not have_css('button.toggle-vis-active', text: col)
end
- expect(matches).to eq(1)
end
- it 'tag and compare filters' do
- verified = FactoryGirl.create(:tag, :verified)
- broken = FactoryGirl.create(:tag, :please_review)
- call_me = dances.find {|dance| dance.title == "Call Me"}
- the_rendevouz = dances.find {|dance| dance.title == "The Rendevouz"}
- 1.times { FactoryGirl.create(:dut, tag: verified, dance: call_me) }
- 2.times { FactoryGirl.create(:dut, tag: broken, dance: the_rendevouz) }
- visit '/s'
- first('.figure-filter-op').select('compare')
- find_all('.figure-filter-op', count: 3)[1].select('tag')
- dances.each do |dance|
- if dance.id == call_me.id
- expect(page).to have_link(dance.title)
- else
- expect(page).to_not have_link(dance.title)
+ it 'published column cells' do
+ with_login do |user|
+ dances.each_with_index do |dance, i|
+ publish = [:off, :sketchbook, :all][i]
+ publish_string = ['private', 'sketchbook', 'everywhere'][i]
+ dance.update!(publish: publish, user: user)
+ visit(s_path)
+ click_button 'Sharing'
+ expect(page).to have_css('tr', text: /#{dance.title}.*#{publish_string}/)
end
end
- select '1'
- dances.each do |dance|
- expect(page).to_not have_link(dance.title)
+ end
+
+ describe 'matching figures column' do
+ it 'whole dance' do
+ dances
+ visit(s_path)
+ expect(page).to_not have_css(:th, text: "Figures")
+ expect(page).to_not have_content('whole dance')
+ click_button 'Figures'
+ expect(page).to have_css(:th, text: "Figures") # js wait
+ expect(page).to have_content('whole dance', count: 3)
end
- select 'please review'
- dances.each do |dance|
- if dance.id == the_rendevouz.id
- expect(page).to have_link(dance.title)
- else
- expect(page).to_not have_link(dance.title)
- end
+
+ it 'some matches prints figures' do
+ # TODO: update how we pass the filter when there's a user-facing way to send figure queries
+ # 4NOW: stub the controller, heh heh -dm 01-30-2020
+ expect_any_instance_of(Api::V1::DancesController).to receive(:filter).and_return(['figure', 'circle'])
+ # mock
+ dances
+ visit(s_path)
+ click_button 'Figures'
+ expect(page).to have_css('tr', text: /The Rendevouz.*\n?circle left 4 places\ncircle left 3 places/)
+ expect(page).to have_css('tr', text: /Call Me.*\n?circle left 3 places/)
end
end
+ end
- it 'count-matches and compare filters' do
- dances
- visit '/s'
- first('.figure-filter-op').select('compare')
- find_all('.figure-filter-op', count: 3)[1].select('count matches')
- select('≠')
- select('7')
- matches = 0
- dances.each do |dance|
- not_seven = dance.figures.length != 7
- matches += 1 if not_seven
- to_or_to_not = not_seven ? :to : :to_not
- expect(page).send(to_or_to_not, have_link(dance.title, href: dance_path(dance)))
+ it "sentence displays how many search results match" do
+ dbsize = 12
+ dbsize.times.map {|i| FactoryGirl.create(:dance, created_at: now - i.hours)}
+ visit(s_path)
+ expect(page).to have_content("Showing 1 to 10 of #{dbsize} dances.")
+ end
+
+ describe "sorting" do
+ it "clicking a header displays that column in descending order" do
+ shuffled_ints = [7, 0, 10, 8, 9, 2, 11, 6, 3, 5, 1, 4]
+ dances = shuffled_ints.map.with_index {|shuffled_int, i|
+ FactoryGirl.create(:dance, title: "dance-#{shuffled_int.to_s.rjust(2, '0')}", created_at: now - i.hours)
+ }
+ dances_sorted = dances.dup.sort_by(&:title)
+ visit(s_path)
+ dances.each_with_index do |dance, i|
+ expect(page).send(i < 10 ? :to : :to_not, have_text(dance.title))
end
- expect(matches).to eq(1)
+ expect(page).to_not have_css('th .glyphicon-sort-by-attributes')
+ expect(page).to_not have_css('th .glyphicon-sort-by-attributes-alt')
+ unsorted_dances_titles_regex = Regexp.new(dances.take(10).map(&:title).join('.*\n'))
+ expect(page).to have_text(unsorted_dances_titles_regex)
+
+ # first click makes it sort descending
+ find('th', text: 'Title').click
+ expect(page).to have_css('th .glyphicon-sort-by-attributes')
+ expect(page).to_not have_css('th .glyphicon-sort-by-attributes-alt')
+ dances_sorted.each_with_index do |dance, i|
+ expect(page).send(i < 10 ? :to : :to_not, have_text(dance.title))
+ end
+ # we see we have the dances, but do we have them in order? dance-00, dance-01, ... dance-09
+ first_ten_dances_titles_regex = Regexp.new(dances_sorted.take(10).map(&:title).join('.*\n'))
+ expect(page).to have_text(first_ten_dances_titles_regex)
+
+ # second click makes it sort ascending
+ find('th', text: 'Title').click
+ expect(page).to have_css('th .glyphicon-sort-by-attributes-alt')
+ expect(page).to_not have_css('th .glyphicon-sort-by-attributes')
+ dances_sorted.each_with_index do |dance, i|
+ expect(page).send(i >= dances.length-10 ? :to : :to_not, have_text(dance.title))
+ end
+ # we see we have the dances, but do we have them in order? dance-12, dance-11, ... dance-02
+ last_ten_dances_titles_regex = Regexp.new(dances_sorted.reverse.take(10).map(&:title).join('.*\n'))
+ expect(page).to have_text(last_ten_dances_titles_regex)
+
+ # third click returns to default sort (which is by descending created_at)
+ find('th', text: 'Title').click
+ expect(page).to_not have_css('th .glyphicon-sort-by-attributes-alt')
+ expect(page).to_not have_css('th .glyphicon-sort-by-attributes')
+ dances.each_with_index do |dance, i|
+ expect(page).send(i < 10 ? :to : :to_not, have_text(dance.title))
+ end
+ expect(page).to have_text(unsorted_dances_titles_regex)
end
- it '& filter' do
- dances
- visit '/s'
- expect(page).to have_css('.figure-filter-op', count: 3)
- first('.figure-filter-op').select('&')
- select('chain')
- expect(page).to have_text('state.lisp: [ "&", [ "figure", "chain" ], [ "progression" ] ]')
- expect(page).to_not have_link('The Rendevouz')
- expect(page).to_not have_link('Call Me')
- expect(page).to_not have_link("You Can't Get There From Here")
- expect(page).to have_link('Box the Gnat Contra')
+ it "no weird monkey business with client side sorting" do
+ titles = ['40 Years of Penguin Pam', "A Crafty Wave", "24th of June"]
+ dances = titles.map {|title| FactoryGirl.create(:dance, title: title)}
+ titles_sorted = titles.dup.sort
+ visit(s_path)
+ find('th', text: 'Title').click
+ expect(page).to have_text(Regexp.new(titles_sorted.join('.*\n')))
end
- describe 'figure filter' do
- it 'move works' do
- dances
- visit '/s'
- select 'chain'
- expect(page).to_not have_link('The Rendevouz')
- expect(page).to have_link('Call Me')
- expect(page).to have_link('Box the Gnat Contra')
- expect(page).to_not have_link("You Can't Get There From Here")
+ it "you can't sort by matching figures" do
+ dances = [:dance, :box_the_gnat_contra, :call_me].each_with_index.map do |t, i|
+ FactoryGirl.create(t, created_at: now - i.hours)
end
+ the_ordered_regexp = Regexp.new(dances.map(&:title).join('(?:.*\n)+'))
+ visit(s_path)
+ click_button 'Figures'
+ expect(page).to have_content(the_ordered_regexp) # order is time-sorted
+ find('th', text: 'Figures').click
+ expect(page).to_not have_css('th .glyphicon-sort-by-attributes')
+ expect(page).to_not have_css('th .glyphicon-sort-by-attributes-alt')
+ expect(page).to have_content(the_ordered_regexp) # order is still time-sorted
+ end
- it 'parameters' do
- dances
- visit '/s'
- select 'circle'
- open_ellipsis
- select('4 places')
-
- expect(page).to_not have_content('Box the Gnat Contra') # no circles
- expect(page).to_not have_content('Call Me') # has circle left 3 places
- expect(page).to have_content('The Rendevouz') # has circle left 3 & 4 places
- expect(page).to_not have_content("You Can't Get There From Here") # circles 3 places
-
- select('do si do')
- select('neighbors')
-
- expect(page).to have_content('[ "figure", "do si do", "neighbors", "*", "*", "*" ]')
- expect(page).to_not have_content('The Rendevouz')
- expect(page).to_not have_content('Box the Gnat Contra')
- expect(page).to_not have_content('Call Me')
- expect(page).to have_content("You Can't Get There From Here")
+ it "sorting all columns (except matching figure) does not give error" do
+ dances = [:dance, :box_the_gnat_contra, :call_me].each_with_index.map do |t, i|
+ FactoryGirl.create(t, created_at: now - i.hours)
+ end
+ visit(s_path)
+ columns = page.find_all(".toggle-vis-active").to_a + page.find_all(".toggle-vis-inactive").to_a
+ column_names = columns.map(&:text)
+ column_names_not_to_check = ['Figures']
+ column_names_checked = column_names - column_names_not_to_check
+ column_names_checked.each do |column_name|
+ unless has_css?('.toggle-vis-active', text: column_name)
+ click_button(column_name)
+ end
+ th = find('.dance-table-th', text: column_name)
+ expect(th).to have_css('.glyphicon-sort')
+ expect(th).to_not have_css('.glyphicon-sort-by-attributes')
+ expect(th).to_not have_css('.glyphicon-sort-by-attributes-alt')
+ th.click
+ expect(th).to have_css('.glyphicon-sort-by-attributes')
+ expect(th).to_not have_css('.glyphicon-sort')
+ expect(th).to_not have_css('.glyphicon-sort-by-attributes-alt')
+ th.click
+ expect(th).to have_css('.glyphicon-sort-by-attributes-alt')
+ expect(th).to_not have_css('.glyphicon-sort')
+ expect(th).to_not have_css('.glyphicon-sort-by-attributes')
+ th.click
+ expect(th).to have_css('.glyphicon-sort')
+ expect(th).to_not have_css('.glyphicon-sort-by-attributes')
+ expect(th).to_not have_css('.glyphicon-sort-by-attributes-alt')
end
end
end
- def open_ellipsis
- find('.toggle-off').click
+ describe "filters" do
+ describe "choreographer" do
+ let(:dances) { [:dance, :box_the_gnat_contra, :call_me].map {|name| FactoryGirl.create(name)} }
+
+ it "works" do
+ call_me = dances.last
+ dont_call_me = dances[0, dances.length-2]
+ visit(s_path)
+ find('.ez-choreographer-filter').fill_in(with: call_me.choreographer)
+ dont_call_me.each do |dance|
+ expect(page).to_not have_content(dance.title)
+ end
+ end
+ end
end
end
diff --git a/spec/javascript/dance-table.spec.tsx b/spec/javascript/dance-table.spec.tsx
new file mode 100644
index 00000000..7e92947a
--- /dev/null
+++ b/spec/javascript/dance-table.spec.tsx
@@ -0,0 +1,15 @@
+import React from "react"
+// import { render, fireEvent } from "@testing-library/react"
+
+import { sortByParam } from "../../app/javascript/dance-table"
+
+describe("sortByParam", () => {
+ it("works", () => {
+ const sortBy = [
+ { id: "title" },
+ { id: "choreographer_name", desc: false },
+ { id: "hook", desc: true },
+ ]
+ expect(sortByParam(sortBy)).toBe("titleAchoreographer_nameAhookD")
+ })
+})
diff --git a/spec/javascript/natural-number-editor.spec.tsx b/spec/javascript/natural-number-editor.spec.tsx
new file mode 100644
index 00000000..b7786f66
--- /dev/null
+++ b/spec/javascript/natural-number-editor.spec.tsx
@@ -0,0 +1,47 @@
+import React from "react"
+import { render, fireEvent } from "@testing-library/react"
+
+import NaturalNumberEditor from "../../app/javascript/natural-number-editor"
+
+describe("NaturalNumberEditor", () => {
+ let value: number
+ let setValue: any
+
+ beforeEach(() => {
+ value = 250624
+ setValue = jest.fn((x: number) => {
+ value = x
+ })
+ })
+
+ it("works", () => {
+ const { getByDisplayValue } = render(
+
+ )
+ const field = getByDisplayValue(value.toString())
+ fireEvent.change(field, { target: { value: 36 } })
+ expect(setValue).toHaveBeenCalledWith(36)
+ expect(setValue).toHaveBeenCalledTimes(1)
+ })
+
+ describe("className", () => {
+ it("renders with .form-control", () => {
+ const field = render(
+
+ ).getByDisplayValue(value.toString())
+ expect(field).toHaveClass("form-control")
+ })
+
+ it("appends .form-control to whatever they pass in in inputProperties", () => {
+ const field = render(
+
+ ).getByDisplayValue(value.toString())
+ expect(field).toHaveClass("fuzzy-wuzzy")
+ expect(field).toHaveClass("form-control")
+ })
+ })
+})
diff --git a/spec/jest-setup.ts b/spec/jest-setup.ts
new file mode 100644
index 00000000..fd3b1f80
--- /dev/null
+++ b/spec/jest-setup.ts
@@ -0,0 +1 @@
+import "@testing-library/jest-dom/extend-expect"
diff --git a/spec/lib/filter_dances_spec.rb b/spec/lib/filter_dances_spec.rb
new file mode 100644
index 00000000..1912e04f
--- /dev/null
+++ b/spec/lib/filter_dances_spec.rb
@@ -0,0 +1,274 @@
+# coding: utf-8
+require 'rails_helper'
+require 'filter_dances'
+
+
+describe FilterDances do
+ let (:dialect) { JSLibFigure.default_dialect }
+
+ describe "filter_dances" do
+ let (:now) { DateTime.now }
+
+ it 'works with a matchy filter and plenty of dances' do
+ dances = 20.times.map {|i| FactoryGirl.create(:dance, created_at: now - i.hours) }
+ filter_results = FilterDances.filter_dances(['figure', '*'], count: 10, dialect: dialect)[:dances]
+ expect(filter_results.length).to eq(10)
+ filter_results.each_with_index do |filter_result, i|
+ dance = dances[i]
+ expect(filter_result['id']).to eq(dance.id)
+ end
+ end
+
+ it 'works with an unexpectedly unmatchy filter and not enough dances' do
+ dance1 = FactoryGirl.create(:dance)
+ 30.times.each {|i| FactoryGirl.create(:dance_with_zero_figures, created_at: now - i.hours) }
+ dance2 = FactoryGirl.create(:dance, created_at: now - 100.hours)
+ dances = [dance1, dance2]
+ filter_results = FilterDances.filter_dances(['figure', '*'], count: 10, dialect: dialect)[:dances]
+ expect(filter_results.length).to eq(2)
+ filter_results.each_with_index do |filter_result, i|
+ dance = dances[i]
+ expect(filter_result['id']).to eq(dance.id)
+ end
+ end
+
+ it 'returns dances in most-recently-created order' do
+ random = Random.new(1000) # repeatable seed.
+ dances = 10.times.map do |i|
+ t = now - random.rand(100).hours
+ FactoryGirl.create(:dance, created_at: t)
+ end
+ filter_results = FilterDances.filter_dances(['figure', '*'], count: 10, dialect: dialect)[:dances]
+ dances_sorted = dances.sort_by(&:created_at).reverse
+ filter_results.each_with_index do |filter_result, i|
+ dance = dances_sorted[i]
+ expect(filter_result['id']).to eq(dance.id)
+ end
+ end
+
+ it 'honors count and offset' do
+ dances = 3.times.map {|i| FactoryGirl.create(:dance, created_at: now - i.hours) }
+ filter_results = FilterDances.filter_dances(['figure', '*'], count: 1, offset: 1, dialect: dialect)[:dances]
+ expect(filter_results.length).to eq(1)
+ expect(filter_results.first['id']).to eq(dances.second.id)
+ end
+
+ it 'checks the numberSearched and numberMatching fields'
+ end
+
+ describe "search operators (kinda filter_dances again)" do
+ let! (:dances) { [:dance, :box_the_gnat_contra, :call_me, :dance_with_zero_figures].map {|name| FactoryGirl.create(name)} }
+ let (:zero) { dances.last }
+ let (:dance_titles_without_zero) { dances.map(&:title) - [dances.last.title]}
+
+ def titles(filtered)
+ filtered[:dances].map {|json| json['title']}
+ end
+
+ describe 'figure' do
+ it 'works' do
+ filtered = FilterDances.filter_dances(['figure', 'hey'], dialect: dialect)
+ expect(titles(filtered)).to eq(['Call Me'])
+ end
+
+ it 'wildcard' do
+ filtered = FilterDances.filter_dances(['figure', '*'], dialect: dialect)
+ expect(titles(filtered)).to contain_exactly(*dance_titles_without_zero)
+ end
+
+ it "quotes and spaces work - Rory O'More" do # something about this figure didn't work -dm 10-15-2017
+ rory = FactoryGirl.create(:dance_with_a_rory_o_more);
+ dances << rory
+ filtered = FilterDances.filter_dances(['figure', "Rory O'More"], dialect: dialect)
+ expect(titles(filtered)).to eq([rory.title])
+ end
+
+ it 'circle works with an angle' do
+ filtered = FilterDances.filter_dances(['figure', 'circle', '*', 360, '*'], dialect: dialect)
+ expect(titles(filtered)).to eq(['The Rendevouz'])
+ end
+
+ it "'shadow' finds both 'shadow' and '2nd shadow'" do
+ first_shadow = FactoryGirl.create(:dance_with_pair, pair: 'shadows')
+ second_shadow = FactoryGirl.create(:dance_with_pair, pair: '2nd shadows')
+ augmented_dances = dances + [first_shadow, second_shadow]
+ filtered = FilterDances.filter_dances(['figure', 'swing', 'shadows', '*', '*'], dialect: dialect)
+ expect(titles(filtered)).to contain_exactly(first_shadow.title, second_shadow.title)
+ end
+
+ it "'neighbors' finds 'neigbhors', 'prev neighbors', 'next neighbors', '3rd neighbors', and '4th neighbors'" do
+ augmented_dances = dances + ['prev neighbors', 'next neighbors', '3rd neighbors', '4th neighbors', 'partners'].map {|n|
+ FactoryGirl.create(:dance_with_pair, pair: n)
+ }
+ partners_should_not_match = augmented_dances.last
+ filtered = FilterDances.filter_dances(['figure', 'swing', 'neighbors', '*', '*'], dialect: dialect)
+ expect(titles(filtered)).to contain_exactly(*(augmented_dances.map(&:title).sort - [partners_should_not_match.title, zero.title]))
+ end
+ end
+
+ describe 'formation' do
+ # there's some heavier testing of this in features/welcome/index_spec.rb -dm 08-19-2018
+ it 'Becket ccw' do
+ filtered = FilterDances.filter_dances(['formation', 'Becket ccw'], dialect: dialect)
+ expect(titles(filtered)).to eq(['Call Me'])
+ end
+
+ it 'improper' do
+ filtered = FilterDances.filter_dances(['formation', 'improper'], dialect: dialect)
+ expect(titles(filtered)).to contain_exactly(*(dances.map(&:title) - ['Call Me']))
+ end
+
+ it 'everything else' do
+ FactoryGirl.create(:dance, start_type: 'circle mixer', title: 'wacky')
+ filtered = FilterDances.filter_dances(['formation', 'everything else'], dialect: dialect)
+ expect(titles(filtered)).to eq(['wacky'])
+ end
+ end
+
+ it 'progression' do
+ filtered = FilterDances.filter_dances(['progression'], dialect: dialect)
+ expect(titles(filtered)).to contain_exactly("The Rendevouz", "Box the Gnat Contra", "Call Me")
+ end
+
+ describe 'and' do
+ it 'works' do
+ filtered = FilterDances.filter_dances(['and', ['figure', 'circle'], ['figure', 'right left through']], dialect: dialect)
+ expect(titles(filtered)).to eq(['Call Me'])
+ end
+
+ it 'works with no' do
+ filtered = FilterDances.filter_dances(['and', ['no', ['figure', 'chain']], ['figure', 'star']], dialect: dialect)
+ expect(titles(filtered)).to eq([])
+ end
+ end
+
+ it '& works with progression' do
+ filtered = FilterDances.filter_dances(['&', ['figure', 'slide along set'], ['progression']], dialect: dialect)
+ expect(titles(filtered)).to eq(['The Rendevouz'])
+ end
+
+ it 'or' do
+ filtered = FilterDances.filter_dances(['or', ['figure', 'circle'], ['figure', 'right left through']], dialect: dialect)
+ expect(titles(filtered)).to contain_exactly(*dance_titles_without_zero)
+ end
+
+ it 'no' do
+ filtered = FilterDances.filter_dances(['no', ['figure', 'hey']], dialect: dialect)
+ expect(titles(filtered)).to contain_exactly('The Rendevouz', 'Box the Gnat Contra', zero.title)
+ end
+
+ it 'all' do
+ dances2 = [:dance_with_a_swing, :dance_with_a_do_si_do].map {|d| FactoryGirl.create(d)}
+ filtered = FilterDances.filter_dances(['all', ['figure', 'swing']], dialect: dialect)
+ expect(titles(filtered)).to contain_exactly(dances2.first.title, zero.title)
+ end
+
+ it 'not' do
+ FactoryGirl.create(:dance_with_a_swing)
+ filtered = FilterDances.filter_dances(['not', ['figure', 'swing']], dialect: dialect)
+ expect(titles(filtered)).to contain_exactly('The Rendevouz', 'Box the Gnat Contra', 'Call Me')
+ end
+
+ describe 'then' do
+ it 'basically works' do
+ filtered = FilterDances.filter_dances(['then', ['figure', 'swing'], ['figure', 'circle']], dialect: dialect)
+ expect(titles(filtered)).to contain_exactly('The Rendevouz', 'Call Me')
+ end
+
+ it 'works with not' do
+ # All the swings in Call Me are immediately followed by either a circle or a right left through.
+ filtered = FilterDances.filter_dances(['then', ['figure', 'swing'], ['not', ['or', ['figure', 'circle'], ['figure', 'right left through']]]], dialect: dialect)
+ expect(titles(filtered)).to contain_exactly('The Rendevouz', 'Box the Gnat Contra')
+ end
+ end
+
+ describe 'count' do
+ let (:all_titles) { dances.map(&:title) }
+
+ def filtered_titles(comparison, number)
+ titles(FilterDances.filter_dances(['count', ['figure', 'circle'], comparison, number.to_s], dialect: dialect))
+ end
+
+ it '≥ 2' do
+ expect(filtered_titles('≥', 2)).to eq(['The Rendevouz'])
+ end
+
+ it '< 2' do
+ expect(filtered_titles('<', 2)).to contain_exactly(*(all_titles - ['The Rendevouz']))
+ end
+
+ it '≠ 1' do
+ expect(filtered_titles('≠', 1)).to contain_exactly(*(all_titles - ['Call Me']))
+ end
+
+ it '= 1' do
+ expect(filtered_titles('=', 1)).to eq(['Call Me'])
+ end
+
+ end
+
+ describe 'compare' do
+ let (:all_titles) { dances.map(&:title) }
+
+ def filtered_titles(comparison, number)
+ titles(FilterDances.filter_dances(['compare', ['constant', 0], comparison, ['constant', number]], dialect: dialect))
+ end
+
+ it "0 = 0" do
+ expect(filtered_titles('=', 0)).to contain_exactly(*all_titles)
+ end
+
+ it "0 > 0" do
+ expect(filtered_titles('>', 0)).to eq([])
+ end
+ end
+
+ describe 'choreographer' do
+ it "works case-insensitively" do
+ filtered = FilterDances.filter_dances(['choreographer', dances.first.choreographer.name.upcase], dialect: dialect)
+ expect(titles(filtered)).to eq([dances.first.title])
+ end
+ end
+
+ describe 'if' do
+ it "only with the then" do
+ filter = ['if', ['choreographer', dances.first.choreographer.name],
+ ['figure', 'do si do']]
+ filtered = FilterDances.filter_dances(filter, dialect: dialect)
+ expect(titles(filtered)).to eq([dances.first.title])
+ expect(filtered.dig(:dances, 0, 'matching_figures_html')).to eq('ladles do si do 1½')
+ end
+
+ it "with both then and else" do
+ filter = ['if', ['choreographer', dances.first.choreographer.name],
+ ['figure', 'do si do'],
+ ['progression']]
+ filtered = FilterDances.filter_dances(filter, dialect: dialect)
+ titles_with_a_progression = dances.select {|d| d.figures.length > 0}.map(&:title)
+ expect(titles(filtered)).to contain_exactly(*titles_with_a_progression)
+ expect(filtered[:dances].map {|d| d['matching_figures_html']}).to(
+ contain_exactly("ladles do si do 1½", "ladles chain ⁋", "partners balance & swing ⁋")
+ )
+ end
+ end
+ end
+
+ it 'filter_result_to_json' do
+ dance = FactoryGirl.build(:dance)
+ result = {
+ id: dance.id,
+ title: dance.title,
+ choreographer_id: dance.choreographer_id,
+ choreographer_name: dance.choreographer.name,
+ formation: dance.start_type,
+ hook: dance.hook,
+ user_id: dance.user_id,
+ user_name: dance.user.name,
+ created_at: dance.created_at.as_json,
+ updated_at: dance.updated_at.as_json,
+ publish: (dance.publish == 'all') && 'everywhere',
+ matching_figures_html: 'whole dance',
+ }.stringify_keys
+ expect(FilterDances.filter_result_to_json(dance, 'whole dance')).to eq(result)
+ end
+end
diff --git a/spec/lib/sort_parser_spec.rb b/spec/lib/sort_parser_spec.rb
new file mode 100644
index 00000000..0cf838c5
--- /dev/null
+++ b/spec/lib/sort_parser_spec.rb
@@ -0,0 +1,59 @@
+require 'ostruct'
+require 'spec_helper'
+require 'sort_parser'
+
+describe SortParser do
+ describe 'parse' do
+ it 'works part 1' do
+ input = "titleAhookDchoreographer_nameAuser_nameDpublishA"
+ expected = [
+ "title",
+ {"hook" => :desc},
+ "choreographers.name",
+ User.arel_table[:name].desc,
+ "dances.publish"
+ ]
+ expect(SortParser.parse(input)).to eq(expected)
+ end
+
+ it 'works part 2' do
+ input = "formationDchoreographer_nameDuser_nameApublishD"
+ expected = [
+ {"start_type" => :desc},
+ Choreographer.arel_table[:name].desc,
+ "users.name",
+ Dance.arel_table[:publish].desc
+ ]
+ expect(SortParser.parse(input)).to eq(expected)
+ end
+
+ describe "created_at and updated_at" do
+ it 'ascending' do
+ input = "created_atAupdated_atA"
+ expected = [
+ "dances.created_at",
+ "dances.updated_at",
+ ]
+ expect(SortParser.parse(input)).to eq(expected)
+ end
+
+ it 'descending' do
+ input = "created_atDupdated_atD"
+ expected = [
+ Dance.arel_table[:created_at].desc,
+ Dance.arel_table[:updated_at].desc,
+ ]
+ expect(SortParser.parse(input)).to eq(expected)
+ end
+
+ end
+ it 'throws an error on bogus input' do
+ bogus = 'titlehookA'
+ expect {SortParser.parse(bogus)}.to raise_error("SortParser could not read #{bogus.inspect}")
+ end
+
+ it 'if the input is empty, returns a default' do
+ expect(SortParser.parse("")).to eq([{created_at: :desc}])
+ end
+ end
+end
diff --git a/spec/models/dance_spec.rb b/spec/models/dance_spec.rb
index 6a9e5ce5..fd676855 100644
--- a/spec/models/dance_spec.rb
+++ b/spec/models/dance_spec.rb
@@ -183,32 +183,4 @@
expect(dut.dance.tags.to_a).to eq([dut.tag])
end
end
-
-# it "#to_s_dump" do
-# choreographer = FactoryGirl.build(:choreographer, name: 'Bob')
-# s = FactoryGirl.build(:dance, choreographer: choreographer).to_s_dump
-# expected = <<-HEREDOC
-#
-# Nate Rockstraw
-# The Rendevouz
-# Bob
-# improper
-# notes: ""
-# 0. neighbors balance & swing
-# 1. long lines forward & back
-# 2. ladles do si do 1½
-# 3. partners balance & swing
-# 4. circle left 4 places
-# 5. slide left along set to new neighbors
-# 6. circle left 3 places
-# published
-# preamble: "a preamble appears here"
-# hook: "pioneered slide progression"
-# HEREDOC
-# (0...(s.length/10)).each do |i|
-# # if the strings aren't equal, this helpfully localizes it to be more specific than a 340 character string
-# expect(s[i*10,10]).to eq(expected[i*10,10])
-# end
-# expect(s.strip).to eq(expected.strip)
-# end
end
diff --git a/spec/requests/api/v1/dances_controller_spec.rb b/spec/requests/api/v1/dances_controller_spec.rb
new file mode 100644
index 00000000..90aa817d
--- /dev/null
+++ b/spec/requests/api/v1/dances_controller_spec.rb
@@ -0,0 +1,73 @@
+require 'rails_helper'
+
+RSpec.describe Api::V1::DancesController do
+ describe "POST #index" do
+ let (:now) { DateTime.now }
+ let (:headers) { { "content_type" => "application/json" } }
+ it "returns json of all dances" do
+ dance = FactoryGirl.create(:call_me)
+ post(api_v1_dances_path, params: {}, headers: headers)
+ expect(response).to have_http_status(200)
+ expect(JSON.parse(response.body))
+ .to eq({
+ "numberSearched" => 1,
+ "numberMatching" => 1,
+ "dances" =>
+ [{"id"=>dance.id,
+ "title"=>dance.title,
+ "choreographer_id"=>dance.choreographer_id,
+ "choreographer_name"=>dance.choreographer.name,
+ "formation" => dance.start_type,
+ "hook" => dance.hook,
+ "user_id" => dance.user_id,
+ "user_name" => dance.user.name,
+ "created_at"=>dance.created_at.as_json,
+ "updated_at"=>dance.updated_at.as_json,
+ "publish"=>"everywhere",
+ "matching_figures_html"=>"whole dance"}
+ ]})
+ end
+
+ it 'understands count and offset' do
+ pageSize = 4
+ pages = 3
+ dances = (pages*pageSize).times.map do |i|
+ FactoryGirl.create(:dance, title: "dance-#{i}", created_at: now - i.hours)
+ end
+ pages.times do |pageIndex|
+ pageSize.times do |rowIndex|
+ params = {count: pageSize, offset: pageIndex*pageSize}
+ post(api_v1_dances_path, params: params, headers: headers)
+ expect(response).to have_http_status(200)
+ rendered = JSON.parse(response.body)
+ expect(rendered['numberMatching']).to eq(12)
+ expect(rendered['dances'].length).to eq(pageSize)
+ d1 = dances[pageSize * pageIndex + rowIndex]
+ d2 = rendered.dig('dances', rowIndex)
+ expect(d1.id).to eq(d2['id'])
+ end
+ end
+ end
+
+ it 'heeds sorting' do
+ dances = "caB".chars.each_with_index.map do |char, i|
+ FactoryGirl.create(:dance, title: char*3, created_at: now - i.hours)
+ end
+ post(api_v1_dances_path, params: {sort_by: 'titleA'}, headers: headers)
+ dances_received = JSON.parse(response.body)['dances']
+ aaaBBBccc = ['aaa', 'BBB', 'ccc']
+ expect(aaaBBBccc).to eq(dances.dup.sort_by {|d| d.title.downcase }.map(&:title))
+ expect(dances_received.map{|json| json['title']}).to eq(aaaBBBccc)
+ end
+
+ it 'heeds filter' do
+ dances = [:box_the_gnat_contra, :dance].map {|name| FactoryGirl.create(name)}
+ box_the_gnat = dances.first
+ post(api_v1_dances_path, params: {filter: ['figure', 'box the gnat']}, headers: headers)
+ dances_received = JSON.parse(response.body)['dances']
+ expect(dances_received.map {|d| d['title']}).to eq([box_the_gnat.title])
+ end
+
+ it 'only performs one sql query'
+ end
+end
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 00000000..f3057f18
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,22 @@
+{
+ "compilerOptions": {
+ "declaration": false,
+ "emitDecoratorMetadata": true,
+ "experimentalDecorators": true,
+ "lib": ["es6", "dom"],
+ "module": "es6",
+ "moduleResolution": "node",
+ "sourceMap": true,
+ "strict": true,
+ "target": "es5",
+ "jsx": "react",
+ "esModuleInterop": true
+ },
+ "exclude": [
+ "**/*.spec.ts",
+ "node_modules",
+ "vendor",
+ "public"
+ ],
+ "compileOnSave": true
+}
diff --git a/yarn.lock b/yarn.lock
index db8b5772..3eaec8fd 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9,18 +9,18 @@
dependencies:
"@babel/highlight" "^7.0.0"
-"@babel/core@^7.1.0", "@babel/core@^7.2.2", "@babel/core@^7.4.5":
- version "7.6.2"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.2.tgz#069a776e8d5e9eefff76236bc8845566bd31dd91"
- integrity sha512-l8zto/fuoZIbncm+01p8zPSDZu/VuuJhAfA7d/AbzM09WR7iVhavvfNDYCNpo1VvLk6E6xgAoP9P+/EMJHuRkQ==
+"@babel/core@^7.1.0", "@babel/core@^7.4.5":
+ version "7.6.4"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.4.tgz#6ebd9fe00925f6c3e177bb726a188b5f578088ff"
+ integrity sha512-Rm0HGw101GY8FTzpWSyRbki/jzq+/PkNQJ+nSulrdY6gFGOsNseCqD6KHRYe2E+EdzuBdr2pxCp6s4Uk6eJ+XQ==
dependencies:
"@babel/code-frame" "^7.5.5"
- "@babel/generator" "^7.6.2"
+ "@babel/generator" "^7.6.4"
"@babel/helpers" "^7.6.2"
- "@babel/parser" "^7.6.2"
+ "@babel/parser" "^7.6.4"
"@babel/template" "^7.6.0"
- "@babel/traverse" "^7.6.2"
- "@babel/types" "^7.6.0"
+ "@babel/traverse" "^7.6.3"
+ "@babel/types" "^7.6.3"
convert-source-map "^1.1.0"
debug "^4.1.0"
json5 "^2.1.0"
@@ -29,12 +29,12 @@
semver "^5.4.1"
source-map "^0.5.0"
-"@babel/generator@^7.4.0", "@babel/generator@^7.6.2":
- version "7.6.2"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.2.tgz#dac8a3c2df118334c2a29ff3446da1636a8f8c03"
- integrity sha512-j8iHaIW4gGPnViaIHI7e9t/Hl8qLjERI6DcV9kEpAIDJsAOrcnXqRS7t+QbhL76pwbtqP+QCQLL0z1CyVmtjjQ==
+"@babel/generator@^7.4.0", "@babel/generator@^7.6.3", "@babel/generator@^7.6.4":
+ version "7.6.4"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.4.tgz#a4f8437287bf9671b07f483b76e3bb731bc97671"
+ integrity sha512-jsBuXkFoZxk0yWLyGI9llT9oiQ2FeTASmRFE32U+aaDTfoE92t78eroO7PTpU/OrYq38hlcDM6vbfLDaOLy+7w==
dependencies:
- "@babel/types" "^7.6.0"
+ "@babel/types" "^7.6.3"
jsesc "^2.5.1"
lodash "^4.17.13"
source-map "^0.5.0"
@@ -54,6 +54,14 @@
"@babel/helper-explode-assignable-expression" "^7.1.0"
"@babel/types" "^7.0.0"
+"@babel/helper-builder-react-jsx@^7.3.0":
+ version "7.3.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz#a1ac95a5d2b3e88ae5e54846bf462eeb81b318a4"
+ integrity sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw==
+ dependencies:
+ "@babel/types" "^7.3.0"
+ esutils "^2.0.0"
+
"@babel/helper-call-delegate@^7.4.4":
version "7.4.4"
resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43"
@@ -224,10 +232,10 @@
esutils "^2.0.2"
js-tokens "^4.0.0"
-"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.6.0", "@babel/parser@^7.6.2":
- version "7.6.2"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.2.tgz#205e9c95e16ba3b8b96090677a67c9d6075b70a1"
- integrity sha512-mdFqWrSPCmikBoaBYMuBulzTIKuXVPtEISFbRRVNwMWpCms/hmE2kRq0bblUHaNRKrjRlmVbx1sDHmjmRgD2Xg==
+"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.6.0", "@babel/parser@^7.6.3", "@babel/parser@^7.6.4":
+ version "7.6.4"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.4.tgz#cb9b36a7482110282d5cb6dd424ec9262b473d81"
+ integrity sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A==
"@babel/plugin-proposal-async-generator-functions@^7.2.0":
version "7.2.0"
@@ -308,6 +316,13 @@
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
+"@babel/plugin-syntax-jsx@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7"
+ integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.2.0":
version "7.2.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e"
@@ -345,10 +360,10 @@
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-block-scoping@^7.6.2":
- version "7.6.2"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.2.tgz#96c33ab97a9ae500cc6f5b19e04a7e6553360a79"
- integrity sha512-zZT8ivau9LOQQaOGC7bQLQOT4XPkPXgN2ERfUgk1X8ql+mVkLc4E8eKk+FO3o0154kxzqenWCorfmEXpEZcrSQ==
+"@babel/plugin-transform-block-scoping@^7.6.3":
+ version "7.6.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.3.tgz#6e854e51fbbaa84351b15d4ddafe342f3a5d542a"
+ integrity sha512-7hvrg75dubcO3ZI2rjYTzUrEuh1E9IyDEhhB6qfcooxhDA33xx2MasuLVgdxzcP6R/lipAC6n9ub9maNW6RKdw==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
lodash "^4.17.13"
@@ -470,10 +485,10 @@
"@babel/helper-module-transforms" "^7.1.0"
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-named-capturing-groups-regex@^7.6.2":
- version "7.6.2"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.2.tgz#c1ca0bb84b94f385ca302c3932e870b0fb0e522b"
- integrity sha512-xBdB+XOs+lgbZc2/4F5BVDVcDNS4tcSKQc96KmlqLEAwz6tpYPEvPdmDfvVG0Ssn8lAhronaRs6Z6KSexIpK5g==
+"@babel/plugin-transform-named-capturing-groups-regex@^7.6.3":
+ version "7.6.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.3.tgz#aaa6e409dd4fb2e50b6e2a91f7e3a3149dbce0cf"
+ integrity sha512-jTkk7/uE6H2s5w6VlMHeWuH+Pcy2lmdwFoeWCVnvIrDUnB5gQqTVI8WfmEAhF2CDEarGrknZcmSFg1+bkfCoSw==
dependencies:
regexpu-core "^4.6.0"
@@ -508,6 +523,38 @@
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
+"@babel/plugin-transform-react-display-name@^7.0.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz#ebfaed87834ce8dc4279609a4f0c324c156e3eb0"
+ integrity sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-react-jsx-self@^7.0.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz#461e21ad9478f1031dd5e276108d027f1b5240ba"
+ integrity sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-jsx" "^7.2.0"
+
+"@babel/plugin-transform-react-jsx-source@^7.0.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.5.0.tgz#583b10c49cf057e237085bcbd8cc960bd83bd96b"
+ integrity sha512-58Q+Jsy4IDCZx7kqEZuSDdam/1oW8OdDX8f+Loo6xyxdfg1yF0GE2XNJQSTZCaMol93+FBzpWiPEwtbMloAcPg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-jsx" "^7.2.0"
+
+"@babel/plugin-transform-react-jsx@^7.0.0":
+ version "7.3.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz#f2cab99026631c767e2745a5368b331cfe8f5290"
+ integrity sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==
+ dependencies:
+ "@babel/helper-builder-react-jsx" "^7.3.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-jsx" "^7.2.0"
+
"@babel/plugin-transform-regenerator@^7.4.5":
version "7.4.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f"
@@ -578,10 +625,10 @@
"@babel/helper-regex" "^7.4.4"
regexpu-core "^4.6.0"
-"@babel/preset-env@^7.3.1", "@babel/preset-env@^7.4.5":
- version "7.6.2"
- resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.6.2.tgz#abbb3ed785c7fe4220d4c82a53621d71fc0c75d3"
- integrity sha512-Ru7+mfzy9M1/YTEtlDS8CD45jd22ngb9tXnn64DvQK3ooyqSw9K4K9DUWmYknTTVk4TqygL9dqCrZgm1HMea/Q==
+"@babel/preset-env@^7.4.5":
+ version "7.6.3"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.6.3.tgz#9e1bf05a2e2d687036d24c40e4639dc46cef2271"
+ integrity sha512-CWQkn7EVnwzlOdR5NOm2+pfgSNEZmvGjOhlCHBDq0J8/EStr+G+FvPEiz9B56dR6MoiUFjXhfE4hjLoAKKJtIQ==
dependencies:
"@babel/helper-module-imports" "^7.0.0"
"@babel/helper-plugin-utils" "^7.0.0"
@@ -599,7 +646,7 @@
"@babel/plugin-transform-arrow-functions" "^7.2.0"
"@babel/plugin-transform-async-to-generator" "^7.5.0"
"@babel/plugin-transform-block-scoped-functions" "^7.2.0"
- "@babel/plugin-transform-block-scoping" "^7.6.2"
+ "@babel/plugin-transform-block-scoping" "^7.6.3"
"@babel/plugin-transform-classes" "^7.5.5"
"@babel/plugin-transform-computed-properties" "^7.2.0"
"@babel/plugin-transform-destructuring" "^7.6.0"
@@ -614,7 +661,7 @@
"@babel/plugin-transform-modules-commonjs" "^7.6.0"
"@babel/plugin-transform-modules-systemjs" "^7.5.0"
"@babel/plugin-transform-modules-umd" "^7.2.0"
- "@babel/plugin-transform-named-capturing-groups-regex" "^7.6.2"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.6.3"
"@babel/plugin-transform-new-target" "^7.4.4"
"@babel/plugin-transform-object-super" "^7.5.5"
"@babel/plugin-transform-parameters" "^7.4.4"
@@ -627,17 +674,35 @@
"@babel/plugin-transform-template-literals" "^7.4.4"
"@babel/plugin-transform-typeof-symbol" "^7.2.0"
"@babel/plugin-transform-unicode-regex" "^7.6.2"
- "@babel/types" "^7.6.0"
+ "@babel/types" "^7.6.3"
browserslist "^4.6.0"
core-js-compat "^3.1.1"
invariant "^2.2.2"
js-levenshtein "^1.1.3"
semver "^5.5.0"
+"@babel/preset-react@^7.6.3":
+ version "7.6.3"
+ resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.6.3.tgz#d5242c828322520205ae4eda5d4f4f618964e2f6"
+ integrity sha512-07yQhmkZmRAfwREYIQgW0HEwMY9GBJVuPY4Q12UC72AbfaawuupVWa8zQs2tlL+yun45Nv/1KreII/0PLfEsgA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-transform-react-display-name" "^7.0.0"
+ "@babel/plugin-transform-react-jsx" "^7.0.0"
+ "@babel/plugin-transform-react-jsx-self" "^7.0.0"
+ "@babel/plugin-transform-react-jsx-source" "^7.0.0"
+
"@babel/runtime@^7.4.2", "@babel/runtime@^7.4.5":
- version "7.6.2"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.2.tgz#c3d6e41b304ef10dcf13777a33e7694ec4a9a6dd"
- integrity sha512-EXxN64agfUqqIGeEjI5dL5z0Sw0ZwWo1mLTi4mQowCZ42O59b7DRpZAnTC6OqdF28wMBMFKNb/4uFGrVaigSpg==
+ version "7.6.3"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.3.tgz#935122c74c73d2240cafd32ddb5fc2a6cd35cf1f"
+ integrity sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==
+ dependencies:
+ regenerator-runtime "^0.13.2"
+
+"@babel/runtime@^7.5.1", "@babel/runtime@^7.6.0", "@babel/runtime@^7.6.2":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.4.tgz#b23a856751e4bf099262f867767889c0e3fe175b"
+ integrity sha512-r24eVUUr0QqNZa+qrImUk8fn5SPhHq+IfYvIoIMg0do3GdK9sMdiLKP3GYVVaxpPKORgm8KRKaNTEhAjgIpLMw==
dependencies:
regenerator-runtime "^0.13.2"
@@ -650,25 +715,25 @@
"@babel/parser" "^7.6.0"
"@babel/types" "^7.6.0"
-"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.2":
- version "7.6.2"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.2.tgz#b0e2bfd401d339ce0e6c05690206d1e11502ce2c"
- integrity sha512-8fRE76xNwNttVEF2TwxJDGBLWthUkHWSldmfuBzVRmEDWOtu4XdINTgN7TDWzuLg4bbeIMLvfMFD9we5YcWkRQ==
+"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.2", "@babel/traverse@^7.6.3":
+ version "7.6.3"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.3.tgz#66d7dba146b086703c0fb10dd588b7364cec47f9"
+ integrity sha512-unn7P4LGsijIxaAJo/wpoU11zN+2IaClkQAxcJWBNCMS6cmVh802IyLHNkAjQ0iYnRS3nnxk5O3fuXW28IMxTw==
dependencies:
"@babel/code-frame" "^7.5.5"
- "@babel/generator" "^7.6.2"
+ "@babel/generator" "^7.6.3"
"@babel/helper-function-name" "^7.1.0"
"@babel/helper-split-export-declaration" "^7.4.4"
- "@babel/parser" "^7.6.2"
- "@babel/types" "^7.6.0"
+ "@babel/parser" "^7.6.3"
+ "@babel/types" "^7.6.3"
debug "^4.1.0"
globals "^11.1.0"
lodash "^4.17.13"
-"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.6.0":
- version "7.6.1"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.1.tgz#53abf3308add3ac2a2884d539151c57c4b3ac648"
- integrity sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==
+"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.6.0", "@babel/types@^7.6.3":
+ version "7.6.3"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.3.tgz#3f07d96f854f98e2fbd45c64b0cb942d11e8ba09"
+ integrity sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA==
dependencies:
esutils "^2.0.2"
lodash "^4.17.13"
@@ -835,7 +900,7 @@
"@types/istanbul-reports" "^1.1.1"
"@types/yargs" "^13.0.0"
-"@rails/webpacker@^4.0.0-rc.7":
+"@rails/webpacker@^4.0.7":
version "4.0.7"
resolved "https://registry.yarnpkg.com/@rails/webpacker/-/webpacker-4.0.7.tgz#268571bf974e78ce57eca9fa478f5bd97fd5182c"
integrity sha512-nx3inMv7euO0UsD0voJ+n3/z1u56PuprW322b67TLuDmOHRpT7yUjBJULMisVKA6PVJw4DwiG9Kbf8ZGu53+tw==
@@ -879,6 +944,47 @@
webpack-cli "^3.3.2"
webpack-sources "^1.3.0"
+"@sheerun/mutationobserver-shim@^0.3.2":
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.2.tgz#8013f2af54a2b7d735f71560ff360d3a8176a87b"
+ integrity sha512-vTCdPp/T/Q3oSqwHmZ5Kpa9oI7iLtGl3RQaA/NyLHikvcrPxACkkKVr/XzkSPJWXHRhKGzVvb0urJsbMlRxi1Q==
+
+"@testing-library/dom@^6.3.0":
+ version "6.10.1"
+ resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-6.10.1.tgz#da5bf5065d3f9e484aef4cc495f4e1a5bea6df2e"
+ integrity sha512-5BPKxaO+zSJDUbVZBRNf9KrmDkm/EcjjaHSg3F9+031VZyPACKXlwLBjVzZxheunT9m72DoIq7WvyE457/Xweg==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@sheerun/mutationobserver-shim" "^0.3.2"
+ "@types/testing-library__dom" "^6.0.0"
+ aria-query "3.0.0"
+ pretty-format "^24.9.0"
+ wait-for-expect "^3.0.0"
+
+"@testing-library/jest-dom@^4.2.4":
+ version "4.2.4"
+ resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-4.2.4.tgz#00dfa0cbdd837d9a3c2a7f3f0a248ea6e7b89742"
+ integrity sha512-j31Bn0rQo12fhCWOUWy9fl7wtqkp7In/YP2p5ZFyRuiiB9Qs3g+hS4gAmDWONbAHcRmVooNJ5eOHQDCOmUFXHg==
+ dependencies:
+ "@babel/runtime" "^7.5.1"
+ chalk "^2.4.1"
+ css "^2.2.3"
+ css.escape "^1.5.1"
+ jest-diff "^24.0.0"
+ jest-matcher-utils "^24.0.0"
+ lodash "^4.17.11"
+ pretty-format "^24.0.0"
+ redent "^3.0.0"
+
+"@testing-library/react@^9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-9.3.2.tgz#418000daa980dafd2d9420cc733d661daece9aa0"
+ integrity sha512-J6ftWtm218tOLS175MF9eWCxGp+X+cUXCpkPIin8KAXWtyZbr9CbqJ8M8QNd6spZxJDAGlw+leLG4MJWLlqVgg==
+ dependencies:
+ "@babel/runtime" "^7.6.0"
+ "@testing-library/dom" "^6.3.0"
+ "@types/testing-library__react" "^9.1.0"
+
"@types/babel__core@^7.1.0":
version "7.1.3"
resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.3.tgz#e441ea7df63cd080dfcd02ab199e6d16a735fc30"
@@ -912,6 +1018,11 @@
dependencies:
"@babel/types" "^7.3.0"
+"@types/eslint-visitor-keys@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"
+ integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==
+
"@types/events@*":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7"
@@ -946,26 +1057,80 @@
"@types/istanbul-lib-coverage" "*"
"@types/istanbul-lib-report" "*"
+"@types/jest@^24.0.23":
+ version "24.0.23"
+ resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.23.tgz#046f8e2ade026fe831623e361a36b6fb9a4463e4"
+ integrity sha512-L7MBvwfNpe7yVPTXLn32df/EK+AMBFAFvZrRuArGs7npEWnlziUXK+5GMIUTI4NIuwok3XibsjXCs5HxviYXjg==
+ dependencies:
+ jest-diff "^24.3.0"
+
+"@types/json-schema@^7.0.3":
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636"
+ integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==
+
"@types/minimatch@*":
version "3.0.3"
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
"@types/node@*":
- version "12.7.11"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.11.tgz#be879b52031cfb5d295b047f5462d8ef1a716446"
- integrity sha512-Otxmr2rrZLKRYIybtdG/sgeO+tHY20GxeDjcGmUnmmlCWyEnv2a2x1ZXBo3BTec4OiTXMQCiazB8NMBf0iRlFw==
+ version "12.11.7"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.11.7.tgz#57682a9771a3f7b09c2497f28129a0462966524a"
+ integrity sha512-JNbGaHFCLwgHn/iCckiGSOZ1XYHsKFwREtzPwSGCVld1SGhOlmZw2D4ZI94HQCrBHbADzW9m4LER/8olJTRGHA==
+
+"@types/prop-types@*":
+ version "15.7.3"
+ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7"
+ integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==
"@types/q@^1.5.1":
version "1.5.2"
resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8"
integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==
+"@types/react-dom@*":
+ version "16.9.4"
+ resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.4.tgz#0b58df09a60961dcb77f62d4f1832427513420df"
+ integrity sha512-fya9xteU/n90tda0s+FtN5Ym4tbgxpq/hb/Af24dvs6uYnYn+fspaxw5USlw0R8apDNwxsqumdRoCoKitckQqw==
+ dependencies:
+ "@types/react" "*"
+
+"@types/react-dom@^16.9.3":
+ version "16.9.3"
+ resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.3.tgz#4006ff0e13958af91313869077c04cb20d9b9d04"
+ integrity sha512-FUuZKXPr9qlzUT9lhuzrZgLjH63TvNn28Ch3MvKG4B+F52zQtO8DtE0Opbncy3xaucNZM2WIPfuNTgkbKx5Brg==
+ dependencies:
+ "@types/react" "*"
+
+"@types/react@*", "@types/react@^16.9.11":
+ version "16.9.11"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.11.tgz#70e0b7ad79058a7842f25ccf2999807076ada120"
+ integrity sha512-UBT4GZ3PokTXSWmdgC/GeCGEJXE5ofWyibCcecRLUVN2ZBpXQGVgQGtG2foS7CrTKFKlQVVswLvf7Js6XA/CVQ==
+ dependencies:
+ "@types/prop-types" "*"
+ csstype "^2.2.0"
+
"@types/stack-utils@^1.0.1":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==
+"@types/testing-library__dom@*", "@types/testing-library__dom@^6.0.0":
+ version "6.10.0"
+ resolved "https://registry.yarnpkg.com/@types/testing-library__dom/-/testing-library__dom-6.10.0.tgz#590d76e3875a7c536dc744eb530cbf51b6483404"
+ integrity sha512-mL/GMlyQxiZplbUuFNwA0vAI3k3uJNSf6slr5AVve9TXmfLfyefNT0uHHnxwdYuPMxYD5gI/+dgAvc/5opW9JQ==
+ dependencies:
+ pretty-format "^24.3.0"
+
+"@types/testing-library__react@^9.1.0":
+ version "9.1.2"
+ resolved "https://registry.yarnpkg.com/@types/testing-library__react/-/testing-library__react-9.1.2.tgz#e33af9124c60a010fc03a34eff8f8a34a75c4351"
+ integrity sha512-CYaMqrswQ+cJACy268jsLAw355DZtPZGt3Jwmmotlcu8O/tkoXBI6AeZ84oZBJsIsesozPKzWzmv/0TIU+1E9Q==
+ dependencies:
+ "@types/react-dom" "*"
+ "@types/testing-library__dom" "*"
+
"@types/yargs-parser@*":
version "13.1.0"
resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228"
@@ -978,20 +1143,48 @@
dependencies:
"@types/yargs-parser" "*"
-"@vue/component-compiler-utils@^3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.0.0.tgz#d16fa26b836c06df5baaeb45f3d80afc47e35634"
- integrity sha512-am+04/0UX7ektcmvhYmrf84BDVAD8afFOf4asZjN84q8xzxFclbk5x0MtxuKGfp+zjN5WWPJn3fjFAWtDdIGSw==
+"@typescript-eslint/eslint-plugin@^2.12.0":
+ version "2.12.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.12.0.tgz#0da7cbca7b24f4c6919e9eb31c704bfb126f90ad"
+ integrity sha512-1t4r9rpLuEwl3hgt90jY18wJHSyb0E3orVL3DaqwmpiSDHmHiSspVsvsFF78BJ/3NNG3qmeso836jpuBWYziAA==
+ dependencies:
+ "@typescript-eslint/experimental-utils" "2.12.0"
+ eslint-utils "^1.4.3"
+ functional-red-black-tree "^1.0.1"
+ regexpp "^3.0.0"
+ tsutils "^3.17.1"
+
+"@typescript-eslint/experimental-utils@2.12.0":
+ version "2.12.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.12.0.tgz#e0a76ffb6293e058748408a191921e453c31d40d"
+ integrity sha512-jv4gYpw5N5BrWF3ntROvCuLe1IjRenLy5+U57J24NbPGwZFAjhnM45qpq0nDH1y/AZMb3Br25YiNVwyPbz6RkA==
+ dependencies:
+ "@types/json-schema" "^7.0.3"
+ "@typescript-eslint/typescript-estree" "2.12.0"
+ eslint-scope "^5.0.0"
+
+"@typescript-eslint/parser@^2.12.0":
+ version "2.12.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.12.0.tgz#393f1604943a4ca570bb1a45bc8834e9b9158884"
+ integrity sha512-lPdkwpdzxEfjI8TyTzZqPatkrswLSVu4bqUgnB03fHSOwpC7KSerPgJRgIAf11UGNf7HKjJV6oaPZI4AghLU6g==
+ dependencies:
+ "@types/eslint-visitor-keys" "^1.0.0"
+ "@typescript-eslint/experimental-utils" "2.12.0"
+ "@typescript-eslint/typescript-estree" "2.12.0"
+ eslint-visitor-keys "^1.1.0"
+
+"@typescript-eslint/typescript-estree@2.12.0":
+ version "2.12.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.12.0.tgz#bd9e547ccffd17dfab0c3ab0947c80c8e2eb914c"
+ integrity sha512-rGehVfjHEn8Frh9UW02ZZIfJs6SIIxIu/K1bbci8rFfDE/1lQ8krIJy5OXOV3DVnNdDPtoiPOdEANkLMrwXbiQ==
dependencies:
- consolidate "^0.15.1"
- hash-sum "^1.0.2"
- lru-cache "^4.1.2"
- merge-source-map "^1.1.0"
- postcss "^7.0.14"
- postcss-selector-parser "^5.0.0"
- prettier "1.16.3"
- source-map "~0.6.1"
- vue-template-es2015-compiler "^1.9.0"
+ debug "^4.1.1"
+ eslint-visitor-keys "^1.1.0"
+ glob "^7.1.6"
+ is-glob "^4.0.1"
+ lodash.unescape "4.0.1"
+ semver "^6.3.0"
+ tsutils "^3.17.1"
"@webassemblyjs/ast@1.8.5":
version "1.8.5"
@@ -1175,6 +1368,11 @@ acorn-globals@^4.1.0:
acorn "^6.0.1"
acorn-walk "^6.0.1"
+acorn-jsx@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384"
+ integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==
+
acorn-walk@^6.0.1:
version "6.2.0"
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c"
@@ -1190,6 +1388,11 @@ acorn@^6.0.1, acorn@^6.2.1:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e"
integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==
+acorn@^7.1.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c"
+ integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==
+
ajv-errors@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
@@ -1200,7 +1403,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1:
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da"
integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==
-ajv@^6.1.0, ajv@^6.10.2, ajv@^6.5.5:
+ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5:
version "6.10.2"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52"
integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==
@@ -1230,6 +1433,13 @@ ansi-escapes@^3.0.0:
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
+ansi-escapes@^4.2.1:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.0.tgz#a4ce2b33d6b214b7950d8595c212f12ac9cc569d"
+ integrity sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==
+ dependencies:
+ type-fest "^0.8.1"
+
ansi-html@0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e"
@@ -1250,6 +1460,11 @@ ansi-regex@^4.0.0, ansi-regex@^4.1.0:
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+ansi-regex@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
+ integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
+
ansi-styles@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
@@ -1290,6 +1505,14 @@ argparse@^1.0.7:
dependencies:
sprintf-js "~1.0.2"
+aria-query@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc"
+ integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=
+ dependencies:
+ ast-types-flow "0.0.7"
+ commander "^2.11.0"
+
arr-diff@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
@@ -1325,6 +1548,14 @@ array-flatten@^2.1.0:
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
+array-includes@^3.0.3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.0.tgz#48a929ef4c6bb1fa6dc4a92c9b023a261b0ca404"
+ integrity sha512-ONOEQoKrvXPKk7Su92Co0YMqYO32FfqJTzkKU9u2UpIXyYZIzLSvpdg4AwvSw4mSUW0czu6inK+zby6Oj6gDjQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.0"
+
array-union@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
@@ -1376,6 +1607,11 @@ assign-symbols@^1.0.0:
resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+ast-types-flow@0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
+ integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0=
+
astral-regex@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
@@ -1396,10 +1632,12 @@ async-limiter@~1.0.0:
resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
-async@^1.5.2:
- version "1.5.2"
- resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
- integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=
+async@^2.6.2:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
+ integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
+ dependencies:
+ lodash "^4.17.14"
asynckit@^0.4.0:
version "0.4.0"
@@ -1412,16 +1650,16 @@ atob@^2.1.1:
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
autoprefixer@^9.6.1:
- version "9.6.4"
- resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.6.4.tgz#e6453be47af316b2923eaeaed87860f52ad4b7eb"
- integrity sha512-Koz2cJU9dKOxG8P1f8uVaBntOv9lP4yz9ffWvWaicv9gHBPhpQB22nGijwd8gqW9CNT+UdkbQOQNLVI8jN1ZfQ==
+ version "9.7.0"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.0.tgz#905ec19e50f04545fe9ff131182cc9ab25246901"
+ integrity sha512-j2IRvaCfrUxIiZun9ba4mhJ2omhw4OY88/yVzLO+lHhGBumAAK72PgM6gkbSN8iregPOn1ZlxGkmZh2CQ7X4AQ==
dependencies:
- browserslist "^4.7.0"
- caniuse-lite "^1.0.30000998"
+ browserslist "^4.7.2"
+ caniuse-lite "^1.0.30001004"
chalk "^2.4.2"
normalize-range "^0.1.2"
num2fraction "^1.2.2"
- postcss "^7.0.18"
+ postcss "^7.0.19"
postcss-value-parser "^4.0.2"
aws-sign2@~0.7.0:
@@ -1447,7 +1685,7 @@ babel-jest@^24.9.0:
chalk "^2.4.2"
slash "^2.0.0"
-babel-loader@^8.0.5, babel-loader@^8.0.6:
+babel-loader@^8.0.6:
version "8.0.6"
resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb"
integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==
@@ -1490,6 +1728,11 @@ babel-plugin-macros@^2.5.0:
cosmiconfig "^5.2.0"
resolve "^1.10.0"
+babel-plugin-transform-react-remove-prop-types@^0.4.24:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a"
+ integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==
+
babel-preset-jest@^24.9.0:
version "24.9.0"
resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc"
@@ -1550,10 +1793,10 @@ block-stream@*:
dependencies:
inherits "~2.0.0"
-bluebird@^3.1.1, bluebird@^3.5.5:
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.0.tgz#56a6a886e03f6ae577cffedeb524f8f2450293cf"
- integrity sha512-aBQ1FxIa7kSWCcmKHlcHFlT2jt6J/l4FzC7KcPELkOJOsPOb/bccdhmIrKDfXhwFrmc7vDoDrrepFvGqjyXGJg==
+bluebird@^3.5.5:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.1.tgz#df70e302b471d7473489acf26a93d63b53f874de"
+ integrity sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
version "4.11.8"
@@ -1593,11 +1836,6 @@ boolbase@^1.0.0, boolbase@~1.0.0:
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
-bootstrap-toggle@^2.2.2:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/bootstrap-toggle/-/bootstrap-toggle-2.2.2.tgz#2b88534fc1b998674f877f98ba0d8b5b743e96fe"
- integrity sha1-K4hTT8G5mGdPh3+Yug2LW3Q+lv4=
-
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
@@ -1622,6 +1860,13 @@ braces@^2.3.1, braces@^2.3.2:
split-string "^3.0.2"
to-regex "^3.0.1"
+braces@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
brorand@^1.0.1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
@@ -1698,23 +1943,30 @@ browserify-zlib@^0.2.0:
dependencies:
pako "~1.0.5"
-browserslist@^4.0.0, browserslist@^4.6.0, browserslist@^4.6.4, browserslist@^4.6.6, browserslist@^4.7.0:
- version "4.7.0"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.0.tgz#9ee89225ffc07db03409f2fee524dc8227458a17"
- integrity sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA==
+browserslist@^4.0.0, browserslist@^4.6.0, browserslist@^4.6.4, browserslist@^4.7.2:
+ version "4.7.2"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.2.tgz#1bb984531a476b5d389cedecb195b2cd69fb1348"
+ integrity sha512-uZavT/gZXJd2UTi9Ov7/Z340WOSQ3+m1iBVRUknf+okKxonL9P83S3ctiBDtuRmRu8PiCHjqyueqQ9HYlJhxiw==
dependencies:
- caniuse-lite "^1.0.30000989"
- electron-to-chromium "^1.3.247"
- node-releases "^1.1.29"
+ caniuse-lite "^1.0.30001004"
+ electron-to-chromium "^1.3.295"
+ node-releases "^1.1.38"
+
+bs-logger@0.x:
+ version "0.2.6"
+ resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8"
+ integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==
+ dependencies:
+ fast-json-stable-stringify "2.x"
bser@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.0.tgz#65fc784bf7f87c009b973c12db6546902fa9c7b5"
- integrity sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg==
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
+ integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
dependencies:
node-int64 "^0.4.0"
-buffer-from@^1.0.0:
+buffer-from@1.x, buffer-from@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
@@ -1851,6 +2103,11 @@ camelcase@^3.0.0:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo=
+camelcase@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
+ integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
+
camelcase@^5.0.0, camelcase@^5.2.0, camelcase@^5.3.1:
version "5.3.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
@@ -1866,10 +2123,10 @@ caniuse-api@^3.0.0:
lodash.memoize "^4.1.2"
lodash.uniq "^4.5.0"
-caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30000989, caniuse-lite@^1.0.30000998:
- version "1.0.30000999"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000999.tgz#427253a69ad7bea4aa8d8345687b8eec51ca0e43"
- integrity sha512-1CUyKyecPeksKwXZvYw0tEoaMCo/RwBlXmEtN5vVnabvO0KPd9RQLcaAuR9/1F+KDMv6esmOFWlsXuzDk+8rxg==
+caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001004:
+ version "1.0.30001004"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001004.tgz#d879b73981b255488316da946c39327d8c00a586"
+ integrity sha512-3nfOR4O8Wa2RWoYfJkMtwRVOsK96TQ+eq57wd0iKaEWl8dwG4hKZ/g0MVBfCvysFvMLi9fQGR/DvozMdkEPl3g==
capture-exit@^2.0.0:
version "2.0.0"
@@ -1888,7 +2145,7 @@ caseless@~0.12.0:
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
-chalk@2.4.2, chalk@^2.0, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1, chalk@^2.4.2:
+chalk@2.4.2, chalk@^2.0, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
@@ -1908,6 +2165,11 @@ chalk@^1.1.1:
strip-ansi "^3.0.0"
supports-color "^2.0.0"
+chardet@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
+ integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
+
chokidar@^2.0.2, chokidar@^2.1.8:
version "2.1.8"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
@@ -1962,6 +2224,18 @@ class-utils@^0.3.5:
isobject "^3.0.0"
static-extend "^0.1.1"
+cli-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
+ integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
+ dependencies:
+ restore-cursor "^3.1.0"
+
+cli-width@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
+ integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
+
cliui@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
@@ -2065,10 +2339,10 @@ combined-stream@^1.0.6, combined-stream@~1.0.6:
dependencies:
delayed-stream "~1.0.0"
-commander@^2.20.0, commander@~2.20.0:
- version "2.20.1"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.1.tgz#3863ce3ca92d0831dcf2a102f5fb4b5926afd0f9"
- integrity sha512-cCuLsMhJeWQ/ZpsFTbE765kvVfoeSddc4nU3up4fV+fDBcfUXnbITJ+JzhkdjzOqhURjZgujxaioam4RM9yGUg==
+commander@^2.11.0, commander@^2.20.0, commander@~2.20.3:
+ version "2.20.3"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+ integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
commondir@^1.0.1:
version "1.0.1"
@@ -2144,13 +2418,6 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0:
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
-consolidate@^0.15.1:
- version "0.15.1"
- resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7"
- integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==
- dependencies:
- bluebird "^3.1.1"
-
constants-browserify@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
@@ -2203,17 +2470,17 @@ copy-descriptor@^0.1.0:
integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
core-js-compat@^3.1.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.2.1.tgz#0cbdbc2e386e8e00d3b85dc81c848effec5b8150"
- integrity sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A==
+ version "3.3.4"
+ resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.3.4.tgz#a151c6cd754edbfe6a4a2a66b9382df2ae74fbcd"
+ integrity sha512-7OK3/LPP8R3Ovasf3GilEOp+o1w0ZKJ75FMou2RDfTwIV69G5RkKCGFnqgBv/ZhR6xo9GCzlfVALyHmydbE7DA==
dependencies:
- browserslist "^4.6.6"
+ browserslist "^4.7.2"
semver "^6.3.0"
core-js@^3.1.3:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.2.1.tgz#cd41f38534da6cc59f7db050fe67307de9868b09"
- integrity sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==
+ version "3.3.4"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.3.4.tgz#6b0a23392958317bfb46e40b090529a923add669"
+ integrity sha512-BtibooaAmSOptGLRccsuX/dqgPtXwNgqcvYA6kOTTMzonRxZ+pJS4e+6mvVutESfXMeTnK8m3M+aBu3bkJbR+w==
core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
@@ -2261,7 +2528,7 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
safe-buffer "^5.0.1"
sha.js "^2.4.8"
-cross-spawn@6.0.5, cross-spawn@^6.0.0:
+cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5:
version "6.0.5"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
@@ -2390,6 +2657,21 @@ css-what@^2.1.2:
resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2"
integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==
+css.escape@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb"
+ integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=
+
+css@^2.2.3:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929"
+ integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==
+ dependencies:
+ inherits "^2.0.3"
+ source-map "^0.6.1"
+ source-map-resolve "^0.5.2"
+ urix "^0.1.0"
+
cssdb@^4.4.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0"
@@ -2492,6 +2774,11 @@ cssstyle@^1.0.0:
dependencies:
cssom "0.3.x"
+csstype@^2.2.0:
+ version "2.6.7"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.7.tgz#20b0024c20b6718f4eda3853a1f5a1cce7f5e4a5"
+ integrity sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ==
+
currently-unhandled@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
@@ -2525,11 +2812,6 @@ date-now@^0.1.4:
resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=
-de-indent@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
- integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=
-
debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
@@ -2537,14 +2819,14 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
dependencies:
ms "2.0.0"
-debug@^3.0.0, debug@^3.2.5, debug@^3.2.6:
+debug@^3.0.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6:
version "3.2.6"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
dependencies:
ms "^2.1.1"
-debug@^4.1.0, debug@^4.1.1:
+debug@^4.0.1, debug@^4.1.0, debug@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
@@ -2715,6 +2997,20 @@ dns-txt@^2.0.2:
dependencies:
buffer-indexof "^1.0.0"
+doctrine@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+ integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
+ dependencies:
+ esutils "^2.0.2"
+
+doctrine@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
+ integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+ dependencies:
+ esutils "^2.0.2"
+
dom-serializer@0:
version "0.2.1"
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.1.tgz#13650c850daffea35d8b626a4cfc4d3a17643fdb"
@@ -2783,10 +3079,10 @@ ee-first@1.1.1:
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
-electron-to-chromium@^1.3.247:
- version "1.3.276"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.276.tgz#1cca47c31b6e852ce43ab62ae4f31608db8b95d4"
- integrity sha512-J7bVRAW2fHJVOGZqxSvmMcbBAWPiueHsKwSq+TjaNq1wQ71Za0uBExC1ECuMmAAQioDA2//auhI/glFINnUGPw==
+electron-to-chromium@^1.3.295:
+ version "1.3.296"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.296.tgz#a1d4322d742317945285d3ba88966561b67f3ac8"
+ integrity sha512-s5hv+TSJSVRsxH190De66YHb50pBGTweT9XGWYu/LMR20KX6TsjFzObo36CjVAzM+PUeeKSBRtm/mISlCzeojQ==
elliptic@^6.0.0:
version "6.5.1"
@@ -2806,6 +3102,11 @@ emoji-regex@^7.0.1:
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
emojis-list@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
@@ -2823,7 +3124,7 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0:
dependencies:
once "^1.4.0"
-enhanced-resolve@4.1.0, enhanced-resolve@^4.1.0:
+enhanced-resolve@4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f"
integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==
@@ -2832,6 +3133,15 @@ enhanced-resolve@4.1.0, enhanced-resolve@^4.1.0:
memory-fs "^0.4.0"
tapable "^1.0.0"
+enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66"
+ integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.5.0"
+ tapable "^1.0.0"
+
entities@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4"
@@ -2852,9 +3162,9 @@ error-ex@^1.2.0, error-ex@^1.3.1:
is-arrayish "^0.2.1"
es-abstract@^1.12.0, es-abstract@^1.5.1:
- version "1.15.0"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.15.0.tgz#8884928ec7e40a79e3c9bc812d37d10c8b24cc57"
- integrity sha512-bhkEqWJ2t2lMeaJDuk7okMkJWI/yqgH/EoGwpcvv0XW9RWQsRspI4wt6xuyuvMvvQE3gg/D9HXppgk21w78GyQ==
+ version "1.16.0"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.16.0.tgz#d3a26dc9c3283ac9750dca569586e976d9dcc06d"
+ integrity sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==
dependencies:
es-to-primitive "^1.2.0"
function-bind "^1.1.1"
@@ -2867,6 +3177,23 @@ es-abstract@^1.12.0, es-abstract@^1.5.1:
string.prototype.trimleft "^2.1.0"
string.prototype.trimright "^2.1.0"
+es-abstract@^1.17.0-next.0, es-abstract@^1.17.0-next.1:
+ version "1.17.0"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.0.tgz#f42a517d0036a5591dbb2c463591dc8bb50309b1"
+ integrity sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==
+ dependencies:
+ es-to-primitive "^1.2.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.1"
+ is-callable "^1.1.5"
+ is-regex "^1.0.5"
+ object-inspect "^1.7.0"
+ object-keys "^1.1.1"
+ object.assign "^4.1.0"
+ string.prototype.trimleft "^2.1.1"
+ string.prototype.trimright "^2.1.1"
+
es-to-primitive@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377"
@@ -2876,6 +3203,15 @@ es-to-primitive@^1.2.0:
is-date-object "^1.0.1"
is-symbol "^1.0.2"
+es-to-primitive@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+ integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+ dependencies:
+ is-callable "^1.1.4"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.2"
+
escape-html@~1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
@@ -2898,6 +3234,39 @@ escodegen@^1.9.1:
optionalDependencies:
source-map "~0.6.1"
+eslint-config-prettier@^6.7.0:
+ version "6.7.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.7.0.tgz#9a876952e12df2b284adbd3440994bf1f39dfbb9"
+ integrity sha512-FamQVKM3jjUVwhG4hEMnbtsq7xOIDm+SY5iBPfR8gKsJoAB2IQnNF+bk1+8Fy44Nq7PPJaLvkRxILYdJWoguKQ==
+ dependencies:
+ get-stdin "^6.0.0"
+
+eslint-plugin-eslint-plugin@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-plugin/-/eslint-plugin-eslint-plugin-2.1.0.tgz#a7a00f15a886957d855feacaafee264f039e62d5"
+ integrity sha512-kT3A/ZJftt28gbl/Cv04qezb/NQ1dwYIbi8lyf806XMxkus7DvOVCLIfTXMrorp322Pnoez7+zabXH29tADIDg==
+
+eslint-plugin-react-hooks@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.3.0.tgz#53e073961f1f5ccf8dd19558036c1fac8c29d99a"
+ integrity sha512-gLKCa52G4ee7uXzdLiorca7JIQZPPXRAQDXV83J4bUEeUuc5pIEyZYAZ45Xnxe5IuupxEqHS+hUhSLIimK1EMw==
+
+eslint-plugin-react@^7.17.0:
+ version "7.17.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.17.0.tgz#a31b3e134b76046abe3cd278e7482bd35a1d12d7"
+ integrity sha512-ODB7yg6lxhBVMeiH1c7E95FLD4E/TwmFjltiU+ethv7KPdCwgiFuOZg9zNRHyufStTDLl/dEFqI2Q1VPmCd78A==
+ dependencies:
+ array-includes "^3.0.3"
+ doctrine "^2.1.0"
+ eslint-plugin-eslint-plugin "^2.1.0"
+ has "^1.0.3"
+ jsx-ast-utils "^2.2.3"
+ object.entries "^1.1.0"
+ object.fromentries "^2.0.1"
+ object.values "^1.1.0"
+ prop-types "^15.7.2"
+ resolve "^1.13.1"
+
eslint-scope@^4.0.3:
version "4.0.3"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
@@ -2906,6 +3275,78 @@ eslint-scope@^4.0.3:
esrecurse "^4.1.0"
estraverse "^4.1.1"
+eslint-scope@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9"
+ integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-utils@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
+ integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==
+ dependencies:
+ eslint-visitor-keys "^1.1.0"
+
+eslint-visitor-keys@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2"
+ integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==
+
+eslint@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb"
+ integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ ajv "^6.10.0"
+ chalk "^2.1.0"
+ cross-spawn "^6.0.5"
+ debug "^4.0.1"
+ doctrine "^3.0.0"
+ eslint-scope "^5.0.0"
+ eslint-utils "^1.4.3"
+ eslint-visitor-keys "^1.1.0"
+ espree "^6.1.2"
+ esquery "^1.0.1"
+ esutils "^2.0.2"
+ file-entry-cache "^5.0.1"
+ functional-red-black-tree "^1.0.1"
+ glob-parent "^5.0.0"
+ globals "^12.1.0"
+ ignore "^4.0.6"
+ import-fresh "^3.0.0"
+ imurmurhash "^0.1.4"
+ inquirer "^7.0.0"
+ is-glob "^4.0.0"
+ js-yaml "^3.13.1"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.3.0"
+ lodash "^4.17.14"
+ minimatch "^3.0.4"
+ mkdirp "^0.5.1"
+ natural-compare "^1.4.0"
+ optionator "^0.8.3"
+ progress "^2.0.0"
+ regexpp "^2.0.1"
+ semver "^6.1.2"
+ strip-ansi "^5.2.0"
+ strip-json-comments "^3.0.1"
+ table "^5.2.3"
+ text-table "^0.2.0"
+ v8-compile-cache "^2.0.3"
+
+espree@^6.1.2:
+ version "6.1.2"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d"
+ integrity sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==
+ dependencies:
+ acorn "^7.1.0"
+ acorn-jsx "^5.1.0"
+ eslint-visitor-keys "^1.1.0"
+
esprima@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
@@ -2916,6 +3357,13 @@ esprima@^4.0.0:
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+esquery@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708"
+ integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==
+ dependencies:
+ estraverse "^4.0.0"
+
esrecurse@^4.1.0:
version "4.2.1"
resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
@@ -2923,12 +3371,12 @@ esrecurse@^4.1.0:
dependencies:
estraverse "^4.1.0"
-estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
+estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
-esutils@^2.0.2:
+esutils@^2.0.0, esutils@^2.0.2:
version "2.0.3"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
@@ -3074,6 +3522,15 @@ extend@~3.0.2:
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+external-editor@^3.0.3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
+ integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
+ dependencies:
+ chardet "^0.7.0"
+ iconv-lite "^0.4.24"
+ tmp "^0.0.33"
+
extglob@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
@@ -3103,12 +3560,12 @@ fast-deep-equal@^2.0.1:
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
-fast-json-stable-stringify@^2.0.0:
+fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
-fast-levenshtein@~2.0.4:
+fast-levenshtein@~2.0.4, fast-levenshtein@~2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
@@ -3139,6 +3596,20 @@ figgy-pudding@^3.5.1:
resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790"
integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==
+figures@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec"
+ integrity sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+file-entry-cache@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
+ integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==
+ dependencies:
+ flat-cache "^2.0.1"
+
file-loader@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa"
@@ -3157,6 +3628,13 @@ fill-range@^4.0.0:
repeat-string "^1.6.1"
to-regex-range "^2.1.0"
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
finalhandler@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
@@ -3204,6 +3682,15 @@ findup-sync@3.0.0:
micromatch "^3.0.4"
resolve-dir "^1.0.1"
+flat-cache@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
+ integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
+ dependencies:
+ flatted "^2.0.0"
+ rimraf "2.6.3"
+ write "1.0.3"
+
flatted@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08"
@@ -3318,6 +3805,11 @@ function-bind@^1.1.1:
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+functional-red-black-tree@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
+ integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+
gauge@~2.7.3:
version "2.7.4"
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
@@ -3354,6 +3846,11 @@ get-stdin@^4.0.1:
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
+get-stdin@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
+ integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==
+
get-stream@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
@@ -3381,10 +3878,29 @@ glob-parent@^3.1.0:
is-glob "^3.1.0"
path-dirname "^1.0.0"
+glob-parent@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2"
+ integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==
+ dependencies:
+ is-glob "^4.0.1"
+
glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.1:
- version "7.1.4"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
- integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
+ version "7.1.5"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.5.tgz#6714c69bee20f3c3e64c4dd905553e532b40cdc0"
+ integrity sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@^7.1.6:
+ version "7.1.6"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
+ integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
@@ -3434,6 +3950,13 @@ globals@^11.1.0:
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+globals@^12.1.0:
+ version "12.3.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-12.3.0.tgz#1e564ee5c4dded2ab098b0f88f24702a3c56be13"
+ integrity sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==
+ dependencies:
+ type-fest "^0.8.1"
+
globby@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
@@ -3455,9 +3978,9 @@ globule@^1.0.0:
minimatch "~3.0.2"
graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2:
- version "4.2.2"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02"
- integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423"
+ integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==
growly@^1.3.0:
version "1.3.0"
@@ -3470,9 +3993,9 @@ handle-thing@^2.0.0:
integrity sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==
handlebars@^4.1.2:
- version "4.4.2"
- resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.4.2.tgz#8810a9821a9d6d52cb2f57d326d6ce7c3dfe741d"
- integrity sha512-cIv17+GhL8pHHnRJzGu2wwcthL5sb8uDKBHvZ2Dtu5s1YNt0ljbzKbamnc+gr69y7bzwQiBdr5+hOpRd5pnOdg==
+ version "4.5.1"
+ resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.1.tgz#8a01c382c180272260d07f2d1aa3ae745715c7ba"
+ integrity sha512-C29UoFzHe9yM61lOsIlCE5/mQVGrnIOrOq7maQl76L7tYPCgC1og0Ajt6uWnX4ZTxBPnjw+CUvawphwCfJgUnA==
dependencies:
neo-async "^2.6.0"
optimist "^0.6.1"
@@ -3510,6 +4033,11 @@ has-symbols@^1.0.0:
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=
+has-symbols@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
+ integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
+
has-unicode@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
@@ -3561,11 +4089,6 @@ hash-base@^3.0.0:
inherits "^2.0.1"
safe-buffer "^5.0.1"
-hash-sum@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04"
- integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=
-
hash.js@^1.0.0, hash.js@^1.0.3:
version "1.1.7"
resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
@@ -3574,11 +4097,6 @@ hash.js@^1.0.0, hash.js@^1.0.3:
inherits "^2.0.3"
minimalistic-assert "^1.0.1"
-he@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
- integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
-
hex-color-regex@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e"
@@ -3601,9 +4119,9 @@ homedir-polyfill@^1.0.1:
parse-passwd "^1.0.0"
hosted-git-info@^2.1.4:
- version "2.8.4"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.4.tgz#44119abaf4bc64692a16ace34700fed9c03e2546"
- integrity sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==
+ version "2.8.5"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c"
+ integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==
hpack.js@^2.1.6:
version "2.1.6"
@@ -3717,7 +4235,7 @@ https-browserify@^1.0.0:
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
-iconv-lite@0.4.24, iconv-lite@^0.4.4:
+iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@@ -3747,12 +4265,17 @@ iferr@^0.1.5:
integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE=
ignore-walk@^3.0.1:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.2.tgz#99d83a246c196ea5c93ef9315ad7b0819c35069b"
- integrity sha512-EXyErtpHbn75ZTsOADsfx6J/FPo6/5cjev46PXrcTpd8z3BoRkXgYu9/JVqrI7tusjmwCZutGeRJeU0Wo1e4Cw==
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37"
+ integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==
dependencies:
minimatch "^3.0.4"
+ignore@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
+ integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
+
import-cwd@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9"
@@ -3768,6 +4291,14 @@ import-fresh@^2.0.0:
caller-path "^2.0.0"
resolve-from "^3.0.0"
+import-fresh@^3.0.0:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66"
+ integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
import-from@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1"
@@ -3800,6 +4331,11 @@ indent-string@^2.1.0:
dependencies:
repeating "^2.0.0"
+indent-string@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+ integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+
indexes-of@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
@@ -3838,6 +4374,25 @@ ini@^1.3.4, ini@^1.3.5, ini@~1.3.0:
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
+inquirer@^7.0.0:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.1.tgz#13f7980eedc73c689feff3994b109c4e799c6ebb"
+ integrity sha512-V1FFQ3TIO15det8PijPLFR9M9baSlnRs9nL7zWu1MNVA2T9YVl9ZbrHJhYs7e9X8jeMZ3lr2JH/rdHFgNCBdYw==
+ dependencies:
+ ansi-escapes "^4.2.1"
+ chalk "^2.4.2"
+ cli-cursor "^3.1.0"
+ cli-width "^2.0.0"
+ external-editor "^3.0.3"
+ figures "^3.0.0"
+ lodash "^4.17.15"
+ mute-stream "0.0.8"
+ run-async "^2.2.0"
+ rxjs "^6.5.3"
+ string-width "^4.1.0"
+ strip-ansi "^5.1.0"
+ through "^2.3.6"
+
internal-ip@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907"
@@ -3944,6 +4499,11 @@ is-callable@^1.1.4:
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
+is-callable@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab"
+ integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==
+
is-ci@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
@@ -4041,6 +4601,11 @@ is-fullwidth-code-point@^2.0.0:
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
is-generator-fn@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
@@ -4053,7 +4618,7 @@ is-glob@^3.1.0:
dependencies:
is-extglob "^2.1.0"
-is-glob@^4.0.0:
+is-glob@^4.0.0, is-glob@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
@@ -4067,6 +4632,11 @@ is-number@^3.0.0:
dependencies:
kind-of "^3.0.2"
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
is-obj@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
@@ -4103,6 +4673,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4:
dependencies:
isobject "^3.0.1"
+is-promise@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
+ integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
+
is-regex@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
@@ -4110,6 +4685,13 @@ is-regex@^1.0.4:
dependencies:
has "^1.0.1"
+is-regex@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae"
+ integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==
+ dependencies:
+ has "^1.0.3"
+
is-resolvable@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
@@ -4277,7 +4859,7 @@ jest-config@^24.9.0:
pretty-format "^24.9.0"
realpath-native "^1.1.0"
-jest-diff@^24.9.0:
+jest-diff@^24.0.0, jest-diff@^24.3.0, jest-diff@^24.9.0:
version "24.9.0"
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da"
integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==
@@ -4382,7 +4964,7 @@ jest-leak-detector@^24.9.0:
jest-get-type "^24.9.0"
pretty-format "^24.9.0"
-jest-matcher-utils@^24.9.0:
+jest-matcher-utils@^24.0.0, jest-matcher-utils@^24.9.0:
version "24.9.0"
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073"
integrity sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==
@@ -4665,6 +5247,11 @@ json-schema@0.2.3:
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+ integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
+
json-stringify-safe@~5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
@@ -4675,6 +5262,13 @@ json3@^3.3.2:
resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81"
integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==
+json5@2.x, json5@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6"
+ integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==
+ dependencies:
+ minimist "^1.2.0"
+
json5@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
@@ -4682,13 +5276,6 @@ json5@^1.0.1:
dependencies:
minimist "^1.2.0"
-json5@^2.1.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6"
- integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==
- dependencies:
- minimist "^1.2.0"
-
jsprim@^1.2.2:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
@@ -4699,6 +5286,14 @@ jsprim@^1.2.2:
json-schema "0.2.3"
verror "1.10.0"
+jsx-ast-utils@^2.2.3:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz#8a9364e402448a3ce7f14d357738310d9248054f"
+ integrity sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==
+ dependencies:
+ array-includes "^3.0.3"
+ object.assign "^4.1.0"
+
killable@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892"
@@ -4765,7 +5360,7 @@ leven@^3.1.0:
resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
-levn@~0.3.0:
+levn@^0.3.0, levn@~0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
@@ -4831,7 +5426,7 @@ lodash.has@^4.0:
resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862"
integrity sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI=
-lodash.memoize@^4.1.2:
+lodash.memoize@4.x, lodash.memoize@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
@@ -4856,12 +5451,17 @@ lodash.templatesettings@^4.0.0:
dependencies:
lodash._reinterpolate "^3.0.0"
+lodash.unescape@4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c"
+ integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=
+
lodash.uniq@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
-lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.5, lodash@~4.17.10:
+lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.5, lodash@~4.17.10:
version "4.17.15"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
@@ -4871,7 +5471,7 @@ loglevel@^1.6.4:
resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.4.tgz#f408f4f006db8354d0577dcf6d33485b3cb90d56"
integrity sha512-p0b6mOGKcGa+7nnmKbpzR6qloPbrgLcnio++E+14Vo/XffOGwZtRpUhr8dTH/x2oCMmEoIU0Zwm3ZauhvYD17g==
-loose-envify@^1.0.0:
+loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
@@ -4886,7 +5486,7 @@ loud-rejection@^1.0.0:
currently-unhandled "^0.4.1"
signal-exit "^3.0.0"
-lru-cache@^4.0.1, lru-cache@^4.1.2:
+lru-cache@^4.0.1:
version "4.1.5"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
@@ -4909,6 +5509,11 @@ make-dir@^2.0.0, make-dir@^2.1.0:
pify "^4.0.1"
semver "^5.6.0"
+make-error@1.x:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8"
+ integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==
+
makeerror@1.0.x:
version "1.0.11"
resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
@@ -4986,6 +5591,14 @@ memory-fs@^0.4.0, memory-fs@^0.4.1:
errno "^0.1.3"
readable-stream "^2.0.1"
+memory-fs@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c"
+ integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
meow@^3.7.0:
version "3.7.0"
resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
@@ -5007,23 +5620,11 @@ merge-descriptors@1.0.1:
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
-merge-source-map@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646"
- integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==
- dependencies:
- source-map "^0.6.1"
-
merge-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
-merge@^1.2.0:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145"
- integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==
-
methods@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
@@ -5048,6 +5649,14 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4:
snapdragon "^0.8.1"
to-regex "^3.0.2"
+micromatch@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259"
+ integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==
+ dependencies:
+ braces "^3.0.1"
+ picomatch "^2.0.5"
+
miller-rabin@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
@@ -5083,11 +5692,16 @@ mime@^2.4.4:
resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5"
integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==
-mimic-fn@^2.0.0:
+mimic-fn@^2.0.0, mimic-fn@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+min-indent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.0.tgz#cfc45c37e9ec0d8f0a0ec3dd4ef7f7c3abe39256"
+ integrity sha1-z8RcN+nsDY8KDsPdTvf3w6vjklY=
+
mini-css-extract-plugin@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.7.0.tgz#5ba8290fbb4179a43dd27cca444ba150bee743a0"
@@ -5169,7 +5783,7 @@ mixin-deep@^1.2.0:
for-in "^1.0.2"
is-extendable "^1.0.1"
-mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1:
+mkdirp@0.x, "mkdirp@>=0.5 0", mkdirp@^0.5, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
@@ -5216,6 +5830,16 @@ multicast-dns@^6.0.1:
dns-packet "^1.3.1"
thunky "^1.0.2"
+mute-stream@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
+ integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
+
+namor@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/namor/-/namor-1.1.3.tgz#e7b2a94d7e6e9b7438a3db10314fe0fded6b96c1"
+ integrity sha512-KCw02Mto4yquFTPUxFAY5ZJMBweClBrDrJXQTdN8dNSb3BHzhRlTLzJ0TTj0cG9n4ApkWJEOqEisCzsodFEvbA==
+
nan@^2.12.1, nan@^2.13.2:
version "2.14.0"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
@@ -5356,17 +5980,17 @@ node-pre-gyp@^0.12.0:
semver "^5.3.0"
tar "^4"
-node-releases@^1.1.29:
- version "1.1.34"
- resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.34.tgz#ced4655ee1ba9c3a2c5dcbac385e19434155fd40"
- integrity sha512-fNn12JTEfniTuCqo0r9jXgl44+KxRH/huV7zM/KAGOKxDKrHr6EbT7SSs4B+DNxyBE2mks28AD+Jw6PkfY5uwA==
+node-releases@^1.1.38:
+ version "1.1.39"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.39.tgz#c1011f30343aff5b633153b10ff691d278d08e8d"
+ integrity sha512-8MRC/ErwNCHOlAFycy9OPca46fQYUjbJRDcZTHVWIGXIjYLM73k70vv3WkYutVnM4cCo4hE0MqBVVZjP6vjISA==
dependencies:
semver "^6.3.0"
node-sass@^4.12.0:
- version "4.12.0"
- resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.12.0.tgz#0914f531932380114a30cc5fa4fa63233a25f017"
- integrity sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ==
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.13.0.tgz#b647288babdd6a1cb726de4545516b31f90da066"
+ integrity sha512-W1XBrvoJ1dy7VsvTAS5q1V45lREbTlZQqFbiHb3R3OTTCma0XBtuG6xZ6Z4506nR4lmHPTqVRwxT6KgtWC97CA==
dependencies:
async-foreach "^0.1.3"
chalk "^1.1.1"
@@ -5375,7 +5999,7 @@ node-sass@^4.12.0:
get-stdin "^4.0.1"
glob "^7.0.3"
in-publish "^2.0.0"
- lodash "^4.17.11"
+ lodash "^4.17.15"
meow "^3.7.0"
mkdirp "^0.5.1"
nan "^2.13.2"
@@ -5449,9 +6073,9 @@ npm-bundled@^1.0.1:
integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==
npm-packlist@^1.1.6:
- version "1.4.4"
- resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44"
- integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw==
+ version "1.4.6"
+ resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.6.tgz#53ba3ed11f8523079f1457376dd379ee4ea42ff4"
+ integrity sha512-u65uQdb+qwtGvEJh/DgQgW1Xg7sqeNbmxYyrvlNznaVTjV3E5P6F/EFjM+BVHXl7JJlsdG8A64M0XI8FI/IOlg==
dependencies:
ignore-walk "^3.0.1"
npm-bundled "^1.0.1"
@@ -5519,6 +6143,11 @@ object-inspect@^1.6.0:
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b"
integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==
+object-inspect@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67"
+ integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==
+
object-is@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6"
@@ -5546,6 +6175,26 @@ object.assign@^4.1.0:
has-symbols "^1.0.0"
object-keys "^1.0.11"
+object.entries@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.1.tgz#ee1cf04153de02bb093fec33683900f57ce5399b"
+ integrity sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+
+object.fromentries@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9"
+ integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+
object.getownpropertydescriptors@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16"
@@ -5595,6 +6244,13 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0:
dependencies:
wrappy "1"
+onetime@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5"
+ integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==
+ dependencies:
+ mimic-fn "^2.1.0"
+
opn@^5.5.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc"
@@ -5630,6 +6286,18 @@ optionator@^0.8.1:
type-check "~0.3.2"
wordwrap "~1.0.0"
+optionator@^0.8.3:
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
+ integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.6"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ word-wrap "~1.2.3"
+
original@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f"
@@ -5663,7 +6331,7 @@ os-locale@^3.0.0, os-locale@^3.1.0:
lcid "^2.0.0"
mem "^4.0.0"
-os-tmpdir@^1.0.0:
+os-tmpdir@^1.0.0, os-tmpdir@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
@@ -5748,6 +6416,13 @@ parallel-transform@^1.1.0:
inherits "^2.0.3"
readable-stream "^2.1.5"
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
parse-asn1@^5.0.0:
version "5.1.5"
resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e"
@@ -5879,6 +6554,11 @@ performance-now@^2.1.0:
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
+picomatch@^2.0.5:
+ version "2.0.7"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6"
+ integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==
+
pify@^2.0.0, pify@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
@@ -5932,14 +6612,14 @@ pnp-webpack-plugin@^1.4.3:
dependencies:
ts-pnp "^1.1.2"
-portfinder@^1.0.24:
- version "1.0.24"
- resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.24.tgz#11efbc6865f12f37624b6531ead1d809ed965cfa"
- integrity sha512-ekRl7zD2qxYndYflwiryJwMioBI7LI7rVXg3EnLK3sjkouT5eOuhS3gS255XxBksa30VG8UPZYZCdgfGOfkSUg==
+portfinder@^1.0.25:
+ version "1.0.25"
+ resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca"
+ integrity sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==
dependencies:
- async "^1.5.2"
- debug "^2.2.0"
- mkdirp "0.5.x"
+ async "^2.6.2"
+ debug "^3.1.1"
+ mkdirp "^0.5.1"
posix-character-classes@^0.1.0:
version "0.1.1"
@@ -6581,10 +7261,10 @@ postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1:
indexes-of "^1.0.1"
uniq "^1.0.1"
-postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.18, postcss@^7.0.2, postcss@^7.0.5, postcss@^7.0.6:
- version "7.0.18"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.18.tgz#4b9cda95ae6c069c67a4d933029eddd4838ac233"
- integrity sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==
+postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.19, postcss@^7.0.2, postcss@^7.0.5, postcss@^7.0.6:
+ version "7.0.21"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.21.tgz#06bb07824c19c2021c5d056d5b10c35b989f7e17"
+ integrity sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==
dependencies:
chalk "^2.4.2"
source-map "^0.6.1"
@@ -6600,17 +7280,12 @@ prepend-http@^1.0.0:
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
-prettier@1.16.3:
- version "1.16.3"
- resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.3.tgz#8c62168453badef702f34b45b6ee899574a6a65d"
- integrity sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw==
-
prettier@1.18.2:
version "1.18.2"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea"
integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==
-pretty-format@^24.9.0:
+pretty-format@^24.0.0, pretty-format@^24.3.0, pretty-format@^24.9.0:
version "24.9.0"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9"
integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==
@@ -6635,6 +7310,11 @@ process@^0.11.10:
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
+progress@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+ integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
promise-inflight@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
@@ -6648,6 +7328,15 @@ prompts@^2.0.1:
kleur "^3.0.3"
sisteransi "^1.0.3"
+prop-types@^15.6.2, prop-types@^15.7.2:
+ version "15.7.2"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
+ integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
+ dependencies:
+ loose-envify "^1.4.0"
+ object-assign "^4.1.1"
+ react-is "^16.8.1"
+
proxy-addr@~2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34"
@@ -6801,10 +7490,34 @@ rc@^1.2.7:
minimist "^1.2.0"
strip-json-comments "~2.0.1"
-react-is@^16.8.4:
- version "16.10.2"
- resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.10.2.tgz#984120fd4d16800e9a738208ab1fba422d23b5ab"
- integrity sha512-INBT1QEgtcCCgvccr5/86CfD71fw9EPmDxgiJX4I2Ddr6ZsV6iFXsuby+qWJPtmNuMY0zByTsG4468P7nHuNWA==
+react-dom@^16.11.0:
+ version "16.11.0"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.11.0.tgz#7e7c4a5a85a569d565c2462f5d345da2dd849af5"
+ integrity sha512-nrRyIUE1e7j8PaXSPtyRKtz+2y9ubW/ghNgqKFHHAHaeP0fpF5uXR+sq8IMRHC+ZUxw7W9NyCDTBtwWxvkb0iA==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ prop-types "^15.6.2"
+ scheduler "^0.17.0"
+
+react-is@^16.8.1, react-is@^16.8.4:
+ version "16.11.0"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.11.0.tgz#b85dfecd48ad1ce469ff558a882ca8e8313928fa"
+ integrity sha512-gbBVYR2p8mnriqAwWx9LbuUrShnAuSCNnuPGyc7GJrMVQtPDAh8iLpv7FRuMPFb56KkaVZIYSz1PrjI9q0QPCw==
+
+react-table@^7.0.0-rc.15:
+ version "7.0.0-rc.15"
+ resolved "https://registry.yarnpkg.com/react-table/-/react-table-7.0.0-rc.15.tgz#bb855e4e2abbb4aaf0ed2334404a41f3ada8e13a"
+ integrity sha512-ofMOlgrioHhhvHjvjsQkxvfQzU98cqwy6BjPGNwhLN1vhgXeWi0mUGreaCPvRenEbTiXsQbMl4k3Xmx3Mut8Rw==
+
+react@^16.11.0:
+ version "16.11.0"
+ resolved "https://registry.yarnpkg.com/react/-/react-16.11.0.tgz#d294545fe62299ccee83363599bf904e4a07fdbb"
+ integrity sha512-M5Y8yITaLmU0ynd0r1Yvfq98Rmll6q8AxaEe88c8e7LxO8fZ2cNgmFt0aGAS9wzf1Ao32NKXtCl+/tVVtkxq6g==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ prop-types "^15.6.2"
read-cache@^1.0.0:
version "1.0.0"
@@ -6893,6 +7606,14 @@ redent@^1.0.0:
indent-string "^2.1.0"
strip-indent "^1.0.1"
+redent@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f"
+ integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==
+ dependencies:
+ indent-string "^4.0.0"
+ strip-indent "^3.0.0"
+
regenerate-unicode-properties@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e"
@@ -6932,6 +7653,16 @@ regexp.prototype.flags@^1.2.0:
dependencies:
define-properties "^1.1.2"
+regexpp@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
+ integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
+
+regexpp@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e"
+ integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g==
+
regexpu-core@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6"
@@ -6945,9 +7676,9 @@ regexpu-core@^4.6.0:
unicode-match-property-value-ecmascript "^1.1.0"
regjsgen@^0.5.0:
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd"
- integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c"
+ integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==
regjsparser@^0.6.0:
version "0.6.0"
@@ -7060,6 +7791,11 @@ resolve-from@^3.0.0:
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
integrity sha1-six699nWiBvItuZTM17rywoYh0g=
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
resolve-url@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
@@ -7070,6 +7806,13 @@ resolve@1.1.7:
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
+resolve@1.x:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.13.1.tgz#be0aa4c06acd53083505abb35f4d66932ab35d16"
+ integrity sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w==
+ dependencies:
+ path-parse "^1.0.6"
+
resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.8.1:
version "1.12.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6"
@@ -7077,6 +7820,21 @@ resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.8.1:
dependencies:
path-parse "^1.0.6"
+resolve@^1.13.1:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.14.1.tgz#9e018c540fcf0c427d678b9931cbf45e984bcaff"
+ integrity sha512-fn5Wobh4cxbLzuHaE+nphztHy43/b++4M6SsGFC2gB8uYwf0C8LcarfCz1un7UTW8OFQg9iNjZ4xpcFVGebDPg==
+ dependencies:
+ path-parse "^1.0.6"
+
+restore-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
+ integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
+ dependencies:
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+
ret@~0.1.10:
version "0.1.15"
resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
@@ -7104,6 +7862,13 @@ rimraf@2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3:
dependencies:
glob "^7.1.3"
+rimraf@2.6.3:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
+ integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
+ dependencies:
+ glob "^7.1.3"
+
ripemd160@^2.0.0, ripemd160@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
@@ -7117,6 +7882,13 @@ rsvp@^4.8.4:
resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"
integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==
+run-async@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
+ integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA=
+ dependencies:
+ is-promise "^2.1.0"
+
run-queue@^1.0.0, run-queue@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
@@ -7124,6 +7896,13 @@ run-queue@^1.0.0, run-queue@^1.0.3:
dependencies:
aproba "^1.1.1"
+rxjs@^6.5.3:
+ version "6.5.3"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a"
+ integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==
+ dependencies:
+ tslib "^1.9.0"
+
safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
@@ -7187,6 +7966,14 @@ sax@^1.2.4, sax@~1.2.4:
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+scheduler@^0.17.0:
+ version "0.17.0"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.17.0.tgz#7c9c673e4ec781fac853927916d1c426b6f3ddfe"
+ integrity sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+
schema-utils@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
@@ -7216,12 +8003,12 @@ selfsigned@^1.10.7:
dependencies:
node-forge "0.9.0"
-"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0:
+"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
-semver@^6.0.0, semver@^6.2.0, semver@^6.3.0:
+semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
@@ -7362,6 +8149,15 @@ slash@^2.0.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
+slice-ansi@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
+ integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
+ dependencies:
+ ansi-styles "^3.2.0"
+ astral-regex "^1.0.0"
+ is-fullwidth-code-point "^2.0.0"
+
snapdragon-node@^2.0.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
@@ -7424,7 +8220,7 @@ source-list-map@^2.0.0:
resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
-source-map-resolve@^0.5.0:
+source-map-resolve@^0.5.0, source-map-resolve@^0.5.2:
version "0.5.2"
resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259"
integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==
@@ -7435,7 +8231,15 @@ source-map-resolve@^0.5.0:
source-map-url "^0.4.0"
urix "^0.1.0"
-source-map-support@^0.5.6, source-map-support@~0.5.12:
+source-map-support@^0.5.6:
+ version "0.5.16"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042"
+ integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map-support@~0.5.12:
version "0.5.13"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932"
integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==
@@ -7654,6 +8458,15 @@ string-width@^3.0.0, string-width@^3.1.0:
is-fullwidth-code-point "^2.0.0"
strip-ansi "^5.1.0"
+string-width@^4.1.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
+ integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.0"
+
string.prototype.trimleft@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634"
@@ -7662,6 +8475,14 @@ string.prototype.trimleft@^2.1.0:
define-properties "^1.1.3"
function-bind "^1.1.1"
+string.prototype.trimleft@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74"
+ integrity sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==
+ dependencies:
+ define-properties "^1.1.3"
+ function-bind "^1.1.1"
+
string.prototype.trimright@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58"
@@ -7670,6 +8491,14 @@ string.prototype.trimright@^2.1.0:
define-properties "^1.1.3"
function-bind "^1.1.1"
+string.prototype.trimright@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9"
+ integrity sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==
+ dependencies:
+ define-properties "^1.1.3"
+ function-bind "^1.1.1"
+
string_decoder@^1.0.0, string_decoder@^1.1.1:
version "1.3.0"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
@@ -7705,6 +8534,13 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
dependencies:
ansi-regex "^4.1.0"
+strip-ansi@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
+ integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
+ dependencies:
+ ansi-regex "^5.0.0"
+
strip-bom@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
@@ -7729,6 +8565,18 @@ strip-indent@^1.0.1:
dependencies:
get-stdin "^4.0.1"
+strip-indent@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001"
+ integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==
+ dependencies:
+ min-indent "^1.0.0"
+
+strip-json-comments@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7"
+ integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==
+
strip-json-comments@~2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
@@ -7794,6 +8642,16 @@ symbol-tree@^3.2.2:
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
+table@^5.2.3:
+ version "5.4.6"
+ resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
+ integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==
+ dependencies:
+ ajv "^6.10.2"
+ lodash "^4.17.14"
+ slice-ansi "^2.1.0"
+ string-width "^3.0.0"
+
tapable@^1.0.0, tapable@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
@@ -7837,9 +8695,9 @@ terser-webpack-plugin@^1.3.0, terser-webpack-plugin@^1.4.1:
worker-farm "^1.7.0"
terser@^4.1.2:
- version "4.3.8"
- resolved "https://registry.yarnpkg.com/terser/-/terser-4.3.8.tgz#707f05f3f4c1c70c840e626addfdb1c158a17136"
- integrity sha512-otmIRlRVmLChAWsnSFNO0Bfk6YySuBp6G9qrHiJwlLDd4mxe2ta4sjI7TzIR+W1nBMjilzrMcPOz9pSusgx3hQ==
+ version "4.3.9"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-4.3.9.tgz#e4be37f80553d02645668727777687dad26bbca8"
+ integrity sha512-NFGMpHjlzmyOtPL+fDw3G7+6Ueh/sz4mkaUYa4lJCxOPTNzd0Uj0aZJOmsDYoSQyfuVoWDMSWTPU3huyOm2zdA==
dependencies:
commander "^2.20.0"
source-map "~0.6.1"
@@ -7855,6 +8713,11 @@ test-exclude@^5.2.3:
read-pkg-up "^4.0.0"
require-main-filename "^2.0.0"
+text-table@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+ integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
+
throat@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a"
@@ -7868,10 +8731,15 @@ through2@^2.0.0:
readable-stream "~2.3.6"
xtend "~4.0.1"
+through@^2.3.6:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+
thunky@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.3.tgz#f5df732453407b09191dae73e2a8cc73f381a826"
- integrity sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
+ integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
timers-browserify@^2.0.4:
version "2.0.11"
@@ -7885,6 +8753,13 @@ timsort@^0.3.0:
resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=
+tmp@^0.0.33:
+ version "0.0.33"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+ integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
+ dependencies:
+ os-tmpdir "~1.0.2"
+
tmpl@1.0.x:
version "1.0.4"
resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
@@ -7915,6 +8790,13 @@ to-regex-range@^2.1.0:
is-number "^3.0.0"
repeat-string "^1.6.1"
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
to-regex@^3.0.1, to-regex@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
@@ -7965,16 +8847,50 @@ trim-newlines@^1.0.0:
dependencies:
glob "^7.1.2"
+ts-jest@^24.2.0:
+ version "24.2.0"
+ resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-24.2.0.tgz#7abca28c2b4b0a1fdd715cd667d65d047ea4e768"
+ integrity sha512-Yc+HLyldlIC9iIK8xEN7tV960Or56N49MDP7hubCZUeI7EbIOTsas6rXCMB4kQjLACJ7eDOF4xWEO5qumpKsag==
+ dependencies:
+ bs-logger "0.x"
+ buffer-from "1.x"
+ fast-json-stable-stringify "2.x"
+ json5 "2.x"
+ lodash.memoize "4.x"
+ make-error "1.x"
+ mkdirp "0.x"
+ resolve "1.x"
+ semver "^5.5"
+ yargs-parser "10.x"
+
+ts-loader@^6.2.1:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-6.2.1.tgz#67939d5772e8a8c6bdaf6277ca023a4812da02ef"
+ integrity sha512-Dd9FekWuABGgjE1g0TlQJ+4dFUfYGbYcs52/HQObE0ZmUNjQlmLAS7xXsSzy23AMaMwipsx5sNHvoEpT2CZq1g==
+ dependencies:
+ chalk "^2.3.0"
+ enhanced-resolve "^4.0.0"
+ loader-utils "^1.0.2"
+ micromatch "^4.0.0"
+ semver "^6.0.0"
+
ts-pnp@^1.1.2:
version "1.1.4"
resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.1.4.tgz#ae27126960ebaefb874c6d7fa4729729ab200d90"
integrity sha512-1J/vefLC+BWSo+qe8OnJQfWTYRS6ingxjwqmHMqaMxXMj7kFtKLgAaYW3JeX3mktjgUL+etlU8/B4VUAUI9QGw==
-tslib@^1.9.0:
+tslib@^1.8.1, tslib@^1.9.0:
version "1.10.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
+tsutils@^3.17.1:
+ version "3.17.1"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759"
+ integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==
+ dependencies:
+ tslib "^1.8.1"
+
tty-browserify@0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
@@ -7999,6 +8915,11 @@ type-check@~0.3.2:
dependencies:
prelude-ls "~1.1.2"
+type-fest@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
+ integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
+
type-is@~1.6.17, type-is@~1.6.18:
version "1.6.18"
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
@@ -8012,12 +8933,17 @@ typedarray@^0.0.6:
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+typescript@^3.6.4:
+ version "3.6.4"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.4.tgz#b18752bb3792bc1a0281335f7f6ebf1bbfc5b91d"
+ integrity sha512-unoCll1+l+YK4i4F8f22TaNVPRHcD9PA3yCuZ8g5e0qGqlVlJ/8FSateOLLSagn+Yg5+ZwuPkL8LFUc0Jcvksg==
+
uglify-js@^3.1.4:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5"
- integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.7.tgz#15f49211df6b8a01ee91322bbe46fa33223175dc"
+ integrity sha512-4sXQDzmdnoXiO+xvmTzQsfIiwrjUCSA95rSP4SEd8tDb51W2TiDOlL76Hl+Kw0Ie42PSItCW8/t6pBNCF2R48A==
dependencies:
- commander "~2.20.0"
+ commander "~2.20.3"
source-map "~0.6.1"
unicode-canonical-property-names-ecmascript@^1.0.4:
@@ -8175,6 +9101,11 @@ v8-compile-cache@2.0.3:
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe"
integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==
+v8-compile-cache@^2.0.3:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e"
+ integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==
+
validate-npm-package-license@^3.0.1:
version "3.0.4"
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
@@ -8207,61 +9138,6 @@ vm-browserify@^1.0.1:
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019"
integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==
-vue-bootstrap-toggle@^1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/vue-bootstrap-toggle/-/vue-bootstrap-toggle-1.1.4.tgz#7be9bee0c84397b1281828e1a69d64f930ebe2e0"
- integrity sha512-ds5jhFEAJ6HUJwpZq6p+mr9ER3eoPXRXnuOCUNhq4mTdzpd/k+GiNhbz5spNfXxTjb69oxsnjp20dEAejn782A==
- dependencies:
- bootstrap-toggle "^2.2.2"
- merge "^1.2.0"
-
-vue-hot-reload-api@^2.3.0:
- version "2.3.4"
- resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2"
- integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==
-
-vue-loader@^15.6.2:
- version "15.7.1"
- resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.7.1.tgz#6ccacd4122aa80f69baaac08ff295a62e3aefcfd"
- integrity sha512-fwIKtA23Pl/rqfYP5TSGK7gkEuLhoTvRYW+TU7ER3q9GpNLt/PjG5NLv3XHRDiTg7OPM1JcckBgds+VnAc+HbA==
- dependencies:
- "@vue/component-compiler-utils" "^3.0.0"
- hash-sum "^1.0.2"
- loader-utils "^1.1.0"
- vue-hot-reload-api "^2.3.0"
- vue-style-loader "^4.1.0"
-
-vue-style-loader@^4.1.0:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.2.tgz#dedf349806f25ceb4e64f3ad7c0a44fba735fcf8"
- integrity sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ==
- dependencies:
- hash-sum "^1.0.2"
- loader-utils "^1.0.2"
-
-vue-template-compiler@^2.5.22:
- version "2.6.10"
- resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.10.tgz#323b4f3495f04faa3503337a82f5d6507799c9cc"
- integrity sha512-jVZkw4/I/HT5ZMvRnhv78okGusqe0+qH2A0Em0Cp8aq78+NK9TII263CDVz2QXZsIT+yyV/gZc/j/vlwa+Epyg==
- dependencies:
- de-indent "^1.0.2"
- he "^1.1.0"
-
-vue-template-es2015-compiler@^1.9.0:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825"
- integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==
-
-vue@^2.5.22:
- version "2.6.10"
- resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.10.tgz#a72b1a42a4d82a721ea438d1b6bf55e66195c637"
- integrity sha512-ImThpeNU9HbdZL3utgMCq0oiMzAkt1mcgy3/E6zWC/G6AaQoeuFdsl9nDhTDU3X1R6FK7nsIUuRACVcjI+A2GQ==
-
-vuex@^3.1.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.1.1.tgz#0c264bfe30cdbccf96ab9db3177d211828a5910e"
- integrity sha512-ER5moSbLZuNSMBFnEBVGhQ1uCBNJslH9W/Dw2W7GZN23UQA69uapP5GTT9Vm8Trc0PzBSVt6LzF3hGjmv41xcg==
-
w3c-hr-time@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045"
@@ -8269,6 +9145,11 @@ w3c-hr-time@^1.0.1:
dependencies:
browser-process-hrtime "^0.1.2"
+wait-for-expect@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/wait-for-expect/-/wait-for-expect-3.0.1.tgz#ec204a76b0038f17711e575720aaf28505ac7185"
+ integrity sha512-3Ha7lu+zshEG/CeHdcpmQsZnnZpPj/UsG3DuKO8FskjuDbkx3jE3845H+CuwZjA2YWYDfKMU2KhnCaXMLd3wVw==
+
walker@^1.0.7, walker@~1.0.5:
version "1.0.7"
resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"
@@ -8339,9 +9220,9 @@ webpack-dev-middleware@^3.7.2:
webpack-log "^2.0.0"
webpack-dev-server@^3.1.14:
- version "3.8.2"
- resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.8.2.tgz#3292427bf6510da9a3ac2d500b924a4197667ff9"
- integrity sha512-0xxogS7n5jHDQWy0WST0q6Ykp7UGj4YvWh+HVN71JoE7BwPxMZrwgraBvmdEMbDVMBzF0u+mEzn8TQzBm5NYJQ==
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.9.0.tgz#27c3b5d0f6b6677c4304465ac817623c8b27b89c"
+ integrity sha512-E6uQ4kRrTX9URN9s/lIbqTAztwEPdvzVrcmHE8EQ9YnuT9J8Es5Wrd8n9BKg1a0oZ5EgEke/EQFgUsp18dSTBw==
dependencies:
ansi-html "0.0.7"
bonjour "^3.5.0"
@@ -8361,7 +9242,7 @@ webpack-dev-server@^3.1.14:
loglevel "^1.6.4"
opn "^5.5.0"
p-retry "^3.0.1"
- portfinder "^1.0.24"
+ portfinder "^1.0.25"
schema-utils "^1.0.0"
selfsigned "^1.10.7"
semver "^6.3.0"
@@ -8394,9 +9275,9 @@ webpack-sources@^1.0.0, webpack-sources@^1.0.1, webpack-sources@^1.1.0, webpack-
source-map "~0.6.1"
webpack@^4.32.2:
- version "4.41.0"
- resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.0.tgz#db6a254bde671769f7c14e90a1a55e73602fc70b"
- integrity sha512-yNV98U4r7wX1VJAj5kyMsu36T8RPPQntcb5fJLOsMz/pt/WrKC0Vp1bAlqPLkA1LegSwQwf6P+kAbyhRKVQ72g==
+ version "4.41.2"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.2.tgz#c34ec76daa3a8468c9b61a50336d8e3303dce74e"
+ integrity sha512-Zhw69edTGfbz9/8JJoyRQ/pq8FYUoY0diOXqW0T6yhgdhCv6wr0hra5DwwWexNRns2Z2+gsnrNcbe9hbGBgk/A==
dependencies:
"@webassemblyjs/ast" "1.8.5"
"@webassemblyjs/helper-module-context" "1.8.5"
@@ -8458,9 +9339,9 @@ whatwg-url@^6.4.1:
webidl-conversions "^4.0.2"
whatwg-url@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd"
- integrity sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06"
+ integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==
dependencies:
lodash.sortby "^4.7.0"
tr46 "^1.0.1"
@@ -8490,6 +9371,11 @@ wide-align@^1.1.0:
dependencies:
string-width "^1.0.2 || 2"
+word-wrap@~1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
+ integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+
wordwrap@~0.0.2:
version "0.0.3"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
@@ -8538,6 +9424,13 @@ write-file-atomic@2.4.1:
imurmurhash "^0.1.4"
signal-exit "^3.0.2"
+write@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
+ integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
+ dependencies:
+ mkdirp "^0.5.1"
+
ws@^5.2.0:
version "5.2.2"
resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f"
@@ -8582,6 +9475,13 @@ yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+yargs-parser@10.x:
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8"
+ integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==
+ dependencies:
+ camelcase "^4.1.0"
+
yargs-parser@^11.1.1:
version "11.1.1"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4"