├── src ├── drawers │ ├── text.sass │ └── text.jsx ├── editors │ ├── text.sass │ └── text.jsx ├── index.js ├── utilities.js ├── clipboard.js ├── base-editor.js ├── object-table.sass ├── object-cell.jsx ├── object-row.jsx └── object-table.jsx ├── .npmignore ├── demo-site ├── _includes │ ├── head.html │ └── required_static.html ├── demos.sass ├── demos.jsx ├── _config.yml ├── webpack.config.js ├── package.json ├── simple-demo.jsx ├── index.html ├── features-demo.jsx └── customisation-demo.jsx ├── esbuild.js ├── .gitignore ├── LICENSE ├── .eslintrc ├── README.md ├── package.json └── yarn.lock /src/drawers/text.sass: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | src/ 2 | demo-site/ 3 | webpack.config.js 4 | -------------------------------------------------------------------------------- /demo-site/_includes/head.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /demo-site/_includes/required_static.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/editors/text.sass: -------------------------------------------------------------------------------- 1 | div.object-table-container 2 | td.text-editor 3 | input 4 | text-align: left 5 | -------------------------------------------------------------------------------- /demo-site/demos.sass: -------------------------------------------------------------------------------- 1 | @import 'node_modules/uptick-demo-site/dist/uptick-demo-site' 2 | @import 'node_modules/react-object-table/dist/react-object-table' 3 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import ObjectTable, { ObjectCell, ObjectRow, BaseEditor, TextEditor, TextDrawer } from './object-table' 2 | 3 | export default ObjectTable 4 | export { ObjectCell, ObjectRow, BaseEditor, TextEditor, TextDrawer } -------------------------------------------------------------------------------- /demo-site/demos.jsx: -------------------------------------------------------------------------------- 1 | import { init } from 'uptick-demo-site' 2 | 3 | import SimpleDemo from './simple-demo.jsx' 4 | import FeaturesDemo from './features-demo.jsx' 5 | import CustomisationDemo from './customisation-demo.jsx' 6 | 7 | init(); 8 | -------------------------------------------------------------------------------- /demo-site/_config.yml: -------------------------------------------------------------------------------- 1 | layouts_dir: 'node_modules/uptick-demo-site/dist' 2 | 3 | package_name: React Object Table 4 | package_github_url: https://github.com/uptick/react-object-table 5 | package_npm_url: https://www.npmjs.com/package/react-object-table 6 | -------------------------------------------------------------------------------- /src/drawers/text.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types' 2 | import React from 'react' 3 | 4 | class TextDrawer extends React.Component { 5 | static propTypes = { 6 | value: PropTypes.string, 7 | } 8 | render() { 9 | return ( 10 | {String(this.props.value)} 11 | ) 12 | } 13 | } 14 | 15 | export default { 16 | className: 'text-drawer', 17 | component: TextDrawer, 18 | } 19 | -------------------------------------------------------------------------------- /esbuild.js: -------------------------------------------------------------------------------- 1 | const { build } = require("esbuild"); 2 | const { nodeExternalsPlugin } = require("esbuild-node-externals"); 3 | 4 | build({ 5 | entryPoints: ["src/index.js"], 6 | outdir: "dist", 7 | bundle: true, 8 | sourcemap: true, 9 | minify: true, 10 | splitting: true, 11 | format: "esm", 12 | target: ["es2015"], 13 | loader: { 14 | ".js": "jsx", 15 | }, 16 | plugins: [nodeExternalsPlugin({ allowList: ['jquery', 'classnames', 'clone'], })], 17 | }).catch(() => process.exit(1)); 18 | -------------------------------------------------------------------------------- /demo-site/webpack.config.js: -------------------------------------------------------------------------------- 1 | var path = require('path'); 2 | 3 | module.exports = { 4 | entry: './demos.jsx', 5 | output: { 6 | path: __dirname + '/dist', 7 | filename: 'demos.js', 8 | }, 9 | module: { 10 | loaders: [ 11 | { 12 | test: /\.jsx?$/, 13 | exclude: /(node_modules)/, 14 | loader: 'babel', 15 | query: { 16 | presets: [ 17 | 'react', 18 | 'es2015', 19 | 'stage-0', 20 | ], 21 | }, 22 | }, 23 | ], 24 | }, 25 | }; 26 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | 3 | # Logs 4 | logs 5 | *.log 6 | npm-debug.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | 13 | # Directory for instrumented libs generated by jscoverage/JSCover 14 | lib-cov 15 | 16 | # Coverage directory used by tools like istanbul 17 | coverage 18 | 19 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 20 | .grunt 21 | 22 | # node-waf configuration 23 | .lock-wscript 24 | 25 | # Compiled binary addons (http://nodejs.org/api/addons.html) 26 | build/Release 27 | 28 | # Dependency directory 29 | node_modules 30 | 31 | # Optional npm cache directory 32 | .npm 33 | 34 | # Optional REPL history 35 | .node_repl_history 36 | 37 | # Built files 38 | dist 39 | 40 | # Jekyll 41 | demo-site/_site/ 42 | # demo dist 43 | -------------------------------------------------------------------------------- /src/utilities.js: -------------------------------------------------------------------------------- 1 | function dictCount(dict) { 2 | let count = 0 3 | for (const _ in dict) { 4 | count++ 5 | } 6 | return count 7 | } 8 | 9 | function dictFirstKey(dict) { 10 | for (const dictKey in dict) { 11 | return dictKey 12 | } 13 | return undefined 14 | } 15 | 16 | function cellIsEditable(object, column) { 17 | const { isReadOnly, editor } = column 18 | const editorIsSet = editor !== false 19 | const readOnly = typeof isReadOnly === 'function' ? isReadOnly(object) : (isReadOnly === true) 20 | return editorIsSet && !readOnly 21 | } 22 | 23 | function isDifferent(objectA, objectB, exemptions) { 24 | for (const key in objectA) { 25 | if (exemptions && key in exemptions) { 26 | continue 27 | } 28 | if (JSON.stringify(objectB[key]) !== JSON.stringify(objectA[key])) { 29 | return true 30 | } 31 | } 32 | return false 33 | } 34 | 35 | export { 36 | dictCount, 37 | dictFirstKey, 38 | cellIsEditable, 39 | isDifferent, 40 | } 41 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2018 Uptick Pty Ltd 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": [ 3 | "react", 4 | "@typescript-eslint" 5 | ], 6 | "parser": "@typescript-eslint/parser", 7 | "rules": { 8 | 9 | // stops the 'React' was used before it was defined no-use-before-define error for .js files. 10 | "no-use-before-define": "off", 11 | "@typescript-eslint/no-use-before-define": ["error"], 12 | 13 | "react/prop-types": 1, 14 | "react/jsx-handler-names": "off", 15 | "react/jsx-uses-react": "error", 16 | "react/jsx-uses-vars": "error", 17 | 18 | "comma-dangle": [2, { 19 | "arrays": "always-multiline", 20 | "exports": "always-multiline", 21 | "functions": "never", 22 | "imports": "always-multiline", 23 | "objects": "always-multiline" 24 | }], 25 | 26 | "space-before-function-paren": [2, { 27 | "anonymous": "never", 28 | "named": "never", 29 | "asyncArrow": "always" 30 | }], 31 | 32 | "jsx-quotes": [2, "prefer-double"], 33 | "no-var": 2, 34 | 35 | "semi": [2, "never"], 36 | "lines-between-class-members": "off" 37 | }, 38 | 39 | "extends": ["standard", "standard-react"], 40 | 41 | "env": { 42 | "browser": true, 43 | "jest": true, 44 | "jasmine": true 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /demo-site/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-object-table-demo-site", 3 | "version": "1.0.1", 4 | "description": "Demo site for react-object-table package", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "build-css": "./node_modules/node-sass/bin/node-sass demos.sass dist/demos.css", 9 | "watch-css": "npm run build-css; ./node_modules/node-sass/bin/node-sass demos.sass dist/demos.css --watch", 10 | "build-js": "./node_modules/webpack/bin/webpack.js", 11 | "watch-js": "./node_modules/webpack/bin/webpack.js --watch", 12 | "build": "npm run build-js; npm run build-css", 13 | "watch": "parallel --ungroup ::: \"npm run watch-js\" \"npm run watch-css\"" 14 | }, 15 | "repository": { 16 | "type": "git", 17 | "url": "react-object-table" 18 | }, 19 | "author": "Uptick Pty Ltd", 20 | "license": "MIT", 21 | "dependencies": { 22 | "moment": "^2.16.0", 23 | "react": "16.x", 24 | "react-dom": "16.x", 25 | "react-object-table": "latest", 26 | "uptick-demo-site": "latest" 27 | }, 28 | "devDependencies": { 29 | "babel-cli": "^6.18.0", 30 | "babel-core": "^6.18.2", 31 | "babel-loader": "^6.2.7", 32 | "babel-preset-es2015": "^6.18.0", 33 | "babel-preset-react": "^6.16.0", 34 | "babel-preset-stage-0": "^6.16.0", 35 | "node-sass": "^3.12.1", 36 | "webpack": "^1.13.3" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /demo-site/simple-demo.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ReactDom from 'react-dom' 3 | 4 | import ObjectTable from 'react-object-table' 5 | 6 | class SimpleTable extends React.Component { 7 | state = { 8 | objects: [ 9 | {id: 1, firstName: 'Jon', lastName: 'Athon'}, 10 | {id: 2, firstName: 'Andrew', lastName: 'Angagram'}, 11 | {id: 3, firstName: 'Craig', lastName: 'Jenny'}, 12 | {id: 4, firstName: 'Luke', lastName: 'Hotkins'}, 13 | ], 14 | } 15 | 16 | handleUpdate(id, values) { 17 | this.setState(prevState => { 18 | const stateChanges = { 19 | objects: prevState.objects, 20 | } 21 | prevState.objects.map((object, index) => { 22 | if (object.id === id) { 23 | stateChanges.objects[index] = { 24 | ...object, 25 | ...values, 26 | }; 27 | } 28 | }); 29 | return stateChanges; 30 | }); 31 | } 32 | 33 | render() { 34 | return ( 35 | 40 | ); 41 | } 42 | } 43 | SimpleTable.defaultProps = { 44 | columns: [ 45 | { 46 | name: 'First Name', 47 | key: 'firstName', 48 | }, 49 | { 50 | name: 'Last Name', 51 | key: 'lastName', 52 | }, 53 | ], 54 | }; 55 | 56 | var mount = document.querySelectorAll('div.demo-mount-simple'); 57 | ReactDom.render( 58 | , 59 | mount[0] 60 | ); 61 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # react-object-table 2 | 3 | [![npm version](https://badge.fury.io/js/react-object-table.svg)](http://badge.fury.io/js/react-object-table) 4 | ![Downloads](http://img.shields.io/npm/dm/react-object-table.svg?style=flat) 5 | 6 | React powered table of objects, designed to be editable and fast. 7 | 8 | ## Live Demo 9 | 10 | Check out the live demo here: http://uptick.github.io/react-object-table/ 11 | 12 | ## Installation 13 | 14 | Install the package with npm: 15 | 16 | ``` 17 | npm install react-object-table 18 | ``` 19 | 20 | Then require and use with ES6 imports: 21 | 22 | ```javascript 23 | import React from 'react' 24 | import ReactDom from 'react-dom' 25 | 26 | import ObjectTable from 'react-object-table' 27 | 28 | var mount = document.querySelectorAll('div.table-mount'); 29 | ReactDom.render( 30 | , 44 | mount[0] 45 | ); 46 | ``` 47 | 48 | Optionally, include the built css with an import: 49 | 50 | ```scss 51 | @import 'node_modules/react-object-table/dist/react-object-table.css'; 52 | 53 | ``` 54 | 55 | or tag: 56 | 57 | ```html 58 | 59 | ``` 60 | 61 | Full reference documentation coming soon. For now, take a look at the reference on the live demo at 62 | http://uptick.github.io/react-object-table/. 63 | -------------------------------------------------------------------------------- /src/clipboard.js: -------------------------------------------------------------------------------- 1 | function deserializeCells(clipboardData) { 2 | let gridData = clipboardData.getData('react/object-grid') 3 | if (gridData) { 4 | return JSON.parse(gridData) 5 | } 6 | let tabbedData = clipboardData.getData('text/plain') 7 | if (tabbedData) { 8 | let rows = [] 9 | let lines = tabbedData.split('\n') 10 | for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) { 11 | let columns = [] 12 | let tabs = lines[lineIndex].split('\t') 13 | for (let tabIndex = 0; tabIndex < tabs.length; tabIndex++) { 14 | columns.push(tabs[tabIndex]) 15 | } 16 | rows.push(columns) 17 | } 18 | return rows 19 | } 20 | return [] 21 | } 22 | 23 | function stringValue(value) { 24 | switch (typeof value) { 25 | case 'number': 26 | return value.toString() 27 | 28 | case 'object': 29 | if (Array.isArray(value)) { 30 | let stringValue = '' 31 | for (let valueIndex = 0; valueIndex < value.length; valueIndex++) { 32 | stringValue += stringValue(value[valueIndex]) 33 | if (valueIndex < value.length - 1) { 34 | stringValue += ', ' 35 | } 36 | } 37 | return stringValue 38 | } 39 | 40 | if (value === null) { 41 | return '' 42 | } else { 43 | return 'object' 44 | } 45 | 46 | case 'boolean': 47 | if (value) { 48 | return 'true' 49 | } else { 50 | return 'false' 51 | } 52 | 53 | case 'string': 54 | return value 55 | } 56 | return '' 57 | } 58 | 59 | export { 60 | deserializeCells, 61 | stringValue, 62 | } 63 | -------------------------------------------------------------------------------- /src/editors/text.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import BaseEditor from './../base-editor' 3 | 4 | function validate(value, props) { 5 | return { 6 | valid: true, 7 | cleanedValue: String(value), 8 | } 9 | } 10 | 11 | class TextEditor extends BaseEditor { 12 | componentDidMount() { 13 | if (this.props.editReplace) { 14 | this.field.setSelectionRange(this.state.value.length, this.state.value.length) 15 | } 16 | } 17 | 18 | validate(value) { 19 | return validate(value, this.props) 20 | } 21 | 22 | handleChange = (event) => { 23 | let newValue = this.field.value 24 | this.setState({value: newValue}) 25 | } 26 | 27 | handleFocus = (event) => { 28 | if (this.props.editReplace === null) { 29 | window.setTimeout(() => { 30 | let inputElement = this.field 31 | inputElement.select() 32 | }, 0) 33 | } 34 | } 35 | 36 | render() { 37 | return ( 38 |
42 | { this.field = el }} 44 | value={this.state.value} 45 | onChange={this.handleChange} 46 | onBlur={this.handleBlur} 47 | onFocus={this.handleFocus} 48 | autoFocus 49 | style={{ 50 | height: '' + (this.props.height - 2) + 'px', 51 | lineHeight: '' + (this.props.height - 2) + 'px', 52 | // fontSize: '' + (this.props.height - 4) + 'px', 53 | }} 54 | /> 55 |
56 | ) 57 | } 58 | } 59 | 60 | export default { 61 | className: 'text-editor', 62 | component: TextEditor, 63 | validate: validate, 64 | } 65 | -------------------------------------------------------------------------------- /src/base-editor.js: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types' 2 | import React from 'react' 3 | 4 | function validate(value, props) { 5 | return { 6 | valid: true, 7 | cleanedValue: value, 8 | } 9 | } 10 | 11 | class BaseEditor extends React.Component { 12 | static propTypes = { 13 | editReplace: PropTypes.any, 14 | value: PropTypes.any, 15 | abort: PropTypes.func, 16 | update: PropTypes.func, 17 | cellError: PropTypes.func, 18 | objectId: PropTypes.oneOfType([ 19 | PropTypes.string, 20 | PropTypes.number, 21 | ]), 22 | columnKey: PropTypes.string, 23 | } 24 | static defaultProps = { 25 | editReplace: null, 26 | } 27 | state = { 28 | value: (this.props.editReplace !== null) ? this.props.editReplace : this.props.value, 29 | } 30 | 31 | validate(value) { 32 | return validate(value, this.props) 33 | } 34 | 35 | abort(nextAction) { 36 | this.props.abort(nextAction) 37 | } 38 | 39 | commit(value, nextAction) { 40 | let validation = this.validate(value) 41 | 42 | if (validation.valid) { 43 | this.props.update( 44 | this.props.objectId, 45 | this.props.columnKey, 46 | validation.cleanedValue, 47 | nextAction, 48 | ) 49 | } else { 50 | this.props.cellError( 51 | this.props.objectId, 52 | this.props.columnKey, 53 | `"${value}" is not a valid value.` 54 | ) 55 | this.abort(nextAction) 56 | } 57 | } 58 | 59 | handleBlur = (event) => { 60 | this.commit(this.state.value, false) 61 | } 62 | handleSubmit = (event) => { 63 | event.preventDefault() 64 | event.stopPropagation() 65 | this.commit(this.state.value, 'nextRow') 66 | } 67 | handleKeyDown = (event) => { 68 | if (event.which === 9) { 69 | event.preventDefault() 70 | this.commit(this.state.value, 'nextColumn') 71 | } 72 | if (event.which === 27) { 73 | event.preventDefault() 74 | this.abort(false) 75 | } 76 | } 77 | } 78 | 79 | export default BaseEditor 80 | -------------------------------------------------------------------------------- /demo-site/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: base 3 | --- 4 |
5 | 8 |

To participate in the demonstration you will need:

9 |
    10 |
  • Javascript enabled
  • 11 |
  • A modern browser
  • 12 |
13 |

All examples given are written with babel loaders to support es6 (stage-0) and JSX syntax.

14 | 15 |

Simple Example

16 |

This is the simplest implementation of React-Object-Table, an editable list of strings.

17 |

To allow editing, the table requires an onUpdate handler (refer to source code below).

18 |

Even this simple example supports:

19 |
    20 |
  • Single cell editing
  • 21 |
  • Familiar navigation and completion hotkeys such as the arrow keys and tab/enter
  • 22 |
  • Multi column or row copy-paste (except on Firefox, where the required events do not 23 | exist)
  • 24 |
25 |
26 | Loading ... 30 | 31 |

More Feature-Filled Example

32 |

This example demonstrates:

33 |
    34 |
  • Read-only columns
  • 35 |
  • A more complex update handler
  • 36 |
  • The ability to add rows (handled outside the scope of React-Object-Table)
  • 37 |
  • Row-level action handlers
  • 38 |
  • A very basic custom renderer
  • 39 |
40 |
41 | Loading ... 45 | 46 |

Customisation Example

47 |

This example demonstrates:

48 |
    49 |
  • A more exciting custom renderer
  • 50 |
  • A custom editor widget
  • 51 |
  • Cell input validation (age column, confirmed to be positive integer in a reasonable 52 | range)
  • 53 |
  • Very basic validation error exception handling
  • 54 |
