├── .gitignore ├── 2.11.ts ├── README.md ├── exercise-1.md ├── exercise-2.md ├── exercise-3.md ├── exercise-4.rkt ├── exercise-4.ts ├── exercise-5.rkt ├── exercise-5.ts ├── exercise-6.rkt ├── exercise-6.ts ├── exercise-7.rkt ├── exercise-8.rkt ├── exercise-8.ts ├── exercise-9.rkt ├── exercise-9.ts ├── package-lock.json ├── package.json ├── src ├── future.ts └── index.ts ├── tsconfig.json ├── tutorial.pdf └── use-state.ts /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *~ 3 | -------------------------------------------------------------------------------- /2.11.ts: -------------------------------------------------------------------------------- 1 | import { reduce, shift } from './src'; 2 | 3 | console.log(reduce(function*() { 4 | return 1 + (yield shift(function*(k) { 5 | return 2 * k(3); 6 | })) 7 | })); 8 | 9 | console.log(reduce(function*() { 10 | //A 11 | return 'hello ' + (yield shift(function*(k) { // k continues A 12 | return 'say ' + k('world'); 13 | })) 14 | })) 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Delimited Continuations tutorial 2 | 3 | These are my notes and solutions to exercises from the [delimited 4 | continuations 5 | tutorial](http://pllab.is.ocha.ac.jp/~asai/cw2011tutorial/) from the 6 | Asai laboratory at Ochanomizu University. Because I could not actually 7 | find a way to install OchaOCaml, all of the coding exercises are 8 | implemented in [Racket][racket]. 9 | 10 | > Update: **TypeScript solutions!** I was able to successfully translate 11 | > the solutions into TypeScript, and so each exercise is also now available in 12 | > TypeScript. 13 | 14 | There are some key differences in a Racket implementation however. 15 | 16 | ### Dynamic Typing 17 | 18 | The scheme language variant used in this example is not statically 19 | type-checked, so none of the code-based solutions address the type 20 | based questions in the exercises. 21 | 22 | ### Algebraic Data Types 23 | 24 | The example solutions use the racket [algebraic data type 25 | collection][racket-algebraic]. This just lets you construct (and 26 | deconstruct) product types using positional fields. There is no type 27 | checking, and so anything that goes in will come out. 28 | 29 | ``` scheme 30 | (data MyType (ConstructorOne ConstructorTwo)) 31 | 32 | (define one (ConstructorOne 1)) 33 | (define two (ConstructorTwo 1 2)) 34 | 35 | (let ([(ConstructorOne x) one] 36 | [(ConstructorTwo y z) two]) 37 | (println x) 38 | (println y) 39 | (println z)) 40 | ``` 41 | 42 | prints: 43 | 44 | ``` 45 | 1 46 | 2 47 | 3 48 | ``` 49 | 50 | ### Forms, not functions 51 | 52 | The `reset` and `shift` forms in scheme do not take closures as their 53 | argument, they just take a straight up forms to be evaluated, so 54 | there is no need to create a lambda. For example the following OCaml 55 | example in the tutorial. 56 | 57 | ``` ocaml 58 | reset (fun () -> 3 + shift (fun _ -> "hello") - 1) 59 | ``` 60 | 61 | Would be written in racket as: 62 | 63 | ``` scheme 64 | (reset (shift _ "hello") -1) 65 | ``` 66 | 67 | ## Exercises 68 | 69 | - [exercise 1](./exercise-1.md) 70 | - [exercise 2](./exercise-2.md) 71 | - [exercise 3](./exercise-3.md) 72 | - [exercise 4](./exercise-4.rkt) 73 | - [exercise 5](./exercise-5.rkt) 74 | - [exercise 6](./exercise-6.rkt) 75 | - [exercise 7](./exercise-7.rkt) 76 | - [exercise 8](./exercise-8.rkt) 77 | - [exercise 9](./exercise-9.rkt) 78 | 79 | [racket]: https://racket-lang.org 80 | [racket-algebraic]: https://docs.racket-lang.org/algebraic/ref.html 81 | -------------------------------------------------------------------------------- /exercise-1.md: -------------------------------------------------------------------------------- 1 | In the following expressions, identify the next expression to be 2 | evaluated and its continuation by marking the former with [ · ]. What 3 | is the type of the former? Given a value of this type, what is the 4 | type of the value returned by the continuation? 5 | 6 | 7 | 1. `5 * (2 * 3 + 3 * 4)` 8 | 9 | __next expression__: `2 * 3` 10 | 11 | __continuation__: `5 * ([.] + 3 * 4)` 12 | 13 | __next expression type__: int 14 | 15 | __continuation type__: int -> int_ 16 | 17 | 1. `(if 2 = 3 then "hello" else "hi") ^ " world"` 18 | 19 | __next expression__: `(2 = 3)` 20 | 21 | __continuation__: `(if [.] then "hello" else "hi") ^ " world"` 22 | 23 | __next expression type__: boolean 24 | 25 | __continuation type__: boolean -> string 26 | 27 | 1. `fst (let x = 1 + 2 in (x, x))` 28 | 29 | __next expression__: `(1 + 2)` 30 | 31 | __continuation__: `fst (let x = [.] in (x,x))` 32 | 33 | __next expression type__: boolean 34 | 35 | __continuation type__: boolean -> string 36 | 37 | 1. `string_length ("x" ^ string_of_int (3 + 1))` 38 | 39 | __next expression__: `(3 + 1)` 40 | 41 | __continuation__: `string_length ("X" ^ string_of_int [.])` 42 | 43 | __next expression type__: int 44 | 45 | __continuation type__: int -> int 46 | -------------------------------------------------------------------------------- /exercise-2.md: -------------------------------------------------------------------------------- 1 | In the following expressions, identify the delimited continuation and 2 | its type. 3 | 4 | 1. `5 * reset (fun () -> [2 * 3] + 3 * 4)` 5 | 6 | __continuation__: `[.] + 3 * 4` 7 | 8 | __type__: `int -> int` 9 | 10 | 1. `reset (fun () -> if [2 = 3] then "hello" else "hi") ^ " world"` 11 | 12 | __continuation__: `(if [.] then "hello" else "hi")` 13 | 14 | __type__: `boolean -> string` 15 | 16 | 1. `fst (reset (fun () -> let x = [1 + 2] in (x, x)))` 17 | 18 | __continuation__: `let x = [.] in (x,x)` 19 | 20 | __type__: `int -> (int,int)` 21 | 22 | 1. `string_length (reset (fun () -> "x" ^ string_of_int [3 + 1]))` 23 | 24 | __continuation__: `"x" ^ string_of_int [.]` 25 | 26 | __type__: `int -> string` 27 | -------------------------------------------------------------------------------- /exercise-3.md: -------------------------------------------------------------------------------- 1 | Discard the current continuations and return some values in the 2 | following expressions by replacing [·] with shift (fun _ -> M) for 3 | some M. 4 | 5 | 1. 5 * reset (fun () -> [·] + 3 * 4) 6 | 7 | __5__: 5 + 3 * 4 = 17 8 | 9 | 1. reset (fun () -> if [·] then "hello" else "hi") ^ " world" 10 | 11 | __false__: (if true then "hello" else "hi") ^ " world" = "hello world" 12 | 13 | 1. fst (reset (fun () -> let x = [·] in (x, x))) 14 | 15 | __5__: (let x = 5 in (x, x)) = (5, 5) 16 | 17 | 1. string_length (reset (fun () -> "x" ^ string_of_int [·])) 18 | 19 | __5__: "x"_ ^ string_of_int 5 = "x5" 20 | -------------------------------------------------------------------------------- /exercise-4.rkt: -------------------------------------------------------------------------------- 1 | #lang racket 2 | (require racket/match) 3 | (require racket/control) 4 | 5 | ;; multiply the contents of a list together 6 | (define (times list) (reset 7 | (match list 8 | ; the empty list is the recursive base case 9 | [(list) 1] 10 | 11 | ; when the head of any list is 0, just shift immediately 12 | ; and discard the rest of the computation and produce 0 13 | [(list-rest head rest) #:when (= head 0) (shift _ 0)] 14 | 15 | ; recursive step 16 | [(list-rest head rest) (* head (times rest))]))) 17 | 18 | (times `(1 0 2 2 3)) 19 | -------------------------------------------------------------------------------- /exercise-4.ts: -------------------------------------------------------------------------------- 1 | import { reduce, reset, shift } from './src'; 2 | 3 | 4 | let result = reduce(function*() { 5 | return yield reset(function*() { 6 | return yield* times([8,0,5,2,3]); 7 | }); 8 | 9 | function* times([first, ...rest]: number[]): any { 10 | if (first === 0) { 11 | return yield shift(function*() { 12 | return 0; 13 | }); 14 | } else if (first == null) { 15 | return 1; 16 | } else { 17 | return first * (yield* times(rest)); 18 | } 19 | } 20 | }); 21 | 22 | console.log(result); 23 | -------------------------------------------------------------------------------- /exercise-5.rkt: -------------------------------------------------------------------------------- 1 | #lang racket 2 | (require racket/control) 3 | 4 | ;; 5.1 5 | ;; Takes the argument, add 12, then multiplies by 5 6 | ; e.g. (k 2) = 70 7 | (let ((k (reset (* 5 (+ (shift k k) (* 3 4)))))) 8 | (k 2)) 9 | 10 | ;; 5.2 11 | ;; Takes the argument, and if true, says "hello world", else yield "hi world" 12 | ;; e.g. (k false) = "hi world" 13 | (let ((k (reset (string-append (if (shift k k) "hello" "hi") " world")))) 14 | (k false)) 15 | 16 | ;; 5.3 17 | ;; Takes the argument, and returns it (after putting it into a cons 18 | ;; and then taking it out again ̄\_(ツ)_/̄ 19 | ;; e.g. (k 5) = 5 20 | (let ((k (reset (car (let ((x (shift k k))) (cons x x)))))) 21 | (k 5)) 22 | 23 | ;; 5.4 24 | ;; Returns the number of digits of the number argument, and adds 1 25 | ;; e.g. (k 100) = 4 26 | (let ((k (reset (string-length (string-append "x" (number->string (shift k k))))))) 27 | (k 100)) 28 | 29 | 30 | -------------------------------------------------------------------------------- /exercise-5.ts: -------------------------------------------------------------------------------- 1 | import { reset, shift, reduce } from './src'; 2 | 3 | // ;; 5.1 4 | // ;; Takes the argument, add 12, then multiplies by 5 5 | // ; e.g. (k 2) = 70 6 | // (let ((k (reset (* 5 (+ (shift k k) (* 3 4)))))) 7 | // (k 2)) 8 | 9 | reduce(function*() { 10 | let k = yield reset(function*() { 11 | let $ = yield shift(function*(k) { return k; }); 12 | return 5 * ($ + 3 * 4); 13 | }); 14 | console.log(k(2)); 15 | }); 16 | 17 | 18 | 19 | // ;; 5.2 20 | // ;; Takes the argument, and if true, says "hello world", else yield "hi world" 21 | // ;; e.g. (k false) = "hi world" 22 | // (let ((k (reset (string-append (if (shift k k) "hello" "hi") " world")))) 23 | // (k false)) 24 | 25 | // reduce(function*() { 26 | // let k = yield reset(function*() { 27 | // return `${(yield shift(function*(k) { return k; })) ? 'hello' : 'hi'} world`; 28 | // }); 29 | // console.log(k(false)); 30 | // }) 31 | 32 | // ;; 5.3 33 | // ;; Takes the argument, and returns it (after putting it into a cons 34 | // ;; and then taking it out again ̄\_(ツ)_/̄ 35 | // ;; e.g. (k 5) = 5 36 | // (let ((k (reset (car (let ((x (shift k k))) (cons x x)))))) 37 | // (k 5)) 38 | 39 | // ;; 5.4 40 | // ;; Returns the number of digits of the number argument, and adds 1 41 | // ;; e.g. (k 100) = 4 42 | // (let ((k (reset (string-length (string-append "x" (number->string (shift k k))))))) 43 | // (k 100)) 44 | -------------------------------------------------------------------------------- /exercise-6.rkt: -------------------------------------------------------------------------------- 1 | #lang racket 2 | (require racket/control) 3 | (require racket/match) 4 | 5 | (define (id lst) (match lst 6 | [(list) (shift k k)] 7 | [(list-rest head rest) (cons head (id rest))])) 8 | 9 | 10 | ;; Because the continuation is captured at the very 11 | ; tail of the recursive step it will take whatever is return by the continuation 12 | ; and append it to the list that id was called with. 13 | ; e.g. (k `(4 5 6)) = `(1 2 3 4 5 6) 14 | (let ((k (reset (id `(1 2 3))))) 15 | (k `(4 5 6))) -------------------------------------------------------------------------------- /exercise-6.ts: -------------------------------------------------------------------------------- 1 | import { reduce, shift, reset } from './src'; 2 | 3 | function* id([first, ...rest]: unknown[]): any { 4 | if (first == null) { 5 | return yield shift(function*(k) { return k; }); 6 | } else { 7 | return [first].concat(yield* id(rest)); 8 | } 9 | } 10 | 11 | let k = reduce(function*() { 12 | return yield reset(function*() { 13 | return yield* id([1,2,3]); 14 | }); 15 | }) 16 | console.log(k([4,5,6])); 17 | 18 | 19 | // (define (id lst) (match lst 20 | // [(list) (shift k k)] 21 | // [(list-rest head rest) (cons head (id rest))])) 22 | 23 | 24 | // ;; Because the continuation is captured at the very 25 | // ; tail of the recursive step it will take whatever is return by the continuation 26 | // ; and append it to the list that id was called with. 27 | // ; e.g. (k `(4 5 6)) = `(1 2 3 4 5 6) 28 | 29 | // (let ((k (reset (id `(1 2 3))))) 30 | // (k `(4 5 6))) 31 | -------------------------------------------------------------------------------- /exercise-7.rkt: -------------------------------------------------------------------------------- 1 | #lang algebraic/racket/base 2 | (require algebraic/function) 3 | (require algebraic/racket/base/forms) 4 | (require racket/control) 5 | 6 | (data Tree (Empty Node)) 7 | 8 | (data Result (Next Done)) 9 | 10 | (define (yield value) (shift k (Next value k))) 11 | 12 | (define (start tree) (reset (walk tree) (Done))) 13 | 14 | (define walk (function 15 | [(Empty) `()] 16 | [(Node left value right) 17 | (walk left) 18 | (yield value) 19 | (walk right)])) 20 | 21 | ;; Compare if two trees have the same sequence of values 22 | ; Our strategy is to get the next value from the two trees at 23 | ; the same time. If there is any mismatch, we immeditaley "return" 24 | ; where the return continuation is passed down and corresponds to 25 | ; the top-level reset. 26 | (define (same-fringe t1 t2) 27 | (letrec ((loop (lambda (n1 n2 return) 28 | (cond 29 | [(and (Next? n1) (Next? n2)) 30 | (let ([(Next v1 k1) n1] 31 | [(Next v2 k2) n2]) 32 | (if (= v1 v2) 33 | (loop (k1) (k2) return) 34 | (return #f)))] 35 | [(and (Done? n1) (Done? n2)) (return #t)] 36 | [else (return #f)])))) 37 | (reset (shift k (loop (start t1) (start t2) k))))) 38 | 39 | (define tree1 (Node (Node (Empty) 1 (Empty)) 2 (Node (Empty) 3 (Empty)))) 40 | (define tree2 (Node (Empty) 1 (Node (Empty) 2 (Node (Empty) 3 (Empty))))) 41 | 42 | (same-fringe tree1 tree2) -------------------------------------------------------------------------------- /exercise-8.rkt: -------------------------------------------------------------------------------- 1 | #lang racket 2 | (require racket/control) 3 | 4 | ;; this template function `f` has two "holes" that we fill in 5 | ; with captured continuations. The first hole takes a string 6 | ; and the second an integer. The integer is converted to a string 7 | ; beforehand. 8 | (define (f) (reset (string-append 9 | "hello " 10 | (shift k k) 11 | " " 12 | (shift k (lambda (i) (k (number->string i)))) 13 | "!"))) 14 | 15 | ;; this function takes multiple arguments and applies them 16 | ; successively to the continuations captured by the 17 | ; template function 18 | ; e.g. (hello "Johnny" 5) = "hello Johnny 5!" 19 | (define (hello robot num) 20 | (((f) robot) num)) 21 | 22 | (hello "Johnny" 5) 23 | -------------------------------------------------------------------------------- /exercise-8.ts: -------------------------------------------------------------------------------- 1 | import { reduce, shift, reset } from './src'; 2 | 3 | let t = () => reduce(function*() { 4 | return yield reset(function*() { 5 | let one = yield shift(function*(k) { return k; }); 6 | let two = yield shift(function*(k) { return k; }); 7 | return `hello ${one} ${two}!`; 8 | }); 9 | }); 10 | 11 | function hello(robot: string, num: number): string { 12 | return t()(robot)(num); 13 | } 14 | 15 | console.log(hello("Johnny", 5)); 16 | 17 | // ;; this template function `f` has two "holes" that we fill in 18 | // ; with captured continuations. The first hole takes a string 19 | // ; and the second an integer. The integer is converted to a string 20 | // ; beforehand. 21 | // (define (f) (reset (string-append 22 | // "hello " 23 | // (shift k k) 24 | // " " 25 | // (shift k (lambda (i) (k (number->string i)))) 26 | // "!"))) 27 | 28 | // ;; this function takes multiple arguments and applies them 29 | // ; successively to the continuations captured by the 30 | // ; template function 31 | // ; e.g. (hello "Johnny" 5) = "hello Johnny 5!" 32 | // (define (hello robot num) 33 | // (((f) robot) num)) 34 | 35 | // (hello "Johnny" 5) 36 | -------------------------------------------------------------------------------- /exercise-9.rkt: -------------------------------------------------------------------------------- 1 | #lang racket 2 | (require racket/control) 3 | 4 | 5 | ;; This implements the state monad described in section 6 | ;; 2.10 They work, and I have no idea how yet 7 | 8 | (define (get) 9 | (shift k (λ (state) ((k state) state)))) 10 | 11 | (define (tick) 12 | (shift k (λ (state) ((k) (+ 1 state))))) 13 | 14 | (define (run-state thunk) 15 | ((reset (let ((result (thunk))) (λ (state) result))) 0)) 16 | 17 | (run-state 18 | (λ () 19 | (tick) 20 | (tick) 21 | (let ((a (get))) 22 | (tick) 23 | (- (get) a)))) 24 | 25 | (run-state 26 | (λ () 27 | (- 28 | (begin (tick) (get)) 29 | (begin (tick) (get)) 30 | ))) -------------------------------------------------------------------------------- /exercise-9.ts: -------------------------------------------------------------------------------- 1 | // ;; This implements the state monad described in section 2 | // ;; 2.10 They work, and I have no idea how yet 3 | 4 | // (define (get) 5 | // (shift k (λ (state) ((k state) state)))) 6 | 7 | // (define (tick) 8 | // (shift k (λ (state) ((k) (+ 1 state))))) 9 | 10 | // (define (run-state thunk) 11 | // ((reset (let ((result (thunk))) (λ (state) result))) 0)) 12 | 13 | // (run-state 14 | // (λ () 15 | // (tick) 16 | // (tick) 17 | // (let ((a (get))) 18 | // (tick) 19 | // (- (get) a)))) 20 | 21 | // (run-state 22 | // (λ () 23 | // (- 24 | // (begin (tick) (get)) 25 | // (begin (tick) (get)) 26 | // ))) 27 | 28 | import { Prog, reduce, reset, shift } from './src'; 29 | 30 | reduce(function* () { 31 | function* get(): Prog { 32 | return yield shift(function*(k) { 33 | return (state: number) => k(state)(state); 34 | }) 35 | } 36 | 37 | function* set(value: number): Prog { 38 | return yield shift(function*(k) { 39 | return () => k()(value) 40 | }) 41 | } 42 | 43 | function* tick(): Prog { 44 | return yield* set((yield* get()) + 1); 45 | } 46 | 47 | function* runState(thunk: () => Prog): Prog { 48 | return (yield reset(function*() { 49 | let result = yield* thunk(); 50 | return () => result; 51 | }))(0); 52 | } 53 | 54 | yield* runState(function*() { 55 | yield* tick(); 56 | yield* tick(); 57 | let a = yield* get(); 58 | yield* tick(); 59 | 60 | console.log((yield* get()) - a); 61 | }); 62 | 63 | yield* runState(function*() { 64 | 65 | yield* tick(); 66 | let a = yield* get(); 67 | 68 | yield* tick(); 69 | let b = yield* get(); 70 | 71 | console.log(a - b); 72 | }) 73 | }) 74 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "delimited-continuations", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "delimited-continuations", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "devDependencies": { 12 | "@frontside/eslint-config": "^2.1.0", 13 | "@frontside/typescript": "^2.0.0", 14 | "@types/mocha": "^9.0.0", 15 | "assert-ts": "^0.3.3", 16 | "mocha": "^9.1.1", 17 | "ts-node": "^10.2.1", 18 | "typescript": "^4.4.2" 19 | } 20 | }, 21 | "node_modules/@babel/code-frame": { 22 | "version": "7.12.11", 23 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", 24 | "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", 25 | "dev": true, 26 | "dependencies": { 27 | "@babel/highlight": "^7.10.4" 28 | } 29 | }, 30 | "node_modules/@babel/helper-validator-identifier": { 31 | "version": "7.14.9", 32 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", 33 | "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", 34 | "dev": true, 35 | "engines": { 36 | "node": ">=6.9.0" 37 | } 38 | }, 39 | "node_modules/@babel/highlight": { 40 | "version": "7.14.5", 41 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", 42 | "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", 43 | "dev": true, 44 | "dependencies": { 45 | "@babel/helper-validator-identifier": "^7.14.5", 46 | "chalk": "^2.0.0", 47 | "js-tokens": "^4.0.0" 48 | }, 49 | "engines": { 50 | "node": ">=6.9.0" 51 | } 52 | }, 53 | "node_modules/@babel/highlight/node_modules/ansi-styles": { 54 | "version": "3.2.1", 55 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 56 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 57 | "dev": true, 58 | "dependencies": { 59 | "color-convert": "^1.9.0" 60 | }, 61 | "engines": { 62 | "node": ">=4" 63 | } 64 | }, 65 | "node_modules/@babel/highlight/node_modules/chalk": { 66 | "version": "2.4.2", 67 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 68 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 69 | "dev": true, 70 | "dependencies": { 71 | "ansi-styles": "^3.2.1", 72 | "escape-string-regexp": "^1.0.5", 73 | "supports-color": "^5.3.0" 74 | }, 75 | "engines": { 76 | "node": ">=4" 77 | } 78 | }, 79 | "node_modules/@babel/highlight/node_modules/color-convert": { 80 | "version": "1.9.3", 81 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 82 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 83 | "dev": true, 84 | "dependencies": { 85 | "color-name": "1.1.3" 86 | } 87 | }, 88 | "node_modules/@babel/highlight/node_modules/color-name": { 89 | "version": "1.1.3", 90 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 91 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 92 | "dev": true 93 | }, 94 | "node_modules/@babel/highlight/node_modules/escape-string-regexp": { 95 | "version": "1.0.5", 96 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 97 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 98 | "dev": true, 99 | "engines": { 100 | "node": ">=0.8.0" 101 | } 102 | }, 103 | "node_modules/@babel/highlight/node_modules/has-flag": { 104 | "version": "3.0.0", 105 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 106 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 107 | "dev": true, 108 | "engines": { 109 | "node": ">=4" 110 | } 111 | }, 112 | "node_modules/@babel/highlight/node_modules/supports-color": { 113 | "version": "5.5.0", 114 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 115 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 116 | "dev": true, 117 | "dependencies": { 118 | "has-flag": "^3.0.0" 119 | }, 120 | "engines": { 121 | "node": ">=4" 122 | } 123 | }, 124 | "node_modules/@cspotcode/source-map-consumer": { 125 | "version": "0.8.0", 126 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", 127 | "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", 128 | "dev": true, 129 | "engines": { 130 | "node": ">= 12" 131 | } 132 | }, 133 | "node_modules/@cspotcode/source-map-support": { 134 | "version": "0.6.1", 135 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.6.1.tgz", 136 | "integrity": "sha512-DX3Z+T5dt1ockmPdobJS/FAsQPW4V4SrWEhD2iYQT2Cb2tQsiMnYxrcUH9By/Z3B+v0S5LMBkQtV/XOBbpLEOg==", 137 | "dev": true, 138 | "dependencies": { 139 | "@cspotcode/source-map-consumer": "0.8.0" 140 | }, 141 | "engines": { 142 | "node": ">=12" 143 | } 144 | }, 145 | "node_modules/@eslint/eslintrc": { 146 | "version": "0.4.3", 147 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", 148 | "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", 149 | "dev": true, 150 | "dependencies": { 151 | "ajv": "^6.12.4", 152 | "debug": "^4.1.1", 153 | "espree": "^7.3.0", 154 | "globals": "^13.9.0", 155 | "ignore": "^4.0.6", 156 | "import-fresh": "^3.2.1", 157 | "js-yaml": "^3.13.1", 158 | "minimatch": "^3.0.4", 159 | "strip-json-comments": "^3.1.1" 160 | }, 161 | "engines": { 162 | "node": "^10.12.0 || >=12.0.0" 163 | } 164 | }, 165 | "node_modules/@frontside/eslint-config": { 166 | "version": "2.1.0", 167 | "resolved": "https://registry.npmjs.org/@frontside/eslint-config/-/eslint-config-2.1.0.tgz", 168 | "integrity": "sha512-h7c1GaOnVhpPbcKVCzeOjSmvLgiV6Ez0grdE8NvO7rUMJWvlRUB+dUejkQZYzyyQSvzPP5eW+BmfriuA83ejUw==", 169 | "dev": true, 170 | "dependencies": { 171 | "@typescript-eslint/eslint-plugin": "4.28.4", 172 | "@typescript-eslint/parser": "4.28.4", 173 | "eslint": "7.30.0", 174 | "eslint-plugin-mocha-no-only": "^1.1.1", 175 | "eslint-plugin-prefer-let": "^1.1.0", 176 | "typescript": "4.3.5" 177 | } 178 | }, 179 | "node_modules/@frontside/eslint-config/node_modules/typescript": { 180 | "version": "4.3.5", 181 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", 182 | "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", 183 | "dev": true, 184 | "bin": { 185 | "tsc": "bin/tsc", 186 | "tsserver": "bin/tsserver" 187 | }, 188 | "engines": { 189 | "node": ">=4.2.0" 190 | } 191 | }, 192 | "node_modules/@frontside/tsconfig": { 193 | "version": "1.2.0", 194 | "resolved": "https://registry.npmjs.org/@frontside/tsconfig/-/tsconfig-1.2.0.tgz", 195 | "integrity": "sha512-Ua/q/M99ohPLdNtMNuJ1EToTjVkuiUECqQTZB7jsKLpGIn0dazon1KyqNtWYfMExMYXdk4uZimxljoVtFxM/OQ==", 196 | "dev": true 197 | }, 198 | "node_modules/@frontside/typescript": { 199 | "version": "2.0.0", 200 | "resolved": "https://registry.npmjs.org/@frontside/typescript/-/typescript-2.0.0.tgz", 201 | "integrity": "sha512-JU8MT6gKKwRVBzHHJE6OjdZ1sN0HTRBZPrY4rYz4dWIWNTj8/foPFWzH0afE8tjjTepDWWhF3aoh2MPWR6di/Q==", 202 | "dev": true, 203 | "dependencies": { 204 | "@frontside/tsconfig": "1.2.0", 205 | "eslint": "7.17.0", 206 | "typescript": "^4.1.3" 207 | }, 208 | "peerDependencies": { 209 | "@frontside/eslint-config": "*" 210 | } 211 | }, 212 | "node_modules/@frontside/typescript/node_modules/@eslint/eslintrc": { 213 | "version": "0.2.2", 214 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", 215 | "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", 216 | "dev": true, 217 | "dependencies": { 218 | "ajv": "^6.12.4", 219 | "debug": "^4.1.1", 220 | "espree": "^7.3.0", 221 | "globals": "^12.1.0", 222 | "ignore": "^4.0.6", 223 | "import-fresh": "^3.2.1", 224 | "js-yaml": "^3.13.1", 225 | "lodash": "^4.17.19", 226 | "minimatch": "^3.0.4", 227 | "strip-json-comments": "^3.1.1" 228 | }, 229 | "engines": { 230 | "node": "^10.12.0 || >=12.0.0" 231 | } 232 | }, 233 | "node_modules/@frontside/typescript/node_modules/eslint": { 234 | "version": "7.17.0", 235 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.17.0.tgz", 236 | "integrity": "sha512-zJk08MiBgwuGoxes5sSQhOtibZ75pz0J35XTRlZOk9xMffhpA9BTbQZxoXZzOl5zMbleShbGwtw+1kGferfFwQ==", 237 | "dev": true, 238 | "dependencies": { 239 | "@babel/code-frame": "^7.0.0", 240 | "@eslint/eslintrc": "^0.2.2", 241 | "ajv": "^6.10.0", 242 | "chalk": "^4.0.0", 243 | "cross-spawn": "^7.0.2", 244 | "debug": "^4.0.1", 245 | "doctrine": "^3.0.0", 246 | "enquirer": "^2.3.5", 247 | "eslint-scope": "^5.1.1", 248 | "eslint-utils": "^2.1.0", 249 | "eslint-visitor-keys": "^2.0.0", 250 | "espree": "^7.3.1", 251 | "esquery": "^1.2.0", 252 | "esutils": "^2.0.2", 253 | "file-entry-cache": "^6.0.0", 254 | "functional-red-black-tree": "^1.0.1", 255 | "glob-parent": "^5.0.0", 256 | "globals": "^12.1.0", 257 | "ignore": "^4.0.6", 258 | "import-fresh": "^3.0.0", 259 | "imurmurhash": "^0.1.4", 260 | "is-glob": "^4.0.0", 261 | "js-yaml": "^3.13.1", 262 | "json-stable-stringify-without-jsonify": "^1.0.1", 263 | "levn": "^0.4.1", 264 | "lodash": "^4.17.19", 265 | "minimatch": "^3.0.4", 266 | "natural-compare": "^1.4.0", 267 | "optionator": "^0.9.1", 268 | "progress": "^2.0.0", 269 | "regexpp": "^3.1.0", 270 | "semver": "^7.2.1", 271 | "strip-ansi": "^6.0.0", 272 | "strip-json-comments": "^3.1.0", 273 | "table": "^6.0.4", 274 | "text-table": "^0.2.0", 275 | "v8-compile-cache": "^2.0.3" 276 | }, 277 | "bin": { 278 | "eslint": "bin/eslint.js" 279 | }, 280 | "engines": { 281 | "node": "^10.12.0 || >=12.0.0" 282 | }, 283 | "funding": { 284 | "url": "https://opencollective.com/eslint" 285 | } 286 | }, 287 | "node_modules/@frontside/typescript/node_modules/eslint-utils": { 288 | "version": "2.1.0", 289 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", 290 | "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", 291 | "dev": true, 292 | "dependencies": { 293 | "eslint-visitor-keys": "^1.1.0" 294 | }, 295 | "engines": { 296 | "node": ">=6" 297 | }, 298 | "funding": { 299 | "url": "https://github.com/sponsors/mysticatea" 300 | } 301 | }, 302 | "node_modules/@frontside/typescript/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { 303 | "version": "1.3.0", 304 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 305 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 306 | "dev": true, 307 | "engines": { 308 | "node": ">=4" 309 | } 310 | }, 311 | "node_modules/@frontside/typescript/node_modules/globals": { 312 | "version": "12.4.0", 313 | "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", 314 | "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", 315 | "dev": true, 316 | "dependencies": { 317 | "type-fest": "^0.8.1" 318 | }, 319 | "engines": { 320 | "node": ">=8" 321 | }, 322 | "funding": { 323 | "url": "https://github.com/sponsors/sindresorhus" 324 | } 325 | }, 326 | "node_modules/@frontside/typescript/node_modules/type-fest": { 327 | "version": "0.8.1", 328 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", 329 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", 330 | "dev": true, 331 | "engines": { 332 | "node": ">=8" 333 | } 334 | }, 335 | "node_modules/@humanwhocodes/config-array": { 336 | "version": "0.5.0", 337 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", 338 | "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", 339 | "dev": true, 340 | "dependencies": { 341 | "@humanwhocodes/object-schema": "^1.2.0", 342 | "debug": "^4.1.1", 343 | "minimatch": "^3.0.4" 344 | }, 345 | "engines": { 346 | "node": ">=10.10.0" 347 | } 348 | }, 349 | "node_modules/@humanwhocodes/object-schema": { 350 | "version": "1.2.0", 351 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", 352 | "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", 353 | "dev": true 354 | }, 355 | "node_modules/@nodelib/fs.scandir": { 356 | "version": "2.1.5", 357 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 358 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 359 | "dev": true, 360 | "dependencies": { 361 | "@nodelib/fs.stat": "2.0.5", 362 | "run-parallel": "^1.1.9" 363 | }, 364 | "engines": { 365 | "node": ">= 8" 366 | } 367 | }, 368 | "node_modules/@nodelib/fs.stat": { 369 | "version": "2.0.5", 370 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 371 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 372 | "dev": true, 373 | "engines": { 374 | "node": ">= 8" 375 | } 376 | }, 377 | "node_modules/@nodelib/fs.walk": { 378 | "version": "1.2.8", 379 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 380 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 381 | "dev": true, 382 | "dependencies": { 383 | "@nodelib/fs.scandir": "2.1.5", 384 | "fastq": "^1.6.0" 385 | }, 386 | "engines": { 387 | "node": ">= 8" 388 | } 389 | }, 390 | "node_modules/@tsconfig/node10": { 391 | "version": "1.0.8", 392 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", 393 | "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", 394 | "dev": true 395 | }, 396 | "node_modules/@tsconfig/node12": { 397 | "version": "1.0.9", 398 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", 399 | "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", 400 | "dev": true 401 | }, 402 | "node_modules/@tsconfig/node14": { 403 | "version": "1.0.1", 404 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", 405 | "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", 406 | "dev": true 407 | }, 408 | "node_modules/@tsconfig/node16": { 409 | "version": "1.0.2", 410 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", 411 | "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", 412 | "dev": true 413 | }, 414 | "node_modules/@types/json-schema": { 415 | "version": "7.0.9", 416 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", 417 | "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", 418 | "dev": true 419 | }, 420 | "node_modules/@types/mocha": { 421 | "version": "9.0.0", 422 | "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", 423 | "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", 424 | "dev": true 425 | }, 426 | "node_modules/@types/node": { 427 | "version": "16.7.10", 428 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.10.tgz", 429 | "integrity": "sha512-S63Dlv4zIPb8x6MMTgDq5WWRJQe56iBEY0O3SOFA9JrRienkOVDXSXBjjJw6HTNQYSE2JI6GMCR6LVbIMHJVvA==", 430 | "dev": true, 431 | "peer": true 432 | }, 433 | "node_modules/@typescript-eslint/eslint-plugin": { 434 | "version": "4.28.4", 435 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.4.tgz", 436 | "integrity": "sha512-s1oY4RmYDlWMlcV0kKPBaADn46JirZzvvH7c2CtAqxCY96S538JRBAzt83RrfkDheV/+G/vWNK0zek+8TB3Gmw==", 437 | "dev": true, 438 | "dependencies": { 439 | "@typescript-eslint/experimental-utils": "4.28.4", 440 | "@typescript-eslint/scope-manager": "4.28.4", 441 | "debug": "^4.3.1", 442 | "functional-red-black-tree": "^1.0.1", 443 | "regexpp": "^3.1.0", 444 | "semver": "^7.3.5", 445 | "tsutils": "^3.21.0" 446 | }, 447 | "engines": { 448 | "node": "^10.12.0 || >=12.0.0" 449 | }, 450 | "funding": { 451 | "type": "opencollective", 452 | "url": "https://opencollective.com/typescript-eslint" 453 | }, 454 | "peerDependencies": { 455 | "@typescript-eslint/parser": "^4.0.0", 456 | "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" 457 | }, 458 | "peerDependenciesMeta": { 459 | "typescript": { 460 | "optional": true 461 | } 462 | } 463 | }, 464 | "node_modules/@typescript-eslint/experimental-utils": { 465 | "version": "4.28.4", 466 | "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.4.tgz", 467 | "integrity": "sha512-OglKWOQRWTCoqMSy6pm/kpinEIgdcXYceIcH3EKWUl4S8xhFtN34GQRaAvTIZB9DD94rW7d/U7tUg3SYeDFNHA==", 468 | "dev": true, 469 | "dependencies": { 470 | "@types/json-schema": "^7.0.7", 471 | "@typescript-eslint/scope-manager": "4.28.4", 472 | "@typescript-eslint/types": "4.28.4", 473 | "@typescript-eslint/typescript-estree": "4.28.4", 474 | "eslint-scope": "^5.1.1", 475 | "eslint-utils": "^3.0.0" 476 | }, 477 | "engines": { 478 | "node": "^10.12.0 || >=12.0.0" 479 | }, 480 | "funding": { 481 | "type": "opencollective", 482 | "url": "https://opencollective.com/typescript-eslint" 483 | }, 484 | "peerDependencies": { 485 | "eslint": "*" 486 | } 487 | }, 488 | "node_modules/@typescript-eslint/parser": { 489 | "version": "4.28.4", 490 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.4.tgz", 491 | "integrity": "sha512-4i0jq3C6n+og7/uCHiE6q5ssw87zVdpUj1k6VlVYMonE3ILdFApEzTWgppSRG4kVNB/5jxnH+gTeKLMNfUelQA==", 492 | "dev": true, 493 | "dependencies": { 494 | "@typescript-eslint/scope-manager": "4.28.4", 495 | "@typescript-eslint/types": "4.28.4", 496 | "@typescript-eslint/typescript-estree": "4.28.4", 497 | "debug": "^4.3.1" 498 | }, 499 | "engines": { 500 | "node": "^10.12.0 || >=12.0.0" 501 | }, 502 | "funding": { 503 | "type": "opencollective", 504 | "url": "https://opencollective.com/typescript-eslint" 505 | }, 506 | "peerDependencies": { 507 | "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" 508 | }, 509 | "peerDependenciesMeta": { 510 | "typescript": { 511 | "optional": true 512 | } 513 | } 514 | }, 515 | "node_modules/@typescript-eslint/scope-manager": { 516 | "version": "4.28.4", 517 | "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.4.tgz", 518 | "integrity": "sha512-ZJBNs4usViOmlyFMt9X9l+X0WAFcDH7EdSArGqpldXu7aeZxDAuAzHiMAeI+JpSefY2INHrXeqnha39FVqXb8w==", 519 | "dev": true, 520 | "dependencies": { 521 | "@typescript-eslint/types": "4.28.4", 522 | "@typescript-eslint/visitor-keys": "4.28.4" 523 | }, 524 | "engines": { 525 | "node": "^8.10.0 || ^10.13.0 || >=11.10.1" 526 | }, 527 | "funding": { 528 | "type": "opencollective", 529 | "url": "https://opencollective.com/typescript-eslint" 530 | } 531 | }, 532 | "node_modules/@typescript-eslint/types": { 533 | "version": "4.28.4", 534 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.4.tgz", 535 | "integrity": "sha512-3eap4QWxGqkYuEmVebUGULMskR6Cuoc/Wii0oSOddleP4EGx1tjLnZQ0ZP33YRoMDCs5O3j56RBV4g14T4jvww==", 536 | "dev": true, 537 | "engines": { 538 | "node": "^8.10.0 || ^10.13.0 || >=11.10.1" 539 | }, 540 | "funding": { 541 | "type": "opencollective", 542 | "url": "https://opencollective.com/typescript-eslint" 543 | } 544 | }, 545 | "node_modules/@typescript-eslint/typescript-estree": { 546 | "version": "4.28.4", 547 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.4.tgz", 548 | "integrity": "sha512-z7d8HK8XvCRyN2SNp+OXC2iZaF+O2BTquGhEYLKLx5k6p0r05ureUtgEfo5f6anLkhCxdHtCf6rPM1p4efHYDQ==", 549 | "dev": true, 550 | "dependencies": { 551 | "@typescript-eslint/types": "4.28.4", 552 | "@typescript-eslint/visitor-keys": "4.28.4", 553 | "debug": "^4.3.1", 554 | "globby": "^11.0.3", 555 | "is-glob": "^4.0.1", 556 | "semver": "^7.3.5", 557 | "tsutils": "^3.21.0" 558 | }, 559 | "engines": { 560 | "node": "^10.12.0 || >=12.0.0" 561 | }, 562 | "funding": { 563 | "type": "opencollective", 564 | "url": "https://opencollective.com/typescript-eslint" 565 | }, 566 | "peerDependenciesMeta": { 567 | "typescript": { 568 | "optional": true 569 | } 570 | } 571 | }, 572 | "node_modules/@typescript-eslint/visitor-keys": { 573 | "version": "4.28.4", 574 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.4.tgz", 575 | "integrity": "sha512-NIAXAdbz1XdOuzqkJHjNKXKj8QQ4cv5cxR/g0uQhCYf/6//XrmfpaYsM7PnBcNbfvTDLUkqQ5TPNm1sozDdTWg==", 576 | "dev": true, 577 | "dependencies": { 578 | "@typescript-eslint/types": "4.28.4", 579 | "eslint-visitor-keys": "^2.0.0" 580 | }, 581 | "engines": { 582 | "node": "^8.10.0 || ^10.13.0 || >=11.10.1" 583 | }, 584 | "funding": { 585 | "type": "opencollective", 586 | "url": "https://opencollective.com/typescript-eslint" 587 | } 588 | }, 589 | "node_modules/@ungap/promise-all-settled": { 590 | "version": "1.1.2", 591 | "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", 592 | "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", 593 | "dev": true 594 | }, 595 | "node_modules/acorn": { 596 | "version": "7.4.1", 597 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 598 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", 599 | "dev": true, 600 | "bin": { 601 | "acorn": "bin/acorn" 602 | }, 603 | "engines": { 604 | "node": ">=0.4.0" 605 | } 606 | }, 607 | "node_modules/acorn-jsx": { 608 | "version": "5.3.2", 609 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 610 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 611 | "dev": true, 612 | "peerDependencies": { 613 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 614 | } 615 | }, 616 | "node_modules/acorn-walk": { 617 | "version": "8.1.1", 618 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.1.tgz", 619 | "integrity": "sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==", 620 | "dev": true, 621 | "engines": { 622 | "node": ">=0.4.0" 623 | } 624 | }, 625 | "node_modules/ajv": { 626 | "version": "6.12.6", 627 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 628 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 629 | "dev": true, 630 | "dependencies": { 631 | "fast-deep-equal": "^3.1.1", 632 | "fast-json-stable-stringify": "^2.0.0", 633 | "json-schema-traverse": "^0.4.1", 634 | "uri-js": "^4.2.2" 635 | }, 636 | "funding": { 637 | "type": "github", 638 | "url": "https://github.com/sponsors/epoberezkin" 639 | } 640 | }, 641 | "node_modules/ansi-colors": { 642 | "version": "4.1.1", 643 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 644 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 645 | "dev": true, 646 | "engines": { 647 | "node": ">=6" 648 | } 649 | }, 650 | "node_modules/ansi-regex": { 651 | "version": "5.0.0", 652 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 653 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", 654 | "dev": true, 655 | "engines": { 656 | "node": ">=8" 657 | } 658 | }, 659 | "node_modules/ansi-styles": { 660 | "version": "4.3.0", 661 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 662 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 663 | "dev": true, 664 | "dependencies": { 665 | "color-convert": "^2.0.1" 666 | }, 667 | "engines": { 668 | "node": ">=8" 669 | }, 670 | "funding": { 671 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 672 | } 673 | }, 674 | "node_modules/anymatch": { 675 | "version": "3.1.2", 676 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 677 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 678 | "dev": true, 679 | "dependencies": { 680 | "normalize-path": "^3.0.0", 681 | "picomatch": "^2.0.4" 682 | }, 683 | "engines": { 684 | "node": ">= 8" 685 | } 686 | }, 687 | "node_modules/arg": { 688 | "version": "4.1.3", 689 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", 690 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 691 | "dev": true 692 | }, 693 | "node_modules/argparse": { 694 | "version": "1.0.10", 695 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 696 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 697 | "dev": true, 698 | "dependencies": { 699 | "sprintf-js": "~1.0.2" 700 | } 701 | }, 702 | "node_modules/array-union": { 703 | "version": "2.1.0", 704 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 705 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 706 | "dev": true, 707 | "engines": { 708 | "node": ">=8" 709 | } 710 | }, 711 | "node_modules/assert-ts": { 712 | "version": "0.3.3", 713 | "resolved": "https://registry.npmjs.org/assert-ts/-/assert-ts-0.3.3.tgz", 714 | "integrity": "sha512-sWsFWQ0ff3t0rUiiGfuRgRGs2zpnRqROQw/2hTZKp3kbum6MZUSMEibqogzrGHY/0JwOFJYJYRd8FhjCpf9Q4A==", 715 | "dev": true 716 | }, 717 | "node_modules/astral-regex": { 718 | "version": "2.0.0", 719 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", 720 | "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", 721 | "dev": true, 722 | "engines": { 723 | "node": ">=8" 724 | } 725 | }, 726 | "node_modules/balanced-match": { 727 | "version": "1.0.2", 728 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 729 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 730 | "dev": true 731 | }, 732 | "node_modules/binary-extensions": { 733 | "version": "2.2.0", 734 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 735 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 736 | "dev": true, 737 | "engines": { 738 | "node": ">=8" 739 | } 740 | }, 741 | "node_modules/brace-expansion": { 742 | "version": "1.1.11", 743 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 744 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 745 | "dev": true, 746 | "dependencies": { 747 | "balanced-match": "^1.0.0", 748 | "concat-map": "0.0.1" 749 | } 750 | }, 751 | "node_modules/braces": { 752 | "version": "3.0.2", 753 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 754 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 755 | "dev": true, 756 | "dependencies": { 757 | "fill-range": "^7.0.1" 758 | }, 759 | "engines": { 760 | "node": ">=8" 761 | } 762 | }, 763 | "node_modules/browser-stdout": { 764 | "version": "1.3.1", 765 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 766 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 767 | "dev": true 768 | }, 769 | "node_modules/callsites": { 770 | "version": "3.1.0", 771 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 772 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 773 | "dev": true, 774 | "engines": { 775 | "node": ">=6" 776 | } 777 | }, 778 | "node_modules/camelcase": { 779 | "version": "6.2.0", 780 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", 781 | "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", 782 | "dev": true, 783 | "engines": { 784 | "node": ">=10" 785 | }, 786 | "funding": { 787 | "url": "https://github.com/sponsors/sindresorhus" 788 | } 789 | }, 790 | "node_modules/chalk": { 791 | "version": "4.1.2", 792 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 793 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 794 | "dev": true, 795 | "dependencies": { 796 | "ansi-styles": "^4.1.0", 797 | "supports-color": "^7.1.0" 798 | }, 799 | "engines": { 800 | "node": ">=10" 801 | }, 802 | "funding": { 803 | "url": "https://github.com/chalk/chalk?sponsor=1" 804 | } 805 | }, 806 | "node_modules/chokidar": { 807 | "version": "3.5.2", 808 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", 809 | "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", 810 | "dev": true, 811 | "dependencies": { 812 | "anymatch": "~3.1.2", 813 | "braces": "~3.0.2", 814 | "glob-parent": "~5.1.2", 815 | "is-binary-path": "~2.1.0", 816 | "is-glob": "~4.0.1", 817 | "normalize-path": "~3.0.0", 818 | "readdirp": "~3.6.0" 819 | }, 820 | "engines": { 821 | "node": ">= 8.10.0" 822 | }, 823 | "optionalDependencies": { 824 | "fsevents": "~2.3.2" 825 | } 826 | }, 827 | "node_modules/cliui": { 828 | "version": "7.0.4", 829 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 830 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 831 | "dev": true, 832 | "dependencies": { 833 | "string-width": "^4.2.0", 834 | "strip-ansi": "^6.0.0", 835 | "wrap-ansi": "^7.0.0" 836 | } 837 | }, 838 | "node_modules/color-convert": { 839 | "version": "2.0.1", 840 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 841 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 842 | "dev": true, 843 | "dependencies": { 844 | "color-name": "~1.1.4" 845 | }, 846 | "engines": { 847 | "node": ">=7.0.0" 848 | } 849 | }, 850 | "node_modules/color-name": { 851 | "version": "1.1.4", 852 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 853 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 854 | "dev": true 855 | }, 856 | "node_modules/concat-map": { 857 | "version": "0.0.1", 858 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 859 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 860 | "dev": true 861 | }, 862 | "node_modules/create-require": { 863 | "version": "1.1.1", 864 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", 865 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 866 | "dev": true 867 | }, 868 | "node_modules/cross-spawn": { 869 | "version": "7.0.3", 870 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 871 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 872 | "dev": true, 873 | "dependencies": { 874 | "path-key": "^3.1.0", 875 | "shebang-command": "^2.0.0", 876 | "which": "^2.0.1" 877 | }, 878 | "engines": { 879 | "node": ">= 8" 880 | } 881 | }, 882 | "node_modules/debug": { 883 | "version": "4.3.2", 884 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 885 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 886 | "dev": true, 887 | "dependencies": { 888 | "ms": "2.1.2" 889 | }, 890 | "engines": { 891 | "node": ">=6.0" 892 | }, 893 | "peerDependenciesMeta": { 894 | "supports-color": { 895 | "optional": true 896 | } 897 | } 898 | }, 899 | "node_modules/decamelize": { 900 | "version": "4.0.0", 901 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", 902 | "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", 903 | "dev": true, 904 | "engines": { 905 | "node": ">=10" 906 | }, 907 | "funding": { 908 | "url": "https://github.com/sponsors/sindresorhus" 909 | } 910 | }, 911 | "node_modules/deep-is": { 912 | "version": "0.1.3", 913 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 914 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 915 | "dev": true 916 | }, 917 | "node_modules/diff": { 918 | "version": "4.0.2", 919 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 920 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 921 | "dev": true, 922 | "engines": { 923 | "node": ">=0.3.1" 924 | } 925 | }, 926 | "node_modules/dir-glob": { 927 | "version": "3.0.1", 928 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 929 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 930 | "dev": true, 931 | "dependencies": { 932 | "path-type": "^4.0.0" 933 | }, 934 | "engines": { 935 | "node": ">=8" 936 | } 937 | }, 938 | "node_modules/doctrine": { 939 | "version": "3.0.0", 940 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 941 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 942 | "dev": true, 943 | "dependencies": { 944 | "esutils": "^2.0.2" 945 | }, 946 | "engines": { 947 | "node": ">=6.0.0" 948 | } 949 | }, 950 | "node_modules/emoji-regex": { 951 | "version": "8.0.0", 952 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 953 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 954 | "dev": true 955 | }, 956 | "node_modules/enquirer": { 957 | "version": "2.3.6", 958 | "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", 959 | "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", 960 | "dev": true, 961 | "dependencies": { 962 | "ansi-colors": "^4.1.1" 963 | }, 964 | "engines": { 965 | "node": ">=8.6" 966 | } 967 | }, 968 | "node_modules/escalade": { 969 | "version": "3.1.1", 970 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 971 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 972 | "dev": true, 973 | "engines": { 974 | "node": ">=6" 975 | } 976 | }, 977 | "node_modules/escape-string-regexp": { 978 | "version": "4.0.0", 979 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 980 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 981 | "dev": true, 982 | "engines": { 983 | "node": ">=10" 984 | }, 985 | "funding": { 986 | "url": "https://github.com/sponsors/sindresorhus" 987 | } 988 | }, 989 | "node_modules/eslint": { 990 | "version": "7.30.0", 991 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz", 992 | "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==", 993 | "dev": true, 994 | "dependencies": { 995 | "@babel/code-frame": "7.12.11", 996 | "@eslint/eslintrc": "^0.4.2", 997 | "@humanwhocodes/config-array": "^0.5.0", 998 | "ajv": "^6.10.0", 999 | "chalk": "^4.0.0", 1000 | "cross-spawn": "^7.0.2", 1001 | "debug": "^4.0.1", 1002 | "doctrine": "^3.0.0", 1003 | "enquirer": "^2.3.5", 1004 | "escape-string-regexp": "^4.0.0", 1005 | "eslint-scope": "^5.1.1", 1006 | "eslint-utils": "^2.1.0", 1007 | "eslint-visitor-keys": "^2.0.0", 1008 | "espree": "^7.3.1", 1009 | "esquery": "^1.4.0", 1010 | "esutils": "^2.0.2", 1011 | "fast-deep-equal": "^3.1.3", 1012 | "file-entry-cache": "^6.0.1", 1013 | "functional-red-black-tree": "^1.0.1", 1014 | "glob-parent": "^5.1.2", 1015 | "globals": "^13.6.0", 1016 | "ignore": "^4.0.6", 1017 | "import-fresh": "^3.0.0", 1018 | "imurmurhash": "^0.1.4", 1019 | "is-glob": "^4.0.0", 1020 | "js-yaml": "^3.13.1", 1021 | "json-stable-stringify-without-jsonify": "^1.0.1", 1022 | "levn": "^0.4.1", 1023 | "lodash.merge": "^4.6.2", 1024 | "minimatch": "^3.0.4", 1025 | "natural-compare": "^1.4.0", 1026 | "optionator": "^0.9.1", 1027 | "progress": "^2.0.0", 1028 | "regexpp": "^3.1.0", 1029 | "semver": "^7.2.1", 1030 | "strip-ansi": "^6.0.0", 1031 | "strip-json-comments": "^3.1.0", 1032 | "table": "^6.0.9", 1033 | "text-table": "^0.2.0", 1034 | "v8-compile-cache": "^2.0.3" 1035 | }, 1036 | "bin": { 1037 | "eslint": "bin/eslint.js" 1038 | }, 1039 | "engines": { 1040 | "node": "^10.12.0 || >=12.0.0" 1041 | }, 1042 | "funding": { 1043 | "url": "https://opencollective.com/eslint" 1044 | } 1045 | }, 1046 | "node_modules/eslint-plugin-mocha-no-only": { 1047 | "version": "1.1.1", 1048 | "resolved": "https://registry.npmjs.org/eslint-plugin-mocha-no-only/-/eslint-plugin-mocha-no-only-1.1.1.tgz", 1049 | "integrity": "sha512-b+vgjJQ3SjRQCygBhomtjzvRQRpIP8Yd9cqwNSbcoVJREuNajao7M1Kl1aObAUc4wx98qsZyQyUSUxiAbMS9yA==", 1050 | "dev": true, 1051 | "dependencies": { 1052 | "requireindex": "~1.1.0" 1053 | }, 1054 | "engines": { 1055 | "node": ">=0.10.0" 1056 | } 1057 | }, 1058 | "node_modules/eslint-plugin-prefer-let": { 1059 | "version": "1.1.0", 1060 | "resolved": "https://registry.npmjs.org/eslint-plugin-prefer-let/-/eslint-plugin-prefer-let-1.1.0.tgz", 1061 | "integrity": "sha512-d7IhB8FZCtnCNQ20e4UTETPJNF3mIES3ZYan9RK/K3sIkEfuL3NfF9t5gxoNRFjeSkhlGpJmZdLGLRGPmKgVfQ==", 1062 | "dev": true, 1063 | "dependencies": { 1064 | "requireindex": "~1.2.0" 1065 | }, 1066 | "engines": { 1067 | "node": ">=0.10.0" 1068 | } 1069 | }, 1070 | "node_modules/eslint-plugin-prefer-let/node_modules/requireindex": { 1071 | "version": "1.2.0", 1072 | "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", 1073 | "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", 1074 | "dev": true, 1075 | "engines": { 1076 | "node": ">=0.10.5" 1077 | } 1078 | }, 1079 | "node_modules/eslint-scope": { 1080 | "version": "5.1.1", 1081 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", 1082 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 1083 | "dev": true, 1084 | "dependencies": { 1085 | "esrecurse": "^4.3.0", 1086 | "estraverse": "^4.1.1" 1087 | }, 1088 | "engines": { 1089 | "node": ">=8.0.0" 1090 | } 1091 | }, 1092 | "node_modules/eslint-utils": { 1093 | "version": "3.0.0", 1094 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", 1095 | "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", 1096 | "dev": true, 1097 | "dependencies": { 1098 | "eslint-visitor-keys": "^2.0.0" 1099 | }, 1100 | "engines": { 1101 | "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" 1102 | }, 1103 | "funding": { 1104 | "url": "https://github.com/sponsors/mysticatea" 1105 | }, 1106 | "peerDependencies": { 1107 | "eslint": ">=5" 1108 | } 1109 | }, 1110 | "node_modules/eslint-visitor-keys": { 1111 | "version": "2.1.0", 1112 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", 1113 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", 1114 | "dev": true, 1115 | "engines": { 1116 | "node": ">=10" 1117 | } 1118 | }, 1119 | "node_modules/eslint/node_modules/eslint-utils": { 1120 | "version": "2.1.0", 1121 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", 1122 | "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", 1123 | "dev": true, 1124 | "dependencies": { 1125 | "eslint-visitor-keys": "^1.1.0" 1126 | }, 1127 | "engines": { 1128 | "node": ">=6" 1129 | }, 1130 | "funding": { 1131 | "url": "https://github.com/sponsors/mysticatea" 1132 | } 1133 | }, 1134 | "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { 1135 | "version": "1.3.0", 1136 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 1137 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 1138 | "dev": true, 1139 | "engines": { 1140 | "node": ">=4" 1141 | } 1142 | }, 1143 | "node_modules/espree": { 1144 | "version": "7.3.1", 1145 | "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", 1146 | "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", 1147 | "dev": true, 1148 | "dependencies": { 1149 | "acorn": "^7.4.0", 1150 | "acorn-jsx": "^5.3.1", 1151 | "eslint-visitor-keys": "^1.3.0" 1152 | }, 1153 | "engines": { 1154 | "node": "^10.12.0 || >=12.0.0" 1155 | } 1156 | }, 1157 | "node_modules/espree/node_modules/eslint-visitor-keys": { 1158 | "version": "1.3.0", 1159 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 1160 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 1161 | "dev": true, 1162 | "engines": { 1163 | "node": ">=4" 1164 | } 1165 | }, 1166 | "node_modules/esprima": { 1167 | "version": "4.0.1", 1168 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 1169 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 1170 | "dev": true, 1171 | "bin": { 1172 | "esparse": "bin/esparse.js", 1173 | "esvalidate": "bin/esvalidate.js" 1174 | }, 1175 | "engines": { 1176 | "node": ">=4" 1177 | } 1178 | }, 1179 | "node_modules/esquery": { 1180 | "version": "1.4.0", 1181 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", 1182 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", 1183 | "dev": true, 1184 | "dependencies": { 1185 | "estraverse": "^5.1.0" 1186 | }, 1187 | "engines": { 1188 | "node": ">=0.10" 1189 | } 1190 | }, 1191 | "node_modules/esquery/node_modules/estraverse": { 1192 | "version": "5.2.0", 1193 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", 1194 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", 1195 | "dev": true, 1196 | "engines": { 1197 | "node": ">=4.0" 1198 | } 1199 | }, 1200 | "node_modules/esrecurse": { 1201 | "version": "4.3.0", 1202 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 1203 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 1204 | "dev": true, 1205 | "dependencies": { 1206 | "estraverse": "^5.2.0" 1207 | }, 1208 | "engines": { 1209 | "node": ">=4.0" 1210 | } 1211 | }, 1212 | "node_modules/esrecurse/node_modules/estraverse": { 1213 | "version": "5.2.0", 1214 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", 1215 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", 1216 | "dev": true, 1217 | "engines": { 1218 | "node": ">=4.0" 1219 | } 1220 | }, 1221 | "node_modules/estraverse": { 1222 | "version": "4.3.0", 1223 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 1224 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 1225 | "dev": true, 1226 | "engines": { 1227 | "node": ">=4.0" 1228 | } 1229 | }, 1230 | "node_modules/esutils": { 1231 | "version": "2.0.3", 1232 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1233 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1234 | "dev": true, 1235 | "engines": { 1236 | "node": ">=0.10.0" 1237 | } 1238 | }, 1239 | "node_modules/fast-deep-equal": { 1240 | "version": "3.1.3", 1241 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1242 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1243 | "dev": true 1244 | }, 1245 | "node_modules/fast-glob": { 1246 | "version": "3.2.7", 1247 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", 1248 | "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", 1249 | "dev": true, 1250 | "dependencies": { 1251 | "@nodelib/fs.stat": "^2.0.2", 1252 | "@nodelib/fs.walk": "^1.2.3", 1253 | "glob-parent": "^5.1.2", 1254 | "merge2": "^1.3.0", 1255 | "micromatch": "^4.0.4" 1256 | }, 1257 | "engines": { 1258 | "node": ">=8" 1259 | } 1260 | }, 1261 | "node_modules/fast-json-stable-stringify": { 1262 | "version": "2.1.0", 1263 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1264 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1265 | "dev": true 1266 | }, 1267 | "node_modules/fast-levenshtein": { 1268 | "version": "2.0.6", 1269 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1270 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 1271 | "dev": true 1272 | }, 1273 | "node_modules/fastq": { 1274 | "version": "1.12.0", 1275 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz", 1276 | "integrity": "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==", 1277 | "dev": true, 1278 | "dependencies": { 1279 | "reusify": "^1.0.4" 1280 | } 1281 | }, 1282 | "node_modules/file-entry-cache": { 1283 | "version": "6.0.1", 1284 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 1285 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 1286 | "dev": true, 1287 | "dependencies": { 1288 | "flat-cache": "^3.0.4" 1289 | }, 1290 | "engines": { 1291 | "node": "^10.12.0 || >=12.0.0" 1292 | } 1293 | }, 1294 | "node_modules/fill-range": { 1295 | "version": "7.0.1", 1296 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1297 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1298 | "dev": true, 1299 | "dependencies": { 1300 | "to-regex-range": "^5.0.1" 1301 | }, 1302 | "engines": { 1303 | "node": ">=8" 1304 | } 1305 | }, 1306 | "node_modules/find-up": { 1307 | "version": "5.0.0", 1308 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 1309 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 1310 | "dev": true, 1311 | "dependencies": { 1312 | "locate-path": "^6.0.0", 1313 | "path-exists": "^4.0.0" 1314 | }, 1315 | "engines": { 1316 | "node": ">=10" 1317 | }, 1318 | "funding": { 1319 | "url": "https://github.com/sponsors/sindresorhus" 1320 | } 1321 | }, 1322 | "node_modules/flat": { 1323 | "version": "5.0.2", 1324 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", 1325 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", 1326 | "dev": true, 1327 | "bin": { 1328 | "flat": "cli.js" 1329 | } 1330 | }, 1331 | "node_modules/flat-cache": { 1332 | "version": "3.0.4", 1333 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 1334 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 1335 | "dev": true, 1336 | "dependencies": { 1337 | "flatted": "^3.1.0", 1338 | "rimraf": "^3.0.2" 1339 | }, 1340 | "engines": { 1341 | "node": "^10.12.0 || >=12.0.0" 1342 | } 1343 | }, 1344 | "node_modules/flatted": { 1345 | "version": "3.2.2", 1346 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", 1347 | "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", 1348 | "dev": true 1349 | }, 1350 | "node_modules/fs.realpath": { 1351 | "version": "1.0.0", 1352 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1353 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1354 | "dev": true 1355 | }, 1356 | "node_modules/fsevents": { 1357 | "version": "2.3.2", 1358 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1359 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1360 | "dev": true, 1361 | "hasInstallScript": true, 1362 | "optional": true, 1363 | "os": [ 1364 | "darwin" 1365 | ], 1366 | "engines": { 1367 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1368 | } 1369 | }, 1370 | "node_modules/functional-red-black-tree": { 1371 | "version": "1.0.1", 1372 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 1373 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 1374 | "dev": true 1375 | }, 1376 | "node_modules/get-caller-file": { 1377 | "version": "2.0.5", 1378 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1379 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 1380 | "dev": true, 1381 | "engines": { 1382 | "node": "6.* || 8.* || >= 10.*" 1383 | } 1384 | }, 1385 | "node_modules/glob": { 1386 | "version": "7.1.7", 1387 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", 1388 | "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", 1389 | "dev": true, 1390 | "dependencies": { 1391 | "fs.realpath": "^1.0.0", 1392 | "inflight": "^1.0.4", 1393 | "inherits": "2", 1394 | "minimatch": "^3.0.4", 1395 | "once": "^1.3.0", 1396 | "path-is-absolute": "^1.0.0" 1397 | }, 1398 | "engines": { 1399 | "node": "*" 1400 | }, 1401 | "funding": { 1402 | "url": "https://github.com/sponsors/isaacs" 1403 | } 1404 | }, 1405 | "node_modules/glob-parent": { 1406 | "version": "5.1.2", 1407 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1408 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1409 | "dev": true, 1410 | "dependencies": { 1411 | "is-glob": "^4.0.1" 1412 | }, 1413 | "engines": { 1414 | "node": ">= 6" 1415 | } 1416 | }, 1417 | "node_modules/globals": { 1418 | "version": "13.11.0", 1419 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", 1420 | "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", 1421 | "dev": true, 1422 | "dependencies": { 1423 | "type-fest": "^0.20.2" 1424 | }, 1425 | "engines": { 1426 | "node": ">=8" 1427 | }, 1428 | "funding": { 1429 | "url": "https://github.com/sponsors/sindresorhus" 1430 | } 1431 | }, 1432 | "node_modules/globby": { 1433 | "version": "11.0.4", 1434 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", 1435 | "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", 1436 | "dev": true, 1437 | "dependencies": { 1438 | "array-union": "^2.1.0", 1439 | "dir-glob": "^3.0.1", 1440 | "fast-glob": "^3.1.1", 1441 | "ignore": "^5.1.4", 1442 | "merge2": "^1.3.0", 1443 | "slash": "^3.0.0" 1444 | }, 1445 | "engines": { 1446 | "node": ">=10" 1447 | }, 1448 | "funding": { 1449 | "url": "https://github.com/sponsors/sindresorhus" 1450 | } 1451 | }, 1452 | "node_modules/globby/node_modules/ignore": { 1453 | "version": "5.1.8", 1454 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", 1455 | "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", 1456 | "dev": true, 1457 | "engines": { 1458 | "node": ">= 4" 1459 | } 1460 | }, 1461 | "node_modules/growl": { 1462 | "version": "1.10.5", 1463 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", 1464 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", 1465 | "dev": true, 1466 | "engines": { 1467 | "node": ">=4.x" 1468 | } 1469 | }, 1470 | "node_modules/has-flag": { 1471 | "version": "4.0.0", 1472 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1473 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1474 | "dev": true, 1475 | "engines": { 1476 | "node": ">=8" 1477 | } 1478 | }, 1479 | "node_modules/he": { 1480 | "version": "1.2.0", 1481 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 1482 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 1483 | "dev": true, 1484 | "bin": { 1485 | "he": "bin/he" 1486 | } 1487 | }, 1488 | "node_modules/ignore": { 1489 | "version": "4.0.6", 1490 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 1491 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 1492 | "dev": true, 1493 | "engines": { 1494 | "node": ">= 4" 1495 | } 1496 | }, 1497 | "node_modules/import-fresh": { 1498 | "version": "3.3.0", 1499 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 1500 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 1501 | "dev": true, 1502 | "dependencies": { 1503 | "parent-module": "^1.0.0", 1504 | "resolve-from": "^4.0.0" 1505 | }, 1506 | "engines": { 1507 | "node": ">=6" 1508 | }, 1509 | "funding": { 1510 | "url": "https://github.com/sponsors/sindresorhus" 1511 | } 1512 | }, 1513 | "node_modules/imurmurhash": { 1514 | "version": "0.1.4", 1515 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1516 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 1517 | "dev": true, 1518 | "engines": { 1519 | "node": ">=0.8.19" 1520 | } 1521 | }, 1522 | "node_modules/inflight": { 1523 | "version": "1.0.6", 1524 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1525 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1526 | "dev": true, 1527 | "dependencies": { 1528 | "once": "^1.3.0", 1529 | "wrappy": "1" 1530 | } 1531 | }, 1532 | "node_modules/inherits": { 1533 | "version": "2.0.4", 1534 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1535 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1536 | "dev": true 1537 | }, 1538 | "node_modules/is-binary-path": { 1539 | "version": "2.1.0", 1540 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1541 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1542 | "dev": true, 1543 | "dependencies": { 1544 | "binary-extensions": "^2.0.0" 1545 | }, 1546 | "engines": { 1547 | "node": ">=8" 1548 | } 1549 | }, 1550 | "node_modules/is-extglob": { 1551 | "version": "2.1.1", 1552 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1553 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1554 | "dev": true, 1555 | "engines": { 1556 | "node": ">=0.10.0" 1557 | } 1558 | }, 1559 | "node_modules/is-fullwidth-code-point": { 1560 | "version": "3.0.0", 1561 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1562 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1563 | "dev": true, 1564 | "engines": { 1565 | "node": ">=8" 1566 | } 1567 | }, 1568 | "node_modules/is-glob": { 1569 | "version": "4.0.1", 1570 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 1571 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 1572 | "dev": true, 1573 | "dependencies": { 1574 | "is-extglob": "^2.1.1" 1575 | }, 1576 | "engines": { 1577 | "node": ">=0.10.0" 1578 | } 1579 | }, 1580 | "node_modules/is-number": { 1581 | "version": "7.0.0", 1582 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1583 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1584 | "dev": true, 1585 | "engines": { 1586 | "node": ">=0.12.0" 1587 | } 1588 | }, 1589 | "node_modules/is-plain-obj": { 1590 | "version": "2.1.0", 1591 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", 1592 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", 1593 | "dev": true, 1594 | "engines": { 1595 | "node": ">=8" 1596 | } 1597 | }, 1598 | "node_modules/is-unicode-supported": { 1599 | "version": "0.1.0", 1600 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 1601 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", 1602 | "dev": true, 1603 | "engines": { 1604 | "node": ">=10" 1605 | }, 1606 | "funding": { 1607 | "url": "https://github.com/sponsors/sindresorhus" 1608 | } 1609 | }, 1610 | "node_modules/isexe": { 1611 | "version": "2.0.0", 1612 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1613 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1614 | "dev": true 1615 | }, 1616 | "node_modules/js-tokens": { 1617 | "version": "4.0.0", 1618 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1619 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1620 | "dev": true 1621 | }, 1622 | "node_modules/js-yaml": { 1623 | "version": "3.14.1", 1624 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 1625 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 1626 | "dev": true, 1627 | "dependencies": { 1628 | "argparse": "^1.0.7", 1629 | "esprima": "^4.0.0" 1630 | }, 1631 | "bin": { 1632 | "js-yaml": "bin/js-yaml.js" 1633 | } 1634 | }, 1635 | "node_modules/json-schema-traverse": { 1636 | "version": "0.4.1", 1637 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1638 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1639 | "dev": true 1640 | }, 1641 | "node_modules/json-stable-stringify-without-jsonify": { 1642 | "version": "1.0.1", 1643 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1644 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 1645 | "dev": true 1646 | }, 1647 | "node_modules/levn": { 1648 | "version": "0.4.1", 1649 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 1650 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 1651 | "dev": true, 1652 | "dependencies": { 1653 | "prelude-ls": "^1.2.1", 1654 | "type-check": "~0.4.0" 1655 | }, 1656 | "engines": { 1657 | "node": ">= 0.8.0" 1658 | } 1659 | }, 1660 | "node_modules/locate-path": { 1661 | "version": "6.0.0", 1662 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 1663 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 1664 | "dev": true, 1665 | "dependencies": { 1666 | "p-locate": "^5.0.0" 1667 | }, 1668 | "engines": { 1669 | "node": ">=10" 1670 | }, 1671 | "funding": { 1672 | "url": "https://github.com/sponsors/sindresorhus" 1673 | } 1674 | }, 1675 | "node_modules/lodash": { 1676 | "version": "4.17.21", 1677 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1678 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 1679 | "dev": true 1680 | }, 1681 | "node_modules/lodash.clonedeep": { 1682 | "version": "4.5.0", 1683 | "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", 1684 | "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", 1685 | "dev": true 1686 | }, 1687 | "node_modules/lodash.merge": { 1688 | "version": "4.6.2", 1689 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 1690 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 1691 | "dev": true 1692 | }, 1693 | "node_modules/lodash.truncate": { 1694 | "version": "4.4.2", 1695 | "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", 1696 | "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", 1697 | "dev": true 1698 | }, 1699 | "node_modules/log-symbols": { 1700 | "version": "4.1.0", 1701 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", 1702 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", 1703 | "dev": true, 1704 | "dependencies": { 1705 | "chalk": "^4.1.0", 1706 | "is-unicode-supported": "^0.1.0" 1707 | }, 1708 | "engines": { 1709 | "node": ">=10" 1710 | }, 1711 | "funding": { 1712 | "url": "https://github.com/sponsors/sindresorhus" 1713 | } 1714 | }, 1715 | "node_modules/lru-cache": { 1716 | "version": "6.0.0", 1717 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1718 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1719 | "dev": true, 1720 | "dependencies": { 1721 | "yallist": "^4.0.0" 1722 | }, 1723 | "engines": { 1724 | "node": ">=10" 1725 | } 1726 | }, 1727 | "node_modules/make-error": { 1728 | "version": "1.3.6", 1729 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 1730 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 1731 | "dev": true 1732 | }, 1733 | "node_modules/merge2": { 1734 | "version": "1.4.1", 1735 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1736 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1737 | "dev": true, 1738 | "engines": { 1739 | "node": ">= 8" 1740 | } 1741 | }, 1742 | "node_modules/micromatch": { 1743 | "version": "4.0.4", 1744 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", 1745 | "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", 1746 | "dev": true, 1747 | "dependencies": { 1748 | "braces": "^3.0.1", 1749 | "picomatch": "^2.2.3" 1750 | }, 1751 | "engines": { 1752 | "node": ">=8.6" 1753 | } 1754 | }, 1755 | "node_modules/minimatch": { 1756 | "version": "3.0.4", 1757 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1758 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1759 | "dev": true, 1760 | "dependencies": { 1761 | "brace-expansion": "^1.1.7" 1762 | }, 1763 | "engines": { 1764 | "node": "*" 1765 | } 1766 | }, 1767 | "node_modules/mocha": { 1768 | "version": "9.1.1", 1769 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.1.tgz", 1770 | "integrity": "sha512-0wE74YMgOkCgBUj8VyIDwmLUjTsS13WV1Pg7l0SHea2qzZzlq7MDnfbPsHKcELBRk3+izEVkRofjmClpycudCA==", 1771 | "dev": true, 1772 | "dependencies": { 1773 | "@ungap/promise-all-settled": "1.1.2", 1774 | "ansi-colors": "4.1.1", 1775 | "browser-stdout": "1.3.1", 1776 | "chokidar": "3.5.2", 1777 | "debug": "4.3.1", 1778 | "diff": "5.0.0", 1779 | "escape-string-regexp": "4.0.0", 1780 | "find-up": "5.0.0", 1781 | "glob": "7.1.7", 1782 | "growl": "1.10.5", 1783 | "he": "1.2.0", 1784 | "js-yaml": "4.1.0", 1785 | "log-symbols": "4.1.0", 1786 | "minimatch": "3.0.4", 1787 | "ms": "2.1.3", 1788 | "nanoid": "3.1.23", 1789 | "serialize-javascript": "6.0.0", 1790 | "strip-json-comments": "3.1.1", 1791 | "supports-color": "8.1.1", 1792 | "which": "2.0.2", 1793 | "wide-align": "1.1.3", 1794 | "workerpool": "6.1.5", 1795 | "yargs": "16.2.0", 1796 | "yargs-parser": "20.2.4", 1797 | "yargs-unparser": "2.0.0" 1798 | }, 1799 | "bin": { 1800 | "_mocha": "bin/_mocha", 1801 | "mocha": "bin/mocha" 1802 | }, 1803 | "engines": { 1804 | "node": ">= 12.0.0" 1805 | }, 1806 | "funding": { 1807 | "type": "opencollective", 1808 | "url": "https://opencollective.com/mochajs" 1809 | } 1810 | }, 1811 | "node_modules/mocha/node_modules/argparse": { 1812 | "version": "2.0.1", 1813 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1814 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1815 | "dev": true 1816 | }, 1817 | "node_modules/mocha/node_modules/debug": { 1818 | "version": "4.3.1", 1819 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", 1820 | "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", 1821 | "dev": true, 1822 | "dependencies": { 1823 | "ms": "2.1.2" 1824 | }, 1825 | "engines": { 1826 | "node": ">=6.0" 1827 | }, 1828 | "peerDependenciesMeta": { 1829 | "supports-color": { 1830 | "optional": true 1831 | } 1832 | } 1833 | }, 1834 | "node_modules/mocha/node_modules/debug/node_modules/ms": { 1835 | "version": "2.1.2", 1836 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1837 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1838 | "dev": true 1839 | }, 1840 | "node_modules/mocha/node_modules/diff": { 1841 | "version": "5.0.0", 1842 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", 1843 | "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", 1844 | "dev": true, 1845 | "engines": { 1846 | "node": ">=0.3.1" 1847 | } 1848 | }, 1849 | "node_modules/mocha/node_modules/js-yaml": { 1850 | "version": "4.1.0", 1851 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 1852 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 1853 | "dev": true, 1854 | "dependencies": { 1855 | "argparse": "^2.0.1" 1856 | }, 1857 | "bin": { 1858 | "js-yaml": "bin/js-yaml.js" 1859 | } 1860 | }, 1861 | "node_modules/mocha/node_modules/ms": { 1862 | "version": "2.1.3", 1863 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1864 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1865 | "dev": true 1866 | }, 1867 | "node_modules/mocha/node_modules/supports-color": { 1868 | "version": "8.1.1", 1869 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 1870 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 1871 | "dev": true, 1872 | "dependencies": { 1873 | "has-flag": "^4.0.0" 1874 | }, 1875 | "engines": { 1876 | "node": ">=10" 1877 | }, 1878 | "funding": { 1879 | "url": "https://github.com/chalk/supports-color?sponsor=1" 1880 | } 1881 | }, 1882 | "node_modules/ms": { 1883 | "version": "2.1.2", 1884 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1885 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1886 | "dev": true 1887 | }, 1888 | "node_modules/nanoid": { 1889 | "version": "3.1.23", 1890 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", 1891 | "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", 1892 | "dev": true, 1893 | "bin": { 1894 | "nanoid": "bin/nanoid.cjs" 1895 | }, 1896 | "engines": { 1897 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1898 | } 1899 | }, 1900 | "node_modules/natural-compare": { 1901 | "version": "1.4.0", 1902 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1903 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 1904 | "dev": true 1905 | }, 1906 | "node_modules/normalize-path": { 1907 | "version": "3.0.0", 1908 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1909 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1910 | "dev": true, 1911 | "engines": { 1912 | "node": ">=0.10.0" 1913 | } 1914 | }, 1915 | "node_modules/once": { 1916 | "version": "1.4.0", 1917 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1918 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1919 | "dev": true, 1920 | "dependencies": { 1921 | "wrappy": "1" 1922 | } 1923 | }, 1924 | "node_modules/optionator": { 1925 | "version": "0.9.1", 1926 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 1927 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 1928 | "dev": true, 1929 | "dependencies": { 1930 | "deep-is": "^0.1.3", 1931 | "fast-levenshtein": "^2.0.6", 1932 | "levn": "^0.4.1", 1933 | "prelude-ls": "^1.2.1", 1934 | "type-check": "^0.4.0", 1935 | "word-wrap": "^1.2.3" 1936 | }, 1937 | "engines": { 1938 | "node": ">= 0.8.0" 1939 | } 1940 | }, 1941 | "node_modules/p-limit": { 1942 | "version": "3.1.0", 1943 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 1944 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 1945 | "dev": true, 1946 | "dependencies": { 1947 | "yocto-queue": "^0.1.0" 1948 | }, 1949 | "engines": { 1950 | "node": ">=10" 1951 | }, 1952 | "funding": { 1953 | "url": "https://github.com/sponsors/sindresorhus" 1954 | } 1955 | }, 1956 | "node_modules/p-locate": { 1957 | "version": "5.0.0", 1958 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 1959 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 1960 | "dev": true, 1961 | "dependencies": { 1962 | "p-limit": "^3.0.2" 1963 | }, 1964 | "engines": { 1965 | "node": ">=10" 1966 | }, 1967 | "funding": { 1968 | "url": "https://github.com/sponsors/sindresorhus" 1969 | } 1970 | }, 1971 | "node_modules/parent-module": { 1972 | "version": "1.0.1", 1973 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1974 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1975 | "dev": true, 1976 | "dependencies": { 1977 | "callsites": "^3.0.0" 1978 | }, 1979 | "engines": { 1980 | "node": ">=6" 1981 | } 1982 | }, 1983 | "node_modules/path-exists": { 1984 | "version": "4.0.0", 1985 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1986 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1987 | "dev": true, 1988 | "engines": { 1989 | "node": ">=8" 1990 | } 1991 | }, 1992 | "node_modules/path-is-absolute": { 1993 | "version": "1.0.1", 1994 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1995 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1996 | "dev": true, 1997 | "engines": { 1998 | "node": ">=0.10.0" 1999 | } 2000 | }, 2001 | "node_modules/path-key": { 2002 | "version": "3.1.1", 2003 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2004 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2005 | "dev": true, 2006 | "engines": { 2007 | "node": ">=8" 2008 | } 2009 | }, 2010 | "node_modules/path-type": { 2011 | "version": "4.0.0", 2012 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 2013 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 2014 | "dev": true, 2015 | "engines": { 2016 | "node": ">=8" 2017 | } 2018 | }, 2019 | "node_modules/picomatch": { 2020 | "version": "2.3.0", 2021 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", 2022 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", 2023 | "dev": true, 2024 | "engines": { 2025 | "node": ">=8.6" 2026 | }, 2027 | "funding": { 2028 | "url": "https://github.com/sponsors/jonschlinkert" 2029 | } 2030 | }, 2031 | "node_modules/prelude-ls": { 2032 | "version": "1.2.1", 2033 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 2034 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 2035 | "dev": true, 2036 | "engines": { 2037 | "node": ">= 0.8.0" 2038 | } 2039 | }, 2040 | "node_modules/progress": { 2041 | "version": "2.0.3", 2042 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 2043 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 2044 | "dev": true, 2045 | "engines": { 2046 | "node": ">=0.4.0" 2047 | } 2048 | }, 2049 | "node_modules/punycode": { 2050 | "version": "2.1.1", 2051 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 2052 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 2053 | "dev": true, 2054 | "engines": { 2055 | "node": ">=6" 2056 | } 2057 | }, 2058 | "node_modules/queue-microtask": { 2059 | "version": "1.2.3", 2060 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 2061 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 2062 | "dev": true, 2063 | "funding": [ 2064 | { 2065 | "type": "github", 2066 | "url": "https://github.com/sponsors/feross" 2067 | }, 2068 | { 2069 | "type": "patreon", 2070 | "url": "https://www.patreon.com/feross" 2071 | }, 2072 | { 2073 | "type": "consulting", 2074 | "url": "https://feross.org/support" 2075 | } 2076 | ] 2077 | }, 2078 | "node_modules/randombytes": { 2079 | "version": "2.1.0", 2080 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 2081 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 2082 | "dev": true, 2083 | "dependencies": { 2084 | "safe-buffer": "^5.1.0" 2085 | } 2086 | }, 2087 | "node_modules/readdirp": { 2088 | "version": "3.6.0", 2089 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 2090 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 2091 | "dev": true, 2092 | "dependencies": { 2093 | "picomatch": "^2.2.1" 2094 | }, 2095 | "engines": { 2096 | "node": ">=8.10.0" 2097 | } 2098 | }, 2099 | "node_modules/regexpp": { 2100 | "version": "3.2.0", 2101 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", 2102 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", 2103 | "dev": true, 2104 | "engines": { 2105 | "node": ">=8" 2106 | }, 2107 | "funding": { 2108 | "url": "https://github.com/sponsors/mysticatea" 2109 | } 2110 | }, 2111 | "node_modules/require-directory": { 2112 | "version": "2.1.1", 2113 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 2114 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 2115 | "dev": true, 2116 | "engines": { 2117 | "node": ">=0.10.0" 2118 | } 2119 | }, 2120 | "node_modules/require-from-string": { 2121 | "version": "2.0.2", 2122 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 2123 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 2124 | "dev": true, 2125 | "engines": { 2126 | "node": ">=0.10.0" 2127 | } 2128 | }, 2129 | "node_modules/requireindex": { 2130 | "version": "1.1.0", 2131 | "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz", 2132 | "integrity": "sha1-5UBLgVV+91225JxacgBIk/4D4WI=", 2133 | "dev": true, 2134 | "engines": { 2135 | "node": ">=0.10.5" 2136 | } 2137 | }, 2138 | "node_modules/resolve-from": { 2139 | "version": "4.0.0", 2140 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 2141 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 2142 | "dev": true, 2143 | "engines": { 2144 | "node": ">=4" 2145 | } 2146 | }, 2147 | "node_modules/reusify": { 2148 | "version": "1.0.4", 2149 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 2150 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 2151 | "dev": true, 2152 | "engines": { 2153 | "iojs": ">=1.0.0", 2154 | "node": ">=0.10.0" 2155 | } 2156 | }, 2157 | "node_modules/rimraf": { 2158 | "version": "3.0.2", 2159 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 2160 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 2161 | "dev": true, 2162 | "dependencies": { 2163 | "glob": "^7.1.3" 2164 | }, 2165 | "bin": { 2166 | "rimraf": "bin.js" 2167 | }, 2168 | "funding": { 2169 | "url": "https://github.com/sponsors/isaacs" 2170 | } 2171 | }, 2172 | "node_modules/run-parallel": { 2173 | "version": "1.2.0", 2174 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 2175 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 2176 | "dev": true, 2177 | "funding": [ 2178 | { 2179 | "type": "github", 2180 | "url": "https://github.com/sponsors/feross" 2181 | }, 2182 | { 2183 | "type": "patreon", 2184 | "url": "https://www.patreon.com/feross" 2185 | }, 2186 | { 2187 | "type": "consulting", 2188 | "url": "https://feross.org/support" 2189 | } 2190 | ], 2191 | "dependencies": { 2192 | "queue-microtask": "^1.2.2" 2193 | } 2194 | }, 2195 | "node_modules/safe-buffer": { 2196 | "version": "5.2.1", 2197 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 2198 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 2199 | "dev": true, 2200 | "funding": [ 2201 | { 2202 | "type": "github", 2203 | "url": "https://github.com/sponsors/feross" 2204 | }, 2205 | { 2206 | "type": "patreon", 2207 | "url": "https://www.patreon.com/feross" 2208 | }, 2209 | { 2210 | "type": "consulting", 2211 | "url": "https://feross.org/support" 2212 | } 2213 | ] 2214 | }, 2215 | "node_modules/semver": { 2216 | "version": "7.3.5", 2217 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", 2218 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", 2219 | "dev": true, 2220 | "dependencies": { 2221 | "lru-cache": "^6.0.0" 2222 | }, 2223 | "bin": { 2224 | "semver": "bin/semver.js" 2225 | }, 2226 | "engines": { 2227 | "node": ">=10" 2228 | } 2229 | }, 2230 | "node_modules/serialize-javascript": { 2231 | "version": "6.0.0", 2232 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", 2233 | "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", 2234 | "dev": true, 2235 | "dependencies": { 2236 | "randombytes": "^2.1.0" 2237 | } 2238 | }, 2239 | "node_modules/shebang-command": { 2240 | "version": "2.0.0", 2241 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2242 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2243 | "dev": true, 2244 | "dependencies": { 2245 | "shebang-regex": "^3.0.0" 2246 | }, 2247 | "engines": { 2248 | "node": ">=8" 2249 | } 2250 | }, 2251 | "node_modules/shebang-regex": { 2252 | "version": "3.0.0", 2253 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2254 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2255 | "dev": true, 2256 | "engines": { 2257 | "node": ">=8" 2258 | } 2259 | }, 2260 | "node_modules/slash": { 2261 | "version": "3.0.0", 2262 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 2263 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 2264 | "dev": true, 2265 | "engines": { 2266 | "node": ">=8" 2267 | } 2268 | }, 2269 | "node_modules/slice-ansi": { 2270 | "version": "4.0.0", 2271 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", 2272 | "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", 2273 | "dev": true, 2274 | "dependencies": { 2275 | "ansi-styles": "^4.0.0", 2276 | "astral-regex": "^2.0.0", 2277 | "is-fullwidth-code-point": "^3.0.0" 2278 | }, 2279 | "engines": { 2280 | "node": ">=10" 2281 | }, 2282 | "funding": { 2283 | "url": "https://github.com/chalk/slice-ansi?sponsor=1" 2284 | } 2285 | }, 2286 | "node_modules/sprintf-js": { 2287 | "version": "1.0.3", 2288 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 2289 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 2290 | "dev": true 2291 | }, 2292 | "node_modules/string-width": { 2293 | "version": "4.2.2", 2294 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", 2295 | "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", 2296 | "dev": true, 2297 | "dependencies": { 2298 | "emoji-regex": "^8.0.0", 2299 | "is-fullwidth-code-point": "^3.0.0", 2300 | "strip-ansi": "^6.0.0" 2301 | }, 2302 | "engines": { 2303 | "node": ">=8" 2304 | } 2305 | }, 2306 | "node_modules/strip-ansi": { 2307 | "version": "6.0.0", 2308 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 2309 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 2310 | "dev": true, 2311 | "dependencies": { 2312 | "ansi-regex": "^5.0.0" 2313 | }, 2314 | "engines": { 2315 | "node": ">=8" 2316 | } 2317 | }, 2318 | "node_modules/strip-json-comments": { 2319 | "version": "3.1.1", 2320 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 2321 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 2322 | "dev": true, 2323 | "engines": { 2324 | "node": ">=8" 2325 | }, 2326 | "funding": { 2327 | "url": "https://github.com/sponsors/sindresorhus" 2328 | } 2329 | }, 2330 | "node_modules/supports-color": { 2331 | "version": "7.2.0", 2332 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2333 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2334 | "dev": true, 2335 | "dependencies": { 2336 | "has-flag": "^4.0.0" 2337 | }, 2338 | "engines": { 2339 | "node": ">=8" 2340 | } 2341 | }, 2342 | "node_modules/table": { 2343 | "version": "6.7.1", 2344 | "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", 2345 | "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", 2346 | "dev": true, 2347 | "dependencies": { 2348 | "ajv": "^8.0.1", 2349 | "lodash.clonedeep": "^4.5.0", 2350 | "lodash.truncate": "^4.4.2", 2351 | "slice-ansi": "^4.0.0", 2352 | "string-width": "^4.2.0", 2353 | "strip-ansi": "^6.0.0" 2354 | }, 2355 | "engines": { 2356 | "node": ">=10.0.0" 2357 | } 2358 | }, 2359 | "node_modules/table/node_modules/ajv": { 2360 | "version": "8.6.2", 2361 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", 2362 | "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", 2363 | "dev": true, 2364 | "dependencies": { 2365 | "fast-deep-equal": "^3.1.1", 2366 | "json-schema-traverse": "^1.0.0", 2367 | "require-from-string": "^2.0.2", 2368 | "uri-js": "^4.2.2" 2369 | }, 2370 | "funding": { 2371 | "type": "github", 2372 | "url": "https://github.com/sponsors/epoberezkin" 2373 | } 2374 | }, 2375 | "node_modules/table/node_modules/json-schema-traverse": { 2376 | "version": "1.0.0", 2377 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 2378 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 2379 | "dev": true 2380 | }, 2381 | "node_modules/text-table": { 2382 | "version": "0.2.0", 2383 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 2384 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 2385 | "dev": true 2386 | }, 2387 | "node_modules/to-regex-range": { 2388 | "version": "5.0.1", 2389 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2390 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2391 | "dev": true, 2392 | "dependencies": { 2393 | "is-number": "^7.0.0" 2394 | }, 2395 | "engines": { 2396 | "node": ">=8.0" 2397 | } 2398 | }, 2399 | "node_modules/ts-node": { 2400 | "version": "10.2.1", 2401 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.2.1.tgz", 2402 | "integrity": "sha512-hCnyOyuGmD5wHleOQX6NIjJtYVIO8bPP8F2acWkB4W06wdlkgyvJtubO/I9NkI88hCFECbsEgoLc0VNkYmcSfw==", 2403 | "dev": true, 2404 | "dependencies": { 2405 | "@cspotcode/source-map-support": "0.6.1", 2406 | "@tsconfig/node10": "^1.0.7", 2407 | "@tsconfig/node12": "^1.0.7", 2408 | "@tsconfig/node14": "^1.0.0", 2409 | "@tsconfig/node16": "^1.0.2", 2410 | "acorn": "^8.4.1", 2411 | "acorn-walk": "^8.1.1", 2412 | "arg": "^4.1.0", 2413 | "create-require": "^1.1.0", 2414 | "diff": "^4.0.1", 2415 | "make-error": "^1.1.1", 2416 | "yn": "3.1.1" 2417 | }, 2418 | "bin": { 2419 | "ts-node": "dist/bin.js", 2420 | "ts-node-cwd": "dist/bin-cwd.js", 2421 | "ts-node-script": "dist/bin-script.js", 2422 | "ts-node-transpile-only": "dist/bin-transpile.js", 2423 | "ts-script": "dist/bin-script-deprecated.js" 2424 | }, 2425 | "engines": { 2426 | "node": ">=12.0.0" 2427 | }, 2428 | "peerDependencies": { 2429 | "@swc/core": ">=1.2.50", 2430 | "@swc/wasm": ">=1.2.50", 2431 | "@types/node": "*", 2432 | "typescript": ">=2.7" 2433 | }, 2434 | "peerDependenciesMeta": { 2435 | "@swc/core": { 2436 | "optional": true 2437 | }, 2438 | "@swc/wasm": { 2439 | "optional": true 2440 | } 2441 | } 2442 | }, 2443 | "node_modules/ts-node/node_modules/acorn": { 2444 | "version": "8.4.1", 2445 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", 2446 | "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", 2447 | "dev": true, 2448 | "bin": { 2449 | "acorn": "bin/acorn" 2450 | }, 2451 | "engines": { 2452 | "node": ">=0.4.0" 2453 | } 2454 | }, 2455 | "node_modules/tslib": { 2456 | "version": "1.14.1", 2457 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 2458 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", 2459 | "dev": true 2460 | }, 2461 | "node_modules/tsutils": { 2462 | "version": "3.21.0", 2463 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", 2464 | "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", 2465 | "dev": true, 2466 | "dependencies": { 2467 | "tslib": "^1.8.1" 2468 | }, 2469 | "engines": { 2470 | "node": ">= 6" 2471 | }, 2472 | "peerDependencies": { 2473 | "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" 2474 | } 2475 | }, 2476 | "node_modules/type-check": { 2477 | "version": "0.4.0", 2478 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 2479 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 2480 | "dev": true, 2481 | "dependencies": { 2482 | "prelude-ls": "^1.2.1" 2483 | }, 2484 | "engines": { 2485 | "node": ">= 0.8.0" 2486 | } 2487 | }, 2488 | "node_modules/type-fest": { 2489 | "version": "0.20.2", 2490 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 2491 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 2492 | "dev": true, 2493 | "engines": { 2494 | "node": ">=10" 2495 | }, 2496 | "funding": { 2497 | "url": "https://github.com/sponsors/sindresorhus" 2498 | } 2499 | }, 2500 | "node_modules/typescript": { 2501 | "version": "4.4.2", 2502 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.2.tgz", 2503 | "integrity": "sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ==", 2504 | "dev": true, 2505 | "bin": { 2506 | "tsc": "bin/tsc", 2507 | "tsserver": "bin/tsserver" 2508 | }, 2509 | "engines": { 2510 | "node": ">=4.2.0" 2511 | } 2512 | }, 2513 | "node_modules/uri-js": { 2514 | "version": "4.4.1", 2515 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 2516 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 2517 | "dev": true, 2518 | "dependencies": { 2519 | "punycode": "^2.1.0" 2520 | } 2521 | }, 2522 | "node_modules/v8-compile-cache": { 2523 | "version": "2.3.0", 2524 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", 2525 | "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", 2526 | "dev": true 2527 | }, 2528 | "node_modules/which": { 2529 | "version": "2.0.2", 2530 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2531 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2532 | "dev": true, 2533 | "dependencies": { 2534 | "isexe": "^2.0.0" 2535 | }, 2536 | "bin": { 2537 | "node-which": "bin/node-which" 2538 | }, 2539 | "engines": { 2540 | "node": ">= 8" 2541 | } 2542 | }, 2543 | "node_modules/wide-align": { 2544 | "version": "1.1.3", 2545 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", 2546 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", 2547 | "dev": true, 2548 | "dependencies": { 2549 | "string-width": "^1.0.2 || 2" 2550 | } 2551 | }, 2552 | "node_modules/wide-align/node_modules/ansi-regex": { 2553 | "version": "3.0.0", 2554 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 2555 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 2556 | "dev": true, 2557 | "engines": { 2558 | "node": ">=4" 2559 | } 2560 | }, 2561 | "node_modules/wide-align/node_modules/is-fullwidth-code-point": { 2562 | "version": "2.0.0", 2563 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 2564 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 2565 | "dev": true, 2566 | "engines": { 2567 | "node": ">=4" 2568 | } 2569 | }, 2570 | "node_modules/wide-align/node_modules/string-width": { 2571 | "version": "2.1.1", 2572 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 2573 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 2574 | "dev": true, 2575 | "dependencies": { 2576 | "is-fullwidth-code-point": "^2.0.0", 2577 | "strip-ansi": "^4.0.0" 2578 | }, 2579 | "engines": { 2580 | "node": ">=4" 2581 | } 2582 | }, 2583 | "node_modules/wide-align/node_modules/strip-ansi": { 2584 | "version": "4.0.0", 2585 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 2586 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 2587 | "dev": true, 2588 | "dependencies": { 2589 | "ansi-regex": "^3.0.0" 2590 | }, 2591 | "engines": { 2592 | "node": ">=4" 2593 | } 2594 | }, 2595 | "node_modules/word-wrap": { 2596 | "version": "1.2.3", 2597 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 2598 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 2599 | "dev": true, 2600 | "engines": { 2601 | "node": ">=0.10.0" 2602 | } 2603 | }, 2604 | "node_modules/workerpool": { 2605 | "version": "6.1.5", 2606 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", 2607 | "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", 2608 | "dev": true 2609 | }, 2610 | "node_modules/wrap-ansi": { 2611 | "version": "7.0.0", 2612 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2613 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2614 | "dev": true, 2615 | "dependencies": { 2616 | "ansi-styles": "^4.0.0", 2617 | "string-width": "^4.1.0", 2618 | "strip-ansi": "^6.0.0" 2619 | }, 2620 | "engines": { 2621 | "node": ">=10" 2622 | }, 2623 | "funding": { 2624 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2625 | } 2626 | }, 2627 | "node_modules/wrappy": { 2628 | "version": "1.0.2", 2629 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2630 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 2631 | "dev": true 2632 | }, 2633 | "node_modules/y18n": { 2634 | "version": "5.0.8", 2635 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 2636 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 2637 | "dev": true, 2638 | "engines": { 2639 | "node": ">=10" 2640 | } 2641 | }, 2642 | "node_modules/yallist": { 2643 | "version": "4.0.0", 2644 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2645 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 2646 | "dev": true 2647 | }, 2648 | "node_modules/yargs": { 2649 | "version": "16.2.0", 2650 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 2651 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 2652 | "dev": true, 2653 | "dependencies": { 2654 | "cliui": "^7.0.2", 2655 | "escalade": "^3.1.1", 2656 | "get-caller-file": "^2.0.5", 2657 | "require-directory": "^2.1.1", 2658 | "string-width": "^4.2.0", 2659 | "y18n": "^5.0.5", 2660 | "yargs-parser": "^20.2.2" 2661 | }, 2662 | "engines": { 2663 | "node": ">=10" 2664 | } 2665 | }, 2666 | "node_modules/yargs-parser": { 2667 | "version": "20.2.4", 2668 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", 2669 | "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", 2670 | "dev": true, 2671 | "engines": { 2672 | "node": ">=10" 2673 | } 2674 | }, 2675 | "node_modules/yargs-unparser": { 2676 | "version": "2.0.0", 2677 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", 2678 | "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", 2679 | "dev": true, 2680 | "dependencies": { 2681 | "camelcase": "^6.0.0", 2682 | "decamelize": "^4.0.0", 2683 | "flat": "^5.0.2", 2684 | "is-plain-obj": "^2.1.0" 2685 | }, 2686 | "engines": { 2687 | "node": ">=10" 2688 | } 2689 | }, 2690 | "node_modules/yn": { 2691 | "version": "3.1.1", 2692 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", 2693 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 2694 | "dev": true, 2695 | "engines": { 2696 | "node": ">=6" 2697 | } 2698 | }, 2699 | "node_modules/yocto-queue": { 2700 | "version": "0.1.0", 2701 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 2702 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 2703 | "dev": true, 2704 | "engines": { 2705 | "node": ">=10" 2706 | }, 2707 | "funding": { 2708 | "url": "https://github.com/sponsors/sindresorhus" 2709 | } 2710 | } 2711 | }, 2712 | "dependencies": { 2713 | "@babel/code-frame": { 2714 | "version": "7.12.11", 2715 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", 2716 | "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", 2717 | "dev": true, 2718 | "requires": { 2719 | "@babel/highlight": "^7.10.4" 2720 | } 2721 | }, 2722 | "@babel/helper-validator-identifier": { 2723 | "version": "7.14.9", 2724 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", 2725 | "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", 2726 | "dev": true 2727 | }, 2728 | "@babel/highlight": { 2729 | "version": "7.14.5", 2730 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", 2731 | "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", 2732 | "dev": true, 2733 | "requires": { 2734 | "@babel/helper-validator-identifier": "^7.14.5", 2735 | "chalk": "^2.0.0", 2736 | "js-tokens": "^4.0.0" 2737 | }, 2738 | "dependencies": { 2739 | "ansi-styles": { 2740 | "version": "3.2.1", 2741 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 2742 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 2743 | "dev": true, 2744 | "requires": { 2745 | "color-convert": "^1.9.0" 2746 | } 2747 | }, 2748 | "chalk": { 2749 | "version": "2.4.2", 2750 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 2751 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 2752 | "dev": true, 2753 | "requires": { 2754 | "ansi-styles": "^3.2.1", 2755 | "escape-string-regexp": "^1.0.5", 2756 | "supports-color": "^5.3.0" 2757 | } 2758 | }, 2759 | "color-convert": { 2760 | "version": "1.9.3", 2761 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 2762 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 2763 | "dev": true, 2764 | "requires": { 2765 | "color-name": "1.1.3" 2766 | } 2767 | }, 2768 | "color-name": { 2769 | "version": "1.1.3", 2770 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 2771 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 2772 | "dev": true 2773 | }, 2774 | "escape-string-regexp": { 2775 | "version": "1.0.5", 2776 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 2777 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 2778 | "dev": true 2779 | }, 2780 | "has-flag": { 2781 | "version": "3.0.0", 2782 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 2783 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 2784 | "dev": true 2785 | }, 2786 | "supports-color": { 2787 | "version": "5.5.0", 2788 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 2789 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 2790 | "dev": true, 2791 | "requires": { 2792 | "has-flag": "^3.0.0" 2793 | } 2794 | } 2795 | } 2796 | }, 2797 | "@cspotcode/source-map-consumer": { 2798 | "version": "0.8.0", 2799 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", 2800 | "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", 2801 | "dev": true 2802 | }, 2803 | "@cspotcode/source-map-support": { 2804 | "version": "0.6.1", 2805 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.6.1.tgz", 2806 | "integrity": "sha512-DX3Z+T5dt1ockmPdobJS/FAsQPW4V4SrWEhD2iYQT2Cb2tQsiMnYxrcUH9By/Z3B+v0S5LMBkQtV/XOBbpLEOg==", 2807 | "dev": true, 2808 | "requires": { 2809 | "@cspotcode/source-map-consumer": "0.8.0" 2810 | } 2811 | }, 2812 | "@eslint/eslintrc": { 2813 | "version": "0.4.3", 2814 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", 2815 | "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", 2816 | "dev": true, 2817 | "requires": { 2818 | "ajv": "^6.12.4", 2819 | "debug": "^4.1.1", 2820 | "espree": "^7.3.0", 2821 | "globals": "^13.9.0", 2822 | "ignore": "^4.0.6", 2823 | "import-fresh": "^3.2.1", 2824 | "js-yaml": "^3.13.1", 2825 | "minimatch": "^3.0.4", 2826 | "strip-json-comments": "^3.1.1" 2827 | } 2828 | }, 2829 | "@frontside/eslint-config": { 2830 | "version": "2.1.0", 2831 | "resolved": "https://registry.npmjs.org/@frontside/eslint-config/-/eslint-config-2.1.0.tgz", 2832 | "integrity": "sha512-h7c1GaOnVhpPbcKVCzeOjSmvLgiV6Ez0grdE8NvO7rUMJWvlRUB+dUejkQZYzyyQSvzPP5eW+BmfriuA83ejUw==", 2833 | "dev": true, 2834 | "requires": { 2835 | "@typescript-eslint/eslint-plugin": "4.28.4", 2836 | "@typescript-eslint/parser": "4.28.4", 2837 | "eslint": "7.30.0", 2838 | "eslint-plugin-mocha-no-only": "^1.1.1", 2839 | "eslint-plugin-prefer-let": "^1.1.0", 2840 | "typescript": "4.3.5" 2841 | }, 2842 | "dependencies": { 2843 | "typescript": { 2844 | "version": "4.3.5", 2845 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", 2846 | "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", 2847 | "dev": true 2848 | } 2849 | } 2850 | }, 2851 | "@frontside/tsconfig": { 2852 | "version": "1.2.0", 2853 | "resolved": "https://registry.npmjs.org/@frontside/tsconfig/-/tsconfig-1.2.0.tgz", 2854 | "integrity": "sha512-Ua/q/M99ohPLdNtMNuJ1EToTjVkuiUECqQTZB7jsKLpGIn0dazon1KyqNtWYfMExMYXdk4uZimxljoVtFxM/OQ==", 2855 | "dev": true 2856 | }, 2857 | "@frontside/typescript": { 2858 | "version": "2.0.0", 2859 | "resolved": "https://registry.npmjs.org/@frontside/typescript/-/typescript-2.0.0.tgz", 2860 | "integrity": "sha512-JU8MT6gKKwRVBzHHJE6OjdZ1sN0HTRBZPrY4rYz4dWIWNTj8/foPFWzH0afE8tjjTepDWWhF3aoh2MPWR6di/Q==", 2861 | "dev": true, 2862 | "requires": { 2863 | "@frontside/tsconfig": "1.2.0", 2864 | "eslint": "7.17.0", 2865 | "typescript": "^4.1.3" 2866 | }, 2867 | "dependencies": { 2868 | "@eslint/eslintrc": { 2869 | "version": "0.2.2", 2870 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", 2871 | "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", 2872 | "dev": true, 2873 | "requires": { 2874 | "ajv": "^6.12.4", 2875 | "debug": "^4.1.1", 2876 | "espree": "^7.3.0", 2877 | "globals": "^12.1.0", 2878 | "ignore": "^4.0.6", 2879 | "import-fresh": "^3.2.1", 2880 | "js-yaml": "^3.13.1", 2881 | "lodash": "^4.17.19", 2882 | "minimatch": "^3.0.4", 2883 | "strip-json-comments": "^3.1.1" 2884 | } 2885 | }, 2886 | "eslint": { 2887 | "version": "7.17.0", 2888 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.17.0.tgz", 2889 | "integrity": "sha512-zJk08MiBgwuGoxes5sSQhOtibZ75pz0J35XTRlZOk9xMffhpA9BTbQZxoXZzOl5zMbleShbGwtw+1kGferfFwQ==", 2890 | "dev": true, 2891 | "requires": { 2892 | "@babel/code-frame": "^7.0.0", 2893 | "@eslint/eslintrc": "^0.2.2", 2894 | "ajv": "^6.10.0", 2895 | "chalk": "^4.0.0", 2896 | "cross-spawn": "^7.0.2", 2897 | "debug": "^4.0.1", 2898 | "doctrine": "^3.0.0", 2899 | "enquirer": "^2.3.5", 2900 | "eslint-scope": "^5.1.1", 2901 | "eslint-utils": "^2.1.0", 2902 | "eslint-visitor-keys": "^2.0.0", 2903 | "espree": "^7.3.1", 2904 | "esquery": "^1.2.0", 2905 | "esutils": "^2.0.2", 2906 | "file-entry-cache": "^6.0.0", 2907 | "functional-red-black-tree": "^1.0.1", 2908 | "glob-parent": "^5.0.0", 2909 | "globals": "^12.1.0", 2910 | "ignore": "^4.0.6", 2911 | "import-fresh": "^3.0.0", 2912 | "imurmurhash": "^0.1.4", 2913 | "is-glob": "^4.0.0", 2914 | "js-yaml": "^3.13.1", 2915 | "json-stable-stringify-without-jsonify": "^1.0.1", 2916 | "levn": "^0.4.1", 2917 | "lodash": "^4.17.19", 2918 | "minimatch": "^3.0.4", 2919 | "natural-compare": "^1.4.0", 2920 | "optionator": "^0.9.1", 2921 | "progress": "^2.0.0", 2922 | "regexpp": "^3.1.0", 2923 | "semver": "^7.2.1", 2924 | "strip-ansi": "^6.0.0", 2925 | "strip-json-comments": "^3.1.0", 2926 | "table": "^6.0.4", 2927 | "text-table": "^0.2.0", 2928 | "v8-compile-cache": "^2.0.3" 2929 | } 2930 | }, 2931 | "eslint-utils": { 2932 | "version": "2.1.0", 2933 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", 2934 | "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", 2935 | "dev": true, 2936 | "requires": { 2937 | "eslint-visitor-keys": "^1.1.0" 2938 | }, 2939 | "dependencies": { 2940 | "eslint-visitor-keys": { 2941 | "version": "1.3.0", 2942 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 2943 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 2944 | "dev": true 2945 | } 2946 | } 2947 | }, 2948 | "globals": { 2949 | "version": "12.4.0", 2950 | "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", 2951 | "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", 2952 | "dev": true, 2953 | "requires": { 2954 | "type-fest": "^0.8.1" 2955 | } 2956 | }, 2957 | "type-fest": { 2958 | "version": "0.8.1", 2959 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", 2960 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", 2961 | "dev": true 2962 | } 2963 | } 2964 | }, 2965 | "@humanwhocodes/config-array": { 2966 | "version": "0.5.0", 2967 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", 2968 | "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", 2969 | "dev": true, 2970 | "requires": { 2971 | "@humanwhocodes/object-schema": "^1.2.0", 2972 | "debug": "^4.1.1", 2973 | "minimatch": "^3.0.4" 2974 | } 2975 | }, 2976 | "@humanwhocodes/object-schema": { 2977 | "version": "1.2.0", 2978 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", 2979 | "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", 2980 | "dev": true 2981 | }, 2982 | "@nodelib/fs.scandir": { 2983 | "version": "2.1.5", 2984 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 2985 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 2986 | "dev": true, 2987 | "requires": { 2988 | "@nodelib/fs.stat": "2.0.5", 2989 | "run-parallel": "^1.1.9" 2990 | } 2991 | }, 2992 | "@nodelib/fs.stat": { 2993 | "version": "2.0.5", 2994 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 2995 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 2996 | "dev": true 2997 | }, 2998 | "@nodelib/fs.walk": { 2999 | "version": "1.2.8", 3000 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 3001 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 3002 | "dev": true, 3003 | "requires": { 3004 | "@nodelib/fs.scandir": "2.1.5", 3005 | "fastq": "^1.6.0" 3006 | } 3007 | }, 3008 | "@tsconfig/node10": { 3009 | "version": "1.0.8", 3010 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", 3011 | "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", 3012 | "dev": true 3013 | }, 3014 | "@tsconfig/node12": { 3015 | "version": "1.0.9", 3016 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", 3017 | "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", 3018 | "dev": true 3019 | }, 3020 | "@tsconfig/node14": { 3021 | "version": "1.0.1", 3022 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", 3023 | "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", 3024 | "dev": true 3025 | }, 3026 | "@tsconfig/node16": { 3027 | "version": "1.0.2", 3028 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", 3029 | "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", 3030 | "dev": true 3031 | }, 3032 | "@types/json-schema": { 3033 | "version": "7.0.9", 3034 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", 3035 | "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", 3036 | "dev": true 3037 | }, 3038 | "@types/mocha": { 3039 | "version": "9.0.0", 3040 | "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", 3041 | "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", 3042 | "dev": true 3043 | }, 3044 | "@types/node": { 3045 | "version": "16.7.10", 3046 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.10.tgz", 3047 | "integrity": "sha512-S63Dlv4zIPb8x6MMTgDq5WWRJQe56iBEY0O3SOFA9JrRienkOVDXSXBjjJw6HTNQYSE2JI6GMCR6LVbIMHJVvA==", 3048 | "dev": true, 3049 | "peer": true 3050 | }, 3051 | "@typescript-eslint/eslint-plugin": { 3052 | "version": "4.28.4", 3053 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.4.tgz", 3054 | "integrity": "sha512-s1oY4RmYDlWMlcV0kKPBaADn46JirZzvvH7c2CtAqxCY96S538JRBAzt83RrfkDheV/+G/vWNK0zek+8TB3Gmw==", 3055 | "dev": true, 3056 | "requires": { 3057 | "@typescript-eslint/experimental-utils": "4.28.4", 3058 | "@typescript-eslint/scope-manager": "4.28.4", 3059 | "debug": "^4.3.1", 3060 | "functional-red-black-tree": "^1.0.1", 3061 | "regexpp": "^3.1.0", 3062 | "semver": "^7.3.5", 3063 | "tsutils": "^3.21.0" 3064 | } 3065 | }, 3066 | "@typescript-eslint/experimental-utils": { 3067 | "version": "4.28.4", 3068 | "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.4.tgz", 3069 | "integrity": "sha512-OglKWOQRWTCoqMSy6pm/kpinEIgdcXYceIcH3EKWUl4S8xhFtN34GQRaAvTIZB9DD94rW7d/U7tUg3SYeDFNHA==", 3070 | "dev": true, 3071 | "requires": { 3072 | "@types/json-schema": "^7.0.7", 3073 | "@typescript-eslint/scope-manager": "4.28.4", 3074 | "@typescript-eslint/types": "4.28.4", 3075 | "@typescript-eslint/typescript-estree": "4.28.4", 3076 | "eslint-scope": "^5.1.1", 3077 | "eslint-utils": "^3.0.0" 3078 | } 3079 | }, 3080 | "@typescript-eslint/parser": { 3081 | "version": "4.28.4", 3082 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.4.tgz", 3083 | "integrity": "sha512-4i0jq3C6n+og7/uCHiE6q5ssw87zVdpUj1k6VlVYMonE3ILdFApEzTWgppSRG4kVNB/5jxnH+gTeKLMNfUelQA==", 3084 | "dev": true, 3085 | "requires": { 3086 | "@typescript-eslint/scope-manager": "4.28.4", 3087 | "@typescript-eslint/types": "4.28.4", 3088 | "@typescript-eslint/typescript-estree": "4.28.4", 3089 | "debug": "^4.3.1" 3090 | } 3091 | }, 3092 | "@typescript-eslint/scope-manager": { 3093 | "version": "4.28.4", 3094 | "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.4.tgz", 3095 | "integrity": "sha512-ZJBNs4usViOmlyFMt9X9l+X0WAFcDH7EdSArGqpldXu7aeZxDAuAzHiMAeI+JpSefY2INHrXeqnha39FVqXb8w==", 3096 | "dev": true, 3097 | "requires": { 3098 | "@typescript-eslint/types": "4.28.4", 3099 | "@typescript-eslint/visitor-keys": "4.28.4" 3100 | } 3101 | }, 3102 | "@typescript-eslint/types": { 3103 | "version": "4.28.4", 3104 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.4.tgz", 3105 | "integrity": "sha512-3eap4QWxGqkYuEmVebUGULMskR6Cuoc/Wii0oSOddleP4EGx1tjLnZQ0ZP33YRoMDCs5O3j56RBV4g14T4jvww==", 3106 | "dev": true 3107 | }, 3108 | "@typescript-eslint/typescript-estree": { 3109 | "version": "4.28.4", 3110 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.4.tgz", 3111 | "integrity": "sha512-z7d8HK8XvCRyN2SNp+OXC2iZaF+O2BTquGhEYLKLx5k6p0r05ureUtgEfo5f6anLkhCxdHtCf6rPM1p4efHYDQ==", 3112 | "dev": true, 3113 | "requires": { 3114 | "@typescript-eslint/types": "4.28.4", 3115 | "@typescript-eslint/visitor-keys": "4.28.4", 3116 | "debug": "^4.3.1", 3117 | "globby": "^11.0.3", 3118 | "is-glob": "^4.0.1", 3119 | "semver": "^7.3.5", 3120 | "tsutils": "^3.21.0" 3121 | } 3122 | }, 3123 | "@typescript-eslint/visitor-keys": { 3124 | "version": "4.28.4", 3125 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.4.tgz", 3126 | "integrity": "sha512-NIAXAdbz1XdOuzqkJHjNKXKj8QQ4cv5cxR/g0uQhCYf/6//XrmfpaYsM7PnBcNbfvTDLUkqQ5TPNm1sozDdTWg==", 3127 | "dev": true, 3128 | "requires": { 3129 | "@typescript-eslint/types": "4.28.4", 3130 | "eslint-visitor-keys": "^2.0.0" 3131 | } 3132 | }, 3133 | "@ungap/promise-all-settled": { 3134 | "version": "1.1.2", 3135 | "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", 3136 | "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", 3137 | "dev": true 3138 | }, 3139 | "acorn": { 3140 | "version": "7.4.1", 3141 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 3142 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", 3143 | "dev": true 3144 | }, 3145 | "acorn-jsx": { 3146 | "version": "5.3.2", 3147 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 3148 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 3149 | "dev": true, 3150 | "requires": {} 3151 | }, 3152 | "acorn-walk": { 3153 | "version": "8.1.1", 3154 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.1.tgz", 3155 | "integrity": "sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==", 3156 | "dev": true 3157 | }, 3158 | "ajv": { 3159 | "version": "6.12.6", 3160 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 3161 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 3162 | "dev": true, 3163 | "requires": { 3164 | "fast-deep-equal": "^3.1.1", 3165 | "fast-json-stable-stringify": "^2.0.0", 3166 | "json-schema-traverse": "^0.4.1", 3167 | "uri-js": "^4.2.2" 3168 | } 3169 | }, 3170 | "ansi-colors": { 3171 | "version": "4.1.1", 3172 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 3173 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 3174 | "dev": true 3175 | }, 3176 | "ansi-regex": { 3177 | "version": "5.0.0", 3178 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 3179 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", 3180 | "dev": true 3181 | }, 3182 | "ansi-styles": { 3183 | "version": "4.3.0", 3184 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 3185 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 3186 | "dev": true, 3187 | "requires": { 3188 | "color-convert": "^2.0.1" 3189 | } 3190 | }, 3191 | "anymatch": { 3192 | "version": "3.1.2", 3193 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 3194 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 3195 | "dev": true, 3196 | "requires": { 3197 | "normalize-path": "^3.0.0", 3198 | "picomatch": "^2.0.4" 3199 | } 3200 | }, 3201 | "arg": { 3202 | "version": "4.1.3", 3203 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", 3204 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 3205 | "dev": true 3206 | }, 3207 | "argparse": { 3208 | "version": "1.0.10", 3209 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 3210 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 3211 | "dev": true, 3212 | "requires": { 3213 | "sprintf-js": "~1.0.2" 3214 | } 3215 | }, 3216 | "array-union": { 3217 | "version": "2.1.0", 3218 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 3219 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 3220 | "dev": true 3221 | }, 3222 | "assert-ts": { 3223 | "version": "0.3.3", 3224 | "resolved": "https://registry.npmjs.org/assert-ts/-/assert-ts-0.3.3.tgz", 3225 | "integrity": "sha512-sWsFWQ0ff3t0rUiiGfuRgRGs2zpnRqROQw/2hTZKp3kbum6MZUSMEibqogzrGHY/0JwOFJYJYRd8FhjCpf9Q4A==", 3226 | "dev": true 3227 | }, 3228 | "astral-regex": { 3229 | "version": "2.0.0", 3230 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", 3231 | "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", 3232 | "dev": true 3233 | }, 3234 | "balanced-match": { 3235 | "version": "1.0.2", 3236 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 3237 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 3238 | "dev": true 3239 | }, 3240 | "binary-extensions": { 3241 | "version": "2.2.0", 3242 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 3243 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 3244 | "dev": true 3245 | }, 3246 | "brace-expansion": { 3247 | "version": "1.1.11", 3248 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 3249 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 3250 | "dev": true, 3251 | "requires": { 3252 | "balanced-match": "^1.0.0", 3253 | "concat-map": "0.0.1" 3254 | } 3255 | }, 3256 | "braces": { 3257 | "version": "3.0.2", 3258 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 3259 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 3260 | "dev": true, 3261 | "requires": { 3262 | "fill-range": "^7.0.1" 3263 | } 3264 | }, 3265 | "browser-stdout": { 3266 | "version": "1.3.1", 3267 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 3268 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 3269 | "dev": true 3270 | }, 3271 | "callsites": { 3272 | "version": "3.1.0", 3273 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 3274 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 3275 | "dev": true 3276 | }, 3277 | "camelcase": { 3278 | "version": "6.2.0", 3279 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", 3280 | "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", 3281 | "dev": true 3282 | }, 3283 | "chalk": { 3284 | "version": "4.1.2", 3285 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 3286 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 3287 | "dev": true, 3288 | "requires": { 3289 | "ansi-styles": "^4.1.0", 3290 | "supports-color": "^7.1.0" 3291 | } 3292 | }, 3293 | "chokidar": { 3294 | "version": "3.5.2", 3295 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", 3296 | "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", 3297 | "dev": true, 3298 | "requires": { 3299 | "anymatch": "~3.1.2", 3300 | "braces": "~3.0.2", 3301 | "fsevents": "~2.3.2", 3302 | "glob-parent": "~5.1.2", 3303 | "is-binary-path": "~2.1.0", 3304 | "is-glob": "~4.0.1", 3305 | "normalize-path": "~3.0.0", 3306 | "readdirp": "~3.6.0" 3307 | } 3308 | }, 3309 | "cliui": { 3310 | "version": "7.0.4", 3311 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 3312 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 3313 | "dev": true, 3314 | "requires": { 3315 | "string-width": "^4.2.0", 3316 | "strip-ansi": "^6.0.0", 3317 | "wrap-ansi": "^7.0.0" 3318 | } 3319 | }, 3320 | "color-convert": { 3321 | "version": "2.0.1", 3322 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 3323 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 3324 | "dev": true, 3325 | "requires": { 3326 | "color-name": "~1.1.4" 3327 | } 3328 | }, 3329 | "color-name": { 3330 | "version": "1.1.4", 3331 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 3332 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 3333 | "dev": true 3334 | }, 3335 | "concat-map": { 3336 | "version": "0.0.1", 3337 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 3338 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 3339 | "dev": true 3340 | }, 3341 | "create-require": { 3342 | "version": "1.1.1", 3343 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", 3344 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 3345 | "dev": true 3346 | }, 3347 | "cross-spawn": { 3348 | "version": "7.0.3", 3349 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 3350 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 3351 | "dev": true, 3352 | "requires": { 3353 | "path-key": "^3.1.0", 3354 | "shebang-command": "^2.0.0", 3355 | "which": "^2.0.1" 3356 | } 3357 | }, 3358 | "debug": { 3359 | "version": "4.3.2", 3360 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 3361 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 3362 | "dev": true, 3363 | "requires": { 3364 | "ms": "2.1.2" 3365 | } 3366 | }, 3367 | "decamelize": { 3368 | "version": "4.0.0", 3369 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", 3370 | "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", 3371 | "dev": true 3372 | }, 3373 | "deep-is": { 3374 | "version": "0.1.3", 3375 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 3376 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 3377 | "dev": true 3378 | }, 3379 | "diff": { 3380 | "version": "4.0.2", 3381 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 3382 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 3383 | "dev": true 3384 | }, 3385 | "dir-glob": { 3386 | "version": "3.0.1", 3387 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 3388 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 3389 | "dev": true, 3390 | "requires": { 3391 | "path-type": "^4.0.0" 3392 | } 3393 | }, 3394 | "doctrine": { 3395 | "version": "3.0.0", 3396 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 3397 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 3398 | "dev": true, 3399 | "requires": { 3400 | "esutils": "^2.0.2" 3401 | } 3402 | }, 3403 | "emoji-regex": { 3404 | "version": "8.0.0", 3405 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 3406 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 3407 | "dev": true 3408 | }, 3409 | "enquirer": { 3410 | "version": "2.3.6", 3411 | "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", 3412 | "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", 3413 | "dev": true, 3414 | "requires": { 3415 | "ansi-colors": "^4.1.1" 3416 | } 3417 | }, 3418 | "escalade": { 3419 | "version": "3.1.1", 3420 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 3421 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 3422 | "dev": true 3423 | }, 3424 | "escape-string-regexp": { 3425 | "version": "4.0.0", 3426 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 3427 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 3428 | "dev": true 3429 | }, 3430 | "eslint": { 3431 | "version": "7.30.0", 3432 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz", 3433 | "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==", 3434 | "dev": true, 3435 | "requires": { 3436 | "@babel/code-frame": "7.12.11", 3437 | "@eslint/eslintrc": "^0.4.2", 3438 | "@humanwhocodes/config-array": "^0.5.0", 3439 | "ajv": "^6.10.0", 3440 | "chalk": "^4.0.0", 3441 | "cross-spawn": "^7.0.2", 3442 | "debug": "^4.0.1", 3443 | "doctrine": "^3.0.0", 3444 | "enquirer": "^2.3.5", 3445 | "escape-string-regexp": "^4.0.0", 3446 | "eslint-scope": "^5.1.1", 3447 | "eslint-utils": "^2.1.0", 3448 | "eslint-visitor-keys": "^2.0.0", 3449 | "espree": "^7.3.1", 3450 | "esquery": "^1.4.0", 3451 | "esutils": "^2.0.2", 3452 | "fast-deep-equal": "^3.1.3", 3453 | "file-entry-cache": "^6.0.1", 3454 | "functional-red-black-tree": "^1.0.1", 3455 | "glob-parent": "^5.1.2", 3456 | "globals": "^13.6.0", 3457 | "ignore": "^4.0.6", 3458 | "import-fresh": "^3.0.0", 3459 | "imurmurhash": "^0.1.4", 3460 | "is-glob": "^4.0.0", 3461 | "js-yaml": "^3.13.1", 3462 | "json-stable-stringify-without-jsonify": "^1.0.1", 3463 | "levn": "^0.4.1", 3464 | "lodash.merge": "^4.6.2", 3465 | "minimatch": "^3.0.4", 3466 | "natural-compare": "^1.4.0", 3467 | "optionator": "^0.9.1", 3468 | "progress": "^2.0.0", 3469 | "regexpp": "^3.1.0", 3470 | "semver": "^7.2.1", 3471 | "strip-ansi": "^6.0.0", 3472 | "strip-json-comments": "^3.1.0", 3473 | "table": "^6.0.9", 3474 | "text-table": "^0.2.0", 3475 | "v8-compile-cache": "^2.0.3" 3476 | }, 3477 | "dependencies": { 3478 | "eslint-utils": { 3479 | "version": "2.1.0", 3480 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", 3481 | "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", 3482 | "dev": true, 3483 | "requires": { 3484 | "eslint-visitor-keys": "^1.1.0" 3485 | }, 3486 | "dependencies": { 3487 | "eslint-visitor-keys": { 3488 | "version": "1.3.0", 3489 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 3490 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 3491 | "dev": true 3492 | } 3493 | } 3494 | } 3495 | } 3496 | }, 3497 | "eslint-plugin-mocha-no-only": { 3498 | "version": "1.1.1", 3499 | "resolved": "https://registry.npmjs.org/eslint-plugin-mocha-no-only/-/eslint-plugin-mocha-no-only-1.1.1.tgz", 3500 | "integrity": "sha512-b+vgjJQ3SjRQCygBhomtjzvRQRpIP8Yd9cqwNSbcoVJREuNajao7M1Kl1aObAUc4wx98qsZyQyUSUxiAbMS9yA==", 3501 | "dev": true, 3502 | "requires": { 3503 | "requireindex": "~1.1.0" 3504 | } 3505 | }, 3506 | "eslint-plugin-prefer-let": { 3507 | "version": "1.1.0", 3508 | "resolved": "https://registry.npmjs.org/eslint-plugin-prefer-let/-/eslint-plugin-prefer-let-1.1.0.tgz", 3509 | "integrity": "sha512-d7IhB8FZCtnCNQ20e4UTETPJNF3mIES3ZYan9RK/K3sIkEfuL3NfF9t5gxoNRFjeSkhlGpJmZdLGLRGPmKgVfQ==", 3510 | "dev": true, 3511 | "requires": { 3512 | "requireindex": "~1.2.0" 3513 | }, 3514 | "dependencies": { 3515 | "requireindex": { 3516 | "version": "1.2.0", 3517 | "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", 3518 | "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", 3519 | "dev": true 3520 | } 3521 | } 3522 | }, 3523 | "eslint-scope": { 3524 | "version": "5.1.1", 3525 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", 3526 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 3527 | "dev": true, 3528 | "requires": { 3529 | "esrecurse": "^4.3.0", 3530 | "estraverse": "^4.1.1" 3531 | } 3532 | }, 3533 | "eslint-utils": { 3534 | "version": "3.0.0", 3535 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", 3536 | "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", 3537 | "dev": true, 3538 | "requires": { 3539 | "eslint-visitor-keys": "^2.0.0" 3540 | } 3541 | }, 3542 | "eslint-visitor-keys": { 3543 | "version": "2.1.0", 3544 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", 3545 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", 3546 | "dev": true 3547 | }, 3548 | "espree": { 3549 | "version": "7.3.1", 3550 | "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", 3551 | "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", 3552 | "dev": true, 3553 | "requires": { 3554 | "acorn": "^7.4.0", 3555 | "acorn-jsx": "^5.3.1", 3556 | "eslint-visitor-keys": "^1.3.0" 3557 | }, 3558 | "dependencies": { 3559 | "eslint-visitor-keys": { 3560 | "version": "1.3.0", 3561 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 3562 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 3563 | "dev": true 3564 | } 3565 | } 3566 | }, 3567 | "esprima": { 3568 | "version": "4.0.1", 3569 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 3570 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 3571 | "dev": true 3572 | }, 3573 | "esquery": { 3574 | "version": "1.4.0", 3575 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", 3576 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", 3577 | "dev": true, 3578 | "requires": { 3579 | "estraverse": "^5.1.0" 3580 | }, 3581 | "dependencies": { 3582 | "estraverse": { 3583 | "version": "5.2.0", 3584 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", 3585 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", 3586 | "dev": true 3587 | } 3588 | } 3589 | }, 3590 | "esrecurse": { 3591 | "version": "4.3.0", 3592 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 3593 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 3594 | "dev": true, 3595 | "requires": { 3596 | "estraverse": "^5.2.0" 3597 | }, 3598 | "dependencies": { 3599 | "estraverse": { 3600 | "version": "5.2.0", 3601 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", 3602 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", 3603 | "dev": true 3604 | } 3605 | } 3606 | }, 3607 | "estraverse": { 3608 | "version": "4.3.0", 3609 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 3610 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 3611 | "dev": true 3612 | }, 3613 | "esutils": { 3614 | "version": "2.0.3", 3615 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 3616 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 3617 | "dev": true 3618 | }, 3619 | "fast-deep-equal": { 3620 | "version": "3.1.3", 3621 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 3622 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 3623 | "dev": true 3624 | }, 3625 | "fast-glob": { 3626 | "version": "3.2.7", 3627 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", 3628 | "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", 3629 | "dev": true, 3630 | "requires": { 3631 | "@nodelib/fs.stat": "^2.0.2", 3632 | "@nodelib/fs.walk": "^1.2.3", 3633 | "glob-parent": "^5.1.2", 3634 | "merge2": "^1.3.0", 3635 | "micromatch": "^4.0.4" 3636 | } 3637 | }, 3638 | "fast-json-stable-stringify": { 3639 | "version": "2.1.0", 3640 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 3641 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 3642 | "dev": true 3643 | }, 3644 | "fast-levenshtein": { 3645 | "version": "2.0.6", 3646 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 3647 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 3648 | "dev": true 3649 | }, 3650 | "fastq": { 3651 | "version": "1.12.0", 3652 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz", 3653 | "integrity": "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==", 3654 | "dev": true, 3655 | "requires": { 3656 | "reusify": "^1.0.4" 3657 | } 3658 | }, 3659 | "file-entry-cache": { 3660 | "version": "6.0.1", 3661 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 3662 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 3663 | "dev": true, 3664 | "requires": { 3665 | "flat-cache": "^3.0.4" 3666 | } 3667 | }, 3668 | "fill-range": { 3669 | "version": "7.0.1", 3670 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 3671 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 3672 | "dev": true, 3673 | "requires": { 3674 | "to-regex-range": "^5.0.1" 3675 | } 3676 | }, 3677 | "find-up": { 3678 | "version": "5.0.0", 3679 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 3680 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 3681 | "dev": true, 3682 | "requires": { 3683 | "locate-path": "^6.0.0", 3684 | "path-exists": "^4.0.0" 3685 | } 3686 | }, 3687 | "flat": { 3688 | "version": "5.0.2", 3689 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", 3690 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", 3691 | "dev": true 3692 | }, 3693 | "flat-cache": { 3694 | "version": "3.0.4", 3695 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 3696 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 3697 | "dev": true, 3698 | "requires": { 3699 | "flatted": "^3.1.0", 3700 | "rimraf": "^3.0.2" 3701 | } 3702 | }, 3703 | "flatted": { 3704 | "version": "3.2.2", 3705 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", 3706 | "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", 3707 | "dev": true 3708 | }, 3709 | "fs.realpath": { 3710 | "version": "1.0.0", 3711 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 3712 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 3713 | "dev": true 3714 | }, 3715 | "fsevents": { 3716 | "version": "2.3.2", 3717 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 3718 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 3719 | "dev": true, 3720 | "optional": true 3721 | }, 3722 | "functional-red-black-tree": { 3723 | "version": "1.0.1", 3724 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 3725 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 3726 | "dev": true 3727 | }, 3728 | "get-caller-file": { 3729 | "version": "2.0.5", 3730 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 3731 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 3732 | "dev": true 3733 | }, 3734 | "glob": { 3735 | "version": "7.1.7", 3736 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", 3737 | "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", 3738 | "dev": true, 3739 | "requires": { 3740 | "fs.realpath": "^1.0.0", 3741 | "inflight": "^1.0.4", 3742 | "inherits": "2", 3743 | "minimatch": "^3.0.4", 3744 | "once": "^1.3.0", 3745 | "path-is-absolute": "^1.0.0" 3746 | } 3747 | }, 3748 | "glob-parent": { 3749 | "version": "5.1.2", 3750 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 3751 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 3752 | "dev": true, 3753 | "requires": { 3754 | "is-glob": "^4.0.1" 3755 | } 3756 | }, 3757 | "globals": { 3758 | "version": "13.11.0", 3759 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", 3760 | "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", 3761 | "dev": true, 3762 | "requires": { 3763 | "type-fest": "^0.20.2" 3764 | } 3765 | }, 3766 | "globby": { 3767 | "version": "11.0.4", 3768 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", 3769 | "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", 3770 | "dev": true, 3771 | "requires": { 3772 | "array-union": "^2.1.0", 3773 | "dir-glob": "^3.0.1", 3774 | "fast-glob": "^3.1.1", 3775 | "ignore": "^5.1.4", 3776 | "merge2": "^1.3.0", 3777 | "slash": "^3.0.0" 3778 | }, 3779 | "dependencies": { 3780 | "ignore": { 3781 | "version": "5.1.8", 3782 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", 3783 | "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", 3784 | "dev": true 3785 | } 3786 | } 3787 | }, 3788 | "growl": { 3789 | "version": "1.10.5", 3790 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", 3791 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", 3792 | "dev": true 3793 | }, 3794 | "has-flag": { 3795 | "version": "4.0.0", 3796 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 3797 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 3798 | "dev": true 3799 | }, 3800 | "he": { 3801 | "version": "1.2.0", 3802 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 3803 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 3804 | "dev": true 3805 | }, 3806 | "ignore": { 3807 | "version": "4.0.6", 3808 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 3809 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 3810 | "dev": true 3811 | }, 3812 | "import-fresh": { 3813 | "version": "3.3.0", 3814 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 3815 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 3816 | "dev": true, 3817 | "requires": { 3818 | "parent-module": "^1.0.0", 3819 | "resolve-from": "^4.0.0" 3820 | } 3821 | }, 3822 | "imurmurhash": { 3823 | "version": "0.1.4", 3824 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 3825 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 3826 | "dev": true 3827 | }, 3828 | "inflight": { 3829 | "version": "1.0.6", 3830 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 3831 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 3832 | "dev": true, 3833 | "requires": { 3834 | "once": "^1.3.0", 3835 | "wrappy": "1" 3836 | } 3837 | }, 3838 | "inherits": { 3839 | "version": "2.0.4", 3840 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 3841 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 3842 | "dev": true 3843 | }, 3844 | "is-binary-path": { 3845 | "version": "2.1.0", 3846 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 3847 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 3848 | "dev": true, 3849 | "requires": { 3850 | "binary-extensions": "^2.0.0" 3851 | } 3852 | }, 3853 | "is-extglob": { 3854 | "version": "2.1.1", 3855 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 3856 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 3857 | "dev": true 3858 | }, 3859 | "is-fullwidth-code-point": { 3860 | "version": "3.0.0", 3861 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 3862 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 3863 | "dev": true 3864 | }, 3865 | "is-glob": { 3866 | "version": "4.0.1", 3867 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 3868 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 3869 | "dev": true, 3870 | "requires": { 3871 | "is-extglob": "^2.1.1" 3872 | } 3873 | }, 3874 | "is-number": { 3875 | "version": "7.0.0", 3876 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 3877 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 3878 | "dev": true 3879 | }, 3880 | "is-plain-obj": { 3881 | "version": "2.1.0", 3882 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", 3883 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", 3884 | "dev": true 3885 | }, 3886 | "is-unicode-supported": { 3887 | "version": "0.1.0", 3888 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 3889 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", 3890 | "dev": true 3891 | }, 3892 | "isexe": { 3893 | "version": "2.0.0", 3894 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 3895 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 3896 | "dev": true 3897 | }, 3898 | "js-tokens": { 3899 | "version": "4.0.0", 3900 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 3901 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 3902 | "dev": true 3903 | }, 3904 | "js-yaml": { 3905 | "version": "3.14.1", 3906 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 3907 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 3908 | "dev": true, 3909 | "requires": { 3910 | "argparse": "^1.0.7", 3911 | "esprima": "^4.0.0" 3912 | } 3913 | }, 3914 | "json-schema-traverse": { 3915 | "version": "0.4.1", 3916 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 3917 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 3918 | "dev": true 3919 | }, 3920 | "json-stable-stringify-without-jsonify": { 3921 | "version": "1.0.1", 3922 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 3923 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 3924 | "dev": true 3925 | }, 3926 | "levn": { 3927 | "version": "0.4.1", 3928 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 3929 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 3930 | "dev": true, 3931 | "requires": { 3932 | "prelude-ls": "^1.2.1", 3933 | "type-check": "~0.4.0" 3934 | } 3935 | }, 3936 | "locate-path": { 3937 | "version": "6.0.0", 3938 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 3939 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 3940 | "dev": true, 3941 | "requires": { 3942 | "p-locate": "^5.0.0" 3943 | } 3944 | }, 3945 | "lodash": { 3946 | "version": "4.17.21", 3947 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 3948 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 3949 | "dev": true 3950 | }, 3951 | "lodash.clonedeep": { 3952 | "version": "4.5.0", 3953 | "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", 3954 | "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", 3955 | "dev": true 3956 | }, 3957 | "lodash.merge": { 3958 | "version": "4.6.2", 3959 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 3960 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 3961 | "dev": true 3962 | }, 3963 | "lodash.truncate": { 3964 | "version": "4.4.2", 3965 | "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", 3966 | "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", 3967 | "dev": true 3968 | }, 3969 | "log-symbols": { 3970 | "version": "4.1.0", 3971 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", 3972 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", 3973 | "dev": true, 3974 | "requires": { 3975 | "chalk": "^4.1.0", 3976 | "is-unicode-supported": "^0.1.0" 3977 | } 3978 | }, 3979 | "lru-cache": { 3980 | "version": "6.0.0", 3981 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 3982 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 3983 | "dev": true, 3984 | "requires": { 3985 | "yallist": "^4.0.0" 3986 | } 3987 | }, 3988 | "make-error": { 3989 | "version": "1.3.6", 3990 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 3991 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 3992 | "dev": true 3993 | }, 3994 | "merge2": { 3995 | "version": "1.4.1", 3996 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 3997 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 3998 | "dev": true 3999 | }, 4000 | "micromatch": { 4001 | "version": "4.0.4", 4002 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", 4003 | "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", 4004 | "dev": true, 4005 | "requires": { 4006 | "braces": "^3.0.1", 4007 | "picomatch": "^2.2.3" 4008 | } 4009 | }, 4010 | "minimatch": { 4011 | "version": "3.0.4", 4012 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 4013 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 4014 | "dev": true, 4015 | "requires": { 4016 | "brace-expansion": "^1.1.7" 4017 | } 4018 | }, 4019 | "mocha": { 4020 | "version": "9.1.1", 4021 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.1.tgz", 4022 | "integrity": "sha512-0wE74YMgOkCgBUj8VyIDwmLUjTsS13WV1Pg7l0SHea2qzZzlq7MDnfbPsHKcELBRk3+izEVkRofjmClpycudCA==", 4023 | "dev": true, 4024 | "requires": { 4025 | "@ungap/promise-all-settled": "1.1.2", 4026 | "ansi-colors": "4.1.1", 4027 | "browser-stdout": "1.3.1", 4028 | "chokidar": "3.5.2", 4029 | "debug": "4.3.1", 4030 | "diff": "5.0.0", 4031 | "escape-string-regexp": "4.0.0", 4032 | "find-up": "5.0.0", 4033 | "glob": "7.1.7", 4034 | "growl": "1.10.5", 4035 | "he": "1.2.0", 4036 | "js-yaml": "4.1.0", 4037 | "log-symbols": "4.1.0", 4038 | "minimatch": "3.0.4", 4039 | "ms": "2.1.3", 4040 | "nanoid": "3.1.23", 4041 | "serialize-javascript": "6.0.0", 4042 | "strip-json-comments": "3.1.1", 4043 | "supports-color": "8.1.1", 4044 | "which": "2.0.2", 4045 | "wide-align": "1.1.3", 4046 | "workerpool": "6.1.5", 4047 | "yargs": "16.2.0", 4048 | "yargs-parser": "20.2.4", 4049 | "yargs-unparser": "2.0.0" 4050 | }, 4051 | "dependencies": { 4052 | "argparse": { 4053 | "version": "2.0.1", 4054 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 4055 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 4056 | "dev": true 4057 | }, 4058 | "debug": { 4059 | "version": "4.3.1", 4060 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", 4061 | "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", 4062 | "dev": true, 4063 | "requires": { 4064 | "ms": "2.1.2" 4065 | }, 4066 | "dependencies": { 4067 | "ms": { 4068 | "version": "2.1.2", 4069 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 4070 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 4071 | "dev": true 4072 | } 4073 | } 4074 | }, 4075 | "diff": { 4076 | "version": "5.0.0", 4077 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", 4078 | "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", 4079 | "dev": true 4080 | }, 4081 | "js-yaml": { 4082 | "version": "4.1.0", 4083 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 4084 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 4085 | "dev": true, 4086 | "requires": { 4087 | "argparse": "^2.0.1" 4088 | } 4089 | }, 4090 | "ms": { 4091 | "version": "2.1.3", 4092 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 4093 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 4094 | "dev": true 4095 | }, 4096 | "supports-color": { 4097 | "version": "8.1.1", 4098 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 4099 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 4100 | "dev": true, 4101 | "requires": { 4102 | "has-flag": "^4.0.0" 4103 | } 4104 | } 4105 | } 4106 | }, 4107 | "ms": { 4108 | "version": "2.1.2", 4109 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 4110 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 4111 | "dev": true 4112 | }, 4113 | "nanoid": { 4114 | "version": "3.1.23", 4115 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", 4116 | "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", 4117 | "dev": true 4118 | }, 4119 | "natural-compare": { 4120 | "version": "1.4.0", 4121 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 4122 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 4123 | "dev": true 4124 | }, 4125 | "normalize-path": { 4126 | "version": "3.0.0", 4127 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 4128 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 4129 | "dev": true 4130 | }, 4131 | "once": { 4132 | "version": "1.4.0", 4133 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 4134 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 4135 | "dev": true, 4136 | "requires": { 4137 | "wrappy": "1" 4138 | } 4139 | }, 4140 | "optionator": { 4141 | "version": "0.9.1", 4142 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 4143 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 4144 | "dev": true, 4145 | "requires": { 4146 | "deep-is": "^0.1.3", 4147 | "fast-levenshtein": "^2.0.6", 4148 | "levn": "^0.4.1", 4149 | "prelude-ls": "^1.2.1", 4150 | "type-check": "^0.4.0", 4151 | "word-wrap": "^1.2.3" 4152 | } 4153 | }, 4154 | "p-limit": { 4155 | "version": "3.1.0", 4156 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 4157 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 4158 | "dev": true, 4159 | "requires": { 4160 | "yocto-queue": "^0.1.0" 4161 | } 4162 | }, 4163 | "p-locate": { 4164 | "version": "5.0.0", 4165 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 4166 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 4167 | "dev": true, 4168 | "requires": { 4169 | "p-limit": "^3.0.2" 4170 | } 4171 | }, 4172 | "parent-module": { 4173 | "version": "1.0.1", 4174 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 4175 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 4176 | "dev": true, 4177 | "requires": { 4178 | "callsites": "^3.0.0" 4179 | } 4180 | }, 4181 | "path-exists": { 4182 | "version": "4.0.0", 4183 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 4184 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 4185 | "dev": true 4186 | }, 4187 | "path-is-absolute": { 4188 | "version": "1.0.1", 4189 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 4190 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 4191 | "dev": true 4192 | }, 4193 | "path-key": { 4194 | "version": "3.1.1", 4195 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 4196 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 4197 | "dev": true 4198 | }, 4199 | "path-type": { 4200 | "version": "4.0.0", 4201 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 4202 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 4203 | "dev": true 4204 | }, 4205 | "picomatch": { 4206 | "version": "2.3.0", 4207 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", 4208 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", 4209 | "dev": true 4210 | }, 4211 | "prelude-ls": { 4212 | "version": "1.2.1", 4213 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 4214 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 4215 | "dev": true 4216 | }, 4217 | "progress": { 4218 | "version": "2.0.3", 4219 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 4220 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 4221 | "dev": true 4222 | }, 4223 | "punycode": { 4224 | "version": "2.1.1", 4225 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 4226 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 4227 | "dev": true 4228 | }, 4229 | "queue-microtask": { 4230 | "version": "1.2.3", 4231 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 4232 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 4233 | "dev": true 4234 | }, 4235 | "randombytes": { 4236 | "version": "2.1.0", 4237 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 4238 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 4239 | "dev": true, 4240 | "requires": { 4241 | "safe-buffer": "^5.1.0" 4242 | } 4243 | }, 4244 | "readdirp": { 4245 | "version": "3.6.0", 4246 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 4247 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 4248 | "dev": true, 4249 | "requires": { 4250 | "picomatch": "^2.2.1" 4251 | } 4252 | }, 4253 | "regexpp": { 4254 | "version": "3.2.0", 4255 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", 4256 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", 4257 | "dev": true 4258 | }, 4259 | "require-directory": { 4260 | "version": "2.1.1", 4261 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 4262 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 4263 | "dev": true 4264 | }, 4265 | "require-from-string": { 4266 | "version": "2.0.2", 4267 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 4268 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 4269 | "dev": true 4270 | }, 4271 | "requireindex": { 4272 | "version": "1.1.0", 4273 | "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz", 4274 | "integrity": "sha1-5UBLgVV+91225JxacgBIk/4D4WI=", 4275 | "dev": true 4276 | }, 4277 | "resolve-from": { 4278 | "version": "4.0.0", 4279 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 4280 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 4281 | "dev": true 4282 | }, 4283 | "reusify": { 4284 | "version": "1.0.4", 4285 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 4286 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 4287 | "dev": true 4288 | }, 4289 | "rimraf": { 4290 | "version": "3.0.2", 4291 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 4292 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 4293 | "dev": true, 4294 | "requires": { 4295 | "glob": "^7.1.3" 4296 | } 4297 | }, 4298 | "run-parallel": { 4299 | "version": "1.2.0", 4300 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 4301 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 4302 | "dev": true, 4303 | "requires": { 4304 | "queue-microtask": "^1.2.2" 4305 | } 4306 | }, 4307 | "safe-buffer": { 4308 | "version": "5.2.1", 4309 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 4310 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 4311 | "dev": true 4312 | }, 4313 | "semver": { 4314 | "version": "7.3.5", 4315 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", 4316 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", 4317 | "dev": true, 4318 | "requires": { 4319 | "lru-cache": "^6.0.0" 4320 | } 4321 | }, 4322 | "serialize-javascript": { 4323 | "version": "6.0.0", 4324 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", 4325 | "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", 4326 | "dev": true, 4327 | "requires": { 4328 | "randombytes": "^2.1.0" 4329 | } 4330 | }, 4331 | "shebang-command": { 4332 | "version": "2.0.0", 4333 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 4334 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 4335 | "dev": true, 4336 | "requires": { 4337 | "shebang-regex": "^3.0.0" 4338 | } 4339 | }, 4340 | "shebang-regex": { 4341 | "version": "3.0.0", 4342 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 4343 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 4344 | "dev": true 4345 | }, 4346 | "slash": { 4347 | "version": "3.0.0", 4348 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 4349 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 4350 | "dev": true 4351 | }, 4352 | "slice-ansi": { 4353 | "version": "4.0.0", 4354 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", 4355 | "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", 4356 | "dev": true, 4357 | "requires": { 4358 | "ansi-styles": "^4.0.0", 4359 | "astral-regex": "^2.0.0", 4360 | "is-fullwidth-code-point": "^3.0.0" 4361 | } 4362 | }, 4363 | "sprintf-js": { 4364 | "version": "1.0.3", 4365 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 4366 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 4367 | "dev": true 4368 | }, 4369 | "string-width": { 4370 | "version": "4.2.2", 4371 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", 4372 | "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", 4373 | "dev": true, 4374 | "requires": { 4375 | "emoji-regex": "^8.0.0", 4376 | "is-fullwidth-code-point": "^3.0.0", 4377 | "strip-ansi": "^6.0.0" 4378 | } 4379 | }, 4380 | "strip-ansi": { 4381 | "version": "6.0.0", 4382 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 4383 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 4384 | "dev": true, 4385 | "requires": { 4386 | "ansi-regex": "^5.0.0" 4387 | } 4388 | }, 4389 | "strip-json-comments": { 4390 | "version": "3.1.1", 4391 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 4392 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 4393 | "dev": true 4394 | }, 4395 | "supports-color": { 4396 | "version": "7.2.0", 4397 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 4398 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 4399 | "dev": true, 4400 | "requires": { 4401 | "has-flag": "^4.0.0" 4402 | } 4403 | }, 4404 | "table": { 4405 | "version": "6.7.1", 4406 | "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", 4407 | "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", 4408 | "dev": true, 4409 | "requires": { 4410 | "ajv": "^8.0.1", 4411 | "lodash.clonedeep": "^4.5.0", 4412 | "lodash.truncate": "^4.4.2", 4413 | "slice-ansi": "^4.0.0", 4414 | "string-width": "^4.2.0", 4415 | "strip-ansi": "^6.0.0" 4416 | }, 4417 | "dependencies": { 4418 | "ajv": { 4419 | "version": "8.6.2", 4420 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", 4421 | "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", 4422 | "dev": true, 4423 | "requires": { 4424 | "fast-deep-equal": "^3.1.1", 4425 | "json-schema-traverse": "^1.0.0", 4426 | "require-from-string": "^2.0.2", 4427 | "uri-js": "^4.2.2" 4428 | } 4429 | }, 4430 | "json-schema-traverse": { 4431 | "version": "1.0.0", 4432 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 4433 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 4434 | "dev": true 4435 | } 4436 | } 4437 | }, 4438 | "text-table": { 4439 | "version": "0.2.0", 4440 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 4441 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 4442 | "dev": true 4443 | }, 4444 | "to-regex-range": { 4445 | "version": "5.0.1", 4446 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 4447 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 4448 | "dev": true, 4449 | "requires": { 4450 | "is-number": "^7.0.0" 4451 | } 4452 | }, 4453 | "ts-node": { 4454 | "version": "10.2.1", 4455 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.2.1.tgz", 4456 | "integrity": "sha512-hCnyOyuGmD5wHleOQX6NIjJtYVIO8bPP8F2acWkB4W06wdlkgyvJtubO/I9NkI88hCFECbsEgoLc0VNkYmcSfw==", 4457 | "dev": true, 4458 | "requires": { 4459 | "@cspotcode/source-map-support": "0.6.1", 4460 | "@tsconfig/node10": "^1.0.7", 4461 | "@tsconfig/node12": "^1.0.7", 4462 | "@tsconfig/node14": "^1.0.0", 4463 | "@tsconfig/node16": "^1.0.2", 4464 | "acorn": "^8.4.1", 4465 | "acorn-walk": "^8.1.1", 4466 | "arg": "^4.1.0", 4467 | "create-require": "^1.1.0", 4468 | "diff": "^4.0.1", 4469 | "make-error": "^1.1.1", 4470 | "yn": "3.1.1" 4471 | }, 4472 | "dependencies": { 4473 | "acorn": { 4474 | "version": "8.4.1", 4475 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", 4476 | "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", 4477 | "dev": true 4478 | } 4479 | } 4480 | }, 4481 | "tslib": { 4482 | "version": "1.14.1", 4483 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 4484 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", 4485 | "dev": true 4486 | }, 4487 | "tsutils": { 4488 | "version": "3.21.0", 4489 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", 4490 | "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", 4491 | "dev": true, 4492 | "requires": { 4493 | "tslib": "^1.8.1" 4494 | } 4495 | }, 4496 | "type-check": { 4497 | "version": "0.4.0", 4498 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 4499 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 4500 | "dev": true, 4501 | "requires": { 4502 | "prelude-ls": "^1.2.1" 4503 | } 4504 | }, 4505 | "type-fest": { 4506 | "version": "0.20.2", 4507 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 4508 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 4509 | "dev": true 4510 | }, 4511 | "typescript": { 4512 | "version": "4.4.2", 4513 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.2.tgz", 4514 | "integrity": "sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ==", 4515 | "dev": true 4516 | }, 4517 | "uri-js": { 4518 | "version": "4.4.1", 4519 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 4520 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 4521 | "dev": true, 4522 | "requires": { 4523 | "punycode": "^2.1.0" 4524 | } 4525 | }, 4526 | "v8-compile-cache": { 4527 | "version": "2.3.0", 4528 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", 4529 | "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", 4530 | "dev": true 4531 | }, 4532 | "which": { 4533 | "version": "2.0.2", 4534 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 4535 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 4536 | "dev": true, 4537 | "requires": { 4538 | "isexe": "^2.0.0" 4539 | } 4540 | }, 4541 | "wide-align": { 4542 | "version": "1.1.3", 4543 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", 4544 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", 4545 | "dev": true, 4546 | "requires": { 4547 | "string-width": "^1.0.2 || 2" 4548 | }, 4549 | "dependencies": { 4550 | "ansi-regex": { 4551 | "version": "3.0.0", 4552 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 4553 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 4554 | "dev": true 4555 | }, 4556 | "is-fullwidth-code-point": { 4557 | "version": "2.0.0", 4558 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 4559 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 4560 | "dev": true 4561 | }, 4562 | "string-width": { 4563 | "version": "2.1.1", 4564 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 4565 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 4566 | "dev": true, 4567 | "requires": { 4568 | "is-fullwidth-code-point": "^2.0.0", 4569 | "strip-ansi": "^4.0.0" 4570 | } 4571 | }, 4572 | "strip-ansi": { 4573 | "version": "4.0.0", 4574 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 4575 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 4576 | "dev": true, 4577 | "requires": { 4578 | "ansi-regex": "^3.0.0" 4579 | } 4580 | } 4581 | } 4582 | }, 4583 | "word-wrap": { 4584 | "version": "1.2.3", 4585 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 4586 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 4587 | "dev": true 4588 | }, 4589 | "workerpool": { 4590 | "version": "6.1.5", 4591 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", 4592 | "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", 4593 | "dev": true 4594 | }, 4595 | "wrap-ansi": { 4596 | "version": "7.0.0", 4597 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 4598 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 4599 | "dev": true, 4600 | "requires": { 4601 | "ansi-styles": "^4.0.0", 4602 | "string-width": "^4.1.0", 4603 | "strip-ansi": "^6.0.0" 4604 | } 4605 | }, 4606 | "wrappy": { 4607 | "version": "1.0.2", 4608 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 4609 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 4610 | "dev": true 4611 | }, 4612 | "y18n": { 4613 | "version": "5.0.8", 4614 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 4615 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 4616 | "dev": true 4617 | }, 4618 | "yallist": { 4619 | "version": "4.0.0", 4620 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 4621 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 4622 | "dev": true 4623 | }, 4624 | "yargs": { 4625 | "version": "16.2.0", 4626 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 4627 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 4628 | "dev": true, 4629 | "requires": { 4630 | "cliui": "^7.0.2", 4631 | "escalade": "^3.1.1", 4632 | "get-caller-file": "^2.0.5", 4633 | "require-directory": "^2.1.1", 4634 | "string-width": "^4.2.0", 4635 | "y18n": "^5.0.5", 4636 | "yargs-parser": "^20.2.2" 4637 | } 4638 | }, 4639 | "yargs-parser": { 4640 | "version": "20.2.4", 4641 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", 4642 | "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", 4643 | "dev": true 4644 | }, 4645 | "yargs-unparser": { 4646 | "version": "2.0.0", 4647 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", 4648 | "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", 4649 | "dev": true, 4650 | "requires": { 4651 | "camelcase": "^6.0.0", 4652 | "decamelize": "^4.0.0", 4653 | "flat": "^5.0.2", 4654 | "is-plain-obj": "^2.1.0" 4655 | } 4656 | }, 4657 | "yn": { 4658 | "version": "3.1.1", 4659 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", 4660 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 4661 | "dev": true 4662 | }, 4663 | "yocto-queue": { 4664 | "version": "0.1.0", 4665 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 4666 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 4667 | "dev": true 4668 | } 4669 | } 4670 | } 4671 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "delimited-continuations", 3 | "version": "1.0.0", 4 | "description": "Delimited Continuations for JavaScript", 5 | "main": "dist-cjs/index.js", 6 | "scripts": { 7 | "test": "ts-node -r mocha/register test/**/*.test.ts" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/cowboyd/delimited-continuations-tutorial.git" 12 | }, 13 | "author": "Charles Lowell ", 14 | "license": "ISC", 15 | "bugs": { 16 | "url": "https://github.com/cowboyd/delimited-continuations-tutorial/issues" 17 | }, 18 | "homepage": "https://github.com/cowboyd/delimited-continuations-tutorial#readme", 19 | "devDependencies": { 20 | "@frontside/eslint-config": "^2.1.0", 21 | "@frontside/typescript": "^2.0.0", 22 | "@types/mocha": "^9.0.0", 23 | "assert-ts": "^0.3.3", 24 | "mocha": "^9.1.1", 25 | "ts-node": "^10.2.1", 26 | "typescript": "^4.4.2" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/future.ts: -------------------------------------------------------------------------------- 1 | import { reduce, reset, shift } from '.'; 2 | 3 | export type State = 'pending' | 'errored' | 'completed' | 'halted'; 4 | 5 | export type Value = 6 | | { state: 'errored'; error: Error } 7 | | { state: 'completed'; value: T } 8 | | { state: 'halted' }; 9 | 10 | export interface Consumer { 11 | (value: Value): void; 12 | } 13 | 14 | export interface Future{ 15 | state: State; 16 | consume(consumer: Consumer): void; 17 | } 18 | 19 | export interface NewFuture { 20 | future: Future; 21 | produce(value: Value): void; 22 | resolve(value: T): void; 23 | reject(error: Error): void; 24 | halt(): void; 25 | } 26 | 27 | export function createFuture(): NewFuture { 28 | return reduce(function*() { 29 | let consumers: Consumer[] = []; 30 | let value: Value; 31 | 32 | let produce = yield reset(function*() { 33 | value = yield shift(function*(k) { return k; }); 34 | yield* notify(value); 35 | }); 36 | 37 | let consume = yield reset(function*() { 38 | while (true) { 39 | let consumer: Consumer = yield shift(function*(k) { return k; }); 40 | consumers.push(consumer); 41 | if (value) { 42 | yield* notify(value); 43 | } 44 | } 45 | }); 46 | 47 | function* notify(value: Value) { 48 | for (let consumer = consumers.shift(); consumer; consumer = consumers.shift()) { 49 | yield* (function*() { consumer(value)})(); 50 | } 51 | } 52 | 53 | return { 54 | future: { 55 | get state() { return value ? value.state : 'pending'; }, 56 | consume 57 | }, 58 | produce, 59 | resolve: (value: T) => produce({ state: 'completed', value }), 60 | reject: (error: Error) => produce({ state: 'errored', error }), 61 | halt: () => produce({ state: 'halted' }) 62 | } 63 | }); 64 | } 65 | 66 | let { future, resolve } = createFuture(); 67 | 68 | future.consume(v => console.log('first', v)); 69 | future.consume(v => { 70 | console.log('second', v); 71 | future.consume(v => console.log('second.first', v)); 72 | }); 73 | future.consume(v => console.log('third', v)); 74 | 75 | resolve(25); 76 | 77 | future.consume(v => console.log('fourth', v)); 78 | 79 | resolve(88); 80 | 81 | future.consume(v => console.log('fifth', v)); 82 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export type K = (value?: any) => any; 2 | 3 | export interface Prog extends Iterator { 4 | [Symbol.iterator](): Iterator; 5 | } 6 | 7 | export interface Shift { 8 | type: 'shift'; 9 | block: (k: K) => Prog; 10 | } 11 | 12 | export interface Reset { 13 | type: 'reset'; 14 | block: () => Prog; 15 | } 16 | 17 | export type Control = Reset | Shift; 18 | 19 | export function reset(block: () => Prog): Reset { 20 | return { type: 'reset', block }; 21 | } 22 | 23 | export function shift(block: (k: K) => Prog): Shift { 24 | return { type: 'shift', block }; 25 | } 26 | 27 | export function reduce(block: () => Prog, done: K = v => v, value?: unknown): any { 28 | let prog = block(); 29 | let next = prog.next(value); 30 | if (next.done) { 31 | return done(next.value); 32 | } else { 33 | let control = next.value; 34 | if (control.type === 'reset') { 35 | return reduce(control.block, v => reduce(() => prog, done, v)); 36 | } else { 37 | let k: K = value => reduce(() => prog, v => v, value); 38 | return reduce(() => control.block(k), done); 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@frontside/tsconfig", 3 | "compilerOptions": { 4 | "noEmit": true 5 | }, 6 | "include": [ 7 | "test/**/*.ts", 8 | "src/**/*.ts", 9 | "*.ts" 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /tutorial.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cowboyd/delimited-continuations-tutorial/1f7809326c26641f3178f412ba572e2a62ddcfb9/tutorial.pdf -------------------------------------------------------------------------------- /use-state.ts: -------------------------------------------------------------------------------- 1 | import { reduce, reset, shift, Prog } from './src'; 2 | 3 | let component = reduce(function*() { 4 | 5 | 6 | 7 | return yield* render(function*() { 8 | let [clicks, incrementClicks] = yield* useCounter(); 9 | let [strokes, setStrokes] = yield* useState(0); 10 | return { 11 | clicks, 12 | strokes, 13 | onClick: () => incrementClicks(), 14 | onKeydown: () => setStrokes(strokes + 1) 15 | }; 16 | }) 17 | 18 | 19 | }) 20 | 21 | console.log(component. 22 | onClick(). 23 | onClick(). 24 | onClick(). 25 | onKeydown(). 26 | onKeydown()); 27 | 28 | function* useState(initial: T): Prog { 29 | return yield shift(function*(k) { 30 | return (states: States) => { 31 | let current = states.alloc(initial); 32 | return k([current.get(), current.set])(states); 33 | } 34 | }); 35 | } 36 | 37 | function* useCounter() { 38 | let [count, setCount] = yield* useState(0); 39 | return [count, () => setCount(count + 1)]; 40 | } 41 | 42 | function* render(body: () => Prog): Prog { 43 | return yield reset(function* renderLoop() { 44 | let states = createStates(); 45 | while (true) { 46 | yield shift(function* (k) { 47 | states.begin(k); 48 | return (yield reset(function*() { 49 | let result = yield *body(); 50 | return () => result; 51 | }))(states) 52 | }); 53 | } 54 | }) 55 | } 56 | 57 | interface States { 58 | alloc(initial: T): Cell; 59 | begin(rerender: () => any): void 60 | } 61 | interface Cell { 62 | get(): T; 63 | set(t: T): void; 64 | } 65 | 66 | function createStates(): States { 67 | let states: Cell[] = []; 68 | let currentIdx = -1; 69 | let render = () => { }; 70 | return { 71 | begin: (rerender) => { 72 | currentIdx = -1; 73 | render = rerender; 74 | }, 75 | alloc(initial: T): Cell { 76 | if (++currentIdx + 1 > states.length) { 77 | let value: T = initial; 78 | states.push({ 79 | get: () => value, 80 | set: (t: T) => { 81 | value = t; 82 | return render(); 83 | } 84 | }); 85 | } 86 | return states[currentIdx] as unknown as Cell; 87 | } 88 | } 89 | } 90 | --------------------------------------------------------------------------------