├── .eslintrc.js ├── .flowconfig ├── .gitignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── cli.js ├── index.js ├── package.json ├── template.ejs ├── test ├── expected │ ├── ApiKey-noDate.js.flow │ ├── ApiKey.js.flow │ ├── Instrument.js.flow │ ├── Order.js.flow │ ├── User.custom.js.flow │ └── User.js.flow ├── fixtures │ └── customTemplate.ejs ├── results │ └── .gitignore ├── swagger.json └── test.spec.js └── yarn.lock /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | "env": { 3 | "commonjs": true, 4 | "es2021": true, 5 | "node": true 6 | }, 7 | "extends": "eslint:recommended", 8 | "parserOptions": { 9 | "ecmaVersion": 12 10 | }, 11 | "rules": { 12 | "quotes": [0, "single"], 13 | "comma-dangle": 0, 14 | "curly": [1, "multi-line"], 15 | "no-console": 0, 16 | "new-cap": 0, 17 | "consistent-return": 0, 18 | "camelcase": 0, 19 | "dot-notation": 0, 20 | "semi": [1, "always"], 21 | } 22 | }; 23 | -------------------------------------------------------------------------------- /.flowconfig: -------------------------------------------------------------------------------- 1 | [ignore] 2 | /test/expected/.* 3 | /test/results/.* 4 | 5 | [include] 6 | index.js 7 | test/test.spec.js 8 | 9 | [libs] 10 | 11 | [lints] 12 | 13 | [options] 14 | 15 | [strict] 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | 5 | # Runtime data 6 | pids 7 | *.pid 8 | *.seed 9 | 10 | # Directory for instrumented libs generated by jscoverage/JSCover 11 | lib-cov 12 | 13 | # Coverage directory used by tools like istanbul 14 | coverage 15 | 16 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 17 | .grunt 18 | 19 | # node-waf configuration 20 | .lock-wscript 21 | 22 | # Compiled binary addons (http://nodejs.org/api/addons.html) 23 | build/Release 24 | 25 | # Dependency directory 26 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git 27 | node_modules 28 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | 1.0.1 (Jan 29, 2021) 2 | ----- 3 | 4 | - Add CLI. 5 | 6 | 1.0.0 (Jan 29, 2021) 7 | ----- 8 | 9 | ### Breaking Chanages 10 | 11 | - Modernize the codebase to promises and remove synchronous i/o. Exports now return Promises and do not accept callbacks. 12 | - See README for more. 13 | - Input to functions now expects a full OpenAPI schema of the following shape: 14 | ```js 15 | type FullSwaggerSchema = {[key: string]: SwaggerModelSchema}; 16 | type SwaggerModelSchema = { 17 | properties: {[key: string]: Field}, 18 | required?: string[], 19 | additionalProperties?: boolean, 20 | }; 21 | type Field = {type: string, $ref?: string, format?: string, items?: Field}; 22 | ``` 23 | Previous versions accepted only the `properties` object. 24 | - Output fields now include `required`, and the default template uses this to determine if it should write a maybe type (e.g. `?string`). 25 | - That full type: 26 | ```js 27 | async function generateDefinitions(schemataObj: FullSwaggerSchema, options: Options): AllModelSchemata 28 | 29 | type AllModelSchemata = {[modelName: string]: ModelSchema}; 30 | type ModelSchema = {[key: string]: FieldOutput}; 31 | type FieldOutput = {type: string, $ref?: string, format?: string, required: boolean}; 32 | ``` 33 | - The function `translateField` now accepts two more parameters, `modelSchema` and `key`. The full signature: 34 | ```js 35 | function translateField(field: Field, options: Options, modelSchema: SwaggerModelSchema, key: string): FieldOutput 36 | ``` 37 | 38 | #### Migrating 39 | 40 | - If you were passing `swaggerSpec.definitions.properties` into `jsonToFlow.generateDefinitions()`, now pass the full `swaggerSpec.definitions` object instead. 41 | - Templates: 42 | - If you are using a custom template, you may update it to use `field.required` if you would like to take advantage of maybe types. 43 | - If you *were not* using a custom template, and relied upon the old behavior, you can either: 44 | - Override `translateField` to always return `required: true`, or 45 | - Use the [template embedded in the 0.3.1 codebase](https://github.com/STRML/json-to-flow/blob/c0ff3ac1d4e07ec8935943128a389bd5199e6e37/template.ejs). 46 | 47 | 0.3.1 (Sep 18, 2016) 48 | ----- 49 | 50 | - Bugfix: Don't crash on `#/definitions/x-any` 51 | 52 | 0.3.0 (Jun 22, 2016) 53 | ----- 54 | 55 | - Add preTemplateFn and hookable translateField. 56 | 57 | 0.2.0 (Jun 21, 2016) 58 | ----- 59 | 60 | - Rework options and data, simplify a bit. 61 | 62 | 0.1.0 (May 10, 2016) 63 | ----- 64 | 65 | - Support custom template files via `templateFile` and template functions via `templateFn`. 66 | 67 | 0.0.1 (Dec 12, 2015) 68 | ----- 69 | 70 | - Initial commit. 71 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Samuel Reed 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 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # json-to-flow 2 | 3 | Convert [swagger](http://swagger.io) model schemata into 4 | Flow [declaration files](http://flowtype.org/blog/2015/12/01/Version-0.19.0.html#declaration-files) (.js.flow). 5 | 6 | ### Usage 7 | 8 | See [the template](template.ejs) for more details. 9 | 10 | You can use your own custom template via the `templatePath` property, or your own template function 11 | via the `templateFn` property. See the [Options](#options) below. 12 | 13 | ```js 14 | const jsonToFlow = require('json-to-flow'); 15 | 16 | // You can generate this yourself from tooling, 17 | // or use the `definitions` property on a Swagger spec. 18 | // Note that this has changed to include the full definition object 19 | // as of 1.0.0. 20 | const schema = { 21 | User: { 22 | properties: { 23 | // primitives 24 | id: {type: 'number'}, 25 | fullname: {type: 'string'}, 26 | verified: {type: 'boolean'}, 27 | // builtins 28 | created: {type: 'Date'}, 29 | matcher: {type: 'RegExp'}, 30 | 31 | // custom types 32 | childObj: {type: 'CustomType'}, 33 | 34 | // arrays (uses swagger array spec) 35 | array: { 36 | type: 'array', 37 | items: { 38 | type: 'string' // could be a custom type or builtin too 39 | } 40 | }, 41 | arrayModels: { 42 | type: 'array', 43 | items: { 44 | // will translate this into type: 'Pet' 45 | $ref: '#/definitions/Pet' 46 | } 47 | }, 48 | 49 | // Not part of swagger, but illustrating you can put anything in 50 | literal: { 51 | type: 'Promise>' 52 | } 53 | }, 54 | required: [ 55 | "id", 56 | "fullname" 57 | ], 58 | // If true, will export an inexact object (`{...}`) 59 | additionalProperties: false 60 | } 61 | }; 62 | jsonToFlow(schema, { 63 | templateData: { 64 | modelSuperClass: 'Model', 65 | modelSuperClassPath: 'models/_model' 66 | }, 67 | targetPath: path.join(__dirname, 'models'), 68 | // templatePath: string, // Pass an optional abs ejs file path, or 69 | // templateFn: (data: {modelName: string, modelSchema: string, 70 | // modelSuperClass: string, ...options}) => string 71 | }).then((results) => { 72 | console.log(results); 73 | }) 74 | .catch(console.error); 75 | ``` 76 | 77 | You can also use the CLI: 78 | 79 | ``` 80 | yarn json-to-flow --help 81 | 82 | Options: 83 | --help Show help [boolean] 84 | --version Show version number [boolean] 85 | --superClass The name of the class your generated models should 86 | extend. [string] [default: "Model"] 87 | --superClassPath The import path for the generated model superclass. 88 | [string] [default: "models/_model"] 89 | --templatePath Optional template file override. [string] 90 | --targetPath The target path for generated files. [string] [required] 91 | --templateExtension The output file extension. [string] [default: ".js.flow"] 92 | --inputPath The input Swagger/OpenAPI JSON file path. 93 | [string] [required] 94 | 95 | $ yarn json-to-flow --inputPath swagger.json --targetPath types/auto-generated/ 96 | ``` 97 | 98 | #### Options 99 | 100 | ```js 101 | 102 | export type FullSwaggerSchema = { 103 | [key: string]: SwaggerModelSchema, 104 | }; 105 | export type SwaggerModelSchema = { 106 | properties: {[key: string]: Field}, 107 | required?: string[], 108 | additionalProperties?: boolean, 109 | }; 110 | export type ModelSchema = { 111 | [key: string]: FieldOutput; 112 | }; 113 | export type AllModelSchemata = { 114 | [modelName: string]: ModelSchema 115 | }; 116 | // Note you can add your own fields to this, if your template knows to expect them. 117 | export type TemplateData = { 118 | // In the default template, this is a map of types to add to the top of the file 119 | additionalTypes: {[key: string]: Field}, 120 | // In default template, this is what the exported class extends 121 | modelSuperClass: string, 122 | // This is the file location of that extended class 123 | modelSuperClassPath: string, 124 | modelName: string, // automatically filled in 125 | modelSchema: ModelSchema, // automatically filled in 126 | }; 127 | export type Field = {type: string, $ref?: string, format?: string, items?: Field}; 128 | export type FieldOutput = {type: string, $ref?: string, format?: string, required: boolean}; 129 | 130 | export type Options = { 131 | // The path to the default template. You can override this. The entirety of the options 132 | // object is passed to the template so you can add anything you like. 133 | templatePath: string = path.join(__dirname, 'template.ejs'), 134 | 135 | // 136 | // Variables used in default template. 137 | // Note that `modelName` and `modelSchema` is automatically merged into this on every iteration. 138 | // 139 | templateData: $Shape = {modelSuperClass: 'Model', modelSuperClassPath: 'models/_model'}, 140 | 141 | // If present, defines where the output goes. You can also pass a function. 142 | // If not present, will call back with compiled template. 143 | targetPath?: string | (modelName: string) => string, 144 | 145 | // The default target file extension. Note the leading `.`, intentional so you can add suffixes etc. 146 | templateExtension: string = '.js.flow', 147 | 148 | // By default, this translator takes in Swagger spec data and translates it to JS as closely 149 | // as is reasonable. You may not like how it does or may want to add your own hooks - do it here. 150 | // You can access the default translator at require('json-to-flow').defaults.translateField. 151 | translateField: (Field, Options, SwaggerModelSchema, string) => FieldOutput = defaults.fieldTranslator, 152 | 153 | // Optional hook for transforming data right before it is passed to templateFn. 154 | preTemplateFn?: ?(TemplateData) => TemplateData, 155 | 156 | // This is populated at runtime with an ejs.compile() call. Replace this if you want to use another 157 | // template engine. 158 | templateFn: (TemplateData) => string, 159 | }; 160 | ``` 161 | 162 | #### Example Output 163 | 164 | ```js 165 | import {Model} from 'models/_model'; 166 | 167 | export class UserModel extends Model { 168 | id: number; 169 | fullname: string; 170 | verified: boolean; 171 | created: Date; 172 | matcher: RegExp; 173 | childObj: CustomType; 174 | optionalType: ?string, 175 | array: Array; 176 | arrayModels: Array; 177 | literal: Promise>; 178 | } 179 | ``` 180 | -------------------------------------------------------------------------------- /cli.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | // @flow 4 | const path = require('path'); 5 | const jsonToFlow = require('./index'); 6 | // $FlowIgnore 7 | const yargs = require('yargs/yargs'); 8 | const { hideBin } = require('yargs/helpers'); 9 | 10 | /*:: import type {Options} from './index' */ 11 | 12 | 13 | const argv = yargs(hideBin(process.argv)) 14 | .option('superClass', { 15 | type: 'string', 16 | default: 'Model', 17 | description: 'The name of the class your generated models should extend.' 18 | }) 19 | .option('superClassPath', { 20 | type: 'string', 21 | default: 'models/_model', 22 | description: 'The import path for the generated model superclass.' 23 | }) 24 | .option('templatePath', { 25 | type: 'string', 26 | description: 'Optional template file override.' 27 | }) 28 | .option('targetPath', { 29 | type: 'string', 30 | description: 'The target path for generated files.' 31 | }) 32 | .option('templateExtension', { 33 | type: 'string', 34 | default: '.js.flow', 35 | description: 'The output file extension.' 36 | }) 37 | .option('inputPath', { 38 | type: 'string', 39 | description: 'The input Swagger/OpenAPI JSON file path.' 40 | }) 41 | .demandOption(['inputPath', 'targetPath']) 42 | .argv; 43 | 44 | const config/*: $Shape */ = { 45 | templatePath: argv.templatePath, 46 | templateData: ({ 47 | modelSuperClass: argv.superClass, 48 | modelSuperClassPath: argv.superClassPath, 49 | }/*: $Shape<$PropertyType> */), 50 | templateExtension: argv.templateExtension, 51 | targetPath: argv.targetPath, 52 | }; 53 | 54 | // So we don't override defaults 55 | function trimNullUndefined(obj/*: Object */)/*: Object */ { 56 | return Object.keys(obj).reduce((memo, key) => { 57 | if (obj[key] != null) memo[key] = obj[key]; 58 | return memo; 59 | }, {}); 60 | } 61 | 62 | // $FlowIgnore 63 | const fileContents = require(path.join(__dirname, argv.inputPath)); 64 | jsonToFlow('definitions' in fileContents ? fileContents.definitions : fileContents, trimNullUndefined(config)); 65 | 66 | module.exports = config; 67 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | // @flow 2 | const fs = require('fs'); 3 | const path = require('path'); 4 | const ejs = require('ejs'); 5 | const {promisify} = require('util'); 6 | 7 | const readFile = promisify(fs.readFile); 8 | const writeFile = promisify(fs.writeFile); 9 | 10 | /*:: 11 | export type FullSwaggerSchema = { 12 | [key: string]: SwaggerModelSchema, 13 | }; 14 | export type SwaggerModelSchema = { 15 | properties: {[key: string]: Field}, 16 | required?: string[], 17 | additionalProperties?: boolean, 18 | }; 19 | export type ModelSchema = { 20 | [key: string]: FieldOutput; 21 | }; 22 | export type AllModelSchemata = { 23 | [modelName: string]: ModelSchema 24 | }; 25 | export type TemplateData = { 26 | additionalTypes: {[key: string]: Field}, 27 | modelSuperClass: string, 28 | modelSuperClassPath: string, 29 | modelName: string, 30 | modelSchema: ModelSchema, 31 | }; 32 | export type Options = { 33 | templatePath: string, 34 | templateData: TemplateData, 35 | templateExtension: string, 36 | targetPath?: string | (modelName: string) => string, 37 | translateField: (Field, Options, SwaggerModelSchema, string) => FieldOutput, 38 | preTemplateFn?: ?(TemplateData) => TemplateData, 39 | templateFn: (TemplateData) => string, 40 | }; 41 | export type Field = {type: string, $ref?: string, format?: string, items?: Field}; 42 | export type FieldOutput = {type: string, $ref?: string, format?: string, required: boolean}; 43 | export type $DeepShape = Object & $Shape< 44 | $ObjMap(V) => $DeepShape) | ((V) => V)> 45 | >; 46 | 47 | */ 48 | const defaults = { 49 | templatePath: (path.join(__dirname, 'template.ejs')/*: string */), 50 | templateData: { 51 | additionalTypes: ({}/*: Object */), 52 | modelSuperClass: 'Model', 53 | modelSuperClassPath: 'models/_model', 54 | }, 55 | templateExtension: '.js.flow', 56 | translateField: translateField, 57 | preTemplateFn: null, 58 | }; 59 | 60 | // Storage for precompiled templates 61 | const templateCache = {}; 62 | 63 | // This expects an object containing model definitions conforming to the Swagger spec. 64 | // On a typical swagger.json this would be the 'definitions' key. 65 | // See test/ for an example. 66 | // On callback, if there is an error, it's either a template generation error or a file writing error. 67 | async function generateDefinitions(schemataObj/*: FullSwaggerSchema */, options/*: $DeepShape */)/*: AllModelSchemata */ { 68 | options = { 69 | ...defaults, 70 | ...options, 71 | templateData: {...defaults.templateData, ...options.templateData}, 72 | }; 73 | 74 | // Allow user to pass in a template function or a file path. 75 | if (!options.templateFn && options.templatePath) { 76 | if (!templateCache[options.templatePath]) { 77 | templateCache[options.templatePath] = ejs.compile((await readFile(options.templatePath)).toString('utf8')); 78 | } 79 | options.templateFn = templateCache[options.templatePath]; 80 | } 81 | 82 | const results = generateAllResults(schemataObj, options); 83 | if (options.targetPath) { 84 | await writeAllResults(options.targetPath, results, options.templateExtension); 85 | } 86 | return results; 87 | } 88 | 89 | function writeAllResults(targetPath, results, templateExtension) { 90 | return Promise.all(Object.keys(results).map(function(modelName) { 91 | let filePath; 92 | if (typeof targetPath === 'function') { 93 | filePath = targetPath(modelName); 94 | } else { 95 | filePath = path.join(targetPath, modelName + templateExtension); 96 | } 97 | return writeFile(filePath, results[modelName]); 98 | })); 99 | } 100 | 101 | // Given the full schema object, parse each model's definition. 102 | function generateAllResults(schemataObj/*: FullSwaggerSchema */, options)/*: AllModelSchemata */ { 103 | return Object.keys(schemataObj).reduce(function(memo, modelName) { 104 | memo[modelName] = generateJS(modelName, schemataObj[modelName], options); 105 | return memo; 106 | }, {}); 107 | } 108 | 109 | // Given each model, generate a definition. 110 | function generateJS(modelName/*: string */, modelSchema/*: SwaggerModelSchema */, options) { 111 | const schema = translateSchema(modelSchema, options); 112 | let data = {...options.templateData, modelName: modelName, modelSchema: schema}; 113 | if (options.preTemplateFn) data = options.preTemplateFn(data); 114 | return options.templateFn(data); 115 | } 116 | 117 | // Given a schema, turn the `type` field into something Flow-writable, and add `required.` 118 | function translateSchema(modelSchema/*: SwaggerModelSchema */, options)/*: ModelSchema */ { 119 | return Object.keys(modelSchema.properties).reduce(function(memo, key) { 120 | memo[key] = options.translateField(modelSchema.properties[key], options, modelSchema, key); 121 | return memo; 122 | }, {}); 123 | } 124 | 125 | // Translates $refs 126 | const refRegex = /\/([^/]+?)$/; 127 | const translations = {'x-any': 'any'}; 128 | function translateField(field/*: Field */, options/*: Options */, modelSchema/*: SwaggerModelSchema */, key/*: string */)/*: FieldOutput */ { 129 | const fieldDef = { 130 | ...field, 131 | // Marks a field as required or optional. 132 | // Swagger/OpenAPI schemata have a `required` array of keys. 133 | required: (modelSchema && modelSchema.required ? modelSchema.required : []).includes(key), 134 | }; 135 | if (field.items) { 136 | fieldDef.type = 'Array<' + options.translateField(field.items, options, modelSchema, key).type + '>'; 137 | } else if (field.type === 'string' && (field.format === 'date' || field.format === 'date-time')) { 138 | fieldDef.type = 'Date'; 139 | } else if (field.$ref) { 140 | const match = field.$ref.match(refRegex); 141 | if (match && match.length >= 2) { 142 | fieldDef.type = translations[match[1]] || match[1]; 143 | } 144 | } 145 | return fieldDef; 146 | } 147 | 148 | 149 | module.exports = generateDefinitions; 150 | module.exports.defaults = {...defaults}; 151 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "json-to-flow", 3 | "version": "1.0.1", 4 | "description": "Convert JSON type definitions to Flow types.", 5 | "main": "index.js", 6 | "bin": { 7 | "json-to-flow": "cli.js" 8 | }, 9 | "engines": { 10 | "node": "^10.13.0 || ^12.13.0 || >=14.0.0" 11 | }, 12 | "dependencies": { 13 | "ejs": "^3.1.5", 14 | "yargs": "^16.2.0" 15 | }, 16 | "devDependencies": { 17 | "eslint": "7.18.0", 18 | "flow-bin": "^0.143.1", 19 | "lodash": "^4.17.20", 20 | "mocha": "^8.2.1", 21 | "pre-commit": "^1.1.2" 22 | }, 23 | "scripts": { 24 | "test": "mocha test/*.spec.js", 25 | "lint": "echo 'Linting...'; eslint .; flow" 26 | }, 27 | "repository": { 28 | "type": "git", 29 | "url": "git+https://github.com/STRML/json-to-flow.git" 30 | }, 31 | "keywords": [ 32 | "json", 33 | "flow", 34 | "model", 35 | "schema" 36 | ], 37 | "precommit": [ 38 | "lint", 39 | "test" 40 | ], 41 | "author": "Samuel Reed (http://strml.net/)", 42 | "license": "MIT", 43 | "bugs": { 44 | "url": "https://github.com/STRML/json-to-flow/issues" 45 | }, 46 | "homepage": "https://github.com/STRML/json-to-flow#readme" 47 | } 48 | -------------------------------------------------------------------------------- /template.ejs: -------------------------------------------------------------------------------- 1 | // @flow 2 | <% if (modelSuperClass) { -%> 3 | import {<%= modelSuperClass %>} from '<%= modelSuperClassPath %>'; 4 | <% } -%> 5 | <% -%> 6 | <% Object.keys(additionalTypes).forEach(function(value, key) { -%> 7 | export type <%= key %> = <%- value %>; <% /* TODO */ %> 8 | <% }); -%> 9 | 10 | export class <%= modelName %>Model <%= modelSuperClass ? 'extends ' + modelSuperClass : '' %> { 11 | <% Object.keys(modelSchema).forEach(function(key) { -%> 12 | <%= key %>: <%- modelSchema[key].required ? '' : '?'%><%- modelSchema[key].type %>; 13 | <% }); -%> 14 | } 15 | -------------------------------------------------------------------------------- /test/expected/ApiKey-noDate.js.flow: -------------------------------------------------------------------------------- 1 | // @flow 2 | import {Model} from 'models/_model'; 3 | 4 | export class ApiKeyModel extends Model { 5 | id: string; 6 | secret: string; 7 | name: string; 8 | nonce: number; 9 | cidr: ?string; 10 | permissions: ?Array; 11 | enabled: boolean; 12 | userId: number; 13 | created: string; 14 | } 15 | -------------------------------------------------------------------------------- /test/expected/ApiKey.js.flow: -------------------------------------------------------------------------------- 1 | // @flow 2 | import {Model} from 'models/_model'; 3 | 4 | export class ApiKeyModel extends Model { 5 | id: string; 6 | secret: string; 7 | name: string; 8 | nonce: number; 9 | cidr: ?string; 10 | permissions: ?Array; 11 | enabled: boolean; 12 | userId: number; 13 | created: Date; 14 | } 15 | -------------------------------------------------------------------------------- /test/expected/Instrument.js.flow: -------------------------------------------------------------------------------- 1 | // @flow 2 | import {Model} from 'models/_model'; 3 | 4 | export class InstrumentModel extends Model { 5 | symbol: string; 6 | rootSymbol: ?string; 7 | state: ?string; 8 | typ: ?string; 9 | listing: ?Date; 10 | front: ?Date; 11 | expiry: ?Date; 12 | relistInterval: ?Date; 13 | inverseLeg: ?string; 14 | sellLeg: ?string; 15 | buyLeg: ?string; 16 | underlying: ?string; 17 | quoteCurrency: ?string; 18 | underlyingSymbol: ?string; 19 | reference: ?string; 20 | referenceSymbol: ?string; 21 | tickSize: ?number; 22 | multiplier: ?number; 23 | settlCurrency: ?string; 24 | underlyingToSettleMultiplier: ?number; 25 | quoteToSettleMultiplier: ?number; 26 | isQuanto: ?boolean; 27 | isInverse: ?boolean; 28 | initMargin: ?number; 29 | maintMargin: ?number; 30 | limit: ?number; 31 | capped: ?boolean; 32 | taxed: ?boolean; 33 | makerFee: ?number; 34 | takerFee: ?number; 35 | settlementFee: ?number; 36 | insuranceFee: ?number; 37 | openingTimestamp: ?Date; 38 | closingTimestamp: ?Date; 39 | sessionInterval: ?Date; 40 | prevClosePrice: ?number; 41 | limitDownPrice: ?number; 42 | limitUpPrice: ?number; 43 | bankruptLimitDownPrice: ?number; 44 | bankruptLimitUpPrice: ?number; 45 | prevTotalVolume: ?number; 46 | totalVolume: ?number; 47 | volume: ?number; 48 | volume24h: ?number; 49 | prevTotalTurnover: ?number; 50 | totalTurnover: ?number; 51 | turnover: ?number; 52 | turnover24h: ?number; 53 | prevPrice24h: ?number; 54 | vwap: ?number; 55 | highPrice: ?number; 56 | lowPrice: ?number; 57 | lastPrice: ?number; 58 | lastPriceProtected: ?number; 59 | lastTickDirection: ?string; 60 | lastChangePcnt: ?number; 61 | bidPrice: ?number; 62 | midPrice: ?number; 63 | askPrice: ?number; 64 | impactBidPrice: ?number; 65 | impactMidPrice: ?number; 66 | impactAskPrice: ?number; 67 | hasLiquidity: ?boolean; 68 | openInterest: ?number; 69 | openValue: ?number; 70 | fairMethod: ?string; 71 | fairBasisRate: ?number; 72 | fairBasis: ?number; 73 | fairPrice: ?number; 74 | markMethod: ?string; 75 | markPrice: ?number; 76 | indicativeTaxRate: ?number; 77 | indicativeSettlePrice: ?number; 78 | settledPrice: ?number; 79 | timestamp: ?Date; 80 | } 81 | -------------------------------------------------------------------------------- /test/expected/Order.js.flow: -------------------------------------------------------------------------------- 1 | // @flow 2 | import {Model} from 'models/_model'; 3 | 4 | export class OrderModel extends Model { 5 | orderID: string; 6 | clOrdID: ?string; 7 | account: ?number; 8 | symbol: ?string; 9 | side: ?string; 10 | simpleOrderQty: ?number; 11 | orderQty: ?number; 12 | price: ?number; 13 | minQty: ?number; 14 | stopPx: ?number; 15 | currency: ?string; 16 | settlCurrency: ?string; 17 | ordType: ?string; 18 | timeInForce: ?string; 19 | execInst: ?string; 20 | exDestination: ?string; 21 | ordStatus: ?string; 22 | workingIndicator: ?boolean; 23 | ordRejReason: ?string; 24 | simpleLeavesQty: ?number; 25 | leavesQty: ?number; 26 | simpleCumQty: ?number; 27 | cumQty: ?number; 28 | avgPx: ?number; 29 | multiLegReportingType: ?string; 30 | text: ?string; 31 | transactTime: ?Date; 32 | timestamp: ?Date; 33 | } 34 | -------------------------------------------------------------------------------- /test/expected/User.custom.js.flow: -------------------------------------------------------------------------------- 1 | // @flow 2 | import {Model} from 'models/_model'; 3 | 4 | export type UserModel = { 5 | id: number; 6 | firstname: string; 7 | lastname: string; 8 | status: string; 9 | username: string; 10 | email: string; 11 | phone: string; 12 | countryCode: number; 13 | created: Date; 14 | lastUpdated: Date; 15 | preferences: UserPreferences; 16 | TFAEnabled: string; 17 | affiliateID: string; 18 | pgpPubKey: string; 19 | country: string; 20 | disabled: boolean; 21 | } 22 | -------------------------------------------------------------------------------- /test/expected/User.js.flow: -------------------------------------------------------------------------------- 1 | // @flow 2 | import {Model} from 'models/_model'; 3 | 4 | export class UserModel extends Model { 5 | id: number; 6 | firstname: ?string; 7 | lastname: ?string; 8 | status: ?string; 9 | username: string; 10 | email: string; 11 | phone: ?string; 12 | countryCode: ?number; 13 | created: ?Date; 14 | lastUpdated: ?Date; 15 | preferences: ?UserPreferences; 16 | TFAEnabled: ?string; 17 | affiliateID: ?string; 18 | pgpPubKey: ?string; 19 | country: ?string; 20 | disabled: ?boolean; 21 | } 22 | -------------------------------------------------------------------------------- /test/fixtures/customTemplate.ejs: -------------------------------------------------------------------------------- 1 | // @flow 2 | import {<%= modelSuperClass %>} from '<%= modelSuperClassPath %>'; 3 | 4 | <% Object.keys(additionalTypes).forEach(function(value, key) { -%> 5 | export type <%= key %> = <%- value %>; <% /* TODO */ %> 6 | <% }); -%> 7 | <%= Object.keys(additionalTypes).length ? '\n' : '' -%> 8 | export type <%= modelName %>Model = { 9 | <% Object.keys(modelSchema).forEach(function(key) { -%> 10 | <%= key %>: <%- /* note: missing 'required' intentionally */%><%- modelSchema[key].type %>; 11 | <% }); -%> 12 | } 13 | -------------------------------------------------------------------------------- /test/results/.gitignore: -------------------------------------------------------------------------------- 1 | *.flow 2 | -------------------------------------------------------------------------------- /test/test.spec.js: -------------------------------------------------------------------------------- 1 | // @flow 2 | const data = require('./swagger.json'); 3 | const jsonToFlow = require('../index'); 4 | const path = require('path'); 5 | const _ = require('lodash'); 6 | const assert = require('assert'); 7 | const fs = require('fs'); 8 | const {before, describe, it} = require('mocha'); 9 | 10 | /*:: 11 | import type {Field, FieldOutput, Options, SwaggerModelSchema} from '../index'; 12 | */ 13 | 14 | const EXPECTED = path.join(__dirname, 'expected'); 15 | const RESULTS = path.join(__dirname, 'results'); 16 | 17 | // Data is like: 18 | // {Model: { 19 | // id: { 20 | // type: 'number' 21 | // }, 22 | // username: { 23 | // type: 'string' 24 | // } 25 | // }, ...} 26 | const models = ['Order', 'Instrument', 'User', 'ApiKey']; 27 | const schemata = _(data.definitions) 28 | .pick(models) 29 | .value(); 30 | 31 | before(function() { 32 | fs.readdirSync(RESULTS).forEach(function(fileName) { 33 | if (path.extname(fileName) === ".flow") fs.unlinkSync(path.join(RESULTS, fileName)); 34 | }); 35 | }); 36 | 37 | describe('json-to-flow', function() { 38 | it('generates definitions without error', async function() { 39 | const results = await jsonToFlow(schemata, { 40 | templateData: { 41 | modelSuperClass: 'Model', 42 | modelSuperClassPath: 'models/_model', 43 | }, 44 | targetPath: path.join(__dirname, 'results') 45 | }); 46 | assert.equal(_.isEqual(Object.keys(results), models), true); 47 | }); 48 | 49 | it('generates definition templates equal to spec', function() { 50 | models.forEach(function(model) { 51 | var expected = fs.readFileSync(path.join(EXPECTED, model + '.js.flow')).toString(); 52 | var result = fs.readFileSync(path.join(RESULTS, model + '.js.flow')).toString(); 53 | assert.equal(expected, result); 54 | }); 55 | }); 56 | 57 | it('supports targetPath function', async function() { 58 | const results = await jsonToFlow(schemata, { 59 | templateData: { 60 | modelSuperClass: 'Model', 61 | modelSuperClassPath: 'models/_model', 62 | }, 63 | targetPath: function(modelName) { 64 | return path.join(RESULTS, modelName.toLowerCase() + '.es6.flow'); 65 | } 66 | }); 67 | assert.equal(_.isEqual(Object.keys(results), models), true); 68 | Object.keys(results).forEach(function(modelName) { 69 | assert.doesNotThrow(function() { 70 | fs.accessSync(path.join(RESULTS, modelName.toLowerCase() + '.es6.flow')); 71 | }); 72 | }); 73 | }); 74 | 75 | it('supports a custom templatePath', async function() { 76 | const results = await jsonToFlow(schemata, { 77 | templateData: { 78 | modelSuperClass: 'Model', 79 | modelSuperClassPath: 'models/_model', 80 | }, 81 | templatePath: path.join(__dirname, 'fixtures', 'customTemplate.ejs') 82 | }); 83 | assert.equal(_.isEqual(Object.keys(results), models), true); 84 | assert.equal(results.User, fs.readFileSync(path.join(EXPECTED, 'User.custom.js.flow')).toString()); 85 | }); 86 | 87 | it('supports a custom template fn', async function() { 88 | const results = await jsonToFlow(schemata, { 89 | templateData: { 90 | modelSuperClass: 'Model', 91 | modelSuperClassPath: 'models/_model', 92 | }, 93 | templateFn: function(data) { 94 | return 'custom template for ' + data.modelName; 95 | } 96 | }); 97 | assert.equal(_.isEqual(Object.keys(results), models), true); 98 | assert.equal(results.User, 'custom template for User'); 99 | }); 100 | 101 | it('supports a preTemplateFn', async function() { 102 | const results = await jsonToFlow(schemata, { 103 | templateData: { 104 | modelSuperClass: 'Model', 105 | modelSuperClassPath: 'models/_model', 106 | }, 107 | preTemplateFn: function(data) { 108 | data.modelName = 'Me'; 109 | return data; 110 | }, 111 | templateFn: function(data) { 112 | return 'custom template for ' + data.modelName; 113 | } 114 | }); 115 | assert.equal(_.isEqual(Object.keys(results), models), true); 116 | assert.equal(results.User, 'custom template for Me'); 117 | }); 118 | 119 | it('supports a custom translateField', async function() { 120 | const results = await jsonToFlow(schemata, { 121 | templateData: { 122 | modelSuperClass: 'Model', 123 | modelSuperClassPath: 'models/_model', 124 | }, 125 | translateField(field/*: Field */, options/*: Options */, modelSchema/*: SwaggerModelSchema */, key/*: string */)/*: FieldOutput */ { 126 | // Removed date ref translation 127 | const fieldDef = { 128 | ...field, 129 | // Marks a field as required or optional. 130 | // Swagger/OpenAPI schemata have a `required` array of keys. 131 | required: (modelSchema && modelSchema.required ? modelSchema.required : []).includes(key), 132 | }; 133 | if (field.items) { 134 | fieldDef.type = 'Array<' + options.translateField(field.items, options, modelSchema, key).type + '>'; 135 | } 136 | return fieldDef; 137 | } 138 | }); 139 | const expected = fs.readFileSync(path.join(EXPECTED, 'ApiKey-noDate.js.flow')).toString(); 140 | assert.equal(expected, results.ApiKey); 141 | }); 142 | }); 143 | 144 | 145 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0": 6 | version "7.12.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.10.4": 13 | version "7.12.11" 14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" 15 | integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== 16 | 17 | "@babel/highlight@^7.10.4": 18 | version "7.10.4" 19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" 20 | integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.10.4" 23 | chalk "^2.0.0" 24 | js-tokens "^4.0.0" 25 | 26 | "@eslint/eslintrc@^0.3.0": 27 | version "0.3.0" 28 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.3.0.tgz#d736d6963d7003b6514e6324bec9c602ac340318" 29 | integrity sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg== 30 | dependencies: 31 | ajv "^6.12.4" 32 | debug "^4.1.1" 33 | espree "^7.3.0" 34 | globals "^12.1.0" 35 | ignore "^4.0.6" 36 | import-fresh "^3.2.1" 37 | js-yaml "^3.13.1" 38 | lodash "^4.17.20" 39 | minimatch "^3.0.4" 40 | strip-json-comments "^3.1.1" 41 | 42 | "@ungap/promise-all-settled@1.1.2": 43 | version "1.1.2" 44 | resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" 45 | integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== 46 | 47 | acorn-jsx@^5.3.1: 48 | version "5.3.1" 49 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" 50 | integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== 51 | 52 | acorn@^7.4.0: 53 | version "7.4.1" 54 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" 55 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== 56 | 57 | ajv@^6.10.0, ajv@^6.12.4: 58 | version "6.12.6" 59 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 60 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 61 | dependencies: 62 | fast-deep-equal "^3.1.1" 63 | fast-json-stable-stringify "^2.0.0" 64 | json-schema-traverse "^0.4.1" 65 | uri-js "^4.2.2" 66 | 67 | ajv@^7.0.2: 68 | version "7.0.3" 69 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.0.3.tgz#13ae747eff125cafb230ac504b2406cf371eece2" 70 | integrity sha512-R50QRlXSxqXcQP5SvKUrw8VZeypvo12i2IX0EeR5PiZ7bEKeHWgzgo264LDadUsCU42lTJVhFikTqJwNeH34gQ== 71 | dependencies: 72 | fast-deep-equal "^3.1.1" 73 | json-schema-traverse "^1.0.0" 74 | require-from-string "^2.0.2" 75 | uri-js "^4.2.2" 76 | 77 | ansi-colors@4.1.1, ansi-colors@^4.1.1: 78 | version "4.1.1" 79 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 80 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 81 | 82 | ansi-regex@^3.0.0: 83 | version "3.0.0" 84 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 85 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 86 | 87 | ansi-regex@^4.1.0: 88 | version "4.1.0" 89 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 90 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 91 | 92 | ansi-regex@^5.0.0: 93 | version "5.0.0" 94 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" 95 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== 96 | 97 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 98 | version "3.2.1" 99 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 100 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 101 | dependencies: 102 | color-convert "^1.9.0" 103 | 104 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 105 | version "4.3.0" 106 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 107 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 108 | dependencies: 109 | color-convert "^2.0.1" 110 | 111 | anymatch@~3.1.1: 112 | version "3.1.1" 113 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" 114 | integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== 115 | dependencies: 116 | normalize-path "^3.0.0" 117 | picomatch "^2.0.4" 118 | 119 | argparse@^1.0.7: 120 | version "1.0.10" 121 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 122 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 123 | dependencies: 124 | sprintf-js "~1.0.2" 125 | 126 | astral-regex@^2.0.0: 127 | version "2.0.0" 128 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" 129 | integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== 130 | 131 | async@0.9.x: 132 | version "0.9.2" 133 | resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" 134 | integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0= 135 | 136 | balanced-match@^1.0.0: 137 | version "1.0.0" 138 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 139 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 140 | 141 | binary-extensions@^2.0.0: 142 | version "2.2.0" 143 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 144 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 145 | 146 | brace-expansion@^1.1.7: 147 | version "1.1.11" 148 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 149 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 150 | dependencies: 151 | balanced-match "^1.0.0" 152 | concat-map "0.0.1" 153 | 154 | braces@~3.0.2: 155 | version "3.0.2" 156 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 157 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 158 | dependencies: 159 | fill-range "^7.0.1" 160 | 161 | browser-stdout@1.3.1: 162 | version "1.3.1" 163 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 164 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 165 | 166 | buffer-from@^1.0.0: 167 | version "1.1.1" 168 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 169 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 170 | 171 | callsites@^3.0.0: 172 | version "3.1.0" 173 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 174 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 175 | 176 | camelcase@^5.0.0: 177 | version "5.3.1" 178 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 179 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 180 | 181 | camelcase@^6.0.0: 182 | version "6.2.0" 183 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" 184 | integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== 185 | 186 | chalk@^2.0.0, chalk@^2.4.2: 187 | version "2.4.2" 188 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 189 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 190 | dependencies: 191 | ansi-styles "^3.2.1" 192 | escape-string-regexp "^1.0.5" 193 | supports-color "^5.3.0" 194 | 195 | chalk@^4.0.0: 196 | version "4.1.0" 197 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" 198 | integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== 199 | dependencies: 200 | ansi-styles "^4.1.0" 201 | supports-color "^7.1.0" 202 | 203 | chokidar@3.4.3: 204 | version "3.4.3" 205 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" 206 | integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== 207 | dependencies: 208 | anymatch "~3.1.1" 209 | braces "~3.0.2" 210 | glob-parent "~5.1.0" 211 | is-binary-path "~2.1.0" 212 | is-glob "~4.0.1" 213 | normalize-path "~3.0.0" 214 | readdirp "~3.5.0" 215 | optionalDependencies: 216 | fsevents "~2.1.2" 217 | 218 | cliui@^5.0.0: 219 | version "5.0.0" 220 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" 221 | integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== 222 | dependencies: 223 | string-width "^3.1.0" 224 | strip-ansi "^5.2.0" 225 | wrap-ansi "^5.1.0" 226 | 227 | cliui@^7.0.2: 228 | version "7.0.4" 229 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" 230 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 231 | dependencies: 232 | string-width "^4.2.0" 233 | strip-ansi "^6.0.0" 234 | wrap-ansi "^7.0.0" 235 | 236 | color-convert@^1.9.0: 237 | version "1.9.3" 238 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 239 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 240 | dependencies: 241 | color-name "1.1.3" 242 | 243 | color-convert@^2.0.1: 244 | version "2.0.1" 245 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 246 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 247 | dependencies: 248 | color-name "~1.1.4" 249 | 250 | color-name@1.1.3: 251 | version "1.1.3" 252 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 253 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 254 | 255 | color-name@~1.1.4: 256 | version "1.1.4" 257 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 258 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 259 | 260 | concat-map@0.0.1: 261 | version "0.0.1" 262 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 263 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 264 | 265 | concat-stream@^1.4.7: 266 | version "1.6.2" 267 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" 268 | integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== 269 | dependencies: 270 | buffer-from "^1.0.0" 271 | inherits "^2.0.3" 272 | readable-stream "^2.2.2" 273 | typedarray "^0.0.6" 274 | 275 | core-util-is@~1.0.0: 276 | version "1.0.2" 277 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 278 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 279 | 280 | cross-spawn@^5.0.1: 281 | version "5.1.0" 282 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" 283 | integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= 284 | dependencies: 285 | lru-cache "^4.0.1" 286 | shebang-command "^1.2.0" 287 | which "^1.2.9" 288 | 289 | cross-spawn@^7.0.2: 290 | version "7.0.3" 291 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 292 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 293 | dependencies: 294 | path-key "^3.1.0" 295 | shebang-command "^2.0.0" 296 | which "^2.0.1" 297 | 298 | debug@4.2.0: 299 | version "4.2.0" 300 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" 301 | integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== 302 | dependencies: 303 | ms "2.1.2" 304 | 305 | debug@^4.0.1, debug@^4.1.1: 306 | version "4.3.1" 307 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" 308 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== 309 | dependencies: 310 | ms "2.1.2" 311 | 312 | decamelize@^1.2.0: 313 | version "1.2.0" 314 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 315 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 316 | 317 | decamelize@^4.0.0: 318 | version "4.0.0" 319 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" 320 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== 321 | 322 | deep-is@^0.1.3: 323 | version "0.1.3" 324 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 325 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 326 | 327 | diff@4.0.2: 328 | version "4.0.2" 329 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 330 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 331 | 332 | doctrine@^3.0.0: 333 | version "3.0.0" 334 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 335 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 336 | dependencies: 337 | esutils "^2.0.2" 338 | 339 | ejs@^3.1.5: 340 | version "3.1.5" 341 | resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.5.tgz#aed723844dc20acb4b170cd9ab1017e476a0d93b" 342 | integrity sha512-dldq3ZfFtgVTJMLjOe+/3sROTzALlL9E34V4/sDtUd/KlBSS0s6U1/+WPE1B4sj9CXHJpL1M6rhNJnc9Wbal9w== 343 | dependencies: 344 | jake "^10.6.1" 345 | 346 | emoji-regex@^7.0.1: 347 | version "7.0.3" 348 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 349 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 350 | 351 | emoji-regex@^8.0.0: 352 | version "8.0.0" 353 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 354 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 355 | 356 | enquirer@^2.3.5: 357 | version "2.3.6" 358 | resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" 359 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== 360 | dependencies: 361 | ansi-colors "^4.1.1" 362 | 363 | escalade@^3.1.1: 364 | version "3.1.1" 365 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 366 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 367 | 368 | escape-string-regexp@4.0.0: 369 | version "4.0.0" 370 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 371 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 372 | 373 | escape-string-regexp@^1.0.5: 374 | version "1.0.5" 375 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 376 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 377 | 378 | eslint-scope@^5.1.1: 379 | version "5.1.1" 380 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 381 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 382 | dependencies: 383 | esrecurse "^4.3.0" 384 | estraverse "^4.1.1" 385 | 386 | eslint-utils@^2.1.0: 387 | version "2.1.0" 388 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" 389 | integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== 390 | dependencies: 391 | eslint-visitor-keys "^1.1.0" 392 | 393 | eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: 394 | version "1.3.0" 395 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" 396 | integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== 397 | 398 | eslint-visitor-keys@^2.0.0: 399 | version "2.0.0" 400 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" 401 | integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== 402 | 403 | eslint@7.18.0: 404 | version "7.18.0" 405 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.18.0.tgz#7fdcd2f3715a41fe6295a16234bd69aed2c75e67" 406 | integrity sha512-fbgTiE8BfUJZuBeq2Yi7J3RB3WGUQ9PNuNbmgi6jt9Iv8qrkxfy19Ds3OpL1Pm7zg3BtTVhvcUZbIRQ0wmSjAQ== 407 | dependencies: 408 | "@babel/code-frame" "^7.0.0" 409 | "@eslint/eslintrc" "^0.3.0" 410 | ajv "^6.10.0" 411 | chalk "^4.0.0" 412 | cross-spawn "^7.0.2" 413 | debug "^4.0.1" 414 | doctrine "^3.0.0" 415 | enquirer "^2.3.5" 416 | eslint-scope "^5.1.1" 417 | eslint-utils "^2.1.0" 418 | eslint-visitor-keys "^2.0.0" 419 | espree "^7.3.1" 420 | esquery "^1.2.0" 421 | esutils "^2.0.2" 422 | file-entry-cache "^6.0.0" 423 | functional-red-black-tree "^1.0.1" 424 | glob-parent "^5.0.0" 425 | globals "^12.1.0" 426 | ignore "^4.0.6" 427 | import-fresh "^3.0.0" 428 | imurmurhash "^0.1.4" 429 | is-glob "^4.0.0" 430 | js-yaml "^3.13.1" 431 | json-stable-stringify-without-jsonify "^1.0.1" 432 | levn "^0.4.1" 433 | lodash "^4.17.20" 434 | minimatch "^3.0.4" 435 | natural-compare "^1.4.0" 436 | optionator "^0.9.1" 437 | progress "^2.0.0" 438 | regexpp "^3.1.0" 439 | semver "^7.2.1" 440 | strip-ansi "^6.0.0" 441 | strip-json-comments "^3.1.0" 442 | table "^6.0.4" 443 | text-table "^0.2.0" 444 | v8-compile-cache "^2.0.3" 445 | 446 | espree@^7.3.0, espree@^7.3.1: 447 | version "7.3.1" 448 | resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" 449 | integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== 450 | dependencies: 451 | acorn "^7.4.0" 452 | acorn-jsx "^5.3.1" 453 | eslint-visitor-keys "^1.3.0" 454 | 455 | esprima@^4.0.0: 456 | version "4.0.1" 457 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 458 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 459 | 460 | esquery@^1.2.0: 461 | version "1.3.1" 462 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" 463 | integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== 464 | dependencies: 465 | estraverse "^5.1.0" 466 | 467 | esrecurse@^4.3.0: 468 | version "4.3.0" 469 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 470 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 471 | dependencies: 472 | estraverse "^5.2.0" 473 | 474 | estraverse@^4.1.1: 475 | version "4.3.0" 476 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 477 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 478 | 479 | estraverse@^5.1.0, estraverse@^5.2.0: 480 | version "5.2.0" 481 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" 482 | integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== 483 | 484 | esutils@^2.0.2: 485 | version "2.0.3" 486 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 487 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 488 | 489 | fast-deep-equal@^3.1.1: 490 | version "3.1.3" 491 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 492 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 493 | 494 | fast-json-stable-stringify@^2.0.0: 495 | version "2.1.0" 496 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 497 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 498 | 499 | fast-levenshtein@^2.0.6: 500 | version "2.0.6" 501 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 502 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 503 | 504 | file-entry-cache@^6.0.0: 505 | version "6.0.0" 506 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a" 507 | integrity sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA== 508 | dependencies: 509 | flat-cache "^3.0.4" 510 | 511 | filelist@^1.0.1: 512 | version "1.0.1" 513 | resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.1.tgz#f10d1a3ae86c1694808e8f20906f43d4c9132dbb" 514 | integrity sha512-8zSK6Nu0DQIC08mUC46sWGXi+q3GGpKydAG36k+JDba6VRpkevvOWUW5a/PhShij4+vHT9M+ghgG7eM+a9JDUQ== 515 | dependencies: 516 | minimatch "^3.0.4" 517 | 518 | fill-range@^7.0.1: 519 | version "7.0.1" 520 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 521 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 522 | dependencies: 523 | to-regex-range "^5.0.1" 524 | 525 | find-up@5.0.0: 526 | version "5.0.0" 527 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 528 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 529 | dependencies: 530 | locate-path "^6.0.0" 531 | path-exists "^4.0.0" 532 | 533 | find-up@^3.0.0: 534 | version "3.0.0" 535 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 536 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== 537 | dependencies: 538 | locate-path "^3.0.0" 539 | 540 | flat-cache@^3.0.4: 541 | version "3.0.4" 542 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 543 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 544 | dependencies: 545 | flatted "^3.1.0" 546 | rimraf "^3.0.2" 547 | 548 | flat@^5.0.2: 549 | version "5.0.2" 550 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" 551 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== 552 | 553 | flatted@^3.1.0: 554 | version "3.1.1" 555 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" 556 | integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== 557 | 558 | flow-bin@^0.143.1: 559 | version "0.143.1" 560 | resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.143.1.tgz#2ff825dfd85e84531b0ae780842cb1c2a9743cd2" 561 | integrity sha512-6S6bgZ/pghBzEUELXkwFH/bsHT+GBMo8ftHDYs0SSJ+1e6NRdFfqxcYhaTvAK8zteSfQLZBIoec6G4WPPp4qQg== 562 | 563 | fs.realpath@^1.0.0: 564 | version "1.0.0" 565 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 566 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 567 | 568 | fsevents@~2.1.2: 569 | version "2.1.3" 570 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" 571 | integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== 572 | 573 | functional-red-black-tree@^1.0.1: 574 | version "1.0.1" 575 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 576 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 577 | 578 | get-caller-file@^2.0.1, get-caller-file@^2.0.5: 579 | version "2.0.5" 580 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 581 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 582 | 583 | glob-parent@^5.0.0, glob-parent@~5.1.0: 584 | version "5.1.1" 585 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" 586 | integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== 587 | dependencies: 588 | is-glob "^4.0.1" 589 | 590 | glob@7.1.6, glob@^7.1.3: 591 | version "7.1.6" 592 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 593 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 594 | dependencies: 595 | fs.realpath "^1.0.0" 596 | inflight "^1.0.4" 597 | inherits "2" 598 | minimatch "^3.0.4" 599 | once "^1.3.0" 600 | path-is-absolute "^1.0.0" 601 | 602 | globals@^12.1.0: 603 | version "12.4.0" 604 | resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" 605 | integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== 606 | dependencies: 607 | type-fest "^0.8.1" 608 | 609 | growl@1.10.5: 610 | version "1.10.5" 611 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 612 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 613 | 614 | has-flag@^3.0.0: 615 | version "3.0.0" 616 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 617 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 618 | 619 | has-flag@^4.0.0: 620 | version "4.0.0" 621 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 622 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 623 | 624 | he@1.2.0: 625 | version "1.2.0" 626 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 627 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 628 | 629 | ignore@^4.0.6: 630 | version "4.0.6" 631 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" 632 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== 633 | 634 | import-fresh@^3.0.0, import-fresh@^3.2.1: 635 | version "3.3.0" 636 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 637 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 638 | dependencies: 639 | parent-module "^1.0.0" 640 | resolve-from "^4.0.0" 641 | 642 | imurmurhash@^0.1.4: 643 | version "0.1.4" 644 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 645 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 646 | 647 | inflight@^1.0.4: 648 | version "1.0.6" 649 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 650 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 651 | dependencies: 652 | once "^1.3.0" 653 | wrappy "1" 654 | 655 | inherits@2, inherits@^2.0.3, inherits@~2.0.3: 656 | version "2.0.4" 657 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 658 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 659 | 660 | is-binary-path@~2.1.0: 661 | version "2.1.0" 662 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 663 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 664 | dependencies: 665 | binary-extensions "^2.0.0" 666 | 667 | is-extglob@^2.1.1: 668 | version "2.1.1" 669 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 670 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 671 | 672 | is-fullwidth-code-point@^2.0.0: 673 | version "2.0.0" 674 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 675 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 676 | 677 | is-fullwidth-code-point@^3.0.0: 678 | version "3.0.0" 679 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 680 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 681 | 682 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: 683 | version "4.0.1" 684 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 685 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 686 | dependencies: 687 | is-extglob "^2.1.1" 688 | 689 | is-number@^7.0.0: 690 | version "7.0.0" 691 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 692 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 693 | 694 | is-plain-obj@^2.1.0: 695 | version "2.1.0" 696 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" 697 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== 698 | 699 | isarray@~1.0.0: 700 | version "1.0.0" 701 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 702 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 703 | 704 | isexe@^2.0.0: 705 | version "2.0.0" 706 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 707 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 708 | 709 | jake@^10.6.1: 710 | version "10.8.2" 711 | resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.2.tgz#ebc9de8558160a66d82d0eadc6a2e58fbc500a7b" 712 | integrity sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A== 713 | dependencies: 714 | async "0.9.x" 715 | chalk "^2.4.2" 716 | filelist "^1.0.1" 717 | minimatch "^3.0.4" 718 | 719 | js-tokens@^4.0.0: 720 | version "4.0.0" 721 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 722 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 723 | 724 | js-yaml@3.14.0: 725 | version "3.14.0" 726 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" 727 | integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== 728 | dependencies: 729 | argparse "^1.0.7" 730 | esprima "^4.0.0" 731 | 732 | js-yaml@^3.13.1: 733 | version "3.14.1" 734 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" 735 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== 736 | dependencies: 737 | argparse "^1.0.7" 738 | esprima "^4.0.0" 739 | 740 | json-schema-traverse@^0.4.1: 741 | version "0.4.1" 742 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 743 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 744 | 745 | json-schema-traverse@^1.0.0: 746 | version "1.0.0" 747 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" 748 | integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== 749 | 750 | json-stable-stringify-without-jsonify@^1.0.1: 751 | version "1.0.1" 752 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 753 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 754 | 755 | levn@^0.4.1: 756 | version "0.4.1" 757 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 758 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 759 | dependencies: 760 | prelude-ls "^1.2.1" 761 | type-check "~0.4.0" 762 | 763 | locate-path@^3.0.0: 764 | version "3.0.0" 765 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 766 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== 767 | dependencies: 768 | p-locate "^3.0.0" 769 | path-exists "^3.0.0" 770 | 771 | locate-path@^6.0.0: 772 | version "6.0.0" 773 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 774 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 775 | dependencies: 776 | p-locate "^5.0.0" 777 | 778 | lodash@^4.17.20: 779 | version "4.17.20" 780 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" 781 | integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== 782 | 783 | log-symbols@4.0.0: 784 | version "4.0.0" 785 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" 786 | integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== 787 | dependencies: 788 | chalk "^4.0.0" 789 | 790 | lru-cache@^4.0.1: 791 | version "4.1.5" 792 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" 793 | integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== 794 | dependencies: 795 | pseudomap "^1.0.2" 796 | yallist "^2.1.2" 797 | 798 | lru-cache@^6.0.0: 799 | version "6.0.0" 800 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 801 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 802 | dependencies: 803 | yallist "^4.0.0" 804 | 805 | minimatch@3.0.4, minimatch@^3.0.4: 806 | version "3.0.4" 807 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 808 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 809 | dependencies: 810 | brace-expansion "^1.1.7" 811 | 812 | mocha@^8.2.1: 813 | version "8.2.1" 814 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.2.1.tgz#f2fa68817ed0e53343d989df65ccd358bc3a4b39" 815 | integrity sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w== 816 | dependencies: 817 | "@ungap/promise-all-settled" "1.1.2" 818 | ansi-colors "4.1.1" 819 | browser-stdout "1.3.1" 820 | chokidar "3.4.3" 821 | debug "4.2.0" 822 | diff "4.0.2" 823 | escape-string-regexp "4.0.0" 824 | find-up "5.0.0" 825 | glob "7.1.6" 826 | growl "1.10.5" 827 | he "1.2.0" 828 | js-yaml "3.14.0" 829 | log-symbols "4.0.0" 830 | minimatch "3.0.4" 831 | ms "2.1.2" 832 | nanoid "3.1.12" 833 | serialize-javascript "5.0.1" 834 | strip-json-comments "3.1.1" 835 | supports-color "7.2.0" 836 | which "2.0.2" 837 | wide-align "1.1.3" 838 | workerpool "6.0.2" 839 | yargs "13.3.2" 840 | yargs-parser "13.1.2" 841 | yargs-unparser "2.0.0" 842 | 843 | ms@2.1.2: 844 | version "2.1.2" 845 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 846 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 847 | 848 | nanoid@3.1.12: 849 | version "3.1.12" 850 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.12.tgz#6f7736c62e8d39421601e4a0c77623a97ea69654" 851 | integrity sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A== 852 | 853 | natural-compare@^1.4.0: 854 | version "1.4.0" 855 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 856 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 857 | 858 | normalize-path@^3.0.0, normalize-path@~3.0.0: 859 | version "3.0.0" 860 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 861 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 862 | 863 | once@^1.3.0: 864 | version "1.4.0" 865 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 866 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 867 | dependencies: 868 | wrappy "1" 869 | 870 | optionator@^0.9.1: 871 | version "0.9.1" 872 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 873 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 874 | dependencies: 875 | deep-is "^0.1.3" 876 | fast-levenshtein "^2.0.6" 877 | levn "^0.4.1" 878 | prelude-ls "^1.2.1" 879 | type-check "^0.4.0" 880 | word-wrap "^1.2.3" 881 | 882 | os-shim@^0.1.2: 883 | version "0.1.3" 884 | resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917" 885 | integrity sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc= 886 | 887 | p-limit@^2.0.0: 888 | version "2.3.0" 889 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 890 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 891 | dependencies: 892 | p-try "^2.0.0" 893 | 894 | p-limit@^3.0.2: 895 | version "3.1.0" 896 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 897 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 898 | dependencies: 899 | yocto-queue "^0.1.0" 900 | 901 | p-locate@^3.0.0: 902 | version "3.0.0" 903 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 904 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== 905 | dependencies: 906 | p-limit "^2.0.0" 907 | 908 | p-locate@^5.0.0: 909 | version "5.0.0" 910 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 911 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 912 | dependencies: 913 | p-limit "^3.0.2" 914 | 915 | p-try@^2.0.0: 916 | version "2.2.0" 917 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 918 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 919 | 920 | parent-module@^1.0.0: 921 | version "1.0.1" 922 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 923 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 924 | dependencies: 925 | callsites "^3.0.0" 926 | 927 | path-exists@^3.0.0: 928 | version "3.0.0" 929 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 930 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 931 | 932 | path-exists@^4.0.0: 933 | version "4.0.0" 934 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 935 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 936 | 937 | path-is-absolute@^1.0.0: 938 | version "1.0.1" 939 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 940 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 941 | 942 | path-key@^3.1.0: 943 | version "3.1.1" 944 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 945 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 946 | 947 | picomatch@^2.0.4, picomatch@^2.2.1: 948 | version "2.2.2" 949 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" 950 | integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== 951 | 952 | pre-commit@^1.1.2: 953 | version "1.2.2" 954 | resolved "https://registry.yarnpkg.com/pre-commit/-/pre-commit-1.2.2.tgz#dbcee0ee9de7235e57f79c56d7ce94641a69eec6" 955 | integrity sha1-287g7p3nI15X95xW186UZBpp7sY= 956 | dependencies: 957 | cross-spawn "^5.0.1" 958 | spawn-sync "^1.0.15" 959 | which "1.2.x" 960 | 961 | prelude-ls@^1.2.1: 962 | version "1.2.1" 963 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 964 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 965 | 966 | process-nextick-args@~2.0.0: 967 | version "2.0.1" 968 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 969 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 970 | 971 | progress@^2.0.0: 972 | version "2.0.3" 973 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 974 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 975 | 976 | pseudomap@^1.0.2: 977 | version "1.0.2" 978 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 979 | integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= 980 | 981 | punycode@^2.1.0: 982 | version "2.1.1" 983 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 984 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 985 | 986 | randombytes@^2.1.0: 987 | version "2.1.0" 988 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 989 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 990 | dependencies: 991 | safe-buffer "^5.1.0" 992 | 993 | readable-stream@^2.2.2: 994 | version "2.3.7" 995 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" 996 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== 997 | dependencies: 998 | core-util-is "~1.0.0" 999 | inherits "~2.0.3" 1000 | isarray "~1.0.0" 1001 | process-nextick-args "~2.0.0" 1002 | safe-buffer "~5.1.1" 1003 | string_decoder "~1.1.1" 1004 | util-deprecate "~1.0.1" 1005 | 1006 | readdirp@~3.5.0: 1007 | version "3.5.0" 1008 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" 1009 | integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== 1010 | dependencies: 1011 | picomatch "^2.2.1" 1012 | 1013 | regexpp@^3.1.0: 1014 | version "3.1.0" 1015 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" 1016 | integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== 1017 | 1018 | require-directory@^2.1.1: 1019 | version "2.1.1" 1020 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1021 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 1022 | 1023 | require-from-string@^2.0.2: 1024 | version "2.0.2" 1025 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" 1026 | integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== 1027 | 1028 | require-main-filename@^2.0.0: 1029 | version "2.0.0" 1030 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 1031 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== 1032 | 1033 | resolve-from@^4.0.0: 1034 | version "4.0.0" 1035 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1036 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1037 | 1038 | rimraf@^3.0.2: 1039 | version "3.0.2" 1040 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1041 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1042 | dependencies: 1043 | glob "^7.1.3" 1044 | 1045 | safe-buffer@^5.1.0: 1046 | version "5.2.1" 1047 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1048 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1049 | 1050 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1051 | version "5.1.2" 1052 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1053 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1054 | 1055 | semver@^7.2.1: 1056 | version "7.3.4" 1057 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" 1058 | integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== 1059 | dependencies: 1060 | lru-cache "^6.0.0" 1061 | 1062 | serialize-javascript@5.0.1: 1063 | version "5.0.1" 1064 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" 1065 | integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== 1066 | dependencies: 1067 | randombytes "^2.1.0" 1068 | 1069 | set-blocking@^2.0.0: 1070 | version "2.0.0" 1071 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1072 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 1073 | 1074 | shebang-command@^1.2.0: 1075 | version "1.2.0" 1076 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 1077 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 1078 | dependencies: 1079 | shebang-regex "^1.0.0" 1080 | 1081 | shebang-command@^2.0.0: 1082 | version "2.0.0" 1083 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1084 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1085 | dependencies: 1086 | shebang-regex "^3.0.0" 1087 | 1088 | shebang-regex@^1.0.0: 1089 | version "1.0.0" 1090 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 1091 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 1092 | 1093 | shebang-regex@^3.0.0: 1094 | version "3.0.0" 1095 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1096 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1097 | 1098 | slice-ansi@^4.0.0: 1099 | version "4.0.0" 1100 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" 1101 | integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== 1102 | dependencies: 1103 | ansi-styles "^4.0.0" 1104 | astral-regex "^2.0.0" 1105 | is-fullwidth-code-point "^3.0.0" 1106 | 1107 | spawn-sync@^1.0.15: 1108 | version "1.0.15" 1109 | resolved "https://registry.yarnpkg.com/spawn-sync/-/spawn-sync-1.0.15.tgz#b00799557eb7fb0c8376c29d44e8a1ea67e57476" 1110 | integrity sha1-sAeZVX63+wyDdsKdROih6mfldHY= 1111 | dependencies: 1112 | concat-stream "^1.4.7" 1113 | os-shim "^0.1.2" 1114 | 1115 | sprintf-js@~1.0.2: 1116 | version "1.0.3" 1117 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 1118 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 1119 | 1120 | "string-width@^1.0.2 || 2": 1121 | version "2.1.1" 1122 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 1123 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 1124 | dependencies: 1125 | is-fullwidth-code-point "^2.0.0" 1126 | strip-ansi "^4.0.0" 1127 | 1128 | string-width@^3.0.0, string-width@^3.1.0: 1129 | version "3.1.0" 1130 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 1131 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 1132 | dependencies: 1133 | emoji-regex "^7.0.1" 1134 | is-fullwidth-code-point "^2.0.0" 1135 | strip-ansi "^5.1.0" 1136 | 1137 | string-width@^4.1.0, string-width@^4.2.0: 1138 | version "4.2.0" 1139 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" 1140 | integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== 1141 | dependencies: 1142 | emoji-regex "^8.0.0" 1143 | is-fullwidth-code-point "^3.0.0" 1144 | strip-ansi "^6.0.0" 1145 | 1146 | string_decoder@~1.1.1: 1147 | version "1.1.1" 1148 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 1149 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 1150 | dependencies: 1151 | safe-buffer "~5.1.0" 1152 | 1153 | strip-ansi@^4.0.0: 1154 | version "4.0.0" 1155 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 1156 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 1157 | dependencies: 1158 | ansi-regex "^3.0.0" 1159 | 1160 | strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: 1161 | version "5.2.0" 1162 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 1163 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 1164 | dependencies: 1165 | ansi-regex "^4.1.0" 1166 | 1167 | strip-ansi@^6.0.0: 1168 | version "6.0.0" 1169 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" 1170 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== 1171 | dependencies: 1172 | ansi-regex "^5.0.0" 1173 | 1174 | strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 1175 | version "3.1.1" 1176 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1177 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1178 | 1179 | supports-color@7.2.0, supports-color@^7.1.0: 1180 | version "7.2.0" 1181 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1182 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1183 | dependencies: 1184 | has-flag "^4.0.0" 1185 | 1186 | supports-color@^5.3.0: 1187 | version "5.5.0" 1188 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1189 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1190 | dependencies: 1191 | has-flag "^3.0.0" 1192 | 1193 | table@^6.0.4: 1194 | version "6.0.7" 1195 | resolved "https://registry.yarnpkg.com/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34" 1196 | integrity sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g== 1197 | dependencies: 1198 | ajv "^7.0.2" 1199 | lodash "^4.17.20" 1200 | slice-ansi "^4.0.0" 1201 | string-width "^4.2.0" 1202 | 1203 | text-table@^0.2.0: 1204 | version "0.2.0" 1205 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1206 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 1207 | 1208 | to-regex-range@^5.0.1: 1209 | version "5.0.1" 1210 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1211 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1212 | dependencies: 1213 | is-number "^7.0.0" 1214 | 1215 | type-check@^0.4.0, type-check@~0.4.0: 1216 | version "0.4.0" 1217 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 1218 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1219 | dependencies: 1220 | prelude-ls "^1.2.1" 1221 | 1222 | type-fest@^0.8.1: 1223 | version "0.8.1" 1224 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" 1225 | integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== 1226 | 1227 | typedarray@^0.0.6: 1228 | version "0.0.6" 1229 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 1230 | integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= 1231 | 1232 | uri-js@^4.2.2: 1233 | version "4.4.1" 1234 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 1235 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1236 | dependencies: 1237 | punycode "^2.1.0" 1238 | 1239 | util-deprecate@~1.0.1: 1240 | version "1.0.2" 1241 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1242 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 1243 | 1244 | v8-compile-cache@^2.0.3: 1245 | version "2.2.0" 1246 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" 1247 | integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== 1248 | 1249 | which-module@^2.0.0: 1250 | version "2.0.0" 1251 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 1252 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 1253 | 1254 | which@1.2.x: 1255 | version "1.2.14" 1256 | resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" 1257 | integrity sha1-mofEN48D6CfOyvGs31bHNsAcFOU= 1258 | dependencies: 1259 | isexe "^2.0.0" 1260 | 1261 | which@2.0.2, which@^2.0.1: 1262 | version "2.0.2" 1263 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1264 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1265 | dependencies: 1266 | isexe "^2.0.0" 1267 | 1268 | which@^1.2.9: 1269 | version "1.3.1" 1270 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 1271 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 1272 | dependencies: 1273 | isexe "^2.0.0" 1274 | 1275 | wide-align@1.1.3: 1276 | version "1.1.3" 1277 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 1278 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== 1279 | dependencies: 1280 | string-width "^1.0.2 || 2" 1281 | 1282 | word-wrap@^1.2.3: 1283 | version "1.2.3" 1284 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 1285 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 1286 | 1287 | workerpool@6.0.2: 1288 | version "6.0.2" 1289 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.0.2.tgz#e241b43d8d033f1beb52c7851069456039d1d438" 1290 | integrity sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q== 1291 | 1292 | wrap-ansi@^5.1.0: 1293 | version "5.1.0" 1294 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" 1295 | integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== 1296 | dependencies: 1297 | ansi-styles "^3.2.0" 1298 | string-width "^3.0.0" 1299 | strip-ansi "^5.0.0" 1300 | 1301 | wrap-ansi@^7.0.0: 1302 | version "7.0.0" 1303 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 1304 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 1305 | dependencies: 1306 | ansi-styles "^4.0.0" 1307 | string-width "^4.1.0" 1308 | strip-ansi "^6.0.0" 1309 | 1310 | wrappy@1: 1311 | version "1.0.2" 1312 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1313 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1314 | 1315 | y18n@^4.0.0: 1316 | version "4.0.1" 1317 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" 1318 | integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== 1319 | 1320 | y18n@^5.0.5: 1321 | version "5.0.5" 1322 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" 1323 | integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== 1324 | 1325 | yallist@^2.1.2: 1326 | version "2.1.2" 1327 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 1328 | integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= 1329 | 1330 | yallist@^4.0.0: 1331 | version "4.0.0" 1332 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 1333 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1334 | 1335 | yargs-parser@13.1.2, yargs-parser@^13.1.2: 1336 | version "13.1.2" 1337 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" 1338 | integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== 1339 | dependencies: 1340 | camelcase "^5.0.0" 1341 | decamelize "^1.2.0" 1342 | 1343 | yargs-parser@^20.2.2: 1344 | version "20.2.4" 1345 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" 1346 | integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== 1347 | 1348 | yargs-unparser@2.0.0: 1349 | version "2.0.0" 1350 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" 1351 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== 1352 | dependencies: 1353 | camelcase "^6.0.0" 1354 | decamelize "^4.0.0" 1355 | flat "^5.0.2" 1356 | is-plain-obj "^2.1.0" 1357 | 1358 | yargs@13.3.2: 1359 | version "13.3.2" 1360 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" 1361 | integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== 1362 | dependencies: 1363 | cliui "^5.0.0" 1364 | find-up "^3.0.0" 1365 | get-caller-file "^2.0.1" 1366 | require-directory "^2.1.1" 1367 | require-main-filename "^2.0.0" 1368 | set-blocking "^2.0.0" 1369 | string-width "^3.0.0" 1370 | which-module "^2.0.0" 1371 | y18n "^4.0.0" 1372 | yargs-parser "^13.1.2" 1373 | 1374 | yargs@^16.2.0: 1375 | version "16.2.0" 1376 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" 1377 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== 1378 | dependencies: 1379 | cliui "^7.0.2" 1380 | escalade "^3.1.1" 1381 | get-caller-file "^2.0.5" 1382 | require-directory "^2.1.1" 1383 | string-width "^4.2.0" 1384 | y18n "^5.0.5" 1385 | yargs-parser "^20.2.2" 1386 | 1387 | yocto-queue@^0.1.0: 1388 | version "0.1.0" 1389 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 1390 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1391 | --------------------------------------------------------------------------------