55 |
56 | Loading ... 60 |
61 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-object-table", 3 | "version": "0.7.1", 4 | "description": "React powered table of objects, designed to be editable and fast.", 5 | "main": "dist/index.js", 6 | "module": "dist/index.js", 7 | "exports": { 8 | ".": { 9 | "require": "./dist/index.js", 10 | "import": "./dist/index.js" 11 | } 12 | }, 13 | "scripts": { 14 | "publish-demo": "git branch -D gh-pages; git push origin --delete gh-pages; git checkout -b gh-pages; cd demo-site; yarn; npm run build; cd ..; git add .; git add -f demo-site/dist; git add -f demo-site/node_modules/uptick-demo-site/dist; git commit -m \"Demo site build\"; git push origin gh-pages; git checkout master; git push origin `git subtree split --prefix demo-site gh-pages`:gh-pages --force;", 15 | "test": "echo \"Error: no test specified\" && exit 1", 16 | "build-js": "rm -rf dist && node ./esbuild.js", 17 | "build-css": "./node_modules/node-sass/bin/node-sass src/object-table.sass dist/react-object-table.css", 18 | "build": "npm run build-js; npm run build-css", 19 | "prepublish": "npm run build" 20 | }, 21 | "repository": { 22 | "type": "git", 23 | "url": "https://github.com/uptick/react-object-table.git" 24 | }, 25 | "keywords": [ 26 | "react", 27 | "object", 28 | "grid", 29 | "table", 30 | "editable" 31 | ], 32 | "author": "Uptick Pty Ltd", 33 | "license": "MIT", 34 | "bugs": { 35 | "url": "https://github.com/uptick/react-object-table/issues" 36 | }, 37 | "homepage": "https://github.com/uptick/react-object-table#readme", 38 | "dependencies": { 39 | "classnames": "^2.3.1", 40 | "clone": "^2.1.2" 41 | }, 42 | "peerDependencies": { 43 | "jquery": "^3.x", 44 | "react": "15.x - 16.x", 45 | "react-dom": "15.x - 16.x" 46 | }, 47 | "devDependencies": { 48 | "@typescript-eslint/eslint-plugin": "^4.26.0", 49 | "@typescript-eslint/parser": "^4.26.0", 50 | "esbuild": "^0.12.5", 51 | "esbuild-node-externals": "^1.2.0", 52 | "eslint": "^7.27.0", 53 | "eslint-config-standard": "*", 54 | "eslint-config-standard-react": "*", 55 | "eslint-plugin-import": "*", 56 | "eslint-plugin-node": "*", 57 | "eslint-plugin-promise": "*", 58 | "eslint-plugin-react": "*", 59 | "eslint-plugin-standard": "*", 60 | "jquery": "^3.6.0", 61 | "node-sass": "^6.0.0", 62 | "react": "^16.13.0", 63 | "react-dom": "^16.13.0", 64 | "typescript": "^4.3.2" 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /demo-site/features-demo.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ReactDom from 'react-dom' 3 | 4 | import Moment from 'moment' 5 | 6 | import ObjectTable from 'react-object-table' 7 | 8 | class SinceDrawer extends React.Component { 9 | render() { 10 | return ( 11 | {Moment(this.props.value).fromNow()} 12 | ); 13 | } 14 | } 15 | SinceDrawer = { 16 | className: 'since-drawer', 17 | component: SinceDrawer, 18 | }; 19 | 20 | class SimpleTable extends React.Component { 21 | constructor(props) { 22 | super(props); 23 | 24 | this.state = { 25 | ...this.state, 26 | objects: [ 27 | { 28 | id: 1, 29 | firstName: 'Sean', 30 | lastName: 'MacMini', 31 | updated: +(Moment() - Moment.duration({weeks: 1})), 32 | }, 33 | { 34 | id: 2, 35 | firstName: 'Jarek', 36 | lastName: 'Grwovwatski', 37 | updated: +(Moment() - Moment.duration({weeks: 1})), 38 | }, 39 | ], 40 | }; 41 | } 42 | 43 | handleUpdate(id, values) { 44 | this.setState(prevState => { 45 | const stateChanges = { 46 | objects: prevState.objects, 47 | } 48 | prevState.objects.map((object, index) => { 49 | if (object.id === id) { 50 | stateChanges.objects[index] = { 51 | ...object, 52 | ...values, 53 | updated: +Moment(), 54 | }; 55 | } 56 | }); 57 | return stateChanges; 58 | }); 59 | } 60 | handleDuplicate(id) { 61 | this.setState(prevState => { 62 | const stateChanges = { 63 | objects: prevState.objects, 64 | } 65 | var newId = 0; 66 | var original; 67 | prevState.objects.map((object) => { 68 | if (object.id === id) { 69 | original = object; 70 | } 71 | if (object.id > newId) { 72 | newId = object.id; 73 | } 74 | }); 75 | newId++; 76 | if (original) { 77 | stateChanges.objects.push({ 78 | ...original, 79 | id: newId, 80 | updated: +Moment(), 81 | }); 82 | } 83 | return stateChanges; 84 | }); 85 | } 86 | 87 | render() { 88 | return ( 89 | 97 | ); 98 | } 99 | } 100 | SimpleTable.defaultProps = { 101 | columns: [ 102 | { 103 | name: 'First Name', 104 | key: 'firstName', 105 | }, 106 | { 107 | name: 'Last Name', 108 | key: 'lastName', 109 | }, 110 | { 111 | name: 'Updated', 112 | key: 'updated', 113 | editor: false, 114 | drawer: SinceDrawer, 115 | width: 200, 116 | }, 117 | ], 118 | }; 119 | 120 | var mount = document.querySelectorAll('div.demo-mount-features'); 121 | ReactDom.render( 122 | , 123 | mount[0] 124 | ); 125 | -------------------------------------------------------------------------------- /src/object-table.sass: -------------------------------------------------------------------------------- 1 | $selection-colour: #337ab7 2 | $cell-padding: 0.4rem 3 | $border-colour: #ddd 4 | 5 | div.object-table-container 6 | margin-bottom: 2em 7 | table 8 | width: 100% 9 | border: none !important 10 | outline: none !important 11 | border-collapse: collapse 12 | 13 | &.editing 14 | td 15 | div.contents 16 | opacity: 0.2 17 | &.editing div.contents 18 | opacity: 1 19 | 20 | // borders 21 | $border: 0.1rem solid $border-colour 22 | 23 | tr:first-child 24 | td, th 25 | border-top: $border 26 | tr:last-child 27 | td 28 | border-bottom: $border 29 | td:first-child, th:first-child 30 | border-left: $border 31 | td:last-child, th:last-child 32 | border-right: $border 33 | td.actions 34 | border-left: $border 35 | i 36 | cursor: pointer 37 | 38 | tr.disabled 39 | opacity: 0.5 40 | td, th 41 | div.contents 42 | transition: opacity 0.2s 43 | 44 | -webkit-box-sizing: border-box 45 | -moz-box-sizing: border-box 46 | -ms-box-sizing: border-box 47 | box-sizing: border-box 48 | 49 | // no selecting 50 | -webkit-user-select: none 51 | -moz-user-select: none 52 | -ms-user-select: none 53 | user-select: none 54 | 55 | &:not(.editing) 56 | td 57 | &.selected 58 | background: $selection-colour 59 | color: #fff 60 | &.copying div.contents 61 | opacity: 0.5 62 | 63 | th 64 | padding: $cell-padding 65 | text-align: left 66 | font-weight: normal 67 | 68 | td.actions 69 | position: relative 70 | text-align: center 71 | cursor: pointer 72 | ul.actions 73 | overflow: hidden 74 | line-height: 1em 75 | text-align: left 76 | position: absolute 77 | top: 50% 78 | right: -0.1rem 79 | list-style: none 80 | padding: 0 81 | margin: 0 82 | z-index: 20 83 | background: #fff 84 | border: 0.1rem solid $border-colour 85 | min-width: 10rem 86 | li 87 | display: block 88 | margin: 0 89 | padding: 0.6rem 90 | cursor: pointer 91 | &:hover 92 | background: $selection-colour 93 | color: #fff 94 | &.disabled 95 | cursor: not-allowed 96 | color: $border-colour 97 | &:hover 98 | background: #fff 99 | color: $border-colour 100 | 101 | 102 | td.uneditable 103 | background: #fafafa 104 | 105 | // all editors by default 106 | div.object-table-container 107 | td.editor 108 | input 109 | box-shadow: none 110 | width: 100% 111 | padding: $cell-padding 112 | margin: 0 113 | border: none 114 | outline: none 115 | background: none 116 | 117 | // all drawers by default 118 | div.object-table-container 119 | td.drawer, td.empty 120 | padding: $cell-padding 121 | 122 | @import 'drawers/text' 123 | @import 'editors/text' 124 | -------------------------------------------------------------------------------- /demo-site/customisation-demo.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ReactDom from 'react-dom' 3 | 4 | import ObjectTable from 'react-object-table' 5 | import { TextEditor } from 'react-object-table' 6 | 7 | class ColourDrawer extends React.Component { 8 | constructor(props) { 9 | super(props); 10 | } 11 | 12 | render() { 13 | return ( 14 |
17 | 25 |
26 | ); 27 | } 28 | } 29 | ColourDrawer = { 30 | className: 'since-drawer', 31 | component: ColourDrawer, 32 | }; 33 | 34 | function validate_age(value, props) { 35 | var intAge = parseInt(value); 36 | if (isNaN(intAge)) { 37 | return {valid: false,}; 38 | } 39 | if (intAge < 0 || intAge > 125) { 40 | return {valid: false,}; 41 | } 42 | return { 43 | valid: true, 44 | cleanedValue: intAge, 45 | }; 46 | } 47 | class AgeEditor extends TextEditor.component { 48 | validate(value) { 49 | return validate_age(value, this.props); 50 | } 51 | } 52 | AgeEditor = { 53 | className: 'age-editor', 54 | component: AgeEditor, 55 | validate: validate_age, 56 | }; 57 | 58 | class CustomisedTable extends React.Component { 59 | constructor(props) { 60 | super(props); 61 | 62 | this.state = { 63 | ...this.state, 64 | exception: null, 65 | objects: [ 66 | { 67 | id: 1, 68 | name: 'Phillip', 69 | favouriteColour: 'black', 70 | age: 75, 71 | }, 72 | { 73 | id: 2, 74 | name: 'Michael', 75 | favouriteColour: '#f44', 76 | age: 19, 77 | }, 78 | { 79 | id: 3, 80 | name: 'Steven McShane', 81 | favouriteColour: '#05AB45', 82 | age: 22, 83 | }, 84 | { 85 | id: 4, 86 | name: 'Aidan', 87 | favouriteColour: 'rebeccapurple', 88 | age: 31, 89 | }, 90 | ], 91 | }; 92 | } 93 | 94 | handleUpdate(id, values) { 95 | this.setState(prevState => { 96 | const stateChanges = { 97 | exception: null, 98 | objects: prevState.objects, 99 | } 100 | prevState.objects.map((object, index) => { 101 | if (object.id === id) { 102 | stateChanges.objects[index] = { 103 | ...object, 104 | ...values, 105 | }; 106 | } 107 | }); 108 | return stateChanges; 109 | }); 110 | } 111 | handleCellError(objectId, columnKey, message) { 112 | this.setState({exception: `Unable to update ${columnKey}:\n${message}`}); 113 | } 114 | handleRowError(row, message) { 115 | this.setState({exception: message}); 116 | } 117 | 118 | render() { 119 | var exception; 120 | if (this.state.exception !== null) { 121 | exception = ( 122 |
133 | {this.state.exception} 134 |
135 | ); 136 | } 137 | return ( 138 |
139 | 146 | {exception} 147 |
148 | ); 149 | } 150 | } 151 | CustomisedTable.defaultProps = { 152 | columns: [ 153 | { 154 | name: 'Name', 155 | key: 'name', 156 | }, 157 | { 158 | name: 'Age', 159 | key: 'age', 160 | width: 100, 161 | editor: AgeEditor, 162 | }, 163 | { 164 | name: 'Favourite HTML Colour', 165 | key: 'favouriteColour', 166 | width: 170, 167 | drawer: ColourDrawer, 168 | }, 169 | ], 170 | }; 171 | 172 | var mount = document.querySelectorAll('div.demo-mount-customisation'); 173 | ReactDom.render( 174 | , 175 | mount[0] 176 | ); 177 | -------------------------------------------------------------------------------- /src/object-cell.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types' 2 | import React from 'react' 3 | import Clone from 'clone' 4 | import classNames from 'classnames' 5 | 6 | import { cellIsEditable, isDifferent } from './utilities' 7 | 8 | import TextDrawer from './drawers/text.jsx' 9 | import TextEditor from './editors/text.jsx' 10 | 11 | class ObjectCell extends React.Component { 12 | static propTypes = { 13 | column: PropTypes.object, 14 | objectId: PropTypes.oneOfType([ 15 | PropTypes.string, 16 | PropTypes.number, 17 | ]), 18 | object: PropTypes.object, 19 | onMouseDownCell: PropTypes.func, 20 | disabled: PropTypes.bool, 21 | beginEdit: PropTypes.func, 22 | selected: PropTypes.bool, 23 | copying: PropTypes.bool, 24 | editing: PropTypes.bool, 25 | value: PropTypes.any, 26 | updateField: PropTypes.func, 27 | abortField: PropTypes.func, 28 | height: PropTypes.number, 29 | editReplace: PropTypes.any, 30 | cellError: PropTypes.func, 31 | editorContext: PropTypes.object, 32 | drawerContext: PropTypes.object, 33 | } 34 | 35 | shouldComponentUpdate(nextProps, nextState) { 36 | const propsExemptions = { 37 | 'onMouseDownCell': true, 38 | 'beginEdit': true, 39 | 'updateField': true, 40 | 'abortField': true, 41 | 'cellError': true, 42 | } 43 | if (isDifferent(this.props, nextProps, propsExemptions)) { 44 | return true 45 | } 46 | if (isDifferent(this.state, nextState)) { 47 | return true 48 | } 49 | return false 50 | } 51 | 52 | getCellRef() { 53 | return { 54 | columnKey: this.props.column.key, 55 | objectId: this.props.objectId, 56 | } 57 | } 58 | 59 | handleMouseDown = (event) => { 60 | const button = event.which || event.button 61 | event.preventDefault() 62 | if (button === 0) { 63 | this.props.onMouseDownCell(this.getCellRef(), event.clientX, event.clientY, event.shiftKey) 64 | } 65 | } 66 | handleDoubleClick = (event) => { 67 | this.beginEdit() 68 | } 69 | editable(object) { 70 | return cellIsEditable(object, this.props.column) 71 | } 72 | beginEdit = (editReplaceOverride) => { 73 | if (!this.props.disabled && this.editable(this.props.object)) { 74 | this.props.beginEdit(this.getCellRef(), editReplaceOverride) 75 | } 76 | } 77 | 78 | render() { 79 | const classes = classNames('', { 80 | 'selected': this.props.selected, 81 | 'copying': this.props.copying, 82 | 'editing': this.props.editing, 83 | }) 84 | 85 | if (this.props.editing) { 86 | const editor = this.props.column.editor || TextEditor 87 | const editorProps = Clone(this.props.column.editorProps || {}) 88 | editorProps.value = this.props.value 89 | editorProps.update = this.props.updateField 90 | editorProps.abort = this.props.abortField 91 | editorProps.objectId = this.props.objectId 92 | editorProps.column = this.props.column 93 | editorProps.object = this.props.object 94 | editorProps.columnKey = this.props.column.key 95 | editorProps.height = this.props.height 96 | editorProps.editReplace = this.props.editReplace 97 | editorProps.cellError = this.props.cellError 98 | editorProps.context = this.props.editorContext 99 | 100 | return ( 101 | 104 |
105 | {React.createElement( 106 | editor.component, 107 | { 108 | ...editorProps, 109 | ref: el => { this.editor = el }, 110 | }, 111 | null 112 | )} 113 |
114 | 115 | ) 116 | } else { 117 | const drawer = this.props.column.drawer || TextDrawer 118 | const drawerProps = Clone(this.props.column.drawerProps || {}) 119 | 120 | drawerProps.value = this.props.value 121 | drawerProps.column = this.props.column 122 | drawerProps.object = this.props.object 123 | drawerProps.beginEdit = this.beginEdit 124 | drawerProps.context = this.props.drawerContext 125 | 126 | let cellProps = { 127 | className: classNames(classes + ' drawer ' + drawer.className, { 128 | uneditable: (!this.editable(this.props.object)), 129 | }), 130 | } 131 | if (!this.props.column.disableInteraction) { 132 | cellProps = { 133 | ...cellProps, 134 | onMouseDown: this.handleMouseDown, 135 | onDoubleClick: this.handleDoubleClick, 136 | } 137 | } 138 | 139 | return ( 140 | 143 |
144 | {React.createElement( 145 | drawer.component, 146 | { 147 | ...drawerProps, 148 | ref: el => { this.drawer = el }, 149 | }, 150 | null 151 | )} 152 |
153 | 154 | ) 155 | } 156 | } 157 | } 158 | 159 | export default ObjectCell 160 | -------------------------------------------------------------------------------- /src/object-row.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types' 2 | import React from 'react' 3 | import JQuery from 'jquery' 4 | import classNames from 'classnames' 5 | 6 | import { dictCount, isDifferent } from './utilities.js' 7 | 8 | class ObjectRow extends React.Component { 9 | static propTypes = { 10 | id: PropTypes.number, 11 | object: PropTypes.object, 12 | openActions: PropTypes.func, 13 | closeActions: PropTypes.func, 14 | actions: PropTypes.array, 15 | columns: PropTypes.array, 16 | editing: PropTypes.object, 17 | height: PropTypes.number, 18 | editReplace: PropTypes.any, 19 | selectedColumns: PropTypes.object, 20 | copyingColumns: PropTypes.object, 21 | onMouseDownCell: PropTypes.func, 22 | beginEdit: PropTypes.func, 23 | updateField: PropTypes.func, 24 | abortField: PropTypes.func, 25 | cellError: PropTypes.func, 26 | actionsOpen: PropTypes.bool, 27 | cellComponent: PropTypes.func, 28 | cellProps: PropTypes.object, 29 | } 30 | 31 | shouldComponentUpdate(nextProps, nextState) { 32 | const isMissingColumns = function(propsA, propsB, columnsKey) { 33 | for (const key in propsA[columnsKey]) { 34 | if (key in propsB[columnsKey] === false) { 35 | // console.log('key', key, 'does not exist in both') 36 | return true 37 | } 38 | } 39 | return false 40 | } 41 | if (isMissingColumns(nextProps, this.props, 'selectedColumns') || isMissingColumns(this.props, nextProps, 'selectedColumns')) { 42 | return true 43 | } 44 | if (isMissingColumns(nextProps, this.props, 'copyingColumns') || isMissingColumns(this.props, nextProps, 'copyingColumns')) { 45 | return true 46 | } 47 | 48 | const propsExemptions = { 49 | // ignore column we perform above 50 | 'selectedColumns': true, 51 | 'copyingColumns': true, 52 | 53 | // ignore bound methods 54 | 'updateField': true, 55 | 'abortField': true, 56 | 'openActions': true, 57 | 'closeActions': true, 58 | 'onMouseDownCell': true, 59 | 'beginEdit': true, 60 | } 61 | if (isDifferent(this.props, nextProps, propsExemptions)) { 62 | return true 63 | } 64 | if (isDifferent(this.state, nextState)) { 65 | return true 66 | } 67 | return false 68 | } 69 | 70 | colInRanges(column, columns, rows) { 71 | const numRangeColumns = dictCount(columns) 72 | const numRangeRows = dictCount(rows) 73 | if (numRangeColumns === 0 && numRangeRows === 0) { 74 | return false 75 | } else if (columns !== null && rows === null) { 76 | return (typeof columns[column.key] !== 'undefined') 77 | } else if (columns === null && rows !== null) { 78 | return true 79 | } 80 | return ( 81 | typeof columns[column.key] !== 'undefined' && 82 | typeof rows[this.props.object.id] !== 'undefined' 83 | ) 84 | } 85 | 86 | openActions = (event) => { 87 | this.props.openActions(this.props.object.id) 88 | } 89 | closeActions = (event) => { 90 | this.props.closeActions() 91 | } 92 | onActionClick = (event) => { 93 | let actionId = JQuery(event.target).data('action') 94 | let action = this.props.actions[actionId] 95 | if (action) { 96 | this.props.actions[actionId].func(this.props.object.id) 97 | if (!action.stayOpen) { 98 | this.props.closeActions() 99 | } 100 | } 101 | } 102 | 103 | renderCells() { 104 | let cells = [] 105 | for (let columnIndex = 0; columnIndex < this.props.columns.length; columnIndex++) { 106 | let column = this.props.columns[columnIndex] 107 | let editing = false 108 | if (this.props.editing !== null) { 109 | editing = ( 110 | this.props.editing.objectId === this.props.object.id && 111 | this.props.editing.columnKey === column.key 112 | ) 113 | } 114 | 115 | let ref = 'column-' + column.key 116 | 117 | let cellProps = { 118 | key: ref, 119 | ref: ref, 120 | 121 | value: this.props.object[column.key], 122 | objectId: this.props.object.id, 123 | object: this.props.object, 124 | 125 | column: column, 126 | height: this.props.height, 127 | editReplace: this.props.editReplace, 128 | selected: (typeof this.props.selectedColumns[column.key] !== 'undefined'), 129 | copying: (typeof this.props.copyingColumns[column.key] !== 'undefined'), 130 | 131 | onMouseDownCell: this.props.onMouseDownCell, 132 | beginEdit: this.props.beginEdit, 133 | 134 | updateField: this.props.updateField, 135 | abortField: this.props.abortField, 136 | cellError: this.props.cellError, 137 | } 138 | 139 | cellProps.editorContext = null 140 | if (editing && column.editorContext) { 141 | cellProps.editorContext = column.editorContext(this.props.object) 142 | } 143 | if (!editing && column.drawerContext) { 144 | cellProps.drawerContext = column.drawerContext(this.props.object) 145 | } 146 | 147 | cellProps.disabled = (this.props.object.disabled === true) 148 | if (this.props.object.disabled) { 149 | cellProps.editing = false 150 | } else { 151 | cellProps.editing = editing 152 | } 153 | cells.push( 154 | 158 | ) 159 | } 160 | if (this.props.actions && this.props.actions.length) { 161 | let cellStyle = { 162 | lineHeight: this.props.height + 'px', 163 | } 164 | if (this.props.actionsOpen && !this.props.object.disabled) { 165 | let actions = [] 166 | this.props.actions.map((action, index) => { 167 | let actionEnabled = action.enabled 168 | let tooltip 169 | if (!(actionEnabled === undefined)) { 170 | if (typeof actionEnabled === 'function') actionEnabled = actionEnabled(this.props.object) 171 | if (Array.isArray(actionEnabled)) { 172 | [actionEnabled, tooltip] = actionEnabled 173 | } 174 | } else { 175 | actionEnabled = true 176 | } 177 | actions.push( 178 |
  • 185 | {action.label} 186 |
  • 187 | ) 188 | }) 189 | cells.push( 190 | { this.actions = el }} 193 | className="actions open" 194 | style={cellStyle} 195 | > 196 | 197 |
      198 | {actions} 199 |
    200 | 201 | ) 202 | } else { 203 | cells.push( 204 | { this.actions = el }} 207 | className="actions closed" 208 | onClick={this.openActions} 209 | style={cellStyle} 210 | > 211 | 212 | 213 | ) 214 | } 215 | } 216 | return cells 217 | } 218 | 219 | render() { 220 | return ( 221 | 227 | {this.renderCells()} 228 | 229 | ) 230 | } 231 | } 232 | 233 | export default ObjectRow 234 | -------------------------------------------------------------------------------- /src/object-table.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types' 2 | import React from 'react' 3 | import ReactDom from 'react-dom' 4 | import JQuery from 'jquery' 5 | import ClassNames from 'classnames' 6 | import Clone from 'clone' 7 | 8 | import { dictCount, dictFirstKey, cellIsEditable } from './utilities.js' 9 | import { stringValue, deserializeCells } from './clipboard.js' 10 | import TextEditor from './editors/text.jsx' 11 | import TextDrawer from './drawers/text.jsx' 12 | 13 | import BaseEditor from './base-editor.js' 14 | import ObjectCell from './object-cell.jsx' 15 | import ObjectRow from './object-row.jsx' 16 | 17 | let _iOSDevice = false 18 | if (typeof navigator !== 'undefined') { 19 | _iOSDevice = !!navigator.platform.match(/iPhone|iPod|iPad/) 20 | } 21 | 22 | class ObjectTable extends React.PureComponent { 23 | static propTypes = { 24 | columns: PropTypes.array, 25 | objects: PropTypes.array, 26 | onUpdateMany: PropTypes.func, 27 | onUpdate: PropTypes.func, 28 | rowHeight: PropTypes.number, 29 | actions: PropTypes.array, 30 | emptyText: PropTypes.string, 31 | onRowError: PropTypes.func, 32 | onCellError: PropTypes.func, 33 | rowComponent: PropTypes.func, 34 | rowProps: PropTypes.object, 35 | cellComponent: PropTypes.func, 36 | cellProps: PropTypes.object, 37 | } 38 | 39 | static defaultProps = { 40 | rowComponent: ObjectRow, 41 | cellComponent: ObjectCell, 42 | rowHeight: 32, 43 | objects: [ 44 | { 45 | id: 1, // every object is expected to have a unique identifier 46 | name: 'Product item report', 47 | quantity: '1.0000', 48 | }, 49 | ], 50 | columns: [ 51 | { 52 | name: 'Description', 53 | key: 'description', 54 | width: 'auto', 55 | drawer: null, 56 | drawerProps: null, 57 | editor: null, 58 | editorProps: null, 59 | }, 60 | ], 61 | emptyText: 'No objects', 62 | onRowError: function(row, message) { 63 | console.warn('Unable to update row:', row) 64 | console.warn('As the following error was encountered:', message) 65 | }, 66 | onCellError: function(objectId, columnKey, message) { 67 | console.warn('Unable to update row ' + objectId + ' ' + columnKey) 68 | console.warn('As the following error was encountered:', message) 69 | }, 70 | } 71 | 72 | state = { 73 | editing: null, 74 | editReplace: null, 75 | 76 | selectionDragStart: null, 77 | 78 | selectedRows: {}, 79 | selectedColumns: {}, 80 | selectedRowsDown: true, 81 | selectedColumnsRight: true, 82 | 83 | copyingRows: {}, 84 | copyingColumns: {}, 85 | 86 | openActions: null, 87 | } 88 | 89 | componentDidMount() { 90 | JQuery(document).on('mousemove', this.handleMouseMove) 91 | JQuery(document).on('keypress', this.handleKeyPress) 92 | JQuery(document).on('keydown', this.handleKeyDown) 93 | JQuery(document).on('mouseup', (event) => { 94 | let parentContainer = JQuery(event.target).closest('.object-table-container') 95 | if (parentContainer.length === 1) { 96 | try { 97 | if (parentContainer[0] === ReactDom.findDOMNode(this)) return 98 | } catch (error) {} 99 | } 100 | if (this.state.selectionDragStart === null) { 101 | this.handleClickOutside(event) 102 | } 103 | }) 104 | JQuery(document).on('mouseup', this.handleMouseUp) 105 | JQuery(document).on('copy', (event) => { 106 | let theEvent = event 107 | if (Object.keys(this.state.selectedColumns).length > 0 || Object.keys(this.state.selectedRows).length) { 108 | this.handleCopy(theEvent) 109 | } 110 | }) 111 | JQuery(document).on('paste', (event) => { 112 | let theEvent = event 113 | let clipboardObjects = deserializeCells(theEvent.originalEvent.clipboardData) 114 | if (clipboardObjects.length) { 115 | this.handlePaste(clipboardObjects) 116 | } 117 | }) 118 | } 119 | getEventCellRef(event) { 120 | let cell = JQuery(event.target) 121 | if (!cell.is('td')) cell = cell.closest('td') 122 | let objectId = cell.data('object-id') 123 | let columnKey = cell.data('column-key') 124 | return { 125 | objectId: objectId, 126 | columnKey: columnKey, 127 | } 128 | } 129 | getDraggedColumns(startX, endX, tableBounds) { 130 | let cols = {} 131 | 132 | let tableLeft = tableBounds.left + document.body.scrollLeft 133 | 134 | let lowestX = startX 135 | let highestX = endX 136 | if (lowestX > highestX) { 137 | let tempX = lowestX 138 | lowestX = highestX 139 | highestX = tempX 140 | } 141 | this.props.columns.map(column => { 142 | let colElem = this.refs['header-' + column.key] 143 | let colLeft = tableLeft + colElem.offsetLeft 144 | let colRight = colLeft + colElem.offsetWidth 145 | 146 | let inLeft = (colRight >= lowestX && colLeft <= highestX) 147 | let inRight = (colLeft <= highestX && colRight >= lowestX) 148 | if (inLeft || inRight) cols[column.key] = true 149 | }) 150 | 151 | return cols 152 | } 153 | getDraggedRows(startY, endY, tableBounds) { 154 | let rows = {} 155 | 156 | let tableTop = tableBounds.top + document.body.scrollTop 157 | 158 | let lowestY = startY 159 | let highestY = endY 160 | if (lowestY > highestY) { 161 | let tempY = lowestY 162 | lowestY = highestY 163 | highestY = tempY 164 | } 165 | for (let rowIndex = 0; rowIndex < this.props.objects.length; rowIndex++) { 166 | let object = this.props.objects[rowIndex] 167 | let rowElem = ReactDom.findDOMNode(this.getRowFromRefs(object.id)) 168 | if (!rowElem) { 169 | continue 170 | } 171 | let rowTop = tableTop + rowElem.offsetTop 172 | let rowBottom = rowTop + rowElem.offsetHeight 173 | 174 | let inTop = (rowBottom >= lowestY && rowTop < highestY) 175 | let inBottom = (rowTop < highestY && rowBottom >= lowestY) 176 | if (inTop || inBottom) rows[object.id] = true 177 | } 178 | 179 | return rows 180 | } 181 | getSelectedFirstVisibleRow(reverse) { 182 | let allRows = Clone(this.props.objects || []) 183 | if (reverse) allRows = allRows.reverse() 184 | 185 | for (let rowIndex = 0; rowIndex < allRows.length; rowIndex++) { 186 | let row = allRows[rowIndex] 187 | if (typeof this.state.selectedRows[row.id] !== 'undefined') { 188 | return row.id 189 | } 190 | } 191 | return null 192 | } 193 | getSelectedFirstVisibleColumn(reverse) { 194 | let allColumns = Clone(this.props.columns) 195 | if (reverse) allColumns = allColumns.reverse() 196 | 197 | for (let columnIndex = 0; columnIndex < allColumns.length; columnIndex++) { 198 | let column = allColumns[columnIndex] 199 | if (typeof this.state.selectedColumns[column.key] !== 'undefined') { 200 | return column.key 201 | } 202 | } 203 | return null 204 | } 205 | getSelectedNextVisibleRow(reverse) { 206 | let allRows = Clone(this.props.objects || []) 207 | if (reverse) allRows = allRows.reverse() 208 | 209 | let couldBeNext = false 210 | let next = allRows.length ? allRows[0].id : null 211 | 212 | for (let rowIndex = 0; rowIndex < allRows.length; rowIndex++) { 213 | let row = allRows[rowIndex] 214 | if (couldBeNext) { 215 | next = row.id 216 | couldBeNext = false 217 | } 218 | if (typeof this.state.selectedRows[row.id] !== 'undefined') { 219 | next = row.id 220 | couldBeNext = true 221 | } 222 | } 223 | return next 224 | } 225 | getSelectedNextVisibleColumn(reverse) { 226 | let allColumns = Clone(this.props.columns) 227 | if (reverse) allColumns = allColumns.reverse() 228 | 229 | let couldBeNext = false 230 | let next = allColumns.length ? allColumns[0].id : null 231 | 232 | for (let columnIndex = 0; columnIndex < allColumns.length; columnIndex++) { 233 | let column = allColumns[columnIndex] 234 | if (couldBeNext) { 235 | next = column.key 236 | couldBeNext = false 237 | } 238 | if (typeof this.state.selectedColumns[column.key] !== 'undefined') { 239 | next = column.key 240 | couldBeNext = true 241 | } 242 | } 243 | return next 244 | } 245 | 246 | getRowFromRefs(rowId) { 247 | // Dumb hack to clean up existing hack. Accesses underlying elements wrapped in React DnD v8 HOCs. 248 | let row = this.refs[`object-${rowId}`] 249 | // Unwrap 250 | while (row.decoratedRef) { 251 | row = row.decoratedRef.current 252 | } 253 | return row 254 | } 255 | 256 | getCellFromRefs(rowId, columnKey) { 257 | // Dumb hack to clean up existing hack. Accesses underlying elements wrapped in React DnD v8 HOCs. 258 | let cell = this.getRowFromRefs(rowId).refs[`column-${columnKey}`] 259 | // Unwrap 260 | while (cell.decoratedRef) { 261 | cell = cell.decoratedRef.current 262 | } 263 | return cell 264 | } 265 | 266 | getColumnFromKey(key) { 267 | const cols = this.props.columns || [] 268 | return cols.find(col => col.key === key) 269 | } 270 | 271 | handleKeyPress = (event) => { 272 | if (this.state.editing === null) { 273 | let editRow = this.getSelectedFirstVisibleRow() 274 | let editColumn = this.getSelectedFirstVisibleColumn() 275 | if (editRow !== null && editColumn !== null) { 276 | let editObject 277 | for (let objectIndex = 0; objectIndex < this.props.objects.length; objectIndex++) { 278 | let object = this.props.objects[objectIndex] 279 | if (object.id === editRow) editObject = object 280 | } 281 | switch (event.which) { 282 | // case 'enter': 283 | case 13: 284 | if (cellIsEditable(editRow, this.getColumnFromKey(editColumn)) && editObject && !editObject.disabled) { 285 | this.setState({ 286 | editing: { 287 | columnKey: editColumn, 288 | objectId: editRow, 289 | }, 290 | editReplace: null, 291 | }) 292 | } 293 | event.preventDefault() 294 | break 295 | 296 | default: 297 | if (cellIsEditable(editRow, this.getColumnFromKey(editColumn)) && editObject && !editObject.disabled) { 298 | this.setState({ 299 | editing: { 300 | columnKey: editColumn, 301 | objectId: editRow, 302 | }, 303 | editReplace: String.fromCharCode(event.which), // keyPressed 304 | }) 305 | } 306 | event.preventDefault() 307 | break 308 | } 309 | } 310 | } 311 | } 312 | handleKeyDown = (event) => { 313 | let directionKeys = { 314 | 38: 'arrow_up', 315 | 40: 'arrow_down', 316 | 37: 'arrow_left', 317 | 39: 'arrow_right', 318 | } 319 | let actionKeys = { 320 | 27: 'escape', 321 | 9: 'tab', 322 | 8: 'backspace', 323 | } 324 | if (this.state.editing === null) { 325 | let selectedCells = Object.keys(this.state.selectedRows).length 326 | selectedCells *= Object.keys(this.state.selectedColumns).length 327 | if (selectedCells > 0) { 328 | switch (directionKeys[event.which]) { 329 | case 'arrow_up': 330 | if (event.shiftKey) { 331 | let newRows = Clone(this.state.selectedRows) 332 | if (Object.keys(this.state.selectedRows).length > 1 && this.state.selectedRowsDown) { 333 | delete newRows[this.getSelectedFirstVisibleRow(true)] 334 | } else { 335 | newRows[this.getSelectedNextVisibleRow(true)] = true 336 | } 337 | this.changeSelectionTo(newRows, this.state.selectedColumns) 338 | } else { 339 | this.moveSelectionTo( 340 | this.getSelectedNextVisibleRow(true), 341 | this.getSelectedFirstVisibleColumn() 342 | ) 343 | } 344 | break 345 | 346 | case 'arrow_down': 347 | if (event.shiftKey) { 348 | let newRows = Clone(this.state.selectedRows) 349 | if (Object.keys(this.state.selectedRows).length > 1 && !this.state.selectedRowsDown) { 350 | delete newRows[this.getSelectedFirstVisibleRow()] 351 | } else { 352 | newRows[this.getSelectedNextVisibleRow()] = true 353 | } 354 | this.changeSelectionTo(newRows, this.state.selectedColumns) 355 | } else { 356 | this.moveSelectionTo( 357 | this.getSelectedNextVisibleRow(), 358 | this.getSelectedFirstVisibleColumn() 359 | ) 360 | } 361 | break 362 | 363 | case 'arrow_left': 364 | if (event.shiftKey) { 365 | let newColumns = Clone(this.state.selectedColumns) 366 | if (Object.keys(this.state.selectedColumns).length > 1 && this.state.selectedColumnsRight) { 367 | delete newColumns[this.getSelectedFirstVisibleColumn(true)] 368 | } else { 369 | newColumns[this.getSelectedNextVisibleColumn(true)] = true 370 | } 371 | this.changeSelectionTo(this.state.selectedRows, newColumns) 372 | } else { 373 | this.moveSelectionTo( 374 | this.getSelectedFirstVisibleRow(), 375 | this.getSelectedNextVisibleColumn(true) 376 | ) 377 | } 378 | break 379 | 380 | case 'arrow_right': 381 | if (event.shiftKey) { 382 | let newColumns = Clone(this.state.selectedColumns) 383 | if (Object.keys(this.state.selectedColumns).length > 1 && !this.state.selectedColumnsRight) { 384 | delete newColumns[this.getSelectedFirstVisibleColumn()] 385 | } else { 386 | newColumns[this.getSelectedNextVisibleColumn()] = true 387 | } 388 | this.changeSelectionTo(this.state.selectedRows, newColumns) 389 | } else { 390 | this.moveSelectionTo( 391 | this.getSelectedFirstVisibleRow(), 392 | this.getSelectedNextVisibleColumn() 393 | ) 394 | } 395 | break 396 | } 397 | switch (actionKeys[event.which]) { 398 | case 'escape': 399 | if (Object.keys(this.state.copyingColumns).length > 0 || Object.keys(this.state.copyingRows).length > 0) { 400 | this.setState({ 401 | copyingColumns: {}, 402 | copyingRows: {}, 403 | }) 404 | } 405 | break 406 | 407 | case 'backspace': 408 | let editColumn = this.getSelectedFirstVisibleColumn() 409 | let editRow = this.getSelectedFirstVisibleRow() 410 | if (selectedCells > 0 && cellIsEditable(editRow, this.getColumnFromKey(editColumn))) { 411 | this.setState({ 412 | editing: { 413 | columnKey: editColumn, 414 | objectId: editRow, 415 | }, 416 | editReplace: '', 417 | }) 418 | } 419 | break 420 | 421 | case 'tab': 422 | if (typeof this.state.selectedColumns[this.getSelectedNextVisibleColumn()] === 'undefined') { 423 | this.moveSelectionTo( 424 | this.getSelectedFirstVisibleRow(), 425 | this.getSelectedNextVisibleColumn() 426 | ) 427 | } else { 428 | this.moveSelectionTo( 429 | this.getSelectedNextVisibleRow(), 430 | this.props.columns[0].key 431 | ) 432 | } 433 | break 434 | } 435 | if (typeof directionKeys[event.which] !== 'undefined' || typeof actionKeys[event.which] !== 'undefined') { 436 | event.preventDefault() 437 | } 438 | } 439 | } 440 | } 441 | handleClickOutside(event) { 442 | if (this.state.editing) { 443 | this.getCellFromRefs(this.state.editing.objectId, this.state.editing.columnKey).editor.handleBlur() 444 | } else if (Object.keys(this.state.selectedRows).length !== 0 || Object.keys(this.state.selectedColumns).length !== 0) { 445 | this.setState({selectedRows: {}, selectedColumns: {}}) 446 | } 447 | if (!JQuery(event.target).closest('ul.actions').length) { 448 | this.closeActions() 449 | } 450 | } 451 | beginEdit = (ref, editReplaceOverride) => { 452 | let editReplace = null 453 | if (typeof editReplaceOverride !== 'undefined') { 454 | editReplace = editReplaceOverride 455 | } 456 | this.setState({editing: ref, editReplace: editReplace}) 457 | } 458 | handleMouseDownCell = (ref, clientX, clientY, shift) => { 459 | if (_iOSDevice) { 460 | this.beginEdit(ref) 461 | return 462 | } 463 | 464 | if (this.state.editing !== null) { 465 | this.handleClickOutside({}) 466 | return 467 | } 468 | 469 | let mouseX = clientX 470 | let mouseY = clientY 471 | let clickRef = ref 472 | if (this.state.selectionDragStart === null) { 473 | if (shift) { 474 | let currentColumn = this.getSelectedFirstVisibleColumn(!this.state.selectedColumnsRight) 475 | let currentRow = this.getSelectedFirstVisibleRow(!this.state.selectedRowsDown) 476 | 477 | let selectingDown 478 | let selectingRight 479 | for (let rowIndex = 0; rowIndex < this.props.objects.length; rowIndex++) { 480 | let row = this.props.objects[rowIndex] 481 | if (row.id === currentRow) { 482 | selectingDown = true 483 | break 484 | } 485 | if (row.id === ref.objectId) { 486 | selectingDown = false 487 | break 488 | } 489 | } 490 | for (let columnIndex = 0; columnIndex < this.props.columns.length; columnIndex++) { 491 | let column = this.props.columns[columnIndex] 492 | if (column.key === currentColumn) { 493 | selectingRight = true 494 | break 495 | } 496 | if (column.key === ref.columnKey) { 497 | selectingRight = false 498 | break 499 | } 500 | } 501 | 502 | let newSelectionRows = {} 503 | let selecting = false 504 | for (let rowIndex = 0; rowIndex < this.props.objects.length; rowIndex++) { 505 | let row = this.props.objects[rowIndex] 506 | if ((selectingDown && row.id === currentRow) || (!selectingDown && row.id === ref.objectId)) { 507 | selecting = true 508 | } 509 | if (selecting) newSelectionRows[row.id] = true 510 | if ((selectingDown && row.id === ref.objectId) || (!selectingDown && row.id === currentRow)) { 511 | break 512 | } 513 | } 514 | let newSelectionColumns = {} 515 | selecting = false 516 | for (let columnIndex = 0; columnIndex < this.props.columns.length; columnIndex++) { 517 | let column = this.props.columns[columnIndex] 518 | if ((selectingRight && column.key === currentColumn) || (!selectingRight && column.key === ref.columnKey)) { 519 | selecting = true 520 | } 521 | if (selecting) newSelectionColumns[column.key] = true 522 | if ((selectingRight && column.key === ref.columnKey) || (!selectingRight && column.key === currentColumn)) { 523 | break 524 | } 525 | } 526 | 527 | this.setState({ 528 | selectedColumns: newSelectionColumns, 529 | selectedRows: newSelectionRows, 530 | selectedRowsDown: selectingDown, 531 | selectedColumnsRight: selectingRight, 532 | }) 533 | } else { 534 | this.setState(prevState => { 535 | const stateChanges = { 536 | selectionDragStart: { 537 | x: mouseX + document.body.scrollLeft, 538 | y: mouseY + document.body.scrollTop, 539 | }, 540 | selectedRows: prevState.selectedRows, 541 | selectedColumns: prevState.selectedColumns, 542 | } 543 | stateChanges.selectedRows[clickRef.objectId] = true 544 | stateChanges.selectedColumns[clickRef.columnKey] = true 545 | return stateChanges 546 | }) 547 | } 548 | } 549 | 550 | this.closeActions() 551 | } 552 | handleMouseMove = (event) => { 553 | if (this.state.selectionDragStart !== null) { 554 | let mouseX = event.clientX + document.body.scrollLeft 555 | let mouseY = event.clientY + document.body.scrollTop 556 | this.setState(prevState => { 557 | let tableBounds = this.table.getBoundingClientRect() 558 | return { 559 | selectedColumns: this.getDraggedColumns(prevState.selectionDragStart.x, mouseX, tableBounds), 560 | selectedRows: this.getDraggedRows(prevState.selectionDragStart.y, mouseY, tableBounds), 561 | selectedColumnsRight: true, 562 | selectedRowsDown: true, 563 | } 564 | }) 565 | } 566 | } 567 | handleMouseUp = (event) => { 568 | if (this.state.selectionDragStart !== null) { 569 | let mouseX = event.clientX + document.body.scrollLeft 570 | let mouseY = event.clientY + document.body.scrollTop 571 | this.setState(prevState => { 572 | let tableBounds = this.table.getBoundingClientRect() 573 | return { 574 | selectedColumnsRight: (prevState.selectionDragStart.x < mouseX), 575 | selectedRowsDown: (prevState.selectionDragStart.y < mouseY), 576 | selectedColumns: this.getDraggedColumns(prevState.selectionDragStart.x, mouseX, tableBounds), 577 | selectedRows: this.getDraggedRows(prevState.selectionDragStart.y, mouseY, tableBounds), 578 | selectionDragStart: null, 579 | } 580 | }) 581 | } 582 | } 583 | handleCopy(event) { 584 | let clipboardData = event.originalEvent.clipboardData 585 | if (clipboardData) clipboardData.clearData() 586 | let cellsData = [] 587 | for (let rowIndex = 0; rowIndex < this.props.objects.length; rowIndex++) { 588 | let row = this.props.objects[rowIndex] 589 | if (Object.keys(this.state.selectedRows).length > 0 && typeof this.state.selectedRows[row.id] === 'undefined') { 590 | continue 591 | } 592 | let cellRow = [] 593 | for (let columnIndex = 0; columnIndex < this.props.columns.length; columnIndex++) { 594 | let column = this.props.columns[columnIndex] 595 | if (Object.keys(this.state.selectedColumns).length > 0 && typeof this.state.selectedColumns[column.key] === 'undefined') { 596 | continue 597 | } 598 | cellRow.push(row[column.key]) 599 | } 600 | cellsData.push(cellRow) 601 | } 602 | 603 | let longestColumns = [] 604 | for (let rowIndex = 0; rowIndex < cellsData.length; rowIndex++) { 605 | for (let columnIndex = 0; columnIndex < cellsData[rowIndex].length; columnIndex++) { 606 | let stringVal = stringValue(cellsData[rowIndex][columnIndex]) 607 | 608 | if (typeof longestColumns[columnIndex] === 'undefined' || longestColumns[columnIndex] < stringVal.length) { 609 | longestColumns[columnIndex] = stringVal.length 610 | } 611 | } 612 | } 613 | 614 | let csvData = '' 615 | for (let rowIndex = 0; rowIndex < cellsData.length; rowIndex++) { 616 | for (let columnIndex = 0; columnIndex < cellsData[rowIndex].length; columnIndex++) { 617 | let stringVal = stringValue(cellsData[rowIndex][columnIndex]) 618 | // let wrapQuotes = (stringVal.indexOf(',') != -1) 619 | let wrapQuotes = false 620 | if (wrapQuotes) csvData += '"' 621 | csvData += stringVal.replace('\t', ' ') 622 | if (wrapQuotes) csvData += '"' 623 | if (columnIndex !== (cellsData[rowIndex].length - 1)) csvData += '\t' 624 | } 625 | csvData += '\n' 626 | } 627 | 628 | clipboardData.setData('text/plain', csvData) 629 | clipboardData.setData('react/object-grid', JSON.stringify(cellsData)) 630 | // clipboardData.setData('application/csv', csvData) 631 | event.preventDefault() 632 | this.setState(prevState => ({ 633 | copyingRows: prevState.selectedRows, 634 | copyingColumns: prevState.selectedColumns, 635 | })) 636 | } 637 | handlePaste(pasteData) { 638 | let raiseRowErrors = (errors, row) => { 639 | let numErrors = Object.keys(errors).length 640 | if (numErrors) { 641 | let message 642 | if (numErrors > 1) { 643 | message = 'Invalid values given for ' 644 | } else { 645 | message = 'Invalid value given for ' 646 | } 647 | for (let columnKey in errors) { 648 | message += columnKey 649 | message += ', ' 650 | } 651 | message = message.substring(0, message.length - 2) 652 | message += '.' 653 | this.props.onRowError(row, message) 654 | } 655 | } 656 | 657 | // console.log('handling a paste of', pasteData) 658 | let numSelectedRows = Object.keys(this.state.selectedRows).length 659 | let numSelectedColumns = Object.keys(this.state.selectedColumns).length 660 | if (numSelectedRows === 1 && numSelectedColumns === 1) { 661 | let objectUpdates = [] 662 | 663 | let newSelectionColumns = {} 664 | let newSelectionRows = {} 665 | 666 | let pastingRow = false 667 | let pastingRowIndex = 0 668 | for (let rowIndex = 0; rowIndex < this.props.objects.length; rowIndex++) { 669 | let row = this.props.objects[rowIndex] 670 | if (!pastingRow && typeof this.state.selectedRows[row.id] === 'undefined') { 671 | continue 672 | } 673 | pastingRow = true 674 | if (pastingRowIndex < pasteData.length) { 675 | newSelectionRows[row.id] = true 676 | let pastingColumn = false 677 | let pastingColumnIndex = 0 678 | let updates = {} 679 | let errors = {} 680 | for (let columnIndex = 0; columnIndex < this.props.columns.length; columnIndex++) { 681 | let column = this.props.columns[columnIndex] 682 | if (!pastingColumn && typeof this.state.selectedColumns[column.key] === 'undefined') { 683 | continue 684 | } 685 | pastingColumn = true 686 | if (pastingColumnIndex < pasteData[pastingRowIndex].length) { 687 | newSelectionColumns[column.key] = true 688 | if (!row.disabled && cellIsEditable(row.id, column)) { 689 | let editor = column.editor || TextEditor 690 | let validated = editor.validate( 691 | pasteData[pastingRowIndex][pastingColumnIndex], 692 | column.editorProps || {} 693 | ) 694 | if (validated.valid) { 695 | updates[column.key] = validated.cleanedValue 696 | } else { 697 | errors[column.key] = true 698 | } 699 | } 700 | pastingColumnIndex++ 701 | } 702 | } 703 | if (Object.keys(updates).length) { 704 | objectUpdates.push([row.id, updates]) 705 | } 706 | raiseRowErrors(errors, row) 707 | pastingRowIndex++ 708 | } 709 | } 710 | this.updateManyObjects(objectUpdates) 711 | this.changeSelectionTo(newSelectionRows, newSelectionColumns) 712 | } else { 713 | let objectUpdates = [] 714 | 715 | let pasteRow = 0 716 | let pasteColumn = 0 717 | for (let rowIndex = 0; rowIndex < this.props.objects.length; rowIndex++) { 718 | let row = this.props.objects[rowIndex] 719 | if (typeof this.state.selectedRows[row.id] === 'undefined') { 720 | continue 721 | } 722 | let updates = {} 723 | let errors = {} 724 | for (let columnIndex = 0; columnIndex < this.props.columns.length; columnIndex++) { 725 | let column = this.props.columns[columnIndex] 726 | if (typeof this.state.selectedColumns[column.key] === 'undefined') { 727 | continue 728 | } 729 | if (!row.disabled && cellIsEditable(row.id, column)) { 730 | let editor = column.editor || TextEditor 731 | let validated = editor.validate( 732 | pasteData[pasteRow][pasteColumn], 733 | column.editorProps || {} 734 | ) 735 | if (validated.valid) { 736 | updates[column.key] = validated.cleanedValue 737 | } else { 738 | errors[column.key] = true 739 | } 740 | } 741 | pasteColumn++ 742 | if (pasteColumn >= pasteData[pasteRow].length) pasteColumn = 0 743 | } 744 | pasteColumn = 0 745 | if (Object.keys(updates).length) { 746 | objectUpdates.push([row.id, updates]) 747 | } 748 | raiseRowErrors(errors, row) 749 | pasteRow++ 750 | if (pasteRow >= pasteData.length) pasteRow = 0 751 | } 752 | 753 | this.updateManyObjects(objectUpdates) 754 | } 755 | this.setState({copyingColumns: {}, copyingRows: {}}) 756 | } 757 | 758 | abortField = (action) => { 759 | this.setState({editing: null}) 760 | } 761 | updateField = (objectId, columnKey, newValue, action) => { 762 | let updates = {} 763 | updates[columnKey] = newValue 764 | this.updateObject(objectId, updates) 765 | 766 | let updateAction = action 767 | this.setState(prevState => { 768 | const stateChanges = {editing: null} 769 | if (dictCount(prevState.selectedRows) === 1 && dictCount(prevState.selectedColumns) === 1) { 770 | switch (updateAction) { 771 | case 'nextRow': 772 | stateChanges.selectedRows = {} 773 | stateChanges.selectedRows[this.getSelectedNextVisibleRow()] = true 774 | break 775 | 776 | case 'nextColumn': 777 | stateChanges.selectedColumns = {} 778 | stateChanges.selectedColumns[this.getSelectedNextVisibleColumn()] = true 779 | break 780 | } 781 | } 782 | return stateChanges 783 | }) 784 | } 785 | updateManyObjects(updates) { 786 | if (typeof this.props.onUpdateMany === 'function') { 787 | this.props.onUpdateMany(updates) 788 | } else { 789 | for (let updateId = 0; updateId < updates.length; updateId++) { 790 | let update = updates[updateId] 791 | this.updateObject(update[0], update[1]) 792 | } 793 | } 794 | } 795 | updateObject(objectId, updates) { 796 | if (typeof this.props.onUpdate === 'function') { 797 | this.props.onUpdate(objectId, updates) 798 | } else { 799 | console.log('If I had a props.onUpdate, I would update object', objectId, 'with', updates) 800 | } 801 | } 802 | openActions = (id) => { 803 | this.setState({openActions: id}) 804 | } 805 | closeActions = () => { 806 | if (this.state.openActions === null) { 807 | return 808 | } 809 | this.setState({openActions: null}) 810 | } 811 | 812 | moveSelectionTo(row, column) { 813 | let newRows = {} 814 | let newColumns = {} 815 | newRows[row] = true 816 | newColumns[column] = true 817 | this.changeSelectionTo(newRows, newColumns) 818 | } 819 | changeSelectionTo(rows, columns) { 820 | let newRows = rows 821 | let newColumns = columns 822 | 823 | let down 824 | if (Object.keys(this.state.selectedRows).length === 1 && Object.keys(newRows).length > 1) { 825 | down = false 826 | let oldRow = dictFirstKey(this.state.selectedRows) 827 | for (let rowIndex = 0; rowIndex < this.props.objects.length; rowIndex++) { 828 | let row = this.props.objects[rowIndex] 829 | if (row.id === oldRow) { 830 | down = true 831 | break 832 | } 833 | if (typeof newRows[row.id] !== 'undefined') { 834 | break 835 | } 836 | } 837 | } 838 | if (Object.keys(newRows).length <= 1) { 839 | down = true 840 | } 841 | 842 | let right 843 | if (Object.keys(this.state.selectedColumns).length === 1 && Object.keys(newColumns).length > 1) { 844 | right = false 845 | let oldColumn = dictFirstKey(this.state.selectedColumns) 846 | for (let columnIndex = 0; columnIndex < this.props.columns.length; columnIndex++) { 847 | let column = this.props.columns[columnIndex] 848 | if (column.key === oldColumn) { 849 | right = true 850 | break 851 | } 852 | if (typeof newColumns[column.key] !== 'undefined') { 853 | break 854 | } 855 | } 856 | } 857 | if (Object.keys(newColumns).length <= 1) { 858 | right = true 859 | } 860 | 861 | this.setState(() => { 862 | const stateChanges = { 863 | selectedRows: newRows, 864 | selectedColumns: newColumns, 865 | } 866 | if (typeof down !== 'undefined') stateChanges.selectedRowsDown = down 867 | if (typeof right !== 'undefined') stateChanges.selectedColumnsRight = right 868 | return stateChanges 869 | }) 870 | } 871 | 872 | renderHeaders() { 873 | let columns = [] 874 | this.props.columns.map((column) => { 875 | let headerProps = { 876 | ref: `header-${column.key}`, 877 | key: `header-${column.key}`, 878 | style: { 879 | height: `${this.props.rowHeight}px`, 880 | }, 881 | } 882 | if (column.width) headerProps.width = column.width 883 | columns.push( 884 | 888 | {column.name} 889 | 890 | ) 891 | }) 892 | 893 | if (this.props.actions && this.props.actions.length) { 894 | columns.push( 895 | { this.actions = el }} 897 | key="actions" 898 | className="actions" 899 | width={25} 900 | /> 901 | ) 902 | } 903 | 904 | return ( 905 | {columns} 906 | ) 907 | } 908 | renderRows() { 909 | let numSelectedRows = Object.keys(this.state.selectedRows).length 910 | let numCopyingRows = Object.keys(this.state.copyingRows).length 911 | let rows = [] 912 | 913 | this.props.objects.map((object) => { 914 | let ref = `object-${object.id}` 915 | 916 | let selectedColumns = {} 917 | if (numSelectedRows === 0 || typeof this.state.selectedRows[object.id] !== 'undefined') { 918 | selectedColumns = this.state.selectedColumns 919 | } 920 | let copyingColumns = {} 921 | if (numCopyingRows === 0 || typeof this.state.copyingRows[object.id] !== 'undefined') { 922 | copyingColumns = this.state.copyingColumns 923 | } 924 | 925 | let editing = null 926 | if (this.state.editing !== null && this.state.editing.objectId === object.id) { 927 | editing = this.state.editing 928 | } 929 | 930 | rows.push( 931 | 957 | ) 958 | }) 959 | 960 | if (!rows.length) { 961 | let numColumns = this.props.columns.length 962 | if (this.props.actions && this.props.actions.length) numColumns += 1 963 | return ( 964 | 965 | 966 | {this.props.emptyText} 967 | 968 | 969 | ) 970 | } 971 | return rows 972 | } 973 | render() { 974 | let classes = ClassNames('', { 975 | 'editing': (this.state.editing !== null), 976 | }) 977 | return ( 978 |
    979 | { this.table = el }} 981 | tabIndex="1" 982 | className={classes} 983 | > 984 | 985 | {this.renderHeaders()} 986 | 987 | 988 | {this.renderRows()} 989 | 990 |
    991 |
    992 | ) 993 | } 994 | } 995 | 996 | export default ObjectTable 997 | export { ObjectCell, ObjectRow, BaseEditor, TextEditor, TextDrawer } 998 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@7.12.11": 6 | version "7.12.11" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" 8 | integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== 9 | dependencies: 10 | "@babel/highlight" "^7.10.4" 11 | 12 | "@babel/helper-validator-identifier@^7.14.0": 13 | version "7.14.0" 14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288" 15 | integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A== 16 | 17 | "@babel/highlight@^7.10.4": 18 | version "7.14.0" 19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.0.tgz#3197e375711ef6bf834e67d0daec88e4f46113cf" 20 | integrity sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg== 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.14.0" 23 | chalk "^2.0.0" 24 | js-tokens "^4.0.0" 25 | 26 | "@eslint/eslintrc@^0.4.2": 27 | version "0.4.2" 28 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.2.tgz#f63d0ef06f5c0c57d76c4ab5f63d3835c51b0179" 29 | integrity sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg== 30 | dependencies: 31 | ajv "^6.12.4" 32 | debug "^4.1.1" 33 | espree "^7.3.0" 34 | globals "^13.9.0" 35 | ignore "^4.0.6" 36 | import-fresh "^3.2.1" 37 | js-yaml "^3.13.1" 38 | minimatch "^3.0.4" 39 | strip-json-comments "^3.1.1" 40 | 41 | "@nodelib/fs.scandir@2.1.5": 42 | version "2.1.5" 43 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 44 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 45 | dependencies: 46 | "@nodelib/fs.stat" "2.0.5" 47 | run-parallel "^1.1.9" 48 | 49 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 50 | version "2.0.5" 51 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 52 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 53 | 54 | "@nodelib/fs.walk@^1.2.3": 55 | version "1.2.7" 56 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz#94c23db18ee4653e129abd26fb06f870ac9e1ee2" 57 | integrity sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA== 58 | dependencies: 59 | "@nodelib/fs.scandir" "2.1.5" 60 | fastq "^1.6.0" 61 | 62 | "@types/json-schema@^7.0.7": 63 | version "7.0.7" 64 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" 65 | integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== 66 | 67 | "@types/json5@^0.0.29": 68 | version "0.0.29" 69 | resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" 70 | integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= 71 | 72 | "@typescript-eslint/eslint-plugin@^4.26.0": 73 | version "4.26.0" 74 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.26.0.tgz#12bbd6ebd5e7fabd32e48e1e60efa1f3554a3242" 75 | integrity sha512-yA7IWp+5Qqf+TLbd8b35ySFOFzUfL7i+4If50EqvjT6w35X8Lv0eBHb6rATeWmucks37w+zV+tWnOXI9JlG6Eg== 76 | dependencies: 77 | "@typescript-eslint/experimental-utils" "4.26.0" 78 | "@typescript-eslint/scope-manager" "4.26.0" 79 | debug "^4.3.1" 80 | functional-red-black-tree "^1.0.1" 81 | lodash "^4.17.21" 82 | regexpp "^3.1.0" 83 | semver "^7.3.5" 84 | tsutils "^3.21.0" 85 | 86 | "@typescript-eslint/experimental-utils@4.26.0": 87 | version "4.26.0" 88 | resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.26.0.tgz#ba7848b3f088659cdf71bce22454795fc55be99a" 89 | integrity sha512-TH2FO2rdDm7AWfAVRB5RSlbUhWxGVuxPNzGT7W65zVfl8H/WeXTk1e69IrcEVsBslrQSTDKQSaJD89hwKrhdkw== 90 | dependencies: 91 | "@types/json-schema" "^7.0.7" 92 | "@typescript-eslint/scope-manager" "4.26.0" 93 | "@typescript-eslint/types" "4.26.0" 94 | "@typescript-eslint/typescript-estree" "4.26.0" 95 | eslint-scope "^5.1.1" 96 | eslint-utils "^3.0.0" 97 | 98 | "@typescript-eslint/parser@^4.26.0": 99 | version "4.26.0" 100 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.26.0.tgz#31b6b732c9454f757b020dab9b6754112aa5eeaf" 101 | integrity sha512-b4jekVJG9FfmjUfmM4VoOItQhPlnt6MPOBUL0AQbiTmm+SSpSdhHYlwayOm4IW9KLI/4/cRKtQCmDl1oE2OlPg== 102 | dependencies: 103 | "@typescript-eslint/scope-manager" "4.26.0" 104 | "@typescript-eslint/types" "4.26.0" 105 | "@typescript-eslint/typescript-estree" "4.26.0" 106 | debug "^4.3.1" 107 | 108 | "@typescript-eslint/scope-manager@4.26.0": 109 | version "4.26.0" 110 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.26.0.tgz#60d1a71df162404e954b9d1c6343ff3bee496194" 111 | integrity sha512-G6xB6mMo4xVxwMt5lEsNTz3x4qGDt0NSGmTBNBPJxNsrTXJSm21c6raeYroS2OwQsOyIXqKZv266L/Gln1BWqg== 112 | dependencies: 113 | "@typescript-eslint/types" "4.26.0" 114 | "@typescript-eslint/visitor-keys" "4.26.0" 115 | 116 | "@typescript-eslint/types@4.26.0": 117 | version "4.26.0" 118 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.26.0.tgz#7c6732c0414f0a69595f4f846ebe12616243d546" 119 | integrity sha512-rADNgXl1kS/EKnDr3G+m7fB9yeJNnR9kF7xMiXL6mSIWpr3Wg5MhxyfEXy/IlYthsqwBqHOr22boFbf/u6O88A== 120 | 121 | "@typescript-eslint/typescript-estree@4.26.0": 122 | version "4.26.0" 123 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.26.0.tgz#aea17a40e62dc31c63d5b1bbe9a75783f2ce7109" 124 | integrity sha512-GHUgahPcm9GfBuy3TzdsizCcPjKOAauG9xkz9TR8kOdssz2Iz9jRCSQm6+aVFa23d5NcSpo1GdHGSQKe0tlcbg== 125 | dependencies: 126 | "@typescript-eslint/types" "4.26.0" 127 | "@typescript-eslint/visitor-keys" "4.26.0" 128 | debug "^4.3.1" 129 | globby "^11.0.3" 130 | is-glob "^4.0.1" 131 | semver "^7.3.5" 132 | tsutils "^3.21.0" 133 | 134 | "@typescript-eslint/visitor-keys@4.26.0": 135 | version "4.26.0" 136 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.26.0.tgz#26d2583169222815be4dcd1da4fe5459bc3bcc23" 137 | integrity sha512-cw4j8lH38V1ycGBbF+aFiLUls9Z0Bw8QschP3mkth50BbWzgFS33ISIgBzUMuQ2IdahoEv/rXstr8Zhlz4B1Zg== 138 | dependencies: 139 | "@typescript-eslint/types" "4.26.0" 140 | eslint-visitor-keys "^2.0.0" 141 | 142 | abbrev@1: 143 | version "1.1.1" 144 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 145 | 146 | acorn-jsx@^5.3.1: 147 | version "5.3.1" 148 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" 149 | integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== 150 | 151 | acorn@^7.4.0: 152 | version "7.4.1" 153 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" 154 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== 155 | 156 | ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: 157 | version "6.12.6" 158 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 159 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 160 | dependencies: 161 | fast-deep-equal "^3.1.1" 162 | fast-json-stable-stringify "^2.0.0" 163 | json-schema-traverse "^0.4.1" 164 | uri-js "^4.2.2" 165 | 166 | ajv@^8.0.1: 167 | version "8.6.0" 168 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.0.tgz#60cc45d9c46a477d80d92c48076d972c342e5720" 169 | integrity sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ== 170 | dependencies: 171 | fast-deep-equal "^3.1.1" 172 | json-schema-traverse "^1.0.0" 173 | require-from-string "^2.0.2" 174 | uri-js "^4.2.2" 175 | 176 | amdefine@>=0.0.4: 177 | version "1.0.1" 178 | resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" 179 | 180 | ansi-colors@^4.1.1: 181 | version "4.1.1" 182 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 183 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 184 | 185 | ansi-regex@^2.0.0: 186 | version "2.1.1" 187 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 188 | 189 | ansi-regex@^4.1.0: 190 | version "4.1.0" 191 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 192 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 193 | 194 | ansi-regex@^5.0.0: 195 | version "5.0.0" 196 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" 197 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== 198 | 199 | ansi-styles@^2.2.1: 200 | version "2.2.1" 201 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 202 | 203 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 204 | version "3.2.1" 205 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 206 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 207 | dependencies: 208 | color-convert "^1.9.0" 209 | 210 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 211 | version "4.3.0" 212 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 213 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 214 | dependencies: 215 | color-convert "^2.0.1" 216 | 217 | aproba@^1.0.3: 218 | version "1.2.0" 219 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" 220 | 221 | are-we-there-yet@~1.1.2: 222 | version "1.1.4" 223 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" 224 | dependencies: 225 | delegates "^1.0.0" 226 | readable-stream "^2.0.6" 227 | 228 | argparse@^1.0.7: 229 | version "1.0.9" 230 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" 231 | dependencies: 232 | sprintf-js "~1.0.2" 233 | 234 | array-find-index@^1.0.1: 235 | version "1.0.2" 236 | resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" 237 | 238 | array-includes@^3.1.2, array-includes@^3.1.3: 239 | version "3.1.3" 240 | resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" 241 | integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== 242 | dependencies: 243 | call-bind "^1.0.2" 244 | define-properties "^1.1.3" 245 | es-abstract "^1.18.0-next.2" 246 | get-intrinsic "^1.1.1" 247 | is-string "^1.0.5" 248 | 249 | array-union@^2.1.0: 250 | version "2.1.0" 251 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 252 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 253 | 254 | array.prototype.flat@^1.2.4: 255 | version "1.2.4" 256 | resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" 257 | integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== 258 | dependencies: 259 | call-bind "^1.0.0" 260 | define-properties "^1.1.3" 261 | es-abstract "^1.18.0-next.1" 262 | 263 | array.prototype.flatmap@^1.2.4: 264 | version "1.2.4" 265 | resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" 266 | integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== 267 | dependencies: 268 | call-bind "^1.0.0" 269 | define-properties "^1.1.3" 270 | es-abstract "^1.18.0-next.1" 271 | function-bind "^1.1.1" 272 | 273 | asn1@~0.2.3: 274 | version "0.2.3" 275 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" 276 | 277 | assert-plus@1.0.0, assert-plus@^1.0.0: 278 | version "1.0.0" 279 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 280 | 281 | astral-regex@^2.0.0: 282 | version "2.0.0" 283 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" 284 | integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== 285 | 286 | async-foreach@^0.1.3: 287 | version "0.1.3" 288 | resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" 289 | 290 | asynckit@^0.4.0: 291 | version "0.4.0" 292 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 293 | 294 | aws-sign2@~0.7.0: 295 | version "0.7.0" 296 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 297 | 298 | aws4@^1.8.0: 299 | version "1.11.0" 300 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" 301 | integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== 302 | 303 | balanced-match@^1.0.0: 304 | version "1.0.0" 305 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 306 | 307 | bcrypt-pbkdf@^1.0.0: 308 | version "1.0.1" 309 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" 310 | dependencies: 311 | tweetnacl "^0.14.3" 312 | 313 | brace-expansion@^1.1.7: 314 | version "1.1.8" 315 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" 316 | dependencies: 317 | balanced-match "^1.0.0" 318 | concat-map "0.0.1" 319 | 320 | braces@^3.0.1: 321 | version "3.0.2" 322 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 323 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 324 | dependencies: 325 | fill-range "^7.0.1" 326 | 327 | builtin-modules@^1.0.0: 328 | version "1.1.1" 329 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 330 | 331 | call-bind@^1.0.0, call-bind@^1.0.2: 332 | version "1.0.2" 333 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" 334 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 335 | dependencies: 336 | function-bind "^1.1.1" 337 | get-intrinsic "^1.0.2" 338 | 339 | callsites@^3.0.0: 340 | version "3.1.0" 341 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 342 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 343 | 344 | camelcase-keys@^2.0.0: 345 | version "2.1.0" 346 | resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" 347 | dependencies: 348 | camelcase "^2.0.0" 349 | map-obj "^1.0.0" 350 | 351 | camelcase@^2.0.0: 352 | version "2.1.1" 353 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" 354 | 355 | camelcase@^5.0.0: 356 | version "5.3.1" 357 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 358 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 359 | 360 | caseless@~0.12.0: 361 | version "0.12.0" 362 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 363 | 364 | chalk@^1.1.1: 365 | version "1.1.3" 366 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 367 | dependencies: 368 | ansi-styles "^2.2.1" 369 | escape-string-regexp "^1.0.2" 370 | has-ansi "^2.0.0" 371 | strip-ansi "^3.0.0" 372 | supports-color "^2.0.0" 373 | 374 | chalk@^2.0.0: 375 | version "2.4.2" 376 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 377 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 378 | dependencies: 379 | ansi-styles "^3.2.1" 380 | escape-string-regexp "^1.0.5" 381 | supports-color "^5.3.0" 382 | 383 | chalk@^4.0.0: 384 | version "4.1.1" 385 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" 386 | integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== 387 | dependencies: 388 | ansi-styles "^4.1.0" 389 | supports-color "^7.1.0" 390 | 391 | chownr@^2.0.0: 392 | version "2.0.0" 393 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" 394 | integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== 395 | 396 | classnames@^2.3.1: 397 | version "2.3.1" 398 | resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" 399 | integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== 400 | 401 | cliui@^5.0.0: 402 | version "5.0.0" 403 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" 404 | integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== 405 | dependencies: 406 | string-width "^3.1.0" 407 | strip-ansi "^5.2.0" 408 | wrap-ansi "^5.1.0" 409 | 410 | clone@^2.1.2: 411 | version "2.1.2" 412 | resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" 413 | integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= 414 | 415 | code-point-at@^1.0.0: 416 | version "1.1.0" 417 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 418 | 419 | color-convert@^1.9.0: 420 | version "1.9.3" 421 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 422 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 423 | dependencies: 424 | color-name "1.1.3" 425 | 426 | color-convert@^2.0.1: 427 | version "2.0.1" 428 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 429 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 430 | dependencies: 431 | color-name "~1.1.4" 432 | 433 | color-name@1.1.3: 434 | version "1.1.3" 435 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 436 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 437 | 438 | color-name@~1.1.4: 439 | version "1.1.4" 440 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 441 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 442 | 443 | combined-stream@^1.0.6, combined-stream@~1.0.6: 444 | version "1.0.8" 445 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 446 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 447 | dependencies: 448 | delayed-stream "~1.0.0" 449 | 450 | concat-map@0.0.1: 451 | version "0.0.1" 452 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 453 | 454 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 455 | version "1.1.0" 456 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 457 | 458 | core-util-is@1.0.2, core-util-is@~1.0.0: 459 | version "1.0.2" 460 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 461 | 462 | cross-spawn@^7.0.2, cross-spawn@^7.0.3: 463 | version "7.0.3" 464 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 465 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 466 | dependencies: 467 | path-key "^3.1.0" 468 | shebang-command "^2.0.0" 469 | which "^2.0.1" 470 | 471 | currently-unhandled@^0.4.1: 472 | version "0.4.1" 473 | resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" 474 | dependencies: 475 | array-find-index "^1.0.1" 476 | 477 | dashdash@^1.12.0: 478 | version "1.14.1" 479 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 480 | dependencies: 481 | assert-plus "^1.0.0" 482 | 483 | debug@^2.6.9: 484 | version "2.6.9" 485 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 486 | dependencies: 487 | ms "2.0.0" 488 | 489 | debug@^3.2.7: 490 | version "3.2.7" 491 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" 492 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 493 | dependencies: 494 | ms "^2.1.1" 495 | 496 | debug@^4.0.1, debug@^4.1.1, debug@^4.3.1: 497 | version "4.3.1" 498 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" 499 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== 500 | dependencies: 501 | ms "2.1.2" 502 | 503 | decamelize@^1.1.2, decamelize@^1.2.0: 504 | version "1.2.0" 505 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 506 | 507 | deep-is@^0.1.3: 508 | version "0.1.3" 509 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 510 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 511 | 512 | define-properties@^1.1.3: 513 | version "1.1.3" 514 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 515 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 516 | dependencies: 517 | object-keys "^1.0.12" 518 | 519 | delayed-stream@~1.0.0: 520 | version "1.0.0" 521 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 522 | 523 | delegates@^1.0.0: 524 | version "1.0.0" 525 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 526 | 527 | dir-glob@^3.0.1: 528 | version "3.0.1" 529 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 530 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 531 | dependencies: 532 | path-type "^4.0.0" 533 | 534 | doctrine@^2.1.0: 535 | version "2.1.0" 536 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" 537 | integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== 538 | dependencies: 539 | esutils "^2.0.2" 540 | 541 | doctrine@^3.0.0: 542 | version "3.0.0" 543 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 544 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 545 | dependencies: 546 | esutils "^2.0.2" 547 | 548 | ecc-jsbn@~0.1.1: 549 | version "0.1.1" 550 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" 551 | dependencies: 552 | jsbn "~0.1.0" 553 | 554 | emoji-regex@^7.0.1: 555 | version "7.0.3" 556 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 557 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 558 | 559 | emoji-regex@^8.0.0: 560 | version "8.0.0" 561 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 562 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 563 | 564 | enquirer@^2.3.5: 565 | version "2.3.6" 566 | resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" 567 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== 568 | dependencies: 569 | ansi-colors "^4.1.1" 570 | 571 | env-paths@^2.2.0: 572 | version "2.2.1" 573 | resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" 574 | integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== 575 | 576 | error-ex@^1.2.0: 577 | version "1.3.1" 578 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" 579 | dependencies: 580 | is-arrayish "^0.2.1" 581 | 582 | error-ex@^1.3.1: 583 | version "1.3.2" 584 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 585 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 586 | dependencies: 587 | is-arrayish "^0.2.1" 588 | 589 | es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: 590 | version "1.18.3" 591 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" 592 | integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== 593 | dependencies: 594 | call-bind "^1.0.2" 595 | es-to-primitive "^1.2.1" 596 | function-bind "^1.1.1" 597 | get-intrinsic "^1.1.1" 598 | has "^1.0.3" 599 | has-symbols "^1.0.2" 600 | is-callable "^1.2.3" 601 | is-negative-zero "^2.0.1" 602 | is-regex "^1.1.3" 603 | is-string "^1.0.6" 604 | object-inspect "^1.10.3" 605 | object-keys "^1.1.1" 606 | object.assign "^4.1.2" 607 | string.prototype.trimend "^1.0.4" 608 | string.prototype.trimstart "^1.0.4" 609 | unbox-primitive "^1.0.1" 610 | 611 | es-to-primitive@^1.2.1: 612 | version "1.2.1" 613 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" 614 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 615 | dependencies: 616 | is-callable "^1.1.4" 617 | is-date-object "^1.0.1" 618 | is-symbol "^1.0.2" 619 | 620 | esbuild-node-externals@^1.2.0: 621 | version "1.2.0" 622 | resolved "https://registry.yarnpkg.com/esbuild-node-externals/-/esbuild-node-externals-1.2.0.tgz#7bdbc370b0e983737c3807dea377d7b08ac55f14" 623 | integrity sha512-miyxgCJrAGp86WZX080EF+3eHsey8vJTfQEOZ3+oCmAm0FrlQSg4SPr2XHSi6kVFQJD/iqaF81ub3hz4WQca2A== 624 | dependencies: 625 | find-up "5.0.0" 626 | tslib "2.1.0" 627 | 628 | esbuild@^0.12.5: 629 | version "0.12.6" 630 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.12.6.tgz#85bc755c7cf3005d4f34b4f10f98049ce0ee67ce" 631 | integrity sha512-RDvVLvAjsq/kIZJoneMiUOH7EE7t2QaW7T3Q7EdQij14+bZbDq5sndb0tTanmHIFSqZVMBMMyqzVHkS3dJobeA== 632 | 633 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 634 | version "1.0.5" 635 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 636 | 637 | escape-string-regexp@^4.0.0: 638 | version "4.0.0" 639 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 640 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 641 | 642 | eslint-config-standard-react@*: 643 | version "11.0.1" 644 | resolved "https://registry.yarnpkg.com/eslint-config-standard-react/-/eslint-config-standard-react-11.0.1.tgz#1f488e0062c1e21c4c8584551619f11750658f55" 645 | integrity sha512-4WlBynOqBZJRaX81CBcIGDHqUiqxvw4j/DbEIICz8QkMs3xEncoPgAoysiqCSsg71X92uhaBc8sgqB96smaMmg== 646 | 647 | eslint-config-standard@*: 648 | version "16.0.3" 649 | resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz#6c8761e544e96c531ff92642eeb87842b8488516" 650 | integrity sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg== 651 | 652 | eslint-import-resolver-node@^0.3.4: 653 | version "0.3.4" 654 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" 655 | integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== 656 | dependencies: 657 | debug "^2.6.9" 658 | resolve "^1.13.1" 659 | 660 | eslint-module-utils@^2.6.1: 661 | version "2.6.1" 662 | resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz#b51be1e473dd0de1c5ea638e22429c2490ea8233" 663 | integrity sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A== 664 | dependencies: 665 | debug "^3.2.7" 666 | pkg-dir "^2.0.0" 667 | 668 | eslint-plugin-es@^3.0.0: 669 | version "3.0.1" 670 | resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" 671 | integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== 672 | dependencies: 673 | eslint-utils "^2.0.0" 674 | regexpp "^3.0.0" 675 | 676 | eslint-plugin-import@*: 677 | version "2.23.4" 678 | resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz#8dceb1ed6b73e46e50ec9a5bb2411b645e7d3d97" 679 | integrity sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ== 680 | dependencies: 681 | array-includes "^3.1.3" 682 | array.prototype.flat "^1.2.4" 683 | debug "^2.6.9" 684 | doctrine "^2.1.0" 685 | eslint-import-resolver-node "^0.3.4" 686 | eslint-module-utils "^2.6.1" 687 | find-up "^2.0.0" 688 | has "^1.0.3" 689 | is-core-module "^2.4.0" 690 | minimatch "^3.0.4" 691 | object.values "^1.1.3" 692 | pkg-up "^2.0.0" 693 | read-pkg-up "^3.0.0" 694 | resolve "^1.20.0" 695 | tsconfig-paths "^3.9.0" 696 | 697 | eslint-plugin-node@*: 698 | version "11.1.0" 699 | resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d" 700 | integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== 701 | dependencies: 702 | eslint-plugin-es "^3.0.0" 703 | eslint-utils "^2.0.0" 704 | ignore "^5.1.1" 705 | minimatch "^3.0.4" 706 | resolve "^1.10.1" 707 | semver "^6.1.0" 708 | 709 | eslint-plugin-promise@*: 710 | version "5.1.0" 711 | resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-5.1.0.tgz#fb2188fb734e4557993733b41aa1a688f46c6f24" 712 | integrity sha512-NGmI6BH5L12pl7ScQHbg7tvtk4wPxxj8yPHH47NvSmMtFneC077PSeY3huFj06ZWZvtbfxSPt3RuOQD5XcR4ng== 713 | 714 | eslint-plugin-react@*: 715 | version "7.24.0" 716 | resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz#eadedfa351a6f36b490aa17f4fa9b14e842b9eb4" 717 | integrity sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q== 718 | dependencies: 719 | array-includes "^3.1.3" 720 | array.prototype.flatmap "^1.2.4" 721 | doctrine "^2.1.0" 722 | has "^1.0.3" 723 | jsx-ast-utils "^2.4.1 || ^3.0.0" 724 | minimatch "^3.0.4" 725 | object.entries "^1.1.4" 726 | object.fromentries "^2.0.4" 727 | object.values "^1.1.4" 728 | prop-types "^15.7.2" 729 | resolve "^2.0.0-next.3" 730 | string.prototype.matchall "^4.0.5" 731 | 732 | eslint-plugin-standard@*: 733 | version "5.0.0" 734 | resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-5.0.0.tgz#c43f6925d669f177db46f095ea30be95476b1ee4" 735 | integrity sha512-eSIXPc9wBM4BrniMzJRBm2uoVuXz2EPa+NXPk2+itrVt+r5SbKFERx/IgrK/HmfjddyKVz2f+j+7gBRvu19xLg== 736 | 737 | eslint-scope@^5.1.1: 738 | version "5.1.1" 739 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 740 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 741 | dependencies: 742 | esrecurse "^4.3.0" 743 | estraverse "^4.1.1" 744 | 745 | eslint-utils@^2.0.0, eslint-utils@^2.1.0: 746 | version "2.1.0" 747 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" 748 | integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== 749 | dependencies: 750 | eslint-visitor-keys "^1.1.0" 751 | 752 | eslint-utils@^3.0.0: 753 | version "3.0.0" 754 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" 755 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== 756 | dependencies: 757 | eslint-visitor-keys "^2.0.0" 758 | 759 | eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: 760 | version "1.3.0" 761 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" 762 | integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== 763 | 764 | eslint-visitor-keys@^2.0.0: 765 | version "2.1.0" 766 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" 767 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 768 | 769 | eslint@^7.27.0: 770 | version "7.28.0" 771 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.28.0.tgz#435aa17a0b82c13bb2be9d51408b617e49c1e820" 772 | integrity sha512-UMfH0VSjP0G4p3EWirscJEQ/cHqnT/iuH6oNZOB94nBjWbMnhGEPxsZm1eyIW0C/9jLI0Fow4W5DXLjEI7mn1g== 773 | dependencies: 774 | "@babel/code-frame" "7.12.11" 775 | "@eslint/eslintrc" "^0.4.2" 776 | ajv "^6.10.0" 777 | chalk "^4.0.0" 778 | cross-spawn "^7.0.2" 779 | debug "^4.0.1" 780 | doctrine "^3.0.0" 781 | enquirer "^2.3.5" 782 | escape-string-regexp "^4.0.0" 783 | eslint-scope "^5.1.1" 784 | eslint-utils "^2.1.0" 785 | eslint-visitor-keys "^2.0.0" 786 | espree "^7.3.1" 787 | esquery "^1.4.0" 788 | esutils "^2.0.2" 789 | fast-deep-equal "^3.1.3" 790 | file-entry-cache "^6.0.1" 791 | functional-red-black-tree "^1.0.1" 792 | glob-parent "^5.1.2" 793 | globals "^13.6.0" 794 | ignore "^4.0.6" 795 | import-fresh "^3.0.0" 796 | imurmurhash "^0.1.4" 797 | is-glob "^4.0.0" 798 | js-yaml "^3.13.1" 799 | json-stable-stringify-without-jsonify "^1.0.1" 800 | levn "^0.4.1" 801 | lodash.merge "^4.6.2" 802 | minimatch "^3.0.4" 803 | natural-compare "^1.4.0" 804 | optionator "^0.9.1" 805 | progress "^2.0.0" 806 | regexpp "^3.1.0" 807 | semver "^7.2.1" 808 | strip-ansi "^6.0.0" 809 | strip-json-comments "^3.1.0" 810 | table "^6.0.9" 811 | text-table "^0.2.0" 812 | v8-compile-cache "^2.0.3" 813 | 814 | espree@^7.3.0, espree@^7.3.1: 815 | version "7.3.1" 816 | resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" 817 | integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== 818 | dependencies: 819 | acorn "^7.4.0" 820 | acorn-jsx "^5.3.1" 821 | eslint-visitor-keys "^1.3.0" 822 | 823 | esprima@^4.0.0: 824 | version "4.0.0" 825 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" 826 | 827 | esquery@^1.4.0: 828 | version "1.4.0" 829 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" 830 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== 831 | dependencies: 832 | estraverse "^5.1.0" 833 | 834 | esrecurse@^4.3.0: 835 | version "4.3.0" 836 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 837 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 838 | dependencies: 839 | estraverse "^5.2.0" 840 | 841 | estraverse@^4.1.1: 842 | version "4.2.0" 843 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" 844 | 845 | estraverse@^5.1.0, estraverse@^5.2.0: 846 | version "5.2.0" 847 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" 848 | integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== 849 | 850 | esutils@^2.0.2: 851 | version "2.0.2" 852 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 853 | 854 | extend@~3.0.2: 855 | version "3.0.2" 856 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 857 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 858 | 859 | extsprintf@1.3.0: 860 | version "1.3.0" 861 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 862 | 863 | extsprintf@^1.2.0: 864 | version "1.4.0" 865 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" 866 | 867 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 868 | version "3.1.3" 869 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 870 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 871 | 872 | fast-glob@^3.1.1: 873 | version "3.2.5" 874 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" 875 | integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== 876 | dependencies: 877 | "@nodelib/fs.stat" "^2.0.2" 878 | "@nodelib/fs.walk" "^1.2.3" 879 | glob-parent "^5.1.0" 880 | merge2 "^1.3.0" 881 | micromatch "^4.0.2" 882 | picomatch "^2.2.1" 883 | 884 | fast-json-stable-stringify@^2.0.0: 885 | version "2.0.0" 886 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 887 | 888 | fast-levenshtein@^2.0.6: 889 | version "2.0.6" 890 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 891 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 892 | 893 | fastq@^1.6.0: 894 | version "1.11.0" 895 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" 896 | integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== 897 | dependencies: 898 | reusify "^1.0.4" 899 | 900 | file-entry-cache@^6.0.1: 901 | version "6.0.1" 902 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 903 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 904 | dependencies: 905 | flat-cache "^3.0.4" 906 | 907 | fill-range@^7.0.1: 908 | version "7.0.1" 909 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 910 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 911 | dependencies: 912 | to-regex-range "^5.0.1" 913 | 914 | find-up@5.0.0: 915 | version "5.0.0" 916 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 917 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 918 | dependencies: 919 | locate-path "^6.0.0" 920 | path-exists "^4.0.0" 921 | 922 | find-up@^1.0.0: 923 | version "1.1.2" 924 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" 925 | dependencies: 926 | path-exists "^2.0.0" 927 | pinkie-promise "^2.0.0" 928 | 929 | find-up@^2.0.0, find-up@^2.1.0: 930 | version "2.1.0" 931 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" 932 | dependencies: 933 | locate-path "^2.0.0" 934 | 935 | find-up@^3.0.0: 936 | version "3.0.0" 937 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 938 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== 939 | dependencies: 940 | locate-path "^3.0.0" 941 | 942 | flat-cache@^3.0.4: 943 | version "3.0.4" 944 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 945 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 946 | dependencies: 947 | flatted "^3.1.0" 948 | rimraf "^3.0.2" 949 | 950 | flatted@^3.1.0: 951 | version "3.1.1" 952 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" 953 | integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== 954 | 955 | forever-agent@~0.6.1: 956 | version "0.6.1" 957 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 958 | 959 | form-data@~2.3.2: 960 | version "2.3.3" 961 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" 962 | integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== 963 | dependencies: 964 | asynckit "^0.4.0" 965 | combined-stream "^1.0.6" 966 | mime-types "^2.1.12" 967 | 968 | fs-minipass@^2.0.0: 969 | version "2.1.0" 970 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" 971 | integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== 972 | dependencies: 973 | minipass "^3.0.0" 974 | 975 | fs.realpath@^1.0.0: 976 | version "1.0.0" 977 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 978 | 979 | function-bind@^1.1.1: 980 | version "1.1.1" 981 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 982 | 983 | functional-red-black-tree@^1.0.1: 984 | version "1.0.1" 985 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 986 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 987 | 988 | gauge@~2.7.3: 989 | version "2.7.4" 990 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 991 | dependencies: 992 | aproba "^1.0.3" 993 | console-control-strings "^1.0.0" 994 | has-unicode "^2.0.0" 995 | object-assign "^4.1.0" 996 | signal-exit "^3.0.0" 997 | string-width "^1.0.1" 998 | strip-ansi "^3.0.1" 999 | wide-align "^1.1.0" 1000 | 1001 | gaze@^1.0.0: 1002 | version "1.1.2" 1003 | resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.2.tgz#847224677adb8870d679257ed3388fdb61e40105" 1004 | dependencies: 1005 | globule "^1.0.0" 1006 | 1007 | get-caller-file@^2.0.1: 1008 | version "2.0.5" 1009 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 1010 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 1011 | 1012 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: 1013 | version "1.1.1" 1014 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" 1015 | integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== 1016 | dependencies: 1017 | function-bind "^1.1.1" 1018 | has "^1.0.3" 1019 | has-symbols "^1.0.1" 1020 | 1021 | get-stdin@^4.0.1: 1022 | version "4.0.1" 1023 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" 1024 | 1025 | getpass@^0.1.1: 1026 | version "0.1.7" 1027 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 1028 | dependencies: 1029 | assert-plus "^1.0.0" 1030 | 1031 | glob-parent@^5.1.0, glob-parent@^5.1.2: 1032 | version "5.1.2" 1033 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 1034 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 1035 | dependencies: 1036 | is-glob "^4.0.1" 1037 | 1038 | glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@~7.1.1: 1039 | version "7.1.2" 1040 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 1041 | dependencies: 1042 | fs.realpath "^1.0.0" 1043 | inflight "^1.0.4" 1044 | inherits "2" 1045 | minimatch "^3.0.4" 1046 | once "^1.3.0" 1047 | path-is-absolute "^1.0.0" 1048 | 1049 | glob@^7.1.3, glob@^7.1.4: 1050 | version "7.1.7" 1051 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" 1052 | integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== 1053 | dependencies: 1054 | fs.realpath "^1.0.0" 1055 | inflight "^1.0.4" 1056 | inherits "2" 1057 | minimatch "^3.0.4" 1058 | once "^1.3.0" 1059 | path-is-absolute "^1.0.0" 1060 | 1061 | globals@^13.6.0, globals@^13.9.0: 1062 | version "13.9.0" 1063 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.9.0.tgz#4bf2bf635b334a173fb1daf7c5e6b218ecdc06cb" 1064 | integrity sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA== 1065 | dependencies: 1066 | type-fest "^0.20.2" 1067 | 1068 | globby@^11.0.3: 1069 | version "11.0.3" 1070 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb" 1071 | integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg== 1072 | dependencies: 1073 | array-union "^2.1.0" 1074 | dir-glob "^3.0.1" 1075 | fast-glob "^3.1.1" 1076 | ignore "^5.1.4" 1077 | merge2 "^1.3.0" 1078 | slash "^3.0.0" 1079 | 1080 | globule@^1.0.0: 1081 | version "1.2.0" 1082 | resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.0.tgz#1dc49c6822dd9e8a2fa00ba2a295006e8664bd09" 1083 | dependencies: 1084 | glob "~7.1.1" 1085 | lodash "~4.17.4" 1086 | minimatch "~3.0.2" 1087 | 1088 | graceful-fs@^4.1.2: 1089 | version "4.1.11" 1090 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 1091 | 1092 | graceful-fs@^4.2.3: 1093 | version "4.2.6" 1094 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" 1095 | integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== 1096 | 1097 | har-schema@^2.0.0: 1098 | version "2.0.0" 1099 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 1100 | 1101 | har-validator@~5.1.3: 1102 | version "5.1.5" 1103 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" 1104 | integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== 1105 | dependencies: 1106 | ajv "^6.12.3" 1107 | har-schema "^2.0.0" 1108 | 1109 | has-ansi@^2.0.0: 1110 | version "2.0.0" 1111 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 1112 | dependencies: 1113 | ansi-regex "^2.0.0" 1114 | 1115 | has-bigints@^1.0.1: 1116 | version "1.0.1" 1117 | resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" 1118 | integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== 1119 | 1120 | has-flag@^3.0.0: 1121 | version "3.0.0" 1122 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1123 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 1124 | 1125 | has-flag@^4.0.0: 1126 | version "4.0.0" 1127 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1128 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1129 | 1130 | has-symbols@^1.0.1, has-symbols@^1.0.2: 1131 | version "1.0.2" 1132 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" 1133 | integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== 1134 | 1135 | has-unicode@^2.0.0: 1136 | version "2.0.1" 1137 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 1138 | 1139 | has@^1.0.3: 1140 | version "1.0.3" 1141 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1142 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1143 | dependencies: 1144 | function-bind "^1.1.1" 1145 | 1146 | hosted-git-info@^2.1.4: 1147 | version "2.5.0" 1148 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" 1149 | 1150 | http-signature@~1.2.0: 1151 | version "1.2.0" 1152 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 1153 | dependencies: 1154 | assert-plus "^1.0.0" 1155 | jsprim "^1.2.2" 1156 | sshpk "^1.7.0" 1157 | 1158 | ignore@^4.0.6: 1159 | version "4.0.6" 1160 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" 1161 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== 1162 | 1163 | ignore@^5.1.1, ignore@^5.1.4: 1164 | version "5.1.8" 1165 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" 1166 | integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== 1167 | 1168 | import-fresh@^3.0.0, import-fresh@^3.2.1: 1169 | version "3.3.0" 1170 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 1171 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1172 | dependencies: 1173 | parent-module "^1.0.0" 1174 | resolve-from "^4.0.0" 1175 | 1176 | imurmurhash@^0.1.4: 1177 | version "0.1.4" 1178 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1179 | 1180 | indent-string@^2.1.0: 1181 | version "2.1.0" 1182 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" 1183 | dependencies: 1184 | repeating "^2.0.0" 1185 | 1186 | inflight@^1.0.4: 1187 | version "1.0.6" 1188 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1189 | dependencies: 1190 | once "^1.3.0" 1191 | wrappy "1" 1192 | 1193 | inherits@2, inherits@~2.0.3: 1194 | version "2.0.3" 1195 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1196 | 1197 | internal-slot@^1.0.3: 1198 | version "1.0.3" 1199 | resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" 1200 | integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== 1201 | dependencies: 1202 | get-intrinsic "^1.1.0" 1203 | has "^1.0.3" 1204 | side-channel "^1.0.4" 1205 | 1206 | is-arrayish@^0.2.1: 1207 | version "0.2.1" 1208 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1209 | 1210 | is-bigint@^1.0.1: 1211 | version "1.0.2" 1212 | resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" 1213 | integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== 1214 | 1215 | is-boolean-object@^1.1.0: 1216 | version "1.1.1" 1217 | resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8" 1218 | integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== 1219 | dependencies: 1220 | call-bind "^1.0.2" 1221 | 1222 | is-builtin-module@^1.0.0: 1223 | version "1.0.0" 1224 | resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" 1225 | dependencies: 1226 | builtin-modules "^1.0.0" 1227 | 1228 | is-callable@^1.1.4, is-callable@^1.2.3: 1229 | version "1.2.3" 1230 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" 1231 | integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== 1232 | 1233 | is-core-module@^2.2.0, is-core-module@^2.4.0: 1234 | version "2.4.0" 1235 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" 1236 | integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== 1237 | dependencies: 1238 | has "^1.0.3" 1239 | 1240 | is-date-object@^1.0.1: 1241 | version "1.0.1" 1242 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" 1243 | 1244 | is-extglob@^2.1.1: 1245 | version "2.1.1" 1246 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1247 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 1248 | 1249 | is-finite@^1.0.0: 1250 | version "1.0.2" 1251 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 1252 | dependencies: 1253 | number-is-nan "^1.0.0" 1254 | 1255 | is-fullwidth-code-point@^1.0.0: 1256 | version "1.0.0" 1257 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 1258 | dependencies: 1259 | number-is-nan "^1.0.0" 1260 | 1261 | is-fullwidth-code-point@^2.0.0: 1262 | version "2.0.0" 1263 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1264 | 1265 | is-fullwidth-code-point@^3.0.0: 1266 | version "3.0.0" 1267 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1268 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1269 | 1270 | is-glob@^4.0.0, is-glob@^4.0.1: 1271 | version "4.0.1" 1272 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 1273 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 1274 | dependencies: 1275 | is-extglob "^2.1.1" 1276 | 1277 | is-negative-zero@^2.0.1: 1278 | version "2.0.1" 1279 | resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" 1280 | integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== 1281 | 1282 | is-number-object@^1.0.4: 1283 | version "1.0.5" 1284 | resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" 1285 | integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== 1286 | 1287 | is-number@^7.0.0: 1288 | version "7.0.0" 1289 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1290 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1291 | 1292 | is-regex@^1.1.3: 1293 | version "1.1.3" 1294 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" 1295 | integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== 1296 | dependencies: 1297 | call-bind "^1.0.2" 1298 | has-symbols "^1.0.2" 1299 | 1300 | is-string@^1.0.5, is-string@^1.0.6: 1301 | version "1.0.6" 1302 | resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" 1303 | integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== 1304 | 1305 | is-symbol@^1.0.2, is-symbol@^1.0.3: 1306 | version "1.0.4" 1307 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" 1308 | integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== 1309 | dependencies: 1310 | has-symbols "^1.0.2" 1311 | 1312 | is-typedarray@~1.0.0: 1313 | version "1.0.0" 1314 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1315 | 1316 | is-utf8@^0.2.0: 1317 | version "0.2.1" 1318 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" 1319 | 1320 | isarray@~1.0.0: 1321 | version "1.0.0" 1322 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1323 | 1324 | isexe@^2.0.0: 1325 | version "2.0.0" 1326 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1327 | 1328 | isstream@~0.1.2: 1329 | version "0.1.2" 1330 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 1331 | 1332 | jquery@^3.6.0: 1333 | version "3.6.0" 1334 | resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470" 1335 | integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw== 1336 | 1337 | js-base64@^2.1.8: 1338 | version "2.4.2" 1339 | resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.2.tgz#1896da010ef8862f385d8887648e9b6dc4a7a2e9" 1340 | 1341 | js-tokens@^3.0.0: 1342 | version "3.0.2" 1343 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" 1344 | 1345 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 1346 | version "4.0.0" 1347 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1348 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1349 | 1350 | js-yaml@^3.13.1: 1351 | version "3.14.1" 1352 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" 1353 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== 1354 | dependencies: 1355 | argparse "^1.0.7" 1356 | esprima "^4.0.0" 1357 | 1358 | jsbn@~0.1.0: 1359 | version "0.1.1" 1360 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 1361 | 1362 | json-parse-better-errors@^1.0.1: 1363 | version "1.0.2" 1364 | resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" 1365 | integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== 1366 | 1367 | json-schema-traverse@^0.4.1: 1368 | version "0.4.1" 1369 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1370 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1371 | 1372 | json-schema-traverse@^1.0.0: 1373 | version "1.0.0" 1374 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" 1375 | integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== 1376 | 1377 | json-schema@0.2.3: 1378 | version "0.2.3" 1379 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 1380 | 1381 | json-stable-stringify-without-jsonify@^1.0.1: 1382 | version "1.0.1" 1383 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1384 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 1385 | 1386 | json-stringify-safe@~5.0.1: 1387 | version "5.0.1" 1388 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 1389 | 1390 | json5@^1.0.1: 1391 | version "1.0.1" 1392 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" 1393 | integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== 1394 | dependencies: 1395 | minimist "^1.2.0" 1396 | 1397 | jsprim@^1.2.2: 1398 | version "1.4.1" 1399 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 1400 | dependencies: 1401 | assert-plus "1.0.0" 1402 | extsprintf "1.3.0" 1403 | json-schema "0.2.3" 1404 | verror "1.10.0" 1405 | 1406 | "jsx-ast-utils@^2.4.1 || ^3.0.0": 1407 | version "3.2.0" 1408 | resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82" 1409 | integrity sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q== 1410 | dependencies: 1411 | array-includes "^3.1.2" 1412 | object.assign "^4.1.2" 1413 | 1414 | levn@^0.4.1: 1415 | version "0.4.1" 1416 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 1417 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1418 | dependencies: 1419 | prelude-ls "^1.2.1" 1420 | type-check "~0.4.0" 1421 | 1422 | load-json-file@^1.0.0: 1423 | version "1.1.0" 1424 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" 1425 | dependencies: 1426 | graceful-fs "^4.1.2" 1427 | parse-json "^2.2.0" 1428 | pify "^2.0.0" 1429 | pinkie-promise "^2.0.0" 1430 | strip-bom "^2.0.0" 1431 | 1432 | load-json-file@^4.0.0: 1433 | version "4.0.0" 1434 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" 1435 | integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= 1436 | dependencies: 1437 | graceful-fs "^4.1.2" 1438 | parse-json "^4.0.0" 1439 | pify "^3.0.0" 1440 | strip-bom "^3.0.0" 1441 | 1442 | locate-path@^2.0.0: 1443 | version "2.0.0" 1444 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" 1445 | dependencies: 1446 | p-locate "^2.0.0" 1447 | path-exists "^3.0.0" 1448 | 1449 | locate-path@^3.0.0: 1450 | version "3.0.0" 1451 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 1452 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== 1453 | dependencies: 1454 | p-locate "^3.0.0" 1455 | path-exists "^3.0.0" 1456 | 1457 | locate-path@^6.0.0: 1458 | version "6.0.0" 1459 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 1460 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1461 | dependencies: 1462 | p-locate "^5.0.0" 1463 | 1464 | lodash.clonedeep@^4.5.0: 1465 | version "4.5.0" 1466 | resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" 1467 | integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= 1468 | 1469 | lodash.merge@^4.6.2: 1470 | version "4.6.2" 1471 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 1472 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1473 | 1474 | lodash.truncate@^4.4.2: 1475 | version "4.4.2" 1476 | resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" 1477 | integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= 1478 | 1479 | lodash@^4.0.0, lodash@~4.17.4: 1480 | version "4.17.19" 1481 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" 1482 | 1483 | lodash@^4.17.15, lodash@^4.17.21: 1484 | version "4.17.21" 1485 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1486 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1487 | 1488 | loose-envify@^1.1.0: 1489 | version "1.3.1" 1490 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" 1491 | dependencies: 1492 | js-tokens "^3.0.0" 1493 | 1494 | loose-envify@^1.4.0: 1495 | version "1.4.0" 1496 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 1497 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 1498 | dependencies: 1499 | js-tokens "^3.0.0 || ^4.0.0" 1500 | 1501 | loud-rejection@^1.0.0: 1502 | version "1.6.0" 1503 | resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" 1504 | dependencies: 1505 | currently-unhandled "^0.4.1" 1506 | signal-exit "^3.0.0" 1507 | 1508 | lru-cache@^6.0.0: 1509 | version "6.0.0" 1510 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 1511 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1512 | dependencies: 1513 | yallist "^4.0.0" 1514 | 1515 | map-obj@^1.0.0, map-obj@^1.0.1: 1516 | version "1.0.1" 1517 | resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" 1518 | 1519 | meow@^3.7.0: 1520 | version "3.7.0" 1521 | resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" 1522 | dependencies: 1523 | camelcase-keys "^2.0.0" 1524 | decamelize "^1.1.2" 1525 | loud-rejection "^1.0.0" 1526 | map-obj "^1.0.1" 1527 | minimist "^1.1.3" 1528 | normalize-package-data "^2.3.4" 1529 | object-assign "^4.0.1" 1530 | read-pkg-up "^1.0.1" 1531 | redent "^1.0.0" 1532 | trim-newlines "^1.0.0" 1533 | 1534 | merge2@^1.3.0: 1535 | version "1.4.1" 1536 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 1537 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1538 | 1539 | micromatch@^4.0.2: 1540 | version "4.0.4" 1541 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" 1542 | integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== 1543 | dependencies: 1544 | braces "^3.0.1" 1545 | picomatch "^2.2.3" 1546 | 1547 | mime-db@1.48.0: 1548 | version "1.48.0" 1549 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" 1550 | integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== 1551 | 1552 | mime-db@~1.30.0: 1553 | version "1.30.0" 1554 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" 1555 | 1556 | mime-types@^2.1.12: 1557 | version "2.1.17" 1558 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" 1559 | dependencies: 1560 | mime-db "~1.30.0" 1561 | 1562 | mime-types@~2.1.19: 1563 | version "2.1.31" 1564 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" 1565 | integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== 1566 | dependencies: 1567 | mime-db "1.48.0" 1568 | 1569 | minimatch@^3.0.4, minimatch@~3.0.2: 1570 | version "3.0.4" 1571 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1572 | dependencies: 1573 | brace-expansion "^1.1.7" 1574 | 1575 | minimist@0.0.8: 1576 | version "0.0.8" 1577 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1578 | 1579 | minimist@^1.1.3, minimist@^1.2.0: 1580 | version "1.2.0" 1581 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1582 | 1583 | minipass@^3.0.0: 1584 | version "3.1.3" 1585 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" 1586 | integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== 1587 | dependencies: 1588 | yallist "^4.0.0" 1589 | 1590 | minizlib@^2.1.1: 1591 | version "2.1.2" 1592 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" 1593 | integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== 1594 | dependencies: 1595 | minipass "^3.0.0" 1596 | yallist "^4.0.0" 1597 | 1598 | mkdirp@^0.5.1: 1599 | version "0.5.1" 1600 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1601 | dependencies: 1602 | minimist "0.0.8" 1603 | 1604 | mkdirp@^1.0.3: 1605 | version "1.0.4" 1606 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" 1607 | integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== 1608 | 1609 | ms@2.0.0: 1610 | version "2.0.0" 1611 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1612 | 1613 | ms@2.1.2: 1614 | version "2.1.2" 1615 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1616 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1617 | 1618 | ms@^2.1.1: 1619 | version "2.1.3" 1620 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1621 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1622 | 1623 | nan@^2.13.2: 1624 | version "2.14.2" 1625 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" 1626 | integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== 1627 | 1628 | natural-compare@^1.4.0: 1629 | version "1.4.0" 1630 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1631 | 1632 | node-gyp@^7.1.0: 1633 | version "7.1.2" 1634 | resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" 1635 | integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== 1636 | dependencies: 1637 | env-paths "^2.2.0" 1638 | glob "^7.1.4" 1639 | graceful-fs "^4.2.3" 1640 | nopt "^5.0.0" 1641 | npmlog "^4.1.2" 1642 | request "^2.88.2" 1643 | rimraf "^3.0.2" 1644 | semver "^7.3.2" 1645 | tar "^6.0.2" 1646 | which "^2.0.2" 1647 | 1648 | node-sass@^6.0.0: 1649 | version "6.0.0" 1650 | resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-6.0.0.tgz#f30da3e858ad47bfd138bc0e0c6f924ed2f734af" 1651 | integrity sha512-GDzDmNgWNc9GNzTcSLTi6DU6mzSPupVJoStIi7cF3GjwSE9q1cVakbvAAVSt59vzUjV9JJoSZFKoo9krbjKd2g== 1652 | dependencies: 1653 | async-foreach "^0.1.3" 1654 | chalk "^1.1.1" 1655 | cross-spawn "^7.0.3" 1656 | gaze "^1.0.0" 1657 | get-stdin "^4.0.1" 1658 | glob "^7.0.3" 1659 | lodash "^4.17.15" 1660 | meow "^3.7.0" 1661 | mkdirp "^0.5.1" 1662 | nan "^2.13.2" 1663 | node-gyp "^7.1.0" 1664 | npmlog "^4.0.0" 1665 | request "^2.88.0" 1666 | sass-graph "2.2.5" 1667 | stdout-stream "^1.4.0" 1668 | "true-case-path" "^1.0.2" 1669 | 1670 | nopt@^5.0.0: 1671 | version "5.0.0" 1672 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" 1673 | integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== 1674 | dependencies: 1675 | abbrev "1" 1676 | 1677 | normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: 1678 | version "2.4.0" 1679 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" 1680 | dependencies: 1681 | hosted-git-info "^2.1.4" 1682 | is-builtin-module "^1.0.0" 1683 | semver "2 || 3 || 4 || 5" 1684 | validate-npm-package-license "^3.0.1" 1685 | 1686 | npmlog@^4.0.0, npmlog@^4.1.2: 1687 | version "4.1.2" 1688 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" 1689 | dependencies: 1690 | are-we-there-yet "~1.1.2" 1691 | console-control-strings "~1.1.0" 1692 | gauge "~2.7.3" 1693 | set-blocking "~2.0.0" 1694 | 1695 | number-is-nan@^1.0.0: 1696 | version "1.0.1" 1697 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1698 | 1699 | oauth-sign@~0.9.0: 1700 | version "0.9.0" 1701 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" 1702 | integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== 1703 | 1704 | object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: 1705 | version "4.1.1" 1706 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1707 | 1708 | object-inspect@^1.10.3, object-inspect@^1.9.0: 1709 | version "1.10.3" 1710 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" 1711 | integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw== 1712 | 1713 | object-keys@^1.0.12, object-keys@^1.1.1: 1714 | version "1.1.1" 1715 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 1716 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 1717 | 1718 | object.assign@^4.1.2: 1719 | version "4.1.2" 1720 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" 1721 | integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== 1722 | dependencies: 1723 | call-bind "^1.0.0" 1724 | define-properties "^1.1.3" 1725 | has-symbols "^1.0.1" 1726 | object-keys "^1.1.1" 1727 | 1728 | object.entries@^1.1.4: 1729 | version "1.1.4" 1730 | resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.4.tgz#43ccf9a50bc5fd5b649d45ab1a579f24e088cafd" 1731 | integrity sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA== 1732 | dependencies: 1733 | call-bind "^1.0.2" 1734 | define-properties "^1.1.3" 1735 | es-abstract "^1.18.2" 1736 | 1737 | object.fromentries@^2.0.4: 1738 | version "2.0.4" 1739 | resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8" 1740 | integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ== 1741 | dependencies: 1742 | call-bind "^1.0.2" 1743 | define-properties "^1.1.3" 1744 | es-abstract "^1.18.0-next.2" 1745 | has "^1.0.3" 1746 | 1747 | object.values@^1.1.3, object.values@^1.1.4: 1748 | version "1.1.4" 1749 | resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30" 1750 | integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg== 1751 | dependencies: 1752 | call-bind "^1.0.2" 1753 | define-properties "^1.1.3" 1754 | es-abstract "^1.18.2" 1755 | 1756 | once@^1.3.0: 1757 | version "1.4.0" 1758 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1759 | dependencies: 1760 | wrappy "1" 1761 | 1762 | optionator@^0.9.1: 1763 | version "0.9.1" 1764 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 1765 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 1766 | dependencies: 1767 | deep-is "^0.1.3" 1768 | fast-levenshtein "^2.0.6" 1769 | levn "^0.4.1" 1770 | prelude-ls "^1.2.1" 1771 | type-check "^0.4.0" 1772 | word-wrap "^1.2.3" 1773 | 1774 | p-limit@^1.1.0: 1775 | version "1.2.0" 1776 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" 1777 | dependencies: 1778 | p-try "^1.0.0" 1779 | 1780 | p-limit@^2.0.0: 1781 | version "2.3.0" 1782 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 1783 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 1784 | dependencies: 1785 | p-try "^2.0.0" 1786 | 1787 | p-limit@^3.0.2: 1788 | version "3.1.0" 1789 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 1790 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1791 | dependencies: 1792 | yocto-queue "^0.1.0" 1793 | 1794 | p-locate@^2.0.0: 1795 | version "2.0.0" 1796 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" 1797 | dependencies: 1798 | p-limit "^1.1.0" 1799 | 1800 | p-locate@^3.0.0: 1801 | version "3.0.0" 1802 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 1803 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== 1804 | dependencies: 1805 | p-limit "^2.0.0" 1806 | 1807 | p-locate@^5.0.0: 1808 | version "5.0.0" 1809 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 1810 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1811 | dependencies: 1812 | p-limit "^3.0.2" 1813 | 1814 | p-try@^1.0.0: 1815 | version "1.0.0" 1816 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" 1817 | 1818 | p-try@^2.0.0: 1819 | version "2.2.0" 1820 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1821 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1822 | 1823 | parent-module@^1.0.0: 1824 | version "1.0.1" 1825 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1826 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1827 | dependencies: 1828 | callsites "^3.0.0" 1829 | 1830 | parse-json@^2.2.0: 1831 | version "2.2.0" 1832 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 1833 | dependencies: 1834 | error-ex "^1.2.0" 1835 | 1836 | parse-json@^4.0.0: 1837 | version "4.0.0" 1838 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" 1839 | integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= 1840 | dependencies: 1841 | error-ex "^1.3.1" 1842 | json-parse-better-errors "^1.0.1" 1843 | 1844 | path-exists@^2.0.0: 1845 | version "2.1.0" 1846 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" 1847 | dependencies: 1848 | pinkie-promise "^2.0.0" 1849 | 1850 | path-exists@^3.0.0: 1851 | version "3.0.0" 1852 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 1853 | 1854 | path-exists@^4.0.0: 1855 | version "4.0.0" 1856 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1857 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1858 | 1859 | path-is-absolute@^1.0.0: 1860 | version "1.0.1" 1861 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1862 | 1863 | path-key@^3.1.0: 1864 | version "3.1.1" 1865 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1866 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1867 | 1868 | path-parse@^1.0.6: 1869 | version "1.0.7" 1870 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 1871 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1872 | 1873 | path-type@^1.0.0: 1874 | version "1.1.0" 1875 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" 1876 | dependencies: 1877 | graceful-fs "^4.1.2" 1878 | pify "^2.0.0" 1879 | pinkie-promise "^2.0.0" 1880 | 1881 | path-type@^3.0.0: 1882 | version "3.0.0" 1883 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" 1884 | integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== 1885 | dependencies: 1886 | pify "^3.0.0" 1887 | 1888 | path-type@^4.0.0: 1889 | version "4.0.0" 1890 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 1891 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1892 | 1893 | performance-now@^2.1.0: 1894 | version "2.1.0" 1895 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 1896 | 1897 | picomatch@^2.2.1, picomatch@^2.2.3: 1898 | version "2.3.0" 1899 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" 1900 | integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== 1901 | 1902 | pify@^2.0.0: 1903 | version "2.3.0" 1904 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 1905 | 1906 | pify@^3.0.0: 1907 | version "3.0.0" 1908 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" 1909 | integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= 1910 | 1911 | pinkie-promise@^2.0.0: 1912 | version "2.0.1" 1913 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 1914 | dependencies: 1915 | pinkie "^2.0.0" 1916 | 1917 | pinkie@^2.0.0: 1918 | version "2.0.4" 1919 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 1920 | 1921 | pkg-dir@^2.0.0: 1922 | version "2.0.0" 1923 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" 1924 | integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= 1925 | dependencies: 1926 | find-up "^2.1.0" 1927 | 1928 | pkg-up@^2.0.0: 1929 | version "2.0.0" 1930 | resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" 1931 | integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= 1932 | dependencies: 1933 | find-up "^2.1.0" 1934 | 1935 | prelude-ls@^1.2.1: 1936 | version "1.2.1" 1937 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 1938 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1939 | 1940 | process-nextick-args@~1.0.6: 1941 | version "1.0.7" 1942 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 1943 | 1944 | progress@^2.0.0: 1945 | version "2.0.3" 1946 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 1947 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 1948 | 1949 | prop-types@^15.6.2, prop-types@^15.7.2: 1950 | version "15.7.2" 1951 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" 1952 | integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== 1953 | dependencies: 1954 | loose-envify "^1.4.0" 1955 | object-assign "^4.1.1" 1956 | react-is "^16.8.1" 1957 | 1958 | psl@^1.1.28: 1959 | version "1.8.0" 1960 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" 1961 | integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== 1962 | 1963 | punycode@^2.1.0, punycode@^2.1.1: 1964 | version "2.1.1" 1965 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1966 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1967 | 1968 | qs@~6.5.2: 1969 | version "6.5.2" 1970 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 1971 | integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== 1972 | 1973 | queue-microtask@^1.2.2: 1974 | version "1.2.3" 1975 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 1976 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1977 | 1978 | react-dom@^16.13.0: 1979 | version "16.14.0" 1980 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" 1981 | integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== 1982 | dependencies: 1983 | loose-envify "^1.1.0" 1984 | object-assign "^4.1.1" 1985 | prop-types "^15.6.2" 1986 | scheduler "^0.19.1" 1987 | 1988 | react-is@^16.8.1: 1989 | version "16.13.1" 1990 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" 1991 | integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== 1992 | 1993 | react@^16.13.0: 1994 | version "16.14.0" 1995 | resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" 1996 | integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== 1997 | dependencies: 1998 | loose-envify "^1.1.0" 1999 | object-assign "^4.1.1" 2000 | prop-types "^15.6.2" 2001 | 2002 | read-pkg-up@^1.0.1: 2003 | version "1.0.1" 2004 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" 2005 | dependencies: 2006 | find-up "^1.0.0" 2007 | read-pkg "^1.0.0" 2008 | 2009 | read-pkg-up@^3.0.0: 2010 | version "3.0.0" 2011 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" 2012 | integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= 2013 | dependencies: 2014 | find-up "^2.0.0" 2015 | read-pkg "^3.0.0" 2016 | 2017 | read-pkg@^1.0.0: 2018 | version "1.1.0" 2019 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" 2020 | dependencies: 2021 | load-json-file "^1.0.0" 2022 | normalize-package-data "^2.3.2" 2023 | path-type "^1.0.0" 2024 | 2025 | read-pkg@^3.0.0: 2026 | version "3.0.0" 2027 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" 2028 | integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= 2029 | dependencies: 2030 | load-json-file "^4.0.0" 2031 | normalize-package-data "^2.3.2" 2032 | path-type "^3.0.0" 2033 | 2034 | readable-stream@^2.0.1, readable-stream@^2.0.6: 2035 | version "2.3.3" 2036 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" 2037 | dependencies: 2038 | core-util-is "~1.0.0" 2039 | inherits "~2.0.3" 2040 | isarray "~1.0.0" 2041 | process-nextick-args "~1.0.6" 2042 | safe-buffer "~5.1.1" 2043 | string_decoder "~1.0.3" 2044 | util-deprecate "~1.0.1" 2045 | 2046 | redent@^1.0.0: 2047 | version "1.0.0" 2048 | resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" 2049 | dependencies: 2050 | indent-string "^2.1.0" 2051 | strip-indent "^1.0.1" 2052 | 2053 | regexp.prototype.flags@^1.3.1: 2054 | version "1.3.1" 2055 | resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" 2056 | integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== 2057 | dependencies: 2058 | call-bind "^1.0.2" 2059 | define-properties "^1.1.3" 2060 | 2061 | regexpp@^3.0.0, regexpp@^3.1.0: 2062 | version "3.1.0" 2063 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" 2064 | integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== 2065 | 2066 | repeating@^2.0.0: 2067 | version "2.0.1" 2068 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 2069 | dependencies: 2070 | is-finite "^1.0.0" 2071 | 2072 | request@^2.88.0, request@^2.88.2: 2073 | version "2.88.2" 2074 | resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" 2075 | integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== 2076 | dependencies: 2077 | aws-sign2 "~0.7.0" 2078 | aws4 "^1.8.0" 2079 | caseless "~0.12.0" 2080 | combined-stream "~1.0.6" 2081 | extend "~3.0.2" 2082 | forever-agent "~0.6.1" 2083 | form-data "~2.3.2" 2084 | har-validator "~5.1.3" 2085 | http-signature "~1.2.0" 2086 | is-typedarray "~1.0.0" 2087 | isstream "~0.1.2" 2088 | json-stringify-safe "~5.0.1" 2089 | mime-types "~2.1.19" 2090 | oauth-sign "~0.9.0" 2091 | performance-now "^2.1.0" 2092 | qs "~6.5.2" 2093 | safe-buffer "^5.1.2" 2094 | tough-cookie "~2.5.0" 2095 | tunnel-agent "^0.6.0" 2096 | uuid "^3.3.2" 2097 | 2098 | require-directory@^2.1.1: 2099 | version "2.1.1" 2100 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 2101 | 2102 | require-from-string@^2.0.2: 2103 | version "2.0.2" 2104 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" 2105 | integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== 2106 | 2107 | require-main-filename@^2.0.0: 2108 | version "2.0.0" 2109 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 2110 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== 2111 | 2112 | resolve-from@^4.0.0: 2113 | version "4.0.0" 2114 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 2115 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 2116 | 2117 | resolve@^1.10.1, resolve@^1.13.1, resolve@^1.20.0: 2118 | version "1.20.0" 2119 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" 2120 | integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== 2121 | dependencies: 2122 | is-core-module "^2.2.0" 2123 | path-parse "^1.0.6" 2124 | 2125 | resolve@^2.0.0-next.3: 2126 | version "2.0.0-next.3" 2127 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" 2128 | integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q== 2129 | dependencies: 2130 | is-core-module "^2.2.0" 2131 | path-parse "^1.0.6" 2132 | 2133 | reusify@^1.0.4: 2134 | version "1.0.4" 2135 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 2136 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 2137 | 2138 | rimraf@^3.0.2: 2139 | version "3.0.2" 2140 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 2141 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 2142 | dependencies: 2143 | glob "^7.1.3" 2144 | 2145 | run-parallel@^1.1.9: 2146 | version "1.2.0" 2147 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 2148 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 2149 | dependencies: 2150 | queue-microtask "^1.2.2" 2151 | 2152 | safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 2153 | version "5.1.1" 2154 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" 2155 | 2156 | safe-buffer@^5.1.2: 2157 | version "5.2.1" 2158 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 2159 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 2160 | 2161 | sass-graph@2.2.5: 2162 | version "2.2.5" 2163 | resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.5.tgz#a981c87446b8319d96dce0671e487879bd24c2e8" 2164 | integrity sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag== 2165 | dependencies: 2166 | glob "^7.0.0" 2167 | lodash "^4.0.0" 2168 | scss-tokenizer "^0.2.3" 2169 | yargs "^13.3.2" 2170 | 2171 | scheduler@^0.19.1: 2172 | version "0.19.1" 2173 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" 2174 | integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== 2175 | dependencies: 2176 | loose-envify "^1.1.0" 2177 | object-assign "^4.1.1" 2178 | 2179 | scss-tokenizer@^0.2.3: 2180 | version "0.2.3" 2181 | resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" 2182 | dependencies: 2183 | js-base64 "^2.1.8" 2184 | source-map "^0.4.2" 2185 | 2186 | "semver@2 || 3 || 4 || 5": 2187 | version "5.5.0" 2188 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" 2189 | 2190 | semver@^6.1.0: 2191 | version "6.3.0" 2192 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 2193 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 2194 | 2195 | semver@^7.2.1, semver@^7.3.2, semver@^7.3.5: 2196 | version "7.3.5" 2197 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" 2198 | integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== 2199 | dependencies: 2200 | lru-cache "^6.0.0" 2201 | 2202 | set-blocking@^2.0.0, set-blocking@~2.0.0: 2203 | version "2.0.0" 2204 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 2205 | 2206 | shebang-command@^2.0.0: 2207 | version "2.0.0" 2208 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 2209 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 2210 | dependencies: 2211 | shebang-regex "^3.0.0" 2212 | 2213 | shebang-regex@^3.0.0: 2214 | version "3.0.0" 2215 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 2216 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 2217 | 2218 | side-channel@^1.0.4: 2219 | version "1.0.4" 2220 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" 2221 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== 2222 | dependencies: 2223 | call-bind "^1.0.0" 2224 | get-intrinsic "^1.0.2" 2225 | object-inspect "^1.9.0" 2226 | 2227 | signal-exit@^3.0.0: 2228 | version "3.0.2" 2229 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 2230 | 2231 | slash@^3.0.0: 2232 | version "3.0.0" 2233 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 2234 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 2235 | 2236 | slice-ansi@^4.0.0: 2237 | version "4.0.0" 2238 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" 2239 | integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== 2240 | dependencies: 2241 | ansi-styles "^4.0.0" 2242 | astral-regex "^2.0.0" 2243 | is-fullwidth-code-point "^3.0.0" 2244 | 2245 | source-map@^0.4.2: 2246 | version "0.4.4" 2247 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" 2248 | dependencies: 2249 | amdefine ">=0.0.4" 2250 | 2251 | spdx-correct@~1.0.0: 2252 | version "1.0.2" 2253 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" 2254 | dependencies: 2255 | spdx-license-ids "^1.0.2" 2256 | 2257 | spdx-expression-parse@~1.0.0: 2258 | version "1.0.4" 2259 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" 2260 | 2261 | spdx-license-ids@^1.0.2: 2262 | version "1.2.2" 2263 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" 2264 | 2265 | sprintf-js@~1.0.2: 2266 | version "1.0.3" 2267 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 2268 | 2269 | sshpk@^1.7.0: 2270 | version "1.13.1" 2271 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" 2272 | dependencies: 2273 | asn1 "~0.2.3" 2274 | assert-plus "^1.0.0" 2275 | dashdash "^1.12.0" 2276 | getpass "^0.1.1" 2277 | optionalDependencies: 2278 | bcrypt-pbkdf "^1.0.0" 2279 | ecc-jsbn "~0.1.1" 2280 | jsbn "~0.1.0" 2281 | tweetnacl "~0.14.0" 2282 | 2283 | stdout-stream@^1.4.0: 2284 | version "1.4.1" 2285 | resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de" 2286 | integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA== 2287 | dependencies: 2288 | readable-stream "^2.0.1" 2289 | 2290 | string-width@^1.0.1, string-width@^1.0.2: 2291 | version "1.0.2" 2292 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 2293 | dependencies: 2294 | code-point-at "^1.0.0" 2295 | is-fullwidth-code-point "^1.0.0" 2296 | strip-ansi "^3.0.0" 2297 | 2298 | string-width@^3.0.0, string-width@^3.1.0: 2299 | version "3.1.0" 2300 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 2301 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 2302 | dependencies: 2303 | emoji-regex "^7.0.1" 2304 | is-fullwidth-code-point "^2.0.0" 2305 | strip-ansi "^5.1.0" 2306 | 2307 | string-width@^4.2.0: 2308 | version "4.2.2" 2309 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" 2310 | integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== 2311 | dependencies: 2312 | emoji-regex "^8.0.0" 2313 | is-fullwidth-code-point "^3.0.0" 2314 | strip-ansi "^6.0.0" 2315 | 2316 | string.prototype.matchall@^4.0.5: 2317 | version "4.0.5" 2318 | resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz#59370644e1db7e4c0c045277690cf7b01203c4da" 2319 | integrity sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q== 2320 | dependencies: 2321 | call-bind "^1.0.2" 2322 | define-properties "^1.1.3" 2323 | es-abstract "^1.18.2" 2324 | get-intrinsic "^1.1.1" 2325 | has-symbols "^1.0.2" 2326 | internal-slot "^1.0.3" 2327 | regexp.prototype.flags "^1.3.1" 2328 | side-channel "^1.0.4" 2329 | 2330 | string.prototype.trimend@^1.0.4: 2331 | version "1.0.4" 2332 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" 2333 | integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== 2334 | dependencies: 2335 | call-bind "^1.0.2" 2336 | define-properties "^1.1.3" 2337 | 2338 | string.prototype.trimstart@^1.0.4: 2339 | version "1.0.4" 2340 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" 2341 | integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== 2342 | dependencies: 2343 | call-bind "^1.0.2" 2344 | define-properties "^1.1.3" 2345 | 2346 | string_decoder@~1.0.3: 2347 | version "1.0.3" 2348 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" 2349 | dependencies: 2350 | safe-buffer "~5.1.0" 2351 | 2352 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 2353 | version "3.0.1" 2354 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 2355 | dependencies: 2356 | ansi-regex "^2.0.0" 2357 | 2358 | strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: 2359 | version "5.2.0" 2360 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 2361 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 2362 | dependencies: 2363 | ansi-regex "^4.1.0" 2364 | 2365 | strip-ansi@^6.0.0: 2366 | version "6.0.0" 2367 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" 2368 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== 2369 | dependencies: 2370 | ansi-regex "^5.0.0" 2371 | 2372 | strip-bom@^2.0.0: 2373 | version "2.0.0" 2374 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" 2375 | dependencies: 2376 | is-utf8 "^0.2.0" 2377 | 2378 | strip-bom@^3.0.0: 2379 | version "3.0.0" 2380 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 2381 | 2382 | strip-indent@^1.0.1: 2383 | version "1.0.1" 2384 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" 2385 | dependencies: 2386 | get-stdin "^4.0.1" 2387 | 2388 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 2389 | version "3.1.1" 2390 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 2391 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 2392 | 2393 | supports-color@^2.0.0: 2394 | version "2.0.0" 2395 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 2396 | 2397 | supports-color@^5.3.0: 2398 | version "5.5.0" 2399 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2400 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 2401 | dependencies: 2402 | has-flag "^3.0.0" 2403 | 2404 | supports-color@^7.1.0: 2405 | version "7.2.0" 2406 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 2407 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 2408 | dependencies: 2409 | has-flag "^4.0.0" 2410 | 2411 | table@^6.0.9: 2412 | version "6.7.1" 2413 | resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" 2414 | integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== 2415 | dependencies: 2416 | ajv "^8.0.1" 2417 | lodash.clonedeep "^4.5.0" 2418 | lodash.truncate "^4.4.2" 2419 | slice-ansi "^4.0.0" 2420 | string-width "^4.2.0" 2421 | strip-ansi "^6.0.0" 2422 | 2423 | tar@^6.0.2: 2424 | version "6.1.0" 2425 | resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83" 2426 | integrity sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA== 2427 | dependencies: 2428 | chownr "^2.0.0" 2429 | fs-minipass "^2.0.0" 2430 | minipass "^3.0.0" 2431 | minizlib "^2.1.1" 2432 | mkdirp "^1.0.3" 2433 | yallist "^4.0.0" 2434 | 2435 | text-table@^0.2.0: 2436 | version "0.2.0" 2437 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 2438 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 2439 | 2440 | to-regex-range@^5.0.1: 2441 | version "5.0.1" 2442 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 2443 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 2444 | dependencies: 2445 | is-number "^7.0.0" 2446 | 2447 | tough-cookie@~2.5.0: 2448 | version "2.5.0" 2449 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" 2450 | integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== 2451 | dependencies: 2452 | psl "^1.1.28" 2453 | punycode "^2.1.1" 2454 | 2455 | trim-newlines@^1.0.0: 2456 | version "1.0.0" 2457 | resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" 2458 | 2459 | "true-case-path@^1.0.2": 2460 | version "1.0.3" 2461 | resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d" 2462 | integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew== 2463 | dependencies: 2464 | glob "^7.1.2" 2465 | 2466 | tsconfig-paths@^3.9.0: 2467 | version "3.9.0" 2468 | resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" 2469 | integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== 2470 | dependencies: 2471 | "@types/json5" "^0.0.29" 2472 | json5 "^1.0.1" 2473 | minimist "^1.2.0" 2474 | strip-bom "^3.0.0" 2475 | 2476 | tslib@2.1.0: 2477 | version "2.1.0" 2478 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" 2479 | integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== 2480 | 2481 | tslib@^1.8.1: 2482 | version "1.14.1" 2483 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 2484 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 2485 | 2486 | tsutils@^3.21.0: 2487 | version "3.21.0" 2488 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" 2489 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 2490 | dependencies: 2491 | tslib "^1.8.1" 2492 | 2493 | tunnel-agent@^0.6.0: 2494 | version "0.6.0" 2495 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 2496 | dependencies: 2497 | safe-buffer "^5.0.1" 2498 | 2499 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 2500 | version "0.14.5" 2501 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 2502 | 2503 | type-check@^0.4.0, type-check@~0.4.0: 2504 | version "0.4.0" 2505 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 2506 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 2507 | dependencies: 2508 | prelude-ls "^1.2.1" 2509 | 2510 | type-fest@^0.20.2: 2511 | version "0.20.2" 2512 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 2513 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 2514 | 2515 | typescript@^4.3.2: 2516 | version "4.3.2" 2517 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.2.tgz#399ab18aac45802d6f2498de5054fcbbe716a805" 2518 | integrity sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw== 2519 | 2520 | unbox-primitive@^1.0.1: 2521 | version "1.0.1" 2522 | resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" 2523 | integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== 2524 | dependencies: 2525 | function-bind "^1.1.1" 2526 | has-bigints "^1.0.1" 2527 | has-symbols "^1.0.2" 2528 | which-boxed-primitive "^1.0.2" 2529 | 2530 | uri-js@^4.2.2: 2531 | version "4.4.1" 2532 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 2533 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 2534 | dependencies: 2535 | punycode "^2.1.0" 2536 | 2537 | util-deprecate@~1.0.1: 2538 | version "1.0.2" 2539 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2540 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 2541 | 2542 | uuid@^3.3.2: 2543 | version "3.4.0" 2544 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" 2545 | integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== 2546 | 2547 | v8-compile-cache@^2.0.3: 2548 | version "2.3.0" 2549 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" 2550 | integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== 2551 | 2552 | validate-npm-package-license@^3.0.1: 2553 | version "3.0.1" 2554 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" 2555 | dependencies: 2556 | spdx-correct "~1.0.0" 2557 | spdx-expression-parse "~1.0.0" 2558 | 2559 | verror@1.10.0: 2560 | version "1.10.0" 2561 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 2562 | dependencies: 2563 | assert-plus "^1.0.0" 2564 | core-util-is "1.0.2" 2565 | extsprintf "^1.2.0" 2566 | 2567 | which-boxed-primitive@^1.0.2: 2568 | version "1.0.2" 2569 | resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" 2570 | integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== 2571 | dependencies: 2572 | is-bigint "^1.0.1" 2573 | is-boolean-object "^1.1.0" 2574 | is-number-object "^1.0.4" 2575 | is-string "^1.0.5" 2576 | is-symbol "^1.0.3" 2577 | 2578 | which-module@^2.0.0: 2579 | version "2.0.0" 2580 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 2581 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 2582 | 2583 | which@^2.0.1, which@^2.0.2: 2584 | version "2.0.2" 2585 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 2586 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2587 | dependencies: 2588 | isexe "^2.0.0" 2589 | 2590 | wide-align@^1.1.0: 2591 | version "1.1.2" 2592 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" 2593 | dependencies: 2594 | string-width "^1.0.2" 2595 | 2596 | word-wrap@^1.2.3: 2597 | version "1.2.3" 2598 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 2599 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 2600 | 2601 | wrap-ansi@^5.1.0: 2602 | version "5.1.0" 2603 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" 2604 | integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== 2605 | dependencies: 2606 | ansi-styles "^3.2.0" 2607 | string-width "^3.0.0" 2608 | strip-ansi "^5.0.0" 2609 | 2610 | wrappy@1: 2611 | version "1.0.2" 2612 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2613 | 2614 | y18n@^4.0.0: 2615 | version "4.0.3" 2616 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" 2617 | integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== 2618 | 2619 | yallist@^4.0.0: 2620 | version "4.0.0" 2621 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 2622 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 2623 | 2624 | yargs-parser@^13.1.2: 2625 | version "13.1.2" 2626 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" 2627 | integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== 2628 | dependencies: 2629 | camelcase "^5.0.0" 2630 | decamelize "^1.2.0" 2631 | 2632 | yargs@^13.3.2: 2633 | version "13.3.2" 2634 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" 2635 | integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== 2636 | dependencies: 2637 | cliui "^5.0.0" 2638 | find-up "^3.0.0" 2639 | get-caller-file "^2.0.1" 2640 | require-directory "^2.1.1" 2641 | require-main-filename "^2.0.0" 2642 | set-blocking "^2.0.0" 2643 | string-width "^3.0.0" 2644 | which-module "^2.0.0" 2645 | y18n "^4.0.0" 2646 | yargs-parser "^13.1.2" 2647 | 2648 | yocto-queue@^0.1.0: 2649 | version "0.1.0" 2650 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 2651 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 2652 | --------------------------------------------------------------------------------