├── .editorconfig
├── .eslintrc.json
├── .gitignore
├── .travis.yml
├── README.md
├── UNLICENSE
├── logo.png
├── logo.svg
├── package.json
├── src
├── Component.ts
├── Entity.ts
├── EntityManager.ts
├── PriorityQueue.ts
├── Query.ts
├── System.ts
├── World.ts
├── events.ts
├── gameClock.ts
├── index.ts
└── start.ts
├── test
├── Entity.test.ts
├── EntityManager.test.ts
├── PriorityQueue.test.ts
├── Query.test.ts
├── System.test.ts
├── World.test.ts
└── index.test.ts
├── tsconfig.build.json
├── tsconfig.json
└── yarn.lock
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | insert_final_newline = true
7 | indent_size = 2
8 | indent_style = space
9 | trim_trailing_whitespace = true
10 |
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "es6": true
4 | },
5 | "extends": "plugin:@typescript-eslint/recommended",
6 | "parser": "@typescript-eslint/parser",
7 | "parserOptions": {
8 | "project": "./tsconfig.json",
9 | "sourceType": "module"
10 | },
11 | "rules": {
12 | "@typescript-eslint/explicit-function-return-type": "off",
13 | "@typescript-eslint/explicit-member-accessibility": [
14 | "error",
15 | {
16 | "accessibility": "no-public",
17 | "overrides": {
18 | "parameterProperties": "off"
19 | }
20 | }
21 | ],
22 | "@typescript-eslint/explicit-module-boundary-types": "off",
23 | "@typescript-eslint/indent": [
24 | "error",
25 | 2,
26 | {
27 | "ArrayExpression": 1,
28 | "CallExpression": {
29 | "arguments": 1
30 | },
31 | "FunctionDeclaration": {
32 | "body": 1,
33 | "parameters": 1
34 | },
35 | "FunctionExpression": {
36 | "body": 1,
37 | "parameters": 1
38 | },
39 | "ImportDeclaration": 1,
40 | "MemberExpression": 1,
41 | "ObjectExpression": 1,
42 | "SwitchCase": 1,
43 | "VariableDeclarator": 1,
44 | "flatTernaryExpressions": false,
45 | "ignoreComments": false,
46 | "outerIIFEBody": 1
47 | }
48 | ],
49 | "@typescript-eslint/member-delimiter-style": [
50 | "error",
51 | {
52 | "multiline": {
53 | "delimiter": "comma",
54 | "requireLast": false
55 | },
56 | "singleline": {
57 | "delimiter": "comma",
58 | "requireLast": false
59 | }
60 | }
61 | ],
62 | "@typescript-eslint/no-explicit-any": "off",
63 | "@typescript-eslint/no-parameter-properties": "off",
64 | "@typescript-eslint/no-unused-vars": [
65 | "error",
66 | {
67 | "args": "none",
68 | "ignoreRestSiblings": true,
69 | "vars": "all"
70 | }
71 | ],
72 | "@typescript-eslint/no-use-before-define": "off",
73 | "@typescript-eslint/no-useless-constructor": "error",
74 | "accessor-pairs": "error",
75 | "array-bracket-spacing": [
76 | "error",
77 | "never"
78 | ],
79 | "arrow-spacing": [
80 | "error",
81 | {
82 | "after": true,
83 | "before": true
84 | }
85 | ],
86 | "block-spacing": [
87 | "error",
88 | "always"
89 | ],
90 | "brace-style": [
91 | "error",
92 | "1tbs",
93 | {
94 | "allowSingleLine": true
95 | }
96 | ],
97 | "camelcase": [
98 | "error",
99 | {
100 | "properties": "never"
101 | }
102 | ],
103 | "comma-dangle": [
104 | "error",
105 | {
106 | "arrays": "never",
107 | "exports": "never",
108 | "functions": "never",
109 | "imports": "never",
110 | "objects": "never"
111 | }
112 | ],
113 | "comma-spacing": [
114 | "error",
115 | {
116 | "after": true,
117 | "before": false
118 | }
119 | ],
120 | "comma-style": [
121 | "error",
122 | "last"
123 | ],
124 | "computed-property-spacing": [
125 | "error",
126 | "never"
127 | ],
128 | "constructor-super": "error",
129 | "curly": [
130 | "error",
131 | "multi-line"
132 | ],
133 | "dot-location": [
134 | "error",
135 | "property"
136 | ],
137 | "eol-last": "error",
138 | "eqeqeq": [
139 | "error",
140 | "always",
141 | {
142 | "null": "ignore"
143 | }
144 | ],
145 | "func-call-spacing": [
146 | "error",
147 | "never"
148 | ],
149 | "generator-star-spacing": [
150 | "error",
151 | {
152 | "after": true,
153 | "before": true
154 | }
155 | ],
156 | "handle-callback-err": [
157 | "error",
158 | "^(err|error)$"
159 | ],
160 | "indent": "off",
161 | "key-spacing": [
162 | "error",
163 | {
164 | "afterColon": true,
165 | "beforeColon": false
166 | }
167 | ],
168 | "keyword-spacing": [
169 | "error",
170 | {
171 | "after": true,
172 | "before": true
173 | }
174 | ],
175 | "linebreak-style": [
176 | "error",
177 | "unix"
178 | ],
179 | "lines-between-class-members": [
180 | "error",
181 | "always",
182 | {
183 | "exceptAfterSingleLine": true
184 | }
185 | ],
186 | "max-len": [
187 | "error",
188 | {
189 | "code": 120
190 | }
191 | ],
192 | "max-lines": [
193 | "warn",
194 | 200
195 | ],
196 | "new-cap": [
197 | "error",
198 | {
199 | "capIsNew": false,
200 | "newIsCap": true
201 | }
202 | ],
203 | "new-parens": "error",
204 | "no-array-constructor": "error",
205 | "no-async-promise-executor": "error",
206 | "no-caller": "error",
207 | "no-class-assign": "error",
208 | "no-compare-neg-zero": "error",
209 | "no-cond-assign": "error",
210 | "no-const-assign": "error",
211 | "no-constant-condition": [
212 | "error",
213 | {
214 | "checkLoops": false
215 | }
216 | ],
217 | "no-control-regex": "error",
218 | "no-debugger": "error",
219 | "no-delete-var": "error",
220 | "no-dupe-args": "error",
221 | "no-dupe-class-members": "error",
222 | "no-dupe-keys": "error",
223 | "no-duplicate-case": "error",
224 | "no-empty-character-class": "error",
225 | "no-empty-pattern": "error",
226 | "no-eval": "error",
227 | "no-ex-assign": "error",
228 | "no-extend-native": "error",
229 | "no-extra-bind": "error",
230 | "no-extra-boolean-cast": "error",
231 | "no-extra-parens": [
232 | "error",
233 | "functions"
234 | ],
235 | "no-fallthrough": "error",
236 | "no-floating-decimal": "error",
237 | "no-func-assign": "error",
238 | "no-global-assign": "error",
239 | "no-implied-eval": "error",
240 | "no-inner-declarations": [
241 | "error",
242 | "functions"
243 | ],
244 | "no-invalid-regexp": "error",
245 | "no-irregular-whitespace": "error",
246 | "no-iterator": "error",
247 | "no-label-var": "error",
248 | "no-labels": [
249 | "error",
250 | {
251 | "allowLoop": false,
252 | "allowSwitch": false
253 | }
254 | ],
255 | "no-lone-blocks": "error",
256 | "no-misleading-character-class": "error",
257 | "no-mixed-operators": [
258 | "error",
259 | {
260 | "allowSamePrecedence": true,
261 | "groups": [
262 | [
263 | "==",
264 | "!=",
265 | "===",
266 | "!==",
267 | ">",
268 | ">=",
269 | "<",
270 | "<="
271 | ],
272 | [
273 | "&&",
274 | "||"
275 | ],
276 | [
277 | "in",
278 | "instanceof"
279 | ]
280 | ]
281 | }
282 | ],
283 | "no-mixed-spaces-and-tabs": "error",
284 | "no-multi-spaces": "error",
285 | "no-multi-str": "error",
286 | "no-multiple-empty-lines": [
287 | "error",
288 | {
289 | "max": 1,
290 | "maxEOF": 0
291 | }
292 | ],
293 | "no-negated-in-lhs": "error",
294 | "no-new": "error",
295 | "no-new-func": "error",
296 | "no-new-object": "error",
297 | "no-new-require": "error",
298 | "no-new-symbol": "error",
299 | "no-new-wrappers": "error",
300 | "no-obj-calls": "error",
301 | "no-octal": "error",
302 | "no-octal-escape": "error",
303 | "no-path-concat": "error",
304 | "no-proto": "error",
305 | "no-prototype-builtins": "error",
306 | "no-redeclare": [
307 | "error",
308 | {
309 | "builtinGlobals": false
310 | }
311 | ],
312 | "no-regex-spaces": "error",
313 | "no-return-assign": [
314 | "error",
315 | "except-parens"
316 | ],
317 | "no-return-await": "error",
318 | "no-self-assign": "error",
319 | "no-self-compare": "error",
320 | "no-sequences": "error",
321 | "no-shadow-restricted-names": "error",
322 | "no-sparse-arrays": "error",
323 | "no-tabs": "error",
324 | "no-template-curly-in-string": "error",
325 | "no-this-before-super": "error",
326 | "no-throw-literal": "error",
327 | "no-trailing-spaces": "error",
328 | "no-unexpected-multiline": "error",
329 | "no-unmodified-loop-condition": "error",
330 | "no-unneeded-ternary": [
331 | "error",
332 | {
333 | "defaultAssignment": false
334 | }
335 | ],
336 | "no-unreachable": "error",
337 | "no-unsafe-finally": "error",
338 | "no-unsafe-negation": "error",
339 | "no-unused-expressions": [
340 | "error",
341 | {
342 | "allowShortCircuit": true,
343 | "allowTaggedTemplates": true,
344 | "allowTernary": true
345 | }
346 | ],
347 | "no-use-before-define": [
348 | "error",
349 | {
350 | "classes": false,
351 | "functions": false,
352 | "variables": false
353 | }
354 | ],
355 | "no-useless-call": "error",
356 | "no-useless-catch": "error",
357 | "no-useless-computed-key": "error",
358 | "no-useless-escape": "error",
359 | "no-useless-rename": "error",
360 | "no-useless-return": "error",
361 | "no-whitespace-before-property": "error",
362 | "no-with": "error",
363 | "object-curly-spacing": [
364 | "error",
365 | "always"
366 | ],
367 | "object-property-newline": [
368 | "error",
369 | {
370 | "allowMultiplePropertiesPerLine": true
371 | }
372 | ],
373 | "one-var": [
374 | "error",
375 | {
376 | "initialized": "never"
377 | }
378 | ],
379 | "operator-linebreak": [
380 | "error",
381 | "after",
382 | {
383 | "overrides": {
384 | ":": "before",
385 | "?": "before"
386 | }
387 | }
388 | ],
389 | "padded-blocks": [
390 | "error",
391 | {
392 | "blocks": "never",
393 | "classes": "never",
394 | "switches": "never"
395 | }
396 | ],
397 | "prefer-const": [
398 | "error",
399 | {
400 | "destructuring": "all"
401 | }
402 | ],
403 | "prefer-promise-reject-errors": "error",
404 | "quote-props": [
405 | "error",
406 | "as-needed"
407 | ],
408 | "quotes": [
409 | "error",
410 | "single"
411 | ],
412 | "rest-spread-spacing": [
413 | "error",
414 | "never"
415 | ],
416 | "semi": [
417 | "error",
418 | "never"
419 | ],
420 | "semi-spacing": [
421 | "error",
422 | {
423 | "after": true,
424 | "before": false
425 | }
426 | ],
427 | "space-before-blocks": [
428 | "error",
429 | "always"
430 | ],
431 | "space-before-function-paren": [
432 | "error",
433 | "always"
434 | ],
435 | "space-in-parens": [
436 | "error",
437 | "never"
438 | ],
439 | "space-infix-ops": "error",
440 | "space-unary-ops": [
441 | "error",
442 | {
443 | "nonwords": false,
444 | "words": true
445 | }
446 | ],
447 | "spaced-comment": [
448 | "error",
449 | "always",
450 | {
451 | "block": {
452 | "balanced": true,
453 | "exceptions": [
454 | "*"
455 | ],
456 | "markers": [
457 | "*package",
458 | "!",
459 | ",",
460 | ":",
461 | "::",
462 | "flow-include"
463 | ]
464 | },
465 | "line": {
466 | "markers": [
467 | "*package",
468 | "!",
469 | "/",
470 | ",",
471 | "="
472 | ]
473 | }
474 | }
475 | ],
476 | "symbol-description": "error",
477 | "template-curly-spacing": [
478 | "error",
479 | "never"
480 | ],
481 | "template-tag-spacing": [
482 | "error",
483 | "never"
484 | ],
485 | "unicode-bom": [
486 | "error",
487 | "never"
488 | ],
489 | "use-isnan": "error",
490 | "valid-typeof": [
491 | "error",
492 | {
493 | "requireStringLiterals": true
494 | }
495 | ],
496 | "wrap-iife": [
497 | "error",
498 | "any",
499 | {
500 | "functionPrototypeMethods": true
501 | }
502 | ],
503 | "yield-star-spacing": [
504 | "error",
505 | "both"
506 | ],
507 | "yoda": [
508 | "error",
509 | "never"
510 | ]
511 | }
512 | }
513 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | coverage/
3 | dist/
4 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - "node"
4 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | # Rook
6 |
7 | [](https://www.npmjs.com/package/rook-ecs)
8 | [](https://travis-ci.org/sz-piotr/rook-ecs)
9 | 
10 |
11 | Rook is a JavaScript library for creating games in the Entity-Component-System pattern.
12 | Rook is currently a work in progress. All contributions are welcome.
13 |
14 | ## Getting started
15 |
16 | ### Install
17 |
18 | ```
19 | $ npm install --save rook-ecs
20 | ```
21 |
22 | or
23 |
24 | ```
25 | $ yarn add rook-ecs
26 | ```
27 |
28 | After installing you can include the library in the source
29 |
30 | ```typescript
31 | import { Game } from 'rook-ecs'
32 |
33 | console.log('Hurray!')
34 | ```
35 |
36 | ### Using UMD build in the browser
37 |
38 | Alternatively, you might want to use an UMD build in the browser.
39 | To do so, grab the minified JavaScript file from
40 | [here](https://unpkg.com/rook-ecs/lib/rook-ecs.min.js)
41 | and add it to your site with a script tag.
42 |
43 | In the browser all of the exports are available under the `Rook` global object.
44 |
45 | ```html
46 |
47 |
50 | ```
51 |
52 | ## Usage Example
53 |
54 | First we declare the components. Components are just ids that correspond to some
55 | data. In JavaScript you don't need to declare anything, just use pure strings.
56 |
57 | In TypeScript there is a special `component` function that creates type safe
58 | component ids.
59 |
60 | ```typescript
61 | import { component } from 'rook-ecs'
62 |
63 | export interface Position {
64 | x: number,
65 | y: number,
66 | }
67 | export const Position = component('Position')
68 |
69 | export interface Velocity {
70 | x: number,
71 | y: number,
72 | }
73 | export const Velocity = component('Velocity')
74 | ```
75 |
76 | Having declared our components we can now use them in a system.
77 |
78 | ```typescript
79 | import { system, UpdateTick } from 'rook-ecs'
80 | import { Position, Velocity } from './components'
81 |
82 | export const move = system(UpdateTick, function (world, event) {
83 | for (const entity of world.query(Position, Velocity)) {
84 | const position = entity.get(Position)
85 | const velocity = entity.get(Velocity)
86 | position.x += velocity.x * event.deltaTime
87 | position.y += velocity.y * event.deltaTime
88 | }
89 | })
90 | ```
91 |
92 | And just like this, all our entities that have both the `Position` and `Velocity`
93 | components can now be updated with this system.
94 |
95 | The only thing that's left is to start the game and create some entities.
96 |
97 | ```typescript
98 | import { start, gameClock } from 'rook-ecs'
99 | import { Position, Velocity } from './components'
100 | import { move } from './move'
101 |
102 | function init (world) {
103 | world.create()
104 | .set(Position, { x: 0, y: 0 })
105 | .set(Velocity, { x: 10, y: 20 })
106 | }
107 |
108 | start([
109 | gameClock(),
110 | init,
111 | move,
112 | ])
113 | ```
114 |
115 | ## Typescript support
116 |
117 | Rook has first class TypeScript support since it is itself written with TypeScript.
118 | No special compiler options have to be specified for Rook to work, although we
119 | recommend using the `strict: true` setting.
120 |
121 | ## Contributing
122 |
123 | Rook is currently a work in progress. All contributions are welcome.
124 |
125 | ## Useful reading
126 |
127 | * [TypeScript Documentation](https://www.typescriptlang.org/docs/home.html)
128 | * [T-Machine ECS Series](http://t-machine.org/index.php/2007/09/03/entity-systems-are-the-future-of-mmog-development-part-1/)
129 |
--------------------------------------------------------------------------------
/UNLICENSE:
--------------------------------------------------------------------------------
1 | This is free and unencumbered software released into the public domain.
2 |
3 | Anyone is free to copy, modify, publish, use, compile, sell, or
4 | distribute this software, either in source code form or as a compiled
5 | binary, for any purpose, commercial or non-commercial, and by any
6 | means.
7 |
8 | In jurisdictions that recognize copyright laws, the author or authors
9 | of this software dedicate any and all copyright interest in the
10 | software to the public domain. We make this dedication for the benefit
11 | of the public at large and to the detriment of our heirs and
12 | successors. We intend this dedication to be an overt act of
13 | relinquishment in perpetuity of all present and future rights to this
14 | software under copyright law.
15 |
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22 | OTHER DEALINGS IN THE SOFTWARE.
23 |
24 | For more information, please refer to
25 |
--------------------------------------------------------------------------------
/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sz-piotr/rook-ecs/6d745e5dea58a5f1b4e7dc2e25ad95f32f14d318/logo.png
--------------------------------------------------------------------------------
/logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
61 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "rook-ecs",
3 | "description": "An Entity-Component-System library built for ease of use and code readability",
4 | "author": "Piotr Szlachciak ",
5 | "keywords": [
6 | "ecs",
7 | "entity",
8 | "component",
9 | "system",
10 | "javascript",
11 | "typescript",
12 | "library"
13 | ],
14 | "license": "MIT",
15 | "version": "0.14.0",
16 | "main": "dist/cjs/index.js",
17 | "module": "dist/esm/index.js",
18 | "types": "dist/esm/index.d.ts",
19 | "sideEffects": false,
20 | "repository": {
21 | "type": "git",
22 | "url": "https://github.com/sz-piotr/rook-ecs.git"
23 | },
24 | "files": [
25 | "dist",
26 | "src"
27 | ],
28 | "scripts": {
29 | "prepublishOnly": "npm run build",
30 | "build": "rm -rf dist && yarn build:esm && yarn build:cjs",
31 | "build:esm": "tsc -p tsconfig.build.json --outDir dist/esm --module ES6",
32 | "build:cjs": "tsc -p tsconfig.build.json --outDir dist/cjs --declaration false",
33 | "lint": "eslint src --ext .ts,.tsx",
34 | "test": "mocha",
35 | "typecheck": "tsc --noEmit"
36 | },
37 | "devDependencies": {
38 | "@types/chai": "^4.2.12",
39 | "@types/mocha": "^8.0.2",
40 | "@typescript-eslint/eslint-plugin": "^3.9.0",
41 | "@typescript-eslint/parser": "^3.9.0",
42 | "chai": "^4.2.0",
43 | "eslint": "^7.6.0",
44 | "mocha": "^8.1.1",
45 | "ts-node": "^8.10.2",
46 | "typescript": "^3.9.7"
47 | },
48 | "mocha": {
49 | "watch-extensions": "ts",
50 | "extension": "ts",
51 | "recursive": true,
52 | "require": "ts-node/register/transpile-only"
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/src/Component.ts:
--------------------------------------------------------------------------------
1 | export type Component = string & { __type__: T }
2 | export function component (name: string): Component {
3 | return name as Component
4 | }
5 |
--------------------------------------------------------------------------------
/src/Entity.ts:
--------------------------------------------------------------------------------
1 | import { Component } from './Component'
2 |
3 | export class Entity {
4 | private components: Record = {}
5 | private didNotify = false
6 | private notify: () => void
7 |
8 | constructor (onChange: (entity: Entity) => void) {
9 | this.notify = () => {
10 | if (!this.didNotify) {
11 | this.didNotify = true
12 | onChange(this)
13 | }
14 | }
15 | }
16 |
17 | set (component: Component, value: T): this {
18 | const shouldNotify = !this.has(component)
19 | this.components[component] = value
20 | if (shouldNotify) {
21 | this.notify()
22 | }
23 | return this
24 | }
25 |
26 | has (component: Component): boolean {
27 | return Object.prototype.hasOwnProperty.call(this.components, component)
28 | }
29 |
30 | get (component: Component): T {
31 | const value = this.components[component]
32 | if (!value) {
33 | throw new TypeError('Component type not present.')
34 | }
35 | return value
36 | }
37 |
38 | remove (component: Component): this {
39 | delete this.components[component]
40 | this.notify()
41 | return this
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/src/EntityManager.ts:
--------------------------------------------------------------------------------
1 | import { Entity } from './Entity'
2 | import { Component } from './Component'
3 | import { Query } from './Query'
4 |
5 | export class EntityManager {
6 | private changed: Entity[] = []
7 | private removed: Entity[] = []
8 |
9 | private queries: Record = {
10 | '': new Query([], [])
11 | }
12 |
13 | create () {
14 | return new Entity(this.scheduleUpdate)
15 | }
16 |
17 | query (...components: Component[]): readonly Entity[] {
18 | const queryId = getQueryId(components)
19 | if (!this.queries[queryId]) {
20 | this.queries[queryId] = new Query(components, this.queries[''].entities)
21 | }
22 | return this.queries[queryId].entities
23 | }
24 |
25 | queryOne (...components: Component[]): Entity | undefined {
26 | return this.query(...components)[0]
27 | }
28 |
29 | scheduleUpdate = (entity: Entity) => this.changed.push(entity)
30 |
31 | scheduleRemove (entity: Entity) {
32 | this.removed.push(entity)
33 | }
34 |
35 | processUpdates () {
36 | for (const query of Object.values(this.queries)) {
37 | this.changed.forEach(entity => query.onChange(entity))
38 | this.removed.forEach(entity => query.onRemove(entity))
39 | }
40 | this.changed.forEach(entity => { entity['didNotify'] = false })
41 | this.changed.length = 0
42 | this.removed.forEach(entity => { entity['didNotify'] = true })
43 | this.removed.length = 0
44 | }
45 | }
46 |
47 | function getQueryId (components: Component[]) {
48 | return components.sort().join('+')
49 | }
50 |
--------------------------------------------------------------------------------
/src/PriorityQueue.ts:
--------------------------------------------------------------------------------
1 | export class PriorityQueue {
2 | private elements: { value: T, priority: number }[] = []
3 |
4 | enqueue (value: T, priority: number) {
5 | this.elements.push({ value, priority })
6 | }
7 |
8 | dequeue () {
9 | let index = -1
10 | let maxPriority = -Infinity
11 | for (let i = 0; i < this.elements.length; i++) {
12 | if (this.elements[i].priority > maxPriority) {
13 | index = i
14 | maxPriority = this.elements[i].priority
15 | }
16 | }
17 | if (index !== -1) {
18 | const value = this.elements[index].value
19 | this.elements.splice(index, 1)
20 | return value
21 | }
22 | }
23 |
24 | isEmpty () {
25 | return this.elements.length === 0
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/Query.ts:
--------------------------------------------------------------------------------
1 | import { Entity } from './Entity'
2 | import { Component } from './Component'
3 |
4 | export class Query {
5 | entities: Entity[] = []
6 | private indices = new Map()
7 |
8 | constructor (
9 | private components: Component[],
10 | entities: Entity[]
11 | ) {
12 | for (const entity of entities) {
13 | this.onChange(entity)
14 | }
15 | }
16 |
17 | onChange (entity: Entity) {
18 | if (this.components.every(component => entity.has(component))) {
19 | if (this.indices.get(entity) == null) {
20 | this.indices.set(entity, this.entities.length)
21 | this.entities.push(entity)
22 | }
23 | } else {
24 | this.onRemove(entity)
25 | }
26 | }
27 |
28 | onRemove (entity: Entity) {
29 | const index = this.indices.get(entity)
30 | if (index != null) {
31 | const last = this.entities.pop()
32 | if (last !== entity) {
33 | this.entities[index] = last
34 | this.indices.set(last, index)
35 | }
36 | this.indices.delete(entity)
37 | }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/src/System.ts:
--------------------------------------------------------------------------------
1 | import { World } from './World'
2 |
3 | export type System = (world: World, event: E) => void
4 |
5 | export function system (
6 | event: { new(...args: any[]): T },
7 | system: System
8 | ): System {
9 | return function (world, e) {
10 | if (e instanceof event) {
11 | return system(world, e)
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/World.ts:
--------------------------------------------------------------------------------
1 | import { Entity } from './Entity'
2 | import { Component } from './Component'
3 | import { EntityManager } from './EntityManager'
4 | import { System } from './System'
5 | import { PriorityQueue } from './PriorityQueue'
6 |
7 | export class World {
8 | private entityManager = new EntityManager()
9 | constructor (
10 | private systems: System[]
11 | ) {}
12 |
13 | private running = false
14 | private events = new PriorityQueue()
15 |
16 | query (...components: Component[]): readonly Entity[] {
17 | this.ensureRunning()
18 | return this.entityManager.query(...components)
19 | }
20 |
21 | queryOne (...components: Component[]): Entity | undefined {
22 | this.ensureRunning()
23 | return this.query(...components)[0]
24 | }
25 |
26 | create (): Entity {
27 | this.ensureRunning()
28 | return this.entityManager.create()
29 | }
30 |
31 | remove (entity: Entity) {
32 | this.ensureRunning()
33 | return this.entityManager.scheduleRemove(entity)
34 | }
35 |
36 | emit (event: any, priority = 0) {
37 | this.ensureRunning()
38 | this.events.enqueue(event, priority)
39 | }
40 |
41 | run (callback: () => void) {
42 | if (this.running) {
43 | callback()
44 | return
45 | }
46 | this.running = true
47 | callback()
48 | this.entityManager.processUpdates()
49 | while (!this.events.isEmpty()) {
50 | const event = this.events.dequeue()
51 | for (const system of this.systems) {
52 | system(this, event)
53 | this.entityManager.processUpdates()
54 | }
55 | }
56 | this.running = false
57 | }
58 |
59 | private ensureRunning () {
60 | if (!this.running) {
61 | throw new Error('Outside synchronous systems you need to wrap calls to world in world.run()')
62 | }
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/src/events.ts:
--------------------------------------------------------------------------------
1 | export class InitEvent {}
2 |
3 | export class UpdateTick {
4 | constructor (
5 | readonly realTime: number,
6 | readonly time: number,
7 | readonly deltaTime: number
8 | ) {}
9 | }
10 |
11 | export class RenderTick {}
12 |
--------------------------------------------------------------------------------
/src/gameClock.ts:
--------------------------------------------------------------------------------
1 | import { system } from './System'
2 | import { InitEvent, UpdateTick, RenderTick } from './events'
3 |
4 | function scheduleRaf (callback: () => void) {
5 | const id = requestAnimationFrame(callback)
6 | return () => cancelAnimationFrame(id)
7 | }
8 |
9 | function scheduleTimeout (callback: () => void) {
10 | const id = setTimeout(callback, 16)
11 | return () => clearTimeout(id)
12 | }
13 |
14 | const scheduleDefault = typeof requestAnimationFrame === 'function' ? scheduleRaf : scheduleTimeout
15 |
16 | export function gameClock (
17 | ticksPerSecond = 60,
18 | maxDroppedTicks = ticksPerSecond,
19 | schedule = scheduleDefault
20 | ) {
21 | const deltaMs = 1000 / ticksPerSecond
22 |
23 | return system(InitEvent, function (world) {
24 | let lastTime = Date.now()
25 | let totalUpdates = 0
26 |
27 | update()
28 | function update () {
29 | world.run(() => {
30 | const now = Date.now()
31 | let droppedTicks = 0
32 | while (lastTime <= now) {
33 | droppedTicks++
34 | if (droppedTicks <= maxDroppedTicks) {
35 | totalUpdates++
36 | world.emit(new UpdateTick(
37 | now,
38 | totalUpdates / ticksPerSecond,
39 | 1 / ticksPerSecond
40 | ))
41 | }
42 | lastTime += deltaMs
43 | }
44 | world.emit(new RenderTick())
45 | })
46 |
47 | schedule(update)
48 | }
49 | })
50 | }
51 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | export { Component, component } from './Component'
2 | export { Entity } from './Entity'
3 | export { InitEvent, UpdateTick, RenderTick } from './events'
4 | export { gameClock } from './gameClock'
5 | export { start } from './start'
6 | export { System, system } from './System'
7 | export { World } from './World'
8 |
--------------------------------------------------------------------------------
/src/start.ts:
--------------------------------------------------------------------------------
1 | import { System } from './System'
2 | import { InitEvent } from './events'
3 | import { World } from './World'
4 |
5 | export function start (systems: System[]) {
6 | const world = new World(systems)
7 | world.run(() => world.emit(new InitEvent()))
8 | return world
9 | }
10 |
--------------------------------------------------------------------------------
/test/Entity.test.ts:
--------------------------------------------------------------------------------
1 | import { expect } from 'chai'
2 | import { Entity } from '../src/Entity'
3 | import { component } from '../src'
4 |
5 | const A = component('A')
6 | const B = component('B')
7 |
8 | const createEntity = () => new Entity(() => {})
9 |
10 | describe('Entity', () => {
11 | it('set() should add the component instance', () => {
12 | const result = createEntity()
13 | .set(A, 42)
14 | .get(A)
15 |
16 | expect(result).to.equal(42)
17 | })
18 |
19 | it('set() should override the component instance', () => {
20 | const entity = createEntity()
21 | entity.set(A, 1)
22 | entity.set(A, 2)
23 | expect(entity.get(A)).to.equal(2)
24 | })
25 |
26 | it('has() should return correct information', () => {
27 | const entity = createEntity().set(A, 1)
28 |
29 | expect(entity.has(A)).to.equal(true)
30 | expect(entity.has(B)).to.equal(false)
31 | })
32 |
33 | it('get() should throw if component doesn\'t exist', () => {
34 | const entity = createEntity().set(A, 1)
35 |
36 | expect(() => entity.get(A)).not.to.throw()
37 | expect(() => entity.get(B)).to.throw()
38 | })
39 |
40 | it('remove() should remove the component', () => {
41 | const entity = createEntity().set(A, 1)
42 |
43 | expect(entity.has(A)).to.equal(true)
44 |
45 | entity.remove(A)
46 |
47 | expect(entity.has(A)).to.equal(false)
48 | })
49 |
50 | it('onChange correct call behaviour', () => {
51 | let callValue = undefined
52 | const onChange = (x: any) => { callValue = x }
53 |
54 | const entity = new Entity(onChange).set(A, 1)
55 |
56 | expect(callValue).to.equal(entity)
57 | callValue = undefined
58 |
59 | entity.set(B, 2)
60 | entity.remove(A)
61 |
62 | expect(callValue).to.equal(undefined)
63 | entity['didNotify'] = false
64 |
65 | entity.remove(B)
66 |
67 | expect(callValue).to.equal(entity)
68 | })
69 | })
70 |
--------------------------------------------------------------------------------
/test/EntityManager.test.ts:
--------------------------------------------------------------------------------
1 | import { expect } from 'chai'
2 | import { Entity } from '../src/Entity'
3 | import { EntityManager } from '../src/EntityManager'
4 | import { component } from '../src'
5 |
6 | const A = component('A')
7 | const B = component('B')
8 |
9 | describe('EntityManager', () => {
10 | it('query returns empty array if there are no entities', () => {
11 | const em = new EntityManager()
12 | const entities = em.query(A, B)
13 | expect(entities).to.deep.equal([])
14 | })
15 |
16 | it('query returns empty array when no updates have been processed', () => {
17 | const em = new EntityManager()
18 |
19 | new Entity(em.scheduleUpdate)
20 | .set(A, 1)
21 | .set(B, 2)
22 |
23 | const entities = em.query(A, B)
24 | expect(entities).to.deep.equal([])
25 | })
26 |
27 | it('query returns matched entities after updates are processed', () => {
28 | const em = new EntityManager()
29 | const entity1 = new Entity(em.scheduleUpdate).set(A, 1).set(B, 2)
30 | const entity2 = new Entity(em.scheduleUpdate).set(A, 3).set(B, 4)
31 | new Entity(em.scheduleUpdate).set(A, 4)
32 |
33 | em.processUpdates()
34 | const entities = em.query(A, B)
35 |
36 | expect(entities).to.deep.equal([entity1, entity2])
37 | })
38 |
39 | it('query returns entities that have been changed after processUpdates', () => {
40 | const em = new EntityManager()
41 | const entity = new Entity(em.scheduleUpdate).set(A, 1).set(B, 2)
42 |
43 | em.processUpdates()
44 | const before = em.query(A, B)
45 |
46 | expect(before).to.deep.equal([entity])
47 |
48 | entity.remove(A)
49 | const after = em.query(A, B)
50 |
51 | expect(after).to.deep.equal([entity])
52 | })
53 |
54 | it('queryOne returns a single entity', () => {
55 | const em = new EntityManager()
56 | const first = new Entity(em.scheduleUpdate).set(A, 1)
57 | const second = new Entity(em.scheduleUpdate).set(B, 2)
58 |
59 | em.processUpdates()
60 | const result = em.queryOne(A)
61 |
62 | expect(result === first || result === second).to.equal(true)
63 | })
64 |
65 | it('queryOne can return undefined', () => {
66 | const em = new EntityManager()
67 | const result = em.queryOne(A)
68 | expect(result).to.equal(undefined)
69 | })
70 |
71 | it('processUpdates updates the entity array', () => {
72 | const em = new EntityManager()
73 | const entity = new Entity(em.scheduleUpdate).set(A, 1).set(B, 2)
74 |
75 | em.processUpdates()
76 | const before = em.query(A, B)
77 |
78 | expect(before).to.deep.equal([entity])
79 |
80 | entity.remove(A)
81 | em.processUpdates()
82 | const after = em.query(A, B)
83 |
84 | expect(after).to.deep.equal([])
85 | })
86 |
87 | it('processUpdates removes removed entities', () => {
88 | const em = new EntityManager()
89 | const entity = new Entity(em.scheduleUpdate).set(A, 1).set(B, 2)
90 |
91 | em.processUpdates()
92 | const before = em.query(A, B)
93 |
94 | expect(before).to.deep.equal([entity])
95 |
96 | em.scheduleRemove(entity)
97 | em.processUpdates()
98 | const after = em.query(A, B)
99 |
100 | expect(after).to.deep.equal([])
101 | })
102 | })
103 |
--------------------------------------------------------------------------------
/test/PriorityQueue.test.ts:
--------------------------------------------------------------------------------
1 | import { expect } from 'chai'
2 | import { PriorityQueue } from '../src/PriorityQueue'
3 |
4 | describe('PriorityQueue', () => {
5 | it('is a FIFO for elements with the same priority', () => {
6 | const queue = new PriorityQueue()
7 | queue.enqueue('foo', 1)
8 | queue.enqueue('bar', 1)
9 | queue.enqueue('baz', 1)
10 | expect(queue.dequeue()).to.equal('foo')
11 | expect(queue.dequeue()).to.equal('bar')
12 | expect(queue.dequeue()).to.equal('baz')
13 | expect(queue.dequeue()).to.equal(undefined)
14 | })
15 |
16 | it('returns isEmpty when there are no elements', () => {
17 | const queue = new PriorityQueue()
18 | expect(queue.isEmpty()).to.equal(true)
19 | queue.enqueue('foo', 1)
20 | expect(queue.isEmpty()).to.equal(false)
21 | queue.enqueue('bar', 2)
22 | expect(queue.isEmpty()).to.equal(false)
23 | queue.dequeue()
24 | expect(queue.isEmpty()).to.equal(false)
25 | queue.dequeue()
26 | expect(queue.isEmpty()).to.equal(true)
27 | })
28 |
29 | it('dequeue maintains priorities', () => {
30 | const queue = new PriorityQueue()
31 | queue.enqueue('foo', 0)
32 | queue.enqueue('bar', 1)
33 | expect(queue.dequeue()).to.equal('bar')
34 | expect(queue.dequeue()).to.equal('foo')
35 | })
36 |
37 | it('supports many different priorities', () => {
38 | const queue = new PriorityQueue()
39 | queue.enqueue('F', 2)
40 | queue.enqueue('A', 0)
41 | queue.enqueue('C', 1)
42 | queue.enqueue('B', 0)
43 | queue.enqueue('D', 1)
44 | queue.enqueue('G', 2)
45 | queue.enqueue('E', 1)
46 | expect(queue.dequeue()).to.equal('F')
47 | expect(queue.dequeue()).to.equal('G')
48 | expect(queue.dequeue()).to.equal('C')
49 | expect(queue.dequeue()).to.equal('D')
50 | expect(queue.dequeue()).to.equal('E')
51 | expect(queue.dequeue()).to.equal('A')
52 | expect(queue.dequeue()).to.equal('B')
53 | expect(queue.dequeue()).to.equal(undefined)
54 | })
55 | })
56 |
--------------------------------------------------------------------------------
/test/Query.test.ts:
--------------------------------------------------------------------------------
1 | import { expect } from 'chai'
2 | import { Query } from '../src/Query'
3 | import { Entity, component } from '../src'
4 |
5 | const A = component('A')
6 | const B = component('B')
7 |
8 | const createEntity = () => new Entity(() => {})
9 |
10 | describe('Query', () => {
11 | it('onChange should correctly modify the entities list', () => {
12 | const query = new Query([A], [])
13 | const entity = createEntity().set(A, 1)
14 |
15 | query.onChange(entity)
16 |
17 | expect(query.entities).to.deep.equal([entity])
18 |
19 | entity.set(B, 2)
20 | query.onChange(entity)
21 |
22 | expect(query.entities).to.deep.equal([entity])
23 |
24 | entity.remove(A)
25 |
26 | query.onChange(entity)
27 | expect(query.entities).to.deep.equal([])
28 | })
29 |
30 | it('onRemove should correctly modify the entities list', () => {
31 | const query = new Query([A], [])
32 | const entity = createEntity().set(A, 1)
33 |
34 | query.onChange(entity)
35 | expect(query.entities).to.deep.equal([entity])
36 |
37 | query.onRemove(entity)
38 | expect(query.entities).to.deep.equal([])
39 | })
40 |
41 | it('handles multiple entities', () => {
42 | const query = new Query([A], [])
43 |
44 | const entityA = createEntity().set(A, 1)
45 | const entityB = createEntity().set(A, 1)
46 |
47 | query.onChange(entityA)
48 | query.onChange(entityB)
49 | expect(query.entities).to.deep.equal([entityA, entityB])
50 |
51 | query.onRemove(entityA)
52 | query.onRemove(entityB)
53 | expect(query.entities).to.deep.equal([])
54 | })
55 |
56 | it('handles unknown entities', () => {
57 | const query = new Query([A], [])
58 | const entity = createEntity()
59 |
60 | query.onRemove(entity)
61 |
62 | expect(query.entities).to.deep.equal([])
63 | })
64 |
65 | it('filters its entities initially', () => {
66 | const entity1 = createEntity().set(A, 1)
67 | const entity2 = createEntity().set(A, 1)
68 | const query = new Query([A], [
69 | entity1,
70 | entity2,
71 | createEntity().set(B, 2),
72 | ])
73 |
74 | expect(query.entities).to.deep.equal([entity1, entity2])
75 | })
76 |
77 | it('handles multiple components', () => {
78 | const entity1 = createEntity().set(A, 1).set(B, 2)
79 | const entity2 = createEntity().set(A, 1)
80 | const entity3 = createEntity()
81 |
82 | const query = new Query([A, B], [entity1, entity2, entity3])
83 |
84 | expect(query.entities).to.deep.equal([entity1])
85 | })
86 | })
87 |
--------------------------------------------------------------------------------
/test/System.test.ts:
--------------------------------------------------------------------------------
1 | import { expect } from 'chai'
2 | import { system } from '../src/System'
3 |
4 | class EventA {}
5 | class EventB {}
6 |
7 | describe('system', () => {
8 | it('calls the callback when the event matches', () => {
9 | let callValues = undefined
10 | const mySystem = system(EventA, (...args) => { callValues = args })
11 |
12 | mySystem(null as any, new EventA())
13 |
14 | expect(callValues).to.deep.equal([null, new EventA()])
15 | })
16 |
17 | it('does not call the callback when the event does not match', () => {
18 | let called = false
19 | const mySystem = system(EventA, () => { called = true })
20 |
21 | mySystem(null as any, new EventB())
22 |
23 | expect(called).to.equal(false)
24 | })
25 | })
26 |
--------------------------------------------------------------------------------
/test/World.test.ts:
--------------------------------------------------------------------------------
1 | import { expect } from 'chai'
2 | import { component } from '../src/Component'
3 | import { Entity } from '../src/Entity'
4 | import { InitEvent } from '../src/events'
5 | import { system } from '../src/System'
6 | import { World } from '../src/World'
7 |
8 | describe('World', () => {
9 | describe('create', () => {
10 | it('throws if called outside run', () => {
11 | const world = new World([])
12 | expect(() => world.create()).to.throw()
13 | })
14 |
15 | it('creates a new entity', () => {
16 | const world = new World([])
17 | let entity
18 | world.run(() => { entity = world.create() })
19 | expect(entity).to.be.instanceOf(Entity)
20 | })
21 | })
22 |
23 | describe('emit', () => {
24 | it('throws if called outside run', () => {
25 | const world = new World([])
26 | expect(() => world.emit(new InitEvent())).to.throw()
27 | })
28 |
29 | it('emits events that can be picked up by systems', () => {
30 | class MyEvent {}
31 | let calls = 0
32 |
33 | const mySystem = system(MyEvent, () => { calls += 1 })
34 |
35 | const world = new World([mySystem])
36 | world.run(() => {
37 | world.emit(new MyEvent())
38 | world.emit(new MyEvent())
39 | world.emit(new MyEvent())
40 |
41 | expect(calls).to.equal(0)
42 | })
43 |
44 | expect(calls).to.equal(3)
45 | })
46 |
47 | it('supports priority', () => {
48 | const events: any[] = []
49 |
50 | const eventLog = (world: World, event: any) => events.push(event)
51 | const world = new World([eventLog])
52 |
53 | world.run(() => {
54 | world.emit('foo') // default priority = 0
55 | world.emit('bar', 10)
56 | world.emit('baz', 2)
57 | })
58 |
59 | expect(events).to.deep.equal(['bar', 'baz', 'foo'])
60 | })
61 | })
62 |
63 | describe('query', () => {
64 | it('throws if called outside run', () => {
65 | const world = new World([])
66 | expect(() => world.query()).to.throw()
67 | })
68 |
69 | it('can query entities', () => {
70 | const A = component('A')
71 | const B = component('B')
72 |
73 | const world = new World([])
74 | world.run(() => {
75 | world.create().set(A, 1).set(B, 2)
76 | world.create().set(A, 3).set(B, 4)
77 | world.create().set(A, 5)
78 | world.create().set(B, 6)
79 | world.create()
80 |
81 | const entities = world.query(A, B)
82 | expect(entities.length).to.equal(0)
83 | })
84 | world.run(() => {
85 | const entities = world.query(A, B)
86 | expect(entities.length).to.equal(2)
87 | })
88 | })
89 | })
90 |
91 | describe('queryOne', () => {
92 | it('throws if called outside run', () => {
93 | const world = new World([])
94 | expect(() => world.queryOne()).to.throw()
95 | })
96 |
97 | it('can query entities', () => {
98 | const A = component('A')
99 | const B = component('B')
100 |
101 | const world = new World([])
102 | world.run(() => {
103 | world.create().set(A, 1)
104 | world.create().set(A, 3)
105 | world.create()
106 |
107 | expect(world.queryOne(A)).to.equal(undefined)
108 | expect(world.queryOne(B)).to.equal(undefined)
109 | })
110 | world.run(() => {
111 | expect(world.queryOne(A)).to.be.instanceOf(Entity)
112 | expect(world.queryOne(B)).to.equal(undefined)
113 | })
114 | })
115 | })
116 |
117 | describe('remove', () => {
118 | it('throws if called outside run', () => {
119 | const world = new World([])
120 | let entity: Entity
121 | world.run(() => { entity = world.create() })
122 | expect(() => world.remove(entity)).to.throw()
123 | })
124 |
125 | it('can remove entities', () => {
126 | const world = new World([])
127 | let entity: Entity
128 | world.run(() => { entity = world.create() })
129 | world.run(() => { world.remove(entity) })
130 | world.run(() => {
131 | expect(world.query()).to.deep.equal([])
132 | })
133 | })
134 |
135 | it('can remove entities that are later modified', () => {
136 | const A = component('A')
137 | const world = new World([])
138 | let entity: Entity
139 | world.run(() => { entity = world.create() })
140 | world.run(() => { world.remove(entity) })
141 | world.run(() => { entity.set(A, 42) })
142 | world.run(() => {
143 | expect(world.query()).to.deep.equal([])
144 | })
145 | })
146 | })
147 | })
148 |
--------------------------------------------------------------------------------
/test/index.test.ts:
--------------------------------------------------------------------------------
1 | import * as Rook from '../src'
2 | import { expect } from 'chai'
3 |
4 | describe('index', () => {
5 | it('exports everything that is required', () => {
6 | const A = Rook.component('A')
7 | const B = Rook.component('B')
8 |
9 | const init = Rook.system(Rook.InitEvent, (world, event) => {
10 | world.create()
11 | .set(A, 42)
12 | .set(B, 'foo')
13 | })
14 |
15 | const world = Rook.start([init])
16 |
17 | world.run(() => {
18 | const entities = world.query(A, B)
19 | expect(entities.length).to.equal(1)
20 |
21 | const entity = entities[0]
22 | expect(entity.get(A)).to.equal(42)
23 | expect(entity.get(B)).to.equal('foo')
24 | })
25 | })
26 | })
27 |
--------------------------------------------------------------------------------
/tsconfig.build.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "include": [
4 | "src"
5 | ]
6 | }
7 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "sourceMap": true,
4 | "target": "es5",
5 | "lib": [
6 | "esnext",
7 | "dom"
8 | ],
9 | "moduleResolution": "node",
10 | "module": "commonjs",
11 | "declaration": true,
12 | "strict": true,
13 | "noUnusedLocals": true
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/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.10.4"
7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a"
8 | integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==
9 | dependencies:
10 | "@babel/highlight" "^7.10.4"
11 |
12 | "@babel/helper-validator-identifier@^7.10.4":
13 | version "7.10.4"
14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2"
15 | integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==
16 |
17 | "@babel/highlight@^7.10.4":
18 | version "7.10.4"
19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143"
20 | integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==
21 | dependencies:
22 | "@babel/helper-validator-identifier" "^7.10.4"
23 | chalk "^2.0.0"
24 | js-tokens "^4.0.0"
25 |
26 | "@types/chai@^4.2.12":
27 | version "4.2.12"
28 | resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.12.tgz#6160ae454cd89dae05adc3bb97997f488b608201"
29 | integrity sha512-aN5IAC8QNtSUdQzxu7lGBgYAOuU1tmRU4c9dIq5OKGf/SBVjXo+ffM2wEjudAWbgpOhy60nLoAGH1xm8fpCKFQ==
30 |
31 | "@types/color-name@^1.1.1":
32 | version "1.1.1"
33 | resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
34 | integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==
35 |
36 | "@types/eslint-visitor-keys@^1.0.0":
37 | version "1.0.0"
38 | resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"
39 | integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==
40 |
41 | "@types/json-schema@^7.0.3":
42 | version "7.0.5"
43 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd"
44 | integrity sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==
45 |
46 | "@types/mocha@^8.0.2":
47 | version "8.0.2"
48 | resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.0.2.tgz#cdd160767c5a445bedef94ea8cfc8ab760fff42b"
49 | integrity sha512-5cv8rmqT3KX9XtWDvSgGYfS4OwrKM2eei90GWLnTYz+AXRiBv5uYcKBjnkQ4katNvfYk3+o2bHGZUsDhdcoUyg==
50 |
51 | "@typescript-eslint/eslint-plugin@^3.9.0":
52 | version "3.9.0"
53 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.9.0.tgz#0fe529b33d63c9a94f7503ca2bb12c84b9477ff3"
54 | integrity sha512-UD6b4p0/hSe1xdTvRCENSx7iQ+KR6ourlZFfYuPC7FlXEzdHuLPrEmuxZ23b2zW96KJX9Z3w05GE/wNOiEzrVg==
55 | dependencies:
56 | "@typescript-eslint/experimental-utils" "3.9.0"
57 | debug "^4.1.1"
58 | functional-red-black-tree "^1.0.1"
59 | regexpp "^3.0.0"
60 | semver "^7.3.2"
61 | tsutils "^3.17.1"
62 |
63 | "@typescript-eslint/experimental-utils@3.9.0":
64 | version "3.9.0"
65 | resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.9.0.tgz#3171d8ddba0bf02a8c2034188593630914fcf5ee"
66 | integrity sha512-/vSHUDYizSOhrOJdjYxPNGfb4a3ibO8zd4nUKo/QBFOmxosT3cVUV7KIg8Dwi6TXlr667G7YPqFK9+VSZOorNA==
67 | dependencies:
68 | "@types/json-schema" "^7.0.3"
69 | "@typescript-eslint/types" "3.9.0"
70 | "@typescript-eslint/typescript-estree" "3.9.0"
71 | eslint-scope "^5.0.0"
72 | eslint-utils "^2.0.0"
73 |
74 | "@typescript-eslint/parser@^3.9.0":
75 | version "3.9.0"
76 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.9.0.tgz#344978a265d9a5c7c8f13e62c78172a4374dabea"
77 | integrity sha512-rDHOKb6uW2jZkHQniUQVZkixQrfsZGUCNWWbKWep4A5hGhN5dLHMUCNAWnC4tXRlHedXkTDptIpxs6e4Pz8UfA==
78 | dependencies:
79 | "@types/eslint-visitor-keys" "^1.0.0"
80 | "@typescript-eslint/experimental-utils" "3.9.0"
81 | "@typescript-eslint/types" "3.9.0"
82 | "@typescript-eslint/typescript-estree" "3.9.0"
83 | eslint-visitor-keys "^1.1.0"
84 |
85 | "@typescript-eslint/types@3.9.0":
86 | version "3.9.0"
87 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.9.0.tgz#be9d0aa451e1bf3ce99f2e6920659e5b2e6bfe18"
88 | integrity sha512-rb6LDr+dk9RVVXO/NJE8dT1pGlso3voNdEIN8ugm4CWM5w5GimbThCMiMl4da1t5u3YwPWEwOnKAULCZgBtBHg==
89 |
90 | "@typescript-eslint/typescript-estree@3.9.0":
91 | version "3.9.0"
92 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.9.0.tgz#c6abbb50fa0d715cab46fef67ca6378bf2eaca13"
93 | integrity sha512-N+158NKgN4rOmWVfvKOMoMFV5n8XxAliaKkArm/sOypzQ0bUL8MSnOEBW3VFIeffb/K5ce/cAV0yYhR7U4ALAA==
94 | dependencies:
95 | "@typescript-eslint/types" "3.9.0"
96 | "@typescript-eslint/visitor-keys" "3.9.0"
97 | debug "^4.1.1"
98 | glob "^7.1.6"
99 | is-glob "^4.0.1"
100 | lodash "^4.17.15"
101 | semver "^7.3.2"
102 | tsutils "^3.17.1"
103 |
104 | "@typescript-eslint/visitor-keys@3.9.0":
105 | version "3.9.0"
106 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.9.0.tgz#44de8e1b1df67adaf3b94d6b60b80f8faebc8dd3"
107 | integrity sha512-O1qeoGqDbu0EZUC/MZ6F1WHTIzcBVhGqDj3LhTnj65WUA548RXVxUHbYhAW9bZWfb2rnX9QsbbP5nmeJ5Z4+ng==
108 | dependencies:
109 | eslint-visitor-keys "^1.1.0"
110 |
111 | acorn-jsx@^5.2.0:
112 | version "5.2.0"
113 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe"
114 | integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==
115 |
116 | acorn@^7.3.1:
117 | version "7.4.0"
118 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c"
119 | integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==
120 |
121 | ajv@^6.10.0, ajv@^6.10.2:
122 | version "6.12.3"
123 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706"
124 | integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==
125 | dependencies:
126 | fast-deep-equal "^3.1.1"
127 | fast-json-stable-stringify "^2.0.0"
128 | json-schema-traverse "^0.4.1"
129 | uri-js "^4.2.2"
130 |
131 | ansi-colors@4.1.1, ansi-colors@^4.1.1:
132 | version "4.1.1"
133 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
134 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
135 |
136 | ansi-regex@^3.0.0:
137 | version "3.0.0"
138 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
139 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
140 |
141 | ansi-regex@^4.1.0:
142 | version "4.1.0"
143 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
144 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
145 |
146 | ansi-regex@^5.0.0:
147 | version "5.0.0"
148 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
149 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
150 |
151 | ansi-styles@^3.2.0, ansi-styles@^3.2.1:
152 | version "3.2.1"
153 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
154 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
155 | dependencies:
156 | color-convert "^1.9.0"
157 |
158 | ansi-styles@^4.1.0:
159 | version "4.2.1"
160 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359"
161 | integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==
162 | dependencies:
163 | "@types/color-name" "^1.1.1"
164 | color-convert "^2.0.1"
165 |
166 | anymatch@~3.1.1:
167 | version "3.1.1"
168 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142"
169 | integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==
170 | dependencies:
171 | normalize-path "^3.0.0"
172 | picomatch "^2.0.4"
173 |
174 | arg@^4.1.0:
175 | version "4.1.3"
176 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
177 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
178 |
179 | argparse@^1.0.7:
180 | version "1.0.10"
181 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
182 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
183 | dependencies:
184 | sprintf-js "~1.0.2"
185 |
186 | array.prototype.map@^1.0.1:
187 | version "1.0.2"
188 | resolved "https://registry.yarnpkg.com/array.prototype.map/-/array.prototype.map-1.0.2.tgz#9a4159f416458a23e9483078de1106b2ef68f8ec"
189 | integrity sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw==
190 | dependencies:
191 | define-properties "^1.1.3"
192 | es-abstract "^1.17.0-next.1"
193 | es-array-method-boxes-properly "^1.0.0"
194 | is-string "^1.0.4"
195 |
196 | assertion-error@^1.1.0:
197 | version "1.1.0"
198 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"
199 | integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==
200 |
201 | astral-regex@^1.0.0:
202 | version "1.0.0"
203 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
204 | integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
205 |
206 | balanced-match@^1.0.0:
207 | version "1.0.0"
208 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
209 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
210 |
211 | binary-extensions@^2.0.0:
212 | version "2.1.0"
213 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9"
214 | integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==
215 |
216 | brace-expansion@^1.1.7:
217 | version "1.1.11"
218 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
219 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
220 | dependencies:
221 | balanced-match "^1.0.0"
222 | concat-map "0.0.1"
223 |
224 | braces@~3.0.2:
225 | version "3.0.2"
226 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
227 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
228 | dependencies:
229 | fill-range "^7.0.1"
230 |
231 | browser-stdout@1.3.1:
232 | version "1.3.1"
233 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
234 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
235 |
236 | buffer-from@^1.0.0:
237 | version "1.1.1"
238 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
239 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
240 |
241 | callsites@^3.0.0:
242 | version "3.1.0"
243 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
244 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
245 |
246 | camelcase@^5.0.0, camelcase@^5.3.1:
247 | version "5.3.1"
248 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
249 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
250 |
251 | chai@^4.2.0:
252 | version "4.2.0"
253 | resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5"
254 | integrity sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==
255 | dependencies:
256 | assertion-error "^1.1.0"
257 | check-error "^1.0.2"
258 | deep-eql "^3.0.1"
259 | get-func-name "^2.0.0"
260 | pathval "^1.1.0"
261 | type-detect "^4.0.5"
262 |
263 | chalk@^2.0.0, chalk@^2.4.2:
264 | version "2.4.2"
265 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
266 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
267 | dependencies:
268 | ansi-styles "^3.2.1"
269 | escape-string-regexp "^1.0.5"
270 | supports-color "^5.3.0"
271 |
272 | chalk@^4.0.0:
273 | version "4.1.0"
274 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
275 | integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
276 | dependencies:
277 | ansi-styles "^4.1.0"
278 | supports-color "^7.1.0"
279 |
280 | check-error@^1.0.2:
281 | version "1.0.2"
282 | resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82"
283 | integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=
284 |
285 | chokidar@3.3.1:
286 | version "3.3.1"
287 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450"
288 | integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==
289 | dependencies:
290 | anymatch "~3.1.1"
291 | braces "~3.0.2"
292 | glob-parent "~5.1.0"
293 | is-binary-path "~2.1.0"
294 | is-glob "~4.0.1"
295 | normalize-path "~3.0.0"
296 | readdirp "~3.3.0"
297 | optionalDependencies:
298 | fsevents "~2.1.2"
299 |
300 | cliui@^5.0.0:
301 | version "5.0.0"
302 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
303 | integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
304 | dependencies:
305 | string-width "^3.1.0"
306 | strip-ansi "^5.2.0"
307 | wrap-ansi "^5.1.0"
308 |
309 | color-convert@^1.9.0:
310 | version "1.9.3"
311 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
312 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
313 | dependencies:
314 | color-name "1.1.3"
315 |
316 | color-convert@^2.0.1:
317 | version "2.0.1"
318 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
319 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
320 | dependencies:
321 | color-name "~1.1.4"
322 |
323 | color-name@1.1.3:
324 | version "1.1.3"
325 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
326 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
327 |
328 | color-name@~1.1.4:
329 | version "1.1.4"
330 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
331 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
332 |
333 | concat-map@0.0.1:
334 | version "0.0.1"
335 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
336 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
337 |
338 | cross-spawn@^7.0.2:
339 | version "7.0.3"
340 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
341 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
342 | dependencies:
343 | path-key "^3.1.0"
344 | shebang-command "^2.0.0"
345 | which "^2.0.1"
346 |
347 | debug@3.2.6:
348 | version "3.2.6"
349 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
350 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
351 | dependencies:
352 | ms "^2.1.1"
353 |
354 | debug@^4.0.1, debug@^4.1.1:
355 | version "4.1.1"
356 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
357 | integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
358 | dependencies:
359 | ms "^2.1.1"
360 |
361 | decamelize@^1.2.0:
362 | version "1.2.0"
363 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
364 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
365 |
366 | deep-eql@^3.0.1:
367 | version "3.0.1"
368 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df"
369 | integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==
370 | dependencies:
371 | type-detect "^4.0.0"
372 |
373 | deep-is@^0.1.3:
374 | version "0.1.3"
375 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
376 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
377 |
378 | define-properties@^1.1.2, define-properties@^1.1.3:
379 | version "1.1.3"
380 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
381 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
382 | dependencies:
383 | object-keys "^1.0.12"
384 |
385 | diff@4.0.2, diff@^4.0.1:
386 | version "4.0.2"
387 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
388 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
389 |
390 | doctrine@^3.0.0:
391 | version "3.0.0"
392 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
393 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
394 | dependencies:
395 | esutils "^2.0.2"
396 |
397 | emoji-regex@^7.0.1:
398 | version "7.0.3"
399 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
400 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
401 |
402 | enquirer@^2.3.5:
403 | version "2.3.6"
404 | resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
405 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
406 | dependencies:
407 | ansi-colors "^4.1.1"
408 |
409 | es-abstract@^1.17.0-next.1, es-abstract@^1.17.4, es-abstract@^1.17.5:
410 | version "1.17.6"
411 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a"
412 | integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==
413 | dependencies:
414 | es-to-primitive "^1.2.1"
415 | function-bind "^1.1.1"
416 | has "^1.0.3"
417 | has-symbols "^1.0.1"
418 | is-callable "^1.2.0"
419 | is-regex "^1.1.0"
420 | object-inspect "^1.7.0"
421 | object-keys "^1.1.1"
422 | object.assign "^4.1.0"
423 | string.prototype.trimend "^1.0.1"
424 | string.prototype.trimstart "^1.0.1"
425 |
426 | es-array-method-boxes-properly@^1.0.0:
427 | version "1.0.0"
428 | resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e"
429 | integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==
430 |
431 | es-get-iterator@^1.0.2:
432 | version "1.1.0"
433 | resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.0.tgz#bb98ad9d6d63b31aacdc8f89d5d0ee57bcb5b4c8"
434 | integrity sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==
435 | dependencies:
436 | es-abstract "^1.17.4"
437 | has-symbols "^1.0.1"
438 | is-arguments "^1.0.4"
439 | is-map "^2.0.1"
440 | is-set "^2.0.1"
441 | is-string "^1.0.5"
442 | isarray "^2.0.5"
443 |
444 | es-to-primitive@^1.2.1:
445 | version "1.2.1"
446 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
447 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
448 | dependencies:
449 | is-callable "^1.1.4"
450 | is-date-object "^1.0.1"
451 | is-symbol "^1.0.2"
452 |
453 | escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5:
454 | version "1.0.5"
455 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
456 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
457 |
458 | eslint-scope@^5.0.0, eslint-scope@^5.1.0:
459 | version "5.1.0"
460 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5"
461 | integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==
462 | dependencies:
463 | esrecurse "^4.1.0"
464 | estraverse "^4.1.1"
465 |
466 | eslint-utils@^2.0.0, eslint-utils@^2.1.0:
467 | version "2.1.0"
468 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
469 | integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
470 | dependencies:
471 | eslint-visitor-keys "^1.1.0"
472 |
473 | eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
474 | version "1.3.0"
475 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
476 | integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
477 |
478 | eslint@^7.6.0:
479 | version "7.6.0"
480 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.6.0.tgz#522d67cfaea09724d96949c70e7a0550614d64d6"
481 | integrity sha512-QlAManNtqr7sozWm5TF4wIH9gmUm2hE3vNRUvyoYAa4y1l5/jxD/PQStEjBMQtCqZmSep8UxrcecI60hOpe61w==
482 | dependencies:
483 | "@babel/code-frame" "^7.0.0"
484 | ajv "^6.10.0"
485 | chalk "^4.0.0"
486 | cross-spawn "^7.0.2"
487 | debug "^4.0.1"
488 | doctrine "^3.0.0"
489 | enquirer "^2.3.5"
490 | eslint-scope "^5.1.0"
491 | eslint-utils "^2.1.0"
492 | eslint-visitor-keys "^1.3.0"
493 | espree "^7.2.0"
494 | esquery "^1.2.0"
495 | esutils "^2.0.2"
496 | file-entry-cache "^5.0.1"
497 | functional-red-black-tree "^1.0.1"
498 | glob-parent "^5.0.0"
499 | globals "^12.1.0"
500 | ignore "^4.0.6"
501 | import-fresh "^3.0.0"
502 | imurmurhash "^0.1.4"
503 | is-glob "^4.0.0"
504 | js-yaml "^3.13.1"
505 | json-stable-stringify-without-jsonify "^1.0.1"
506 | levn "^0.4.1"
507 | lodash "^4.17.19"
508 | minimatch "^3.0.4"
509 | natural-compare "^1.4.0"
510 | optionator "^0.9.1"
511 | progress "^2.0.0"
512 | regexpp "^3.1.0"
513 | semver "^7.2.1"
514 | strip-ansi "^6.0.0"
515 | strip-json-comments "^3.1.0"
516 | table "^5.2.3"
517 | text-table "^0.2.0"
518 | v8-compile-cache "^2.0.3"
519 |
520 | espree@^7.2.0:
521 | version "7.2.0"
522 | resolved "https://registry.yarnpkg.com/espree/-/espree-7.2.0.tgz#1c263d5b513dbad0ac30c4991b93ac354e948d69"
523 | integrity sha512-H+cQ3+3JYRMEIOl87e7QdHX70ocly5iW4+dttuR8iYSPr/hXKFb+7dBsZ7+u1adC4VrnPlTkv0+OwuPnDop19g==
524 | dependencies:
525 | acorn "^7.3.1"
526 | acorn-jsx "^5.2.0"
527 | eslint-visitor-keys "^1.3.0"
528 |
529 | esprima@^4.0.0:
530 | version "4.0.1"
531 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
532 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
533 |
534 | esquery@^1.2.0:
535 | version "1.3.1"
536 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57"
537 | integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==
538 | dependencies:
539 | estraverse "^5.1.0"
540 |
541 | esrecurse@^4.1.0:
542 | version "4.2.1"
543 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
544 | integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
545 | dependencies:
546 | estraverse "^4.1.0"
547 |
548 | estraverse@^4.1.0, estraverse@^4.1.1:
549 | version "4.3.0"
550 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
551 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
552 |
553 | estraverse@^5.1.0:
554 | version "5.2.0"
555 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
556 | integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
557 |
558 | esutils@^2.0.2:
559 | version "2.0.3"
560 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
561 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
562 |
563 | fast-deep-equal@^3.1.1:
564 | version "3.1.3"
565 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
566 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
567 |
568 | fast-json-stable-stringify@^2.0.0:
569 | version "2.1.0"
570 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
571 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
572 |
573 | fast-levenshtein@^2.0.6:
574 | version "2.0.6"
575 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
576 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
577 |
578 | file-entry-cache@^5.0.1:
579 | version "5.0.1"
580 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
581 | integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==
582 | dependencies:
583 | flat-cache "^2.0.1"
584 |
585 | fill-range@^7.0.1:
586 | version "7.0.1"
587 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
588 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
589 | dependencies:
590 | to-regex-range "^5.0.1"
591 |
592 | find-up@4.1.0:
593 | version "4.1.0"
594 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
595 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
596 | dependencies:
597 | locate-path "^5.0.0"
598 | path-exists "^4.0.0"
599 |
600 | find-up@^3.0.0:
601 | version "3.0.0"
602 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
603 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
604 | dependencies:
605 | locate-path "^3.0.0"
606 |
607 | flat-cache@^2.0.1:
608 | version "2.0.1"
609 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
610 | integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
611 | dependencies:
612 | flatted "^2.0.0"
613 | rimraf "2.6.3"
614 | write "1.0.3"
615 |
616 | flat@^4.1.0:
617 | version "4.1.0"
618 | resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2"
619 | integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==
620 | dependencies:
621 | is-buffer "~2.0.3"
622 |
623 | flatted@^2.0.0:
624 | version "2.0.2"
625 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
626 | integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==
627 |
628 | fs.realpath@^1.0.0:
629 | version "1.0.0"
630 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
631 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
632 |
633 | fsevents@~2.1.2:
634 | version "2.1.3"
635 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e"
636 | integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==
637 |
638 | function-bind@^1.1.1:
639 | version "1.1.1"
640 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
641 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
642 |
643 | functional-red-black-tree@^1.0.1:
644 | version "1.0.1"
645 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
646 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
647 |
648 | get-caller-file@^2.0.1:
649 | version "2.0.5"
650 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
651 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
652 |
653 | get-func-name@^2.0.0:
654 | version "2.0.0"
655 | resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41"
656 | integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=
657 |
658 | glob-parent@^5.0.0, glob-parent@~5.1.0:
659 | version "5.1.1"
660 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229"
661 | integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==
662 | dependencies:
663 | is-glob "^4.0.1"
664 |
665 | glob@7.1.6, glob@^7.1.3, glob@^7.1.6:
666 | version "7.1.6"
667 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
668 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
669 | dependencies:
670 | fs.realpath "^1.0.0"
671 | inflight "^1.0.4"
672 | inherits "2"
673 | minimatch "^3.0.4"
674 | once "^1.3.0"
675 | path-is-absolute "^1.0.0"
676 |
677 | globals@^12.1.0:
678 | version "12.4.0"
679 | resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8"
680 | integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==
681 | dependencies:
682 | type-fest "^0.8.1"
683 |
684 | growl@1.10.5:
685 | version "1.10.5"
686 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
687 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==
688 |
689 | has-flag@^3.0.0:
690 | version "3.0.0"
691 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
692 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
693 |
694 | has-flag@^4.0.0:
695 | version "4.0.0"
696 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
697 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
698 |
699 | has-symbols@^1.0.0:
700 | version "1.0.0"
701 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
702 | integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=
703 |
704 | has-symbols@^1.0.1:
705 | version "1.0.1"
706 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
707 | integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
708 |
709 | has@^1.0.3:
710 | version "1.0.3"
711 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
712 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
713 | dependencies:
714 | function-bind "^1.1.1"
715 |
716 | he@1.2.0:
717 | version "1.2.0"
718 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
719 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
720 |
721 | ignore@^4.0.6:
722 | version "4.0.6"
723 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
724 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
725 |
726 | import-fresh@^3.0.0:
727 | version "3.2.1"
728 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66"
729 | integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==
730 | dependencies:
731 | parent-module "^1.0.0"
732 | resolve-from "^4.0.0"
733 |
734 | imurmurhash@^0.1.4:
735 | version "0.1.4"
736 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
737 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
738 |
739 | inflight@^1.0.4:
740 | version "1.0.6"
741 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
742 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
743 | dependencies:
744 | once "^1.3.0"
745 | wrappy "1"
746 |
747 | inherits@2:
748 | version "2.0.3"
749 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
750 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
751 |
752 | is-arguments@^1.0.4:
753 | version "1.0.4"
754 | resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3"
755 | integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==
756 |
757 | is-binary-path@~2.1.0:
758 | version "2.1.0"
759 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
760 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
761 | dependencies:
762 | binary-extensions "^2.0.0"
763 |
764 | is-buffer@~2.0.3:
765 | version "2.0.4"
766 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623"
767 | integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==
768 |
769 | is-callable@^1.1.4:
770 | version "1.1.4"
771 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
772 | integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
773 |
774 | is-callable@^1.2.0:
775 | version "1.2.0"
776 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb"
777 | integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==
778 |
779 | is-date-object@^1.0.1:
780 | version "1.0.1"
781 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
782 | integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=
783 |
784 | is-extglob@^2.1.1:
785 | version "2.1.1"
786 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
787 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
788 |
789 | is-fullwidth-code-point@^2.0.0:
790 | version "2.0.0"
791 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
792 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
793 |
794 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
795 | version "4.0.1"
796 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
797 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
798 | dependencies:
799 | is-extglob "^2.1.1"
800 |
801 | is-map@^2.0.1:
802 | version "2.0.1"
803 | resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.1.tgz#520dafc4307bb8ebc33b813de5ce7c9400d644a1"
804 | integrity sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==
805 |
806 | is-number@^7.0.0:
807 | version "7.0.0"
808 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
809 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
810 |
811 | is-plain-obj@^1.1.0:
812 | version "1.1.0"
813 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
814 | integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
815 |
816 | is-regex@^1.1.0:
817 | version "1.1.1"
818 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9"
819 | integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==
820 | dependencies:
821 | has-symbols "^1.0.1"
822 |
823 | is-set@^2.0.1:
824 | version "2.0.1"
825 | resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.1.tgz#d1604afdab1724986d30091575f54945da7e5f43"
826 | integrity sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==
827 |
828 | is-string@^1.0.4, is-string@^1.0.5:
829 | version "1.0.5"
830 | resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"
831 | integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==
832 |
833 | is-symbol@^1.0.2:
834 | version "1.0.2"
835 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38"
836 | integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==
837 | dependencies:
838 | has-symbols "^1.0.0"
839 |
840 | isarray@^2.0.5:
841 | version "2.0.5"
842 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
843 | integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==
844 |
845 | isexe@^2.0.0:
846 | version "2.0.0"
847 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
848 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
849 |
850 | iterate-iterator@^1.0.1:
851 | version "1.0.1"
852 | resolved "https://registry.yarnpkg.com/iterate-iterator/-/iterate-iterator-1.0.1.tgz#1693a768c1ddd79c969051459453f082fe82e9f6"
853 | integrity sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==
854 |
855 | iterate-value@^1.0.0:
856 | version "1.0.2"
857 | resolved "https://registry.yarnpkg.com/iterate-value/-/iterate-value-1.0.2.tgz#935115bd37d006a52046535ebc8d07e9c9337f57"
858 | integrity sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==
859 | dependencies:
860 | es-get-iterator "^1.0.2"
861 | iterate-iterator "^1.0.1"
862 |
863 | js-tokens@^4.0.0:
864 | version "4.0.0"
865 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
866 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
867 |
868 | js-yaml@3.13.1:
869 | version "3.13.1"
870 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
871 | integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
872 | dependencies:
873 | argparse "^1.0.7"
874 | esprima "^4.0.0"
875 |
876 | js-yaml@^3.13.1:
877 | version "3.14.0"
878 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482"
879 | integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==
880 | dependencies:
881 | argparse "^1.0.7"
882 | esprima "^4.0.0"
883 |
884 | json-schema-traverse@^0.4.1:
885 | version "0.4.1"
886 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
887 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
888 |
889 | json-stable-stringify-without-jsonify@^1.0.1:
890 | version "1.0.1"
891 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
892 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
893 |
894 | levn@^0.4.1:
895 | version "0.4.1"
896 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
897 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
898 | dependencies:
899 | prelude-ls "^1.2.1"
900 | type-check "~0.4.0"
901 |
902 | locate-path@^3.0.0:
903 | version "3.0.0"
904 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
905 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
906 | dependencies:
907 | p-locate "^3.0.0"
908 | path-exists "^3.0.0"
909 |
910 | locate-path@^5.0.0:
911 | version "5.0.0"
912 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
913 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
914 | dependencies:
915 | p-locate "^4.1.0"
916 |
917 | lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19:
918 | version "4.17.19"
919 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
920 | integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
921 |
922 | log-symbols@3.0.0:
923 | version "3.0.0"
924 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4"
925 | integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==
926 | dependencies:
927 | chalk "^2.4.2"
928 |
929 | make-error@^1.1.1:
930 | version "1.3.6"
931 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
932 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
933 |
934 | minimatch@3.0.4, minimatch@^3.0.4:
935 | version "3.0.4"
936 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
937 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
938 | dependencies:
939 | brace-expansion "^1.1.7"
940 |
941 | minimist@^1.2.5:
942 | version "1.2.5"
943 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
944 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
945 |
946 | mkdirp@^0.5.1:
947 | version "0.5.5"
948 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
949 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
950 | dependencies:
951 | minimist "^1.2.5"
952 |
953 | mocha@^8.1.1:
954 | version "8.1.1"
955 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.1.1.tgz#1de1ba4e9a2c955d96b84e469d7540848223592d"
956 | integrity sha512-p7FuGlYH8t7gaiodlFreseLxEmxTgvyG9RgPHODFPySNhwUehu8NIb0vdSt3WFckSneswZ0Un5typYcWElk7HQ==
957 | dependencies:
958 | ansi-colors "4.1.1"
959 | browser-stdout "1.3.1"
960 | chokidar "3.3.1"
961 | debug "3.2.6"
962 | diff "4.0.2"
963 | escape-string-regexp "1.0.5"
964 | find-up "4.1.0"
965 | glob "7.1.6"
966 | growl "1.10.5"
967 | he "1.2.0"
968 | js-yaml "3.13.1"
969 | log-symbols "3.0.0"
970 | minimatch "3.0.4"
971 | ms "2.1.2"
972 | object.assign "4.1.0"
973 | promise.allsettled "1.0.2"
974 | serialize-javascript "4.0.0"
975 | strip-json-comments "3.0.1"
976 | supports-color "7.1.0"
977 | which "2.0.2"
978 | wide-align "1.1.3"
979 | workerpool "6.0.0"
980 | yargs "13.3.2"
981 | yargs-parser "13.1.2"
982 | yargs-unparser "1.6.1"
983 |
984 | ms@2.1.2:
985 | version "2.1.2"
986 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
987 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
988 |
989 | ms@^2.1.1:
990 | version "2.1.1"
991 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
992 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
993 |
994 | natural-compare@^1.4.0:
995 | version "1.4.0"
996 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
997 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
998 |
999 | normalize-path@^3.0.0, normalize-path@~3.0.0:
1000 | version "3.0.0"
1001 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
1002 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
1003 |
1004 | object-inspect@^1.7.0:
1005 | version "1.8.0"
1006 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0"
1007 | integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==
1008 |
1009 | object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1:
1010 | version "1.1.1"
1011 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
1012 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
1013 |
1014 | object.assign@4.1.0, object.assign@^4.1.0:
1015 | version "4.1.0"
1016 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
1017 | integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
1018 | dependencies:
1019 | define-properties "^1.1.2"
1020 | function-bind "^1.1.1"
1021 | has-symbols "^1.0.0"
1022 | object-keys "^1.0.11"
1023 |
1024 | once@^1.3.0:
1025 | version "1.4.0"
1026 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1027 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
1028 | dependencies:
1029 | wrappy "1"
1030 |
1031 | optionator@^0.9.1:
1032 | version "0.9.1"
1033 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
1034 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
1035 | dependencies:
1036 | deep-is "^0.1.3"
1037 | fast-levenshtein "^2.0.6"
1038 | levn "^0.4.1"
1039 | prelude-ls "^1.2.1"
1040 | type-check "^0.4.0"
1041 | word-wrap "^1.2.3"
1042 |
1043 | p-limit@^2.0.0:
1044 | version "2.2.0"
1045 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2"
1046 | integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==
1047 | dependencies:
1048 | p-try "^2.0.0"
1049 |
1050 | p-limit@^2.2.0:
1051 | version "2.3.0"
1052 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
1053 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
1054 | dependencies:
1055 | p-try "^2.0.0"
1056 |
1057 | p-locate@^3.0.0:
1058 | version "3.0.0"
1059 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
1060 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
1061 | dependencies:
1062 | p-limit "^2.0.0"
1063 |
1064 | p-locate@^4.1.0:
1065 | version "4.1.0"
1066 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
1067 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
1068 | dependencies:
1069 | p-limit "^2.2.0"
1070 |
1071 | p-try@^2.0.0:
1072 | version "2.2.0"
1073 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
1074 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
1075 |
1076 | parent-module@^1.0.0:
1077 | version "1.0.1"
1078 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
1079 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
1080 | dependencies:
1081 | callsites "^3.0.0"
1082 |
1083 | path-exists@^3.0.0:
1084 | version "3.0.0"
1085 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
1086 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
1087 |
1088 | path-exists@^4.0.0:
1089 | version "4.0.0"
1090 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
1091 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
1092 |
1093 | path-is-absolute@^1.0.0:
1094 | version "1.0.1"
1095 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1096 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
1097 |
1098 | path-key@^3.1.0:
1099 | version "3.1.1"
1100 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
1101 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
1102 |
1103 | pathval@^1.1.0:
1104 | version "1.1.0"
1105 | resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0"
1106 | integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA=
1107 |
1108 | picomatch@^2.0.4, picomatch@^2.0.7:
1109 | version "2.2.2"
1110 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
1111 | integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
1112 |
1113 | prelude-ls@^1.2.1:
1114 | version "1.2.1"
1115 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
1116 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
1117 |
1118 | progress@^2.0.0:
1119 | version "2.0.3"
1120 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
1121 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
1122 |
1123 | promise.allsettled@1.0.2:
1124 | version "1.0.2"
1125 | resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.2.tgz#d66f78fbb600e83e863d893e98b3d4376a9c47c9"
1126 | integrity sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg==
1127 | dependencies:
1128 | array.prototype.map "^1.0.1"
1129 | define-properties "^1.1.3"
1130 | es-abstract "^1.17.0-next.1"
1131 | function-bind "^1.1.1"
1132 | iterate-value "^1.0.0"
1133 |
1134 | punycode@^2.1.0:
1135 | version "2.1.1"
1136 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
1137 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
1138 |
1139 | randombytes@^2.1.0:
1140 | version "2.1.0"
1141 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
1142 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
1143 | dependencies:
1144 | safe-buffer "^5.1.0"
1145 |
1146 | readdirp@~3.3.0:
1147 | version "3.3.0"
1148 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17"
1149 | integrity sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==
1150 | dependencies:
1151 | picomatch "^2.0.7"
1152 |
1153 | regexpp@^3.0.0, regexpp@^3.1.0:
1154 | version "3.1.0"
1155 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"
1156 | integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==
1157 |
1158 | require-directory@^2.1.1:
1159 | version "2.1.1"
1160 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
1161 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
1162 |
1163 | require-main-filename@^2.0.0:
1164 | version "2.0.0"
1165 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
1166 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
1167 |
1168 | resolve-from@^4.0.0:
1169 | version "4.0.0"
1170 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
1171 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
1172 |
1173 | rimraf@2.6.3:
1174 | version "2.6.3"
1175 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
1176 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
1177 | dependencies:
1178 | glob "^7.1.3"
1179 |
1180 | safe-buffer@^5.1.0:
1181 | version "5.2.1"
1182 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
1183 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
1184 |
1185 | semver@^7.2.1, semver@^7.3.2:
1186 | version "7.3.2"
1187 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
1188 | integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
1189 |
1190 | serialize-javascript@4.0.0:
1191 | version "4.0.0"
1192 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa"
1193 | integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==
1194 | dependencies:
1195 | randombytes "^2.1.0"
1196 |
1197 | set-blocking@^2.0.0:
1198 | version "2.0.0"
1199 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
1200 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
1201 |
1202 | shebang-command@^2.0.0:
1203 | version "2.0.0"
1204 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
1205 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
1206 | dependencies:
1207 | shebang-regex "^3.0.0"
1208 |
1209 | shebang-regex@^3.0.0:
1210 | version "3.0.0"
1211 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
1212 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
1213 |
1214 | slice-ansi@^2.1.0:
1215 | version "2.1.0"
1216 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
1217 | integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
1218 | dependencies:
1219 | ansi-styles "^3.2.0"
1220 | astral-regex "^1.0.0"
1221 | is-fullwidth-code-point "^2.0.0"
1222 |
1223 | source-map-support@^0.5.17:
1224 | version "0.5.19"
1225 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
1226 | integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
1227 | dependencies:
1228 | buffer-from "^1.0.0"
1229 | source-map "^0.6.0"
1230 |
1231 | source-map@^0.6.0:
1232 | version "0.6.1"
1233 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
1234 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
1235 |
1236 | sprintf-js@~1.0.2:
1237 | version "1.0.3"
1238 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
1239 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
1240 |
1241 | "string-width@^1.0.2 || 2":
1242 | version "2.1.1"
1243 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
1244 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
1245 | dependencies:
1246 | is-fullwidth-code-point "^2.0.0"
1247 | strip-ansi "^4.0.0"
1248 |
1249 | string-width@^3.0.0, string-width@^3.1.0:
1250 | version "3.1.0"
1251 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
1252 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
1253 | dependencies:
1254 | emoji-regex "^7.0.1"
1255 | is-fullwidth-code-point "^2.0.0"
1256 | strip-ansi "^5.1.0"
1257 |
1258 | string.prototype.trimend@^1.0.1:
1259 | version "1.0.1"
1260 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913"
1261 | integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==
1262 | dependencies:
1263 | define-properties "^1.1.3"
1264 | es-abstract "^1.17.5"
1265 |
1266 | string.prototype.trimstart@^1.0.1:
1267 | version "1.0.1"
1268 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54"
1269 | integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==
1270 | dependencies:
1271 | define-properties "^1.1.3"
1272 | es-abstract "^1.17.5"
1273 |
1274 | strip-ansi@^4.0.0:
1275 | version "4.0.0"
1276 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
1277 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
1278 | dependencies:
1279 | ansi-regex "^3.0.0"
1280 |
1281 | strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
1282 | version "5.2.0"
1283 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
1284 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
1285 | dependencies:
1286 | ansi-regex "^4.1.0"
1287 |
1288 | strip-ansi@^6.0.0:
1289 | version "6.0.0"
1290 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
1291 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
1292 | dependencies:
1293 | ansi-regex "^5.0.0"
1294 |
1295 | strip-json-comments@3.0.1:
1296 | version "3.0.1"
1297 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7"
1298 | integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==
1299 |
1300 | strip-json-comments@^3.1.0:
1301 | version "3.1.1"
1302 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
1303 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
1304 |
1305 | supports-color@7.1.0, supports-color@^7.1.0:
1306 | version "7.1.0"
1307 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1"
1308 | integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==
1309 | dependencies:
1310 | has-flag "^4.0.0"
1311 |
1312 | supports-color@^5.3.0:
1313 | version "5.5.0"
1314 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
1315 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
1316 | dependencies:
1317 | has-flag "^3.0.0"
1318 |
1319 | table@^5.2.3:
1320 | version "5.4.6"
1321 | resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
1322 | integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==
1323 | dependencies:
1324 | ajv "^6.10.2"
1325 | lodash "^4.17.14"
1326 | slice-ansi "^2.1.0"
1327 | string-width "^3.0.0"
1328 |
1329 | text-table@^0.2.0:
1330 | version "0.2.0"
1331 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
1332 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
1333 |
1334 | to-regex-range@^5.0.1:
1335 | version "5.0.1"
1336 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
1337 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
1338 | dependencies:
1339 | is-number "^7.0.0"
1340 |
1341 | ts-node@^8.10.2:
1342 | version "8.10.2"
1343 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.10.2.tgz#eee03764633b1234ddd37f8db9ec10b75ec7fb8d"
1344 | integrity sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==
1345 | dependencies:
1346 | arg "^4.1.0"
1347 | diff "^4.0.1"
1348 | make-error "^1.1.1"
1349 | source-map-support "^0.5.17"
1350 | yn "3.1.1"
1351 |
1352 | tslib@^1.8.1:
1353 | version "1.13.0"
1354 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
1355 | integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==
1356 |
1357 | tsutils@^3.17.1:
1358 | version "3.17.1"
1359 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759"
1360 | integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==
1361 | dependencies:
1362 | tslib "^1.8.1"
1363 |
1364 | type-check@^0.4.0, type-check@~0.4.0:
1365 | version "0.4.0"
1366 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
1367 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
1368 | dependencies:
1369 | prelude-ls "^1.2.1"
1370 |
1371 | type-detect@^4.0.0, type-detect@^4.0.5:
1372 | version "4.0.8"
1373 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
1374 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
1375 |
1376 | type-fest@^0.8.1:
1377 | version "0.8.1"
1378 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
1379 | integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
1380 |
1381 | typescript@^3.9.7:
1382 | version "3.9.7"
1383 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa"
1384 | integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==
1385 |
1386 | uri-js@^4.2.2:
1387 | version "4.2.2"
1388 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
1389 | integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
1390 | dependencies:
1391 | punycode "^2.1.0"
1392 |
1393 | v8-compile-cache@^2.0.3:
1394 | version "2.1.1"
1395 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745"
1396 | integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==
1397 |
1398 | which-module@^2.0.0:
1399 | version "2.0.0"
1400 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
1401 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
1402 |
1403 | which@2.0.2, which@^2.0.1:
1404 | version "2.0.2"
1405 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
1406 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
1407 | dependencies:
1408 | isexe "^2.0.0"
1409 |
1410 | wide-align@1.1.3:
1411 | version "1.1.3"
1412 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
1413 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
1414 | dependencies:
1415 | string-width "^1.0.2 || 2"
1416 |
1417 | word-wrap@^1.2.3:
1418 | version "1.2.3"
1419 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
1420 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
1421 |
1422 | workerpool@6.0.0:
1423 | version "6.0.0"
1424 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.0.0.tgz#85aad67fa1a2c8ef9386a1b43539900f61d03d58"
1425 | integrity sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA==
1426 |
1427 | wrap-ansi@^5.1.0:
1428 | version "5.1.0"
1429 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
1430 | integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
1431 | dependencies:
1432 | ansi-styles "^3.2.0"
1433 | string-width "^3.0.0"
1434 | strip-ansi "^5.0.0"
1435 |
1436 | wrappy@1:
1437 | version "1.0.2"
1438 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1439 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
1440 |
1441 | write@1.0.3:
1442 | version "1.0.3"
1443 | resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
1444 | integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
1445 | dependencies:
1446 | mkdirp "^0.5.1"
1447 |
1448 | y18n@^4.0.0:
1449 | version "4.0.0"
1450 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
1451 | integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
1452 |
1453 | yargs-parser@13.1.2, yargs-parser@^13.1.2:
1454 | version "13.1.2"
1455 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
1456 | integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==
1457 | dependencies:
1458 | camelcase "^5.0.0"
1459 | decamelize "^1.2.0"
1460 |
1461 | yargs-parser@^15.0.1:
1462 | version "15.0.1"
1463 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3"
1464 | integrity sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==
1465 | dependencies:
1466 | camelcase "^5.0.0"
1467 | decamelize "^1.2.0"
1468 |
1469 | yargs-unparser@1.6.1:
1470 | version "1.6.1"
1471 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.1.tgz#bd4b0ee05b4c94d058929c32cb09e3fce71d3c5f"
1472 | integrity sha512-qZV14lK9MWsGCmcr7u5oXGH0dbGqZAIxTDrWXZDo5zUr6b6iUmelNKO6x6R1dQT24AH3LgRxJpr8meWy2unolA==
1473 | dependencies:
1474 | camelcase "^5.3.1"
1475 | decamelize "^1.2.0"
1476 | flat "^4.1.0"
1477 | is-plain-obj "^1.1.0"
1478 | yargs "^14.2.3"
1479 |
1480 | yargs@13.3.2:
1481 | version "13.3.2"
1482 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
1483 | integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
1484 | dependencies:
1485 | cliui "^5.0.0"
1486 | find-up "^3.0.0"
1487 | get-caller-file "^2.0.1"
1488 | require-directory "^2.1.1"
1489 | require-main-filename "^2.0.0"
1490 | set-blocking "^2.0.0"
1491 | string-width "^3.0.0"
1492 | which-module "^2.0.0"
1493 | y18n "^4.0.0"
1494 | yargs-parser "^13.1.2"
1495 |
1496 | yargs@^14.2.3:
1497 | version "14.2.3"
1498 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414"
1499 | integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==
1500 | dependencies:
1501 | cliui "^5.0.0"
1502 | decamelize "^1.2.0"
1503 | find-up "^3.0.0"
1504 | get-caller-file "^2.0.1"
1505 | require-directory "^2.1.1"
1506 | require-main-filename "^2.0.0"
1507 | set-blocking "^2.0.0"
1508 | string-width "^3.0.0"
1509 | which-module "^2.0.0"
1510 | y18n "^4.0.0"
1511 | yargs-parser "^15.0.1"
1512 |
1513 | yn@3.1.1:
1514 | version "3.1.1"
1515 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
1516 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
1517 |
--------------------------------------------------------------------------------