From 7b961528fddbef22ce66289ef5ebc896390151f0 Mon Sep 17 00:00:00 2001 From: yjkwon07 Date: Sun, 12 Apr 2020 17:02:39 +0900 Subject: [PATCH 01/20] JS Engine, Start summary --- Modern JS/JS_Engine.md | 111 ++++++++++++++++++++++++++ Modern JS/JS_start.md | 175 +++++++++++++++++++++++++++++++++++++++++ image/jsRuntime.png | Bin 0 -> 26101 bytes 3 files changed, 286 insertions(+) create mode 100644 Modern JS/JS_Engine.md create mode 100644 Modern JS/JS_start.md create mode 100644 image/jsRuntime.png diff --git a/Modern JS/JS_Engine.md b/Modern JS/JS_Engine.md new file mode 100644 index 0000000..06e204e --- /dev/null +++ b/Modern JS/JS_Engine.md @@ -0,0 +1,111 @@ +# JS Engine +- [JS Engine](#js-engine) + - [Compile & RunTime Engine](#compile--runtime-engine) + - [V8 Engine](#v8-engine) + - [Single Thread & EventLoop, Queue](#single-thread--eventloop-queue) + - [Hidden Class & Inline Cache (V8 Engine)](#hidden-class--inline-cache-v8-engine) + - [Optimised JavaSript Code](#optimised-javasript-code) + - [Reference](#reference) + +## Compile & RunTime Engine + +- 다양한 웹브라우저(Chrome, Edge, ...) 혹은 Node같이 `JS를 실행 시키기 위한(compile & runTime)` 다양한 **엔진을** 지원한다. + + - JS Engine + - 자바스크립트 코드를 실행하는 프로그램 혹은 인터프리터를 말한다.(No Compiler) + - 표준적인 인터프리터로 구현될 수도 있고 혹은 자바스크립트 코드를 바이트코드로 컴파일하는 JIT(Just-In-Time) 컴파일러로 구현할 수도 있다. + + - V8 Engine + - 자바스크립트 대표적인 엔진은 C++로 구현된 V8 엔진을 볼 수 있다. + - 속도 향상을 위해 V8은 인터프리터를 사용하는 대신 JS 코드를 더 효율적인 머신 코드로 번역한다. (하지만, **중간코드를 생산하지 않는다.**) + - 멀티 스레드로 컴파일 실행(main thread), 컴파일, 프로파일러, GC Sweep 등이 있다. + +## V8 Engine + +- Stack + - 실행 가능한 함수들을(stack Frame) 순차적으로 실행하는 공간 + - JS는 싱글 쓰레드 프로그래밍 언어 + - 콜스택이 하 나 + - 따라서 한 번에 하나의 일만 할 수 있다. +- Heap + - 동적으로 생성된 인스턴스(객체)를 관리하는 영역 + +## Single Thread & EventLoop, Queue + +- JS는 싱글 스레드이기 때문에 실행 가능한 코드의 지연이 오래 걸릴 수 록 UI Render 문제 혹은 프로그램이 다운이 될 수 있다. + - 그래서 대부분 브라우저는 Web API를 구현하여 비동기적 실행을 가능하게 구현이 되어있다. + - **V8 Engine의 속해있지 않은 외부에서(브라우저) 구현된 구조이다.** + +- Queue + - Microtask Queue (1순위 stack 반영) (ex. then(...) func. of promise func. ) + - Animation frames (1순위 stack 반영) (ex. UI render or repaint) + - Task Queue (3순위 stack 반영) + + - Web API에서 실행 완료후 CallBack 함수를 Queue에 push 한다. + - 호출된 함수의 특성을 통해 Microtask, Animation, Task를 보낸다. + +- EventLoop + - EventLoop는 JS Engine의 call Stack이 비어있으면 eventLoop가 queue를 확인하여 call stack에 보낸다. + ```js + while(queue.waitForMessage()){ + queue.processNextMessage(); + } + ``` + - queue.waitForMessage() 함수는 현재 아무 메시지도 없다면 새로운 메시지 도착을 **동기적으로 기다린다.** + - EventLoop에 대해 개념을 잡을 수 있는 유명한 영상이 있다. [What the heck is event loop? | Philip Roberts | JSConf EU](https://youtu.be/8aGhZQkoFbQ) + + ![jsRuntime](../image/jsRuntime.png) + +## Hidden Class & Inline Cache (V8 Engine) + +- 대부분의 JavaScript 인터프리터가 딕셔너리와 유사한 구조(해쉬함수 기반)를 이용해 **객체 속성 값의 위치를 메모리에 저장한다.** + - 하지만, 이럴경우 객체의 속성 값을 찾는데 비용이 많이 든다. + +- JAVA에서는 모든 객체 속성이 `컴파일 전에` **고정된 객체 레이아웃에 의해 결정되고** **런타임에 동적으로 추가되거나 제거될 수 없다.** + - 따라서 속성값(혹은 이들 속성을 가리키는 포인터)은 메모리에 고정된 `오프셋을` 가진 **연속적인 버퍼로 저장될 수 있고** `오프셋의 길이는` **속성 타입에 따라 쉽게 결정될 수 있다.** + +- V8 Engine의 `Hidden Class는` JAVA와 같은 언어에서 사용되는 고정 객체 레이아웃과 유사하게 작동하는데 **다만 `런타임에` 생성된다는 차이점이 있다.** + - 객체가 생성될 때 하나의 `Hidden Class가` 생성되고 프로퍼티 값을 부여 될 때 마다 해당 프로퍼티의 `오프셋을 담은 Hidden Class가 생성되어` 객체가 가리키는 Hidden Class 포인터를 업데이트 한다. + - 이전 Hidden Class에는 새로 업데이트한 Hidden Class를 연결한다. + - 마지막으로 업데이트한 Hidden Class에는 연결된 Hidden Class를 통해 offset 정보를 쉽게 찾을 수 있다. + - 하지만, 히든클래스 전환은 프로퍼티가 객체에 추가되는 순서에 의존적이다. + - 프로퍼티 할당 순서를 바꾸게 된다면 다른 Hidden Class를 생성하므로 최적화 코드가 다르게 된다. + - 여기서 `Inline Cache는` 함수에 부여된 파라미터의 객체 참조 Hidden Class 정보를 기억하는데 만약 같은 객체의 다른 Hidden Class를 공유하게 된다면 Inline Cache를 할 수 없어 실행 속도는 하나의 히든클래스와 공유한 코드보다 느리게 된다. + + +## Optimised JavaSript Code + +1. 객체 속성의 순서 + - 객체 속성을 항상 같은 순서로 초기화해서 히든클래스 및 이후에 생성되는 최적화 코드가 공유될 수 있도록 한다. + +2. 동적 속성 + - 객체 생성 이후에 속성을 추가하는 것은 히든 클래스가 변하도록 강제하고 이전의 히든클래스를 대상으로 최적화되었던 모든 메소드를 느리게 만든다. + - 모든 객체의 속성을 생성자에서 할당하는것을 추천한다. + +3. 메소드 + - 동일한 메소드를 반복적으로 수행하는 코드가 서로 다른 메소드를 한 번씩만 수행하는 코드 보다 더 빠르게 동작한다. (인라인 캐싱 때문) + +4. 배열 + Array 또한 객체로 구성된 배열이다. 즉 메모리에 연속된 주소 참조가 아닐 수 있다. (해시테이블) + Array 객체는 희소배열이기 때문에 delete로 프로퍼티를 삭제할 수 있다. + - 하지만 프로퍼티를 삭제하지 않는게 좋다. + - index 순서가 일정하지 않은 배열은 접근하기에 많은 비용이 든다. + 또한 커다란 배열을 미리 할당하지 않도록 한다. + - 사용하면서 크기가 커지도록 하는 게 낫다. + +5. 태깅된 값 + - V8은 객체와 숫자를 32비트로 표현한다. + - 어떤 값이 오브젝트(flag = 1)인지 혹은 정수(flag = 0)인지는 SMI(Small Integer)라는 하나의 비트에 저장하고 이 때문에 31비트가 남는다. + - 따라서 어떤 숫자가 31비트 보다 크면 V8은 이 숫자를 분리해서 더블 타입으로 전환한 다음 이 숫자를 넣을 새로운 객체를 생성한다. + - 이러한 동작은 비용이 높으므로 가능한한 31비트의 숫자를 사용하도록 하는게 좋다. + +## Reference + +- [V8 엔진 구성](https://engineering.huiseoul.com/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%9E%91%EB%8F%99%ED%95%98%EB%8A%94%EA%B0%80-%EC%97%94%EC%A7%84-%EB%9F%B0%ED%83%80%EC%9E%84-%EC%BD%9C%EC%8A%A4%ED%83%9D-%EA%B0%9C%EA%B4%80-ea47917c8442) +- [V8 엔진 내부](https://engineering.huiseoul.com/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%9E%91%EB%8F%99%ED%95%98%EB%8A%94%EA%B0%80-v8-%EC%97%94%EC%A7%84%EC%9D%98-%EB%82%B4%EB%B6%80-%EC%B5%9C%EC%A0%81%ED%99%94%EB%90%9C-%EC%BD%94%EB%93%9C%EB%A5%BC-%EC%9E%91%EC%84%B1%EC%9D%84-%EC%9C%84%ED%95%9C-%EB%8B%A4%EC%84%AF-%EA%B0%80%EC%A7%80-%ED%8C%81-6c6f9832c1d9) +- [JBee: JS EventLoop](https://asfirstalways.tistory.com/362) +- [JS Web API, Queue 우선순위 처리 과정](http://sculove.github.io/blog/2018/01/18/javascriptflow/) +- [MDN: JS EventLoop](https://developer.mozilla.org/ko/docs/Web/JavaScript/EventLoop) +- [자바스크립트와 이벤트 루프](https://meetup.toast.com/posts/89) +- [자바스크립트 개발자라면 알아야 할 33가지 개념 #1 콜스택 (번역)](https://velog.io/@jakeseo_me/2019-03-15-2303-%EC%9E%91%EC%84%B1%EB%90%A8-rmjta5a3xh) +- [YouTube: What the heck is event loop? | Philip Roberts | JSConf EU](https://youtu.be/8aGhZQkoFbQ) \ No newline at end of file diff --git a/Modern JS/JS_start.md b/Modern JS/JS_start.md new file mode 100644 index 0000000..ed9b9d4 --- /dev/null +++ b/Modern JS/JS_start.md @@ -0,0 +1,175 @@ +# JavaScript Start +- [JavaScript Start](#javascript-start) + - [Spec](#spec) + - [Data type](#data-type) + - [typeof 연산자의 반환 값](#typeof-%ec%97%b0%ec%82%b0%ec%9e%90%ec%9d%98-%eb%b0%98%ed%99%98-%ea%b0%92) + - [산술 연산](#%ec%82%b0%ec%88%a0-%ec%97%b0%ec%82%b0) + - [==, === 비교](#%eb%b9%84%ea%b5%90) + - [function](#function) + - [object(instance)](#objectinstance) + - [생성자](#%ec%83%9d%ec%84%b1%ec%9e%90) + - [this](#this) + - [array](#array) + - [Reference](#reference) + +## Spec + +1. 인터프리터 언어 + - **JIT 컴파일러가** 내장되어 실행속도가 빨라짐 + +2. 동적 프로토타입 기반 객체 지향 언어 + - JAVA, C++ 에서, 프로그램 실행 중 클래스를 인스턴스화 하여 나온 객체들은 메서드 혹은 멤버변수를 수정할 수 없지만, **JS에서는 프로토 타입 상속으로 인해 변경 할 수 있다.** + +3. 동적 타입 언어 + - **특정 변수 타입이 없다.** + - const, let, var + +4. 일급 객체 함수 + - **함수(fucntion)도 객체로 지정(Funciton)** + - 즉, 값으로 평가한다. + +5. 클로저 지원 + - 내장 함수(Nested Function)를 지원 하여 **하나의 인스턴스화, 은닉이 가능** + +## Data type + +- 원시타입 **(Primitive Type)**: 자바스크립트에서 객체가 **(Reference Type)** 아닌 것들이며 값 그 자체로 저장된다. + - String, Number, Boolean 같은 경우 객체가 존재 하지만, 원시타입의 리터럴로 정의하여 프로퍼티를 사용할경우 **Wrapper Object**로 자동 변환 되어 프로퍼티를 리턴한다. (Auto Boxing) + ```js + 1.toString(); // "1" + new Number(1).toString(); // Wrapper Object 리턴후 property 값 리턴 내부에서 이루어진 평가이기 때문에 GC로 없어짐 + ``` + - 연산 이후, GC로 해당 Wrapper Object 삭제 (할당이 되어이 있지 않기 때문에) + ```js + "string".newProperty = 1; // no error + console.log("string".newProperty); // undefined + ``` + - 하지만, `new 연산자로` 객체를 만들경우 Reference Type Objcet로 리턴되어 나와 **Primitive Type을 잃게 된다.** + - (원시 값을 갖고 싶으면, new String("값").valueOf() 사용 해야한다.) + +1. Boolean + +2. Null + - 산술 연산자에서는 '0'으로 평가 + +3. Undefined + - 산술 연산자에서는 'NaN'으로 평가 + +4. Number (IEEE754로 규정된 64-bit 부동소수점, 자바스크립트에는 정수 타입은 존재하지 않다.) + - 부호(1 bit), 지수(11 bit), 가수(52 bit) + +5. String + - 산술 연산자에서 '+' 연산 시 String 제외한 객체들(Primitve 포함)을 `'toString()'`, 혹은 `'valueOf()'(우선순위 높음)` 으로 반환된 값이랑 연산된다. + - 그외 '*,/,%...' 연산자는 String 타입을 Number(String 타입)으로 연산을 하게된다. + +6. Symbol (ECMAScript 6에 추가됨) + +### typeof 연산자의 반환 값 + +| data | ex | return | +|:-------|:-------|:-------| +|숫자, NaN|12,NaN, Number(12)|"number"| +|문자열|"값", String("값")|"string"| +|논리값|true, false|"boolean"| +|정의되지 않은 값|undefined|"undefined"| +|null 값|null|"object"| +|심벌|Symbol("값")|"symbol"| +|함수 외의 객체|[1,2,3], new String("값"), new Number(12)|"object"| +|함수|function(){}|"function"| + +### 산술 연산 + +- String 타입의 '+' 연산 방식을 제외하고 `대부분의 Data Type의` **'valueOf()'(우선순위 높음) 혹은 toString()으로 리턴된 값으로 연산을 한다.** +```js + null.valueOf(); // Error + null + 1; // 1 + undefined + 1 // NaN + NaN + "stirng" // "NaNstring" +``` + +### ==, === 비교 + +- '==' 비교는 타입이 일치 하지 않을 때, 강제 타입으로 변환시켜 비교하게 된다. + ```js + 77 == "77" // => "77" => Number("77")로 변환 후 검사 + false == 0 // => false => Number(false)로 변환 후 검사 + + null == null // => 서로 같으며 자기 자신과도 같습니다. => true + undefined == undefined // => 서로 같으며 자기 자신과도 같습니다. => true + null == undefined // => 서로 같으며 자기 자신과도 같습니다. => true + null == 0 // => false + undefined == 0 // => false + + NaN == null // 어떠한 값과도 동일하지 않다 false + NaN == undefined // 어떠한 값과도 동일하지 않다 false + NaN == NaN // 어떠한 값과도 동일하지 않다 false + ``` +- '===' 비교는 타입이일치 하진 않으면, return false, 타입이 일치할 때 값을 비교를 한다. (Best Code) + +## function + +- parameter(인자) + - 유효범위는 지역함수 이며, 프로그램 실행하면서 필요한 변수 값 + +- argument(인수) + - 함수에 인자값이 있지만, 인수를 안 보내도 함수는 실행이 된다. + - 해당하는 인자값을 모두 `undefined`로 정의 됨(lexcal Scope) + +- 지역 변수 + - 함수내의 변수를 선언 할 수 있으며 안에서 식별자(var, const, let)로 선언한 변수들은 모두 지역 변수로 들어간다. + - 함수 안에 함수를 실행할 수 있다.(Nested Function) + +- return + - return이 없을 경우 undefined를 리턴 한다. + +- **JS에서는 함수가 객체이다.** + - 함수 선언문으로 함수를 선언하면 내부적으로는 그 함수 이름을 변수 이름으로 한 변수와 **함수 객체가 만들어지고,** 함수 객체의 참조가 저장 된다. + +## object(instance) + +- **연관배열(associative array)** 또는 **맵(map),** **딕셔너리(Dictionary)** 라는 데이터 타입이 객체에 해당한다. +- key, value 쌍으로 구성되어 있으며, key를 `해당하는(this)` 객체의 프로퍼티로 명한다. +- 생성된 객체는 메모리(RAM-Heap)에 정의되며 해당하는 **주소값(Reference Type)을 저장하는 구조이다.** + +```javascript + const 객체 리터럴 = {'propertyName': 10, 'propertyName(Method)': function(){ console.log(this.propertyName)}}; + + var 객체 리터럴 = {}; + 객체 리터럴['propertyName'] = 10; + 객체 리터럴['propertyName(Method)'] = function(){ console.log(this.propertyName) }; + delete 객체 리터럴['propertyName']; // property delete -> confiualable일 때만!! + + var 객체 생성자 = new 객체를 만들려는 함수명(); + 객체 생성자['propertyName'] = 10; + 객체 생성자['propertyName(Method)'] = function(){ console.log(this.propertyName) }; +``` + +### 생성자 + +- 앞에 예제 처럼 `new 연산자로` 객체를 생성시킨 함수를 생성자라고 한다. +- 인스턴스는 **실체라는** 뜻이 있다. +- 객체 지향 언어에서(ex. JAVA, C++) 인스턴스는 `클래스(설계도)로` 생성한 실체를 뜻한다. + - 하지만, JS에서는 **클래스가 없다.** + - 또한, 함수 자체도 **함수객체로** 만든 해당 **함수 인스턴스 이다.** + - 그래서, 생성자로 생성한 객체는 엄밀히 말해 인스턴스가 아니다. + - 하지만, 생성자가 클래스처럼 객체를 생성하는 역할을 담당하고 있어 **생성자로 생성한 객체도 인스턴스라고 부르는것이 관례이다.** + +### this + +- 함수가 속해있는 객체를 가리키는 변수이다. +- 함수를 어떻게 생성하냐에 따라서 달라질 수 있지만, 맥락에서는 function을 가지고있는 **객체 생성자(value Name), 객체 리터럴(value Name)** 를 말한다. + +## array + +- 앞서 말한(Data type)에서도 원시 타입 이외는 모두 객체 참조이므로 array도 Array객체로 만들어진 **객체** 이다. +- 즉, 배열 넘버링(index)이 key값으로 저장된것이다. + - 이 말은 즉, 여러 프로그래밍 언어에서 배열 요소는 **메모리에 연속된 공간에 저장 되지만, JS는 객체 그렇지 않다.** + - ES6에서 `TypedArray에서는` 연속된 공간에 저장된다. +- 객체이기 때문에 delete가 가능한 프로퍼티가 있으면 **희소 배열로** 0 부터 시작되지 않은 배열이 만들어 질 수 있다. + +## Reference + +- [자바스크립트 개발자라면 알아야 할 33가지 개념 #2 자바스크립트의 원시 타입(Primitive Type) (번역)](https://velog.io/@jakeseo_me/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%9D%BC%EB%A9%B4-%EC%95%8C%EC%95%84%EC%95%BC-%ED%95%A0-33%EA%B0%80%EC%A7%80-%EA%B0%9C%EB%85%90-2-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98-%EC%9B%90%EC%8B%9C-%ED%83%80%EC%9E%85Primitive-Type-%EB%B2%88%EC%97%AD) +- [자바스크립트 개발자라면 알아야 할 33가지 개념 #3 값(value) vs 참조(reference) (번역)](https://velog.io/@jakeseo_me/2019-04-01-1904-%EC%9E%91%EC%84%B1%EB%90%A8-2bjty7tuuf) +- [자바스크립트 개발자라면 알아야 할 33가지 개념 #4 암묵적 타입 변환(implicit coercion) (번역)](https://velog.io/@jakeseo_me/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%9D%BC%EB%A9%B4-%EC%95%8C%EC%95%84%EC%95%BC-%ED%95%A0-33%EA%B0%80%EC%A7%80-%EA%B0%9C%EB%85%90-4-%EC%95%94%EB%AC%B5%EC%A0%81-%ED%83%80%EC%9E%85-%EB%B3%80%ED%99%98-%EB%B2%88%EC%97%AD) +- [자바스크립트 개발자라면 알아야 할 33가지 개념 #5 == vs === 3분만에 배우기 (번역)](https://velog.io/@jakeseo_me/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%9D%BC%EB%A9%B4-%EC%95%8C%EC%95%84%EC%95%BC-%ED%95%A0-33%EA%B0%80%EC%A7%80-%EA%B0%9C%EB%85%90-5-vs-3%EB%B6%84%EB%A7%8C%EC%97%90-%EB%B0%B0%EC%9A%B0%EA%B8%B0-%EB%B2%88%EC%97%AD#-%ED%91%9C%EC%8B%9C-2%EA%B0%9C%EC%9D%98-%EB%8F%99%EB%93%B1-%EB%B9%84%EA%B5%90%EC%97%B0%EC%82%B0%EC%9E%90) \ No newline at end of file diff --git a/image/jsRuntime.png b/image/jsRuntime.png new file mode 100644 index 0000000000000000000000000000000000000000..e6ba464a42abd492764d7ad4d2fdbc9dd3c99472 GIT binary patch literal 26101 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 literal 0 HcmV?d00001 From b6d2d4700dc1c25496de3f87dbd23bda56a0f8cb Mon Sep 17 00:00:00 2001 From: yjkwon07 Date: Mon, 27 Apr 2020 02:08:51 +0900 Subject: [PATCH 02/20] =?UTF-8?q?JS=20-=20function=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Modern JS/JS_Function.md | 196 ++++++++++++++++++++++++++++ image/EC.png | Bin 0 -> 5455 bytes image/EC_stack.png | Bin 0 -> 27667 bytes image/function_object_prototype.png | Bin 0 -> 57724 bytes 4 files changed, 196 insertions(+) create mode 100644 Modern JS/JS_Function.md create mode 100644 image/EC.png create mode 100644 image/EC_stack.png create mode 100644 image/function_object_prototype.png diff --git a/Modern JS/JS_Function.md b/Modern JS/JS_Function.md new file mode 100644 index 0000000..31f8eda --- /dev/null +++ b/Modern JS/JS_Function.md @@ -0,0 +1,196 @@ +# JS Function + +- [JS Function](#js-function) + - [함수의 정의](#%ed%95%a8%ec%88%98%ec%9d%98-%ec%a0%95%ec%9d%98) + - [함수 선언 vs 함수 표현식](#%ed%95%a8%ec%88%98-%ec%84%a0%ec%96%b8-vs-%ed%95%a8%ec%88%98-%ed%91%9c%ed%98%84%ec%8b%9d) + - [호이스팅](#%ed%98%b8%ec%9d%b4%ec%8a%a4%ed%8c%85) + - [Function 인자 가변 길이 인수(Arguments 객체)](#function-%ec%9d%b8%ec%9e%90-%ea%b0%80%eb%b3%80-%ea%b8%b8%ec%9d%b4-%ec%9d%b8%ec%88%98arguments-%ea%b0%9d%ec%b2%b4) + - [[ [Prototype] ] 접근자 __ proto __ 프로퍼티](#prototype--%ec%a0%91%ea%b7%bc%ec%9e%90--proto--%ed%94%84%eb%a1%9c%ed%8d%bc%ed%8b%b0) + - [prototype 객체 변경](#prototype-%ea%b0%9d%ec%b2%b4-%eb%b3%80%ea%b2%bd) + - [실행 컨텍스트(Excution Context)](#%ec%8b%a4%ed%96%89-%ec%bb%a8%ed%85%8d%ec%8a%a4%ed%8a%b8excution-context) + + +## 함수의 정의 + +```js + function hello(x,y){return x * y;} // 함수의 정의(함수 선언) + + var hello = function(x,y){return x * y}; // 리터럴(anonymous function) (함수 표현식) + + var hello = new Function("x,y","return x*y"); // Function 생성자(new 연산자) + + var hello = (x,y) => x * y; // 화살표 함수 +``` + +## 함수 선언 vs 함수 표현식 + +- 함수 선언도 함수의 표현식과 같은 형태로 저장하는 방식이 같다. +- 함수명과 함수 참조값을 가진 변수명이 일치하므로 함수명으로 호출되는 듯 보이지만 **사실은 변수명으로 호출된 것이다.** +- 결국 함수 선언도 함수 표현식과 동일하게 **함수 리터럴 방식으로 정의되는 것이다.** + ```js + function hello(x,y){return x * y; } // 함수의 정의(함수 선언) + + // INNER CORER + var hello = function hello(x,y){return x * y; } // 함수의 정의(함수 선언) + ``` +- 함수 표현식에서 함수이름을 정할 수도 있다. 하지만, 해당 함수 이름으로 호출 할 수 없다. **단지 디버깅시 해당 함수를 쉽게 알기 위함.** + ```js + var hello = function world(x,y) {return x * y}; // 리터럴(함수 표현식) + world(2,3); // Error + ``` + +### 호이스팅 + +- ES6의 let, const를 포함하여 모든 선언(var, let, const, function, function*, class)을 호이스팅(Hoisting)한다. +- `호이스팅이란` var 선언문이나 function 선언문 등 모든 선언문이 해당 `Scope의 선두로` 옮겨 동작하는 특성을 말한다. + - 즉, 모든 선언, 할당되기 이전에 참조 가능하다. + +- 여기서 `함수 선언으로` 작업할 경우, **함수 호이스팅이 발생된다.** + - 함수 호이스팅경우 **해당 함수의 객체를 생성하여(VO)** Reference Type으로 해당 **함수 선언에 연결을 한다.** + - 함수 호이스팅으로 선언 이전에 함수를 호출 할 수 있다. + ```js + console.log(hello(2,3)); // 6 + function hello(x,y){ + return x * y; + } + ``` + +- 함수 선언의 경우와는 달리 `함수 표현식의 경우` 함수 호이스팅이 아니라 **변수 호이스팅이 발생한다.** + - 변수 호이스팅경우 선언문의 이름을 **Scope의 선두로 올리고 값을 `undefined로` 부여한다.** + - 즉, 함수의 객체가 생성되지 않았기 때문에 **해당 변수를 함수로 보지않는다.** + ```js + var hello = world(5); // Error + + var world = function(x,y) { + return x * y; + } + ``` + +## Function 인자 가변 길이 인수(Arguments 객체) + +- **Arguments** 객체는 프로퍼티로 `length`와 `callee`를 갖고 있다. + - 해당 **Function 객체에서는** `arguments 프로퍼티` 부여 + - **유사 배열 객체** + - length: 인수 개수 + - callee: 현재 실행되고 있는 함수 참조 +- Argumetns 객체는 인수 목록과 연동되어 **arguments 값을 바꾸면 인수도 바뀐다.** + ```js + (function(x,y){ + arguments[0] = 55; + console.log(x, y); // 55, 2 + })(2,2); + ``` + +## [ [Prototype] ] 접근자 __ proto __ 프로퍼티 + +- `모든 객체는` [ [Prototype] ]이라는 내부 슬롯이 있다. +- [ [Prototype] ] 내부 슬롯은 **Prototype 객체를 가리킨다.** + - 프로토타입 객체란 프로토타입 기반으로 **상속을 구현하기 위해 사용된다.** + - 내부 슬롯을 직접 접근을 못하므로 **`__ proto __ 접근자 프로퍼티로` 접근을 한다.** +- 즉, 프로토타입 객체는 다른 객체에 공유 프로퍼티를 제공하는 객체를 말한다. +- **prototype 프로퍼티는 함수 객체만이 소유하는 프로퍼티이다.** (일반 객체에는 prototype 프로퍼티가 없다.) + - **해당 Object, Function은 리터럴 객체로 간주한다. (리터럴)** + - 만약 new Object()로 할경우 Object는 생성자 함수로 구현되어있기 때문에 Object.__ proto __ === Fucntion.prototype 을 가리키게 된다. + - {}.__ proto __ === Object.prototype + - ![prototype](../image/function_object_prototype.png) + +## prototype 객체 변경 + +- `prototype 타입도` **객체이다.** +- prototype 객체는 **다른 임의의 객체로 변경할 수 있다.** (객체의 상속) +- 프로토타입 객체를 변경하는 시점에 따라 생성된 인스턴스(객체)의 prototype이 가리키는 참조값이 달라진다. + +```js + function Hello(next) { + this.next = next; + } + + var hi = new Hello('World'); + + // 프로토타입 객체의 변경 + Hello.prototype = { what: 'JavaScript' }; // Object로 생성된 객체 Reference 참조 + + var hey = new Hello('World!!!!'); + + console.log(hi.what); // undefined + console.log(hey.what); // 'JavaScript' + + console.log(hi.constructor); // Hello(next) + console.log(hey.constructor); // Object() +``` + +- 프로토타입 객체 변경 후, Hello() 생성자 함수의 Prototype 프로퍼티가 가리키는 프로토타입 객체를 Object 객체로 변경하면서 Hello.prototype.constructor 프로퍼티도 삭제되었다. +- hey.constructor의 값은 프로토타입 체이닝에 의해 Object 생성자 함수가 된다. + +## 실행 컨텍스트(Excution Context) + +- 실행 가능한 코드(Executable Code)를 만나면 그 코드를 평가(Evaluation)하여 실행 문맥(EC)을 만든다. + - **전역 코드** + - **함수 코드** + - eval 코드 + - eval 코드는 lexcal Environment가 아닌 동적 환경에 실행 된다. + +- JS 엔진은 코드를 실행하기 위해 실행에 필요한 정보들을 알고 있어야 한다. + - **변수** (전역변수, 지역변수, 매개변수, 객체의 프로퍼티) + - **함수 선언** + - **변수의 유효범위(Scope)** + - **this** + +- 실행 컨텍스트(EC) 프로퍼티 + - ![EC](./../image/EC.png) + - Variable Object(VO) + - value, parameter, arguments, 함수 선언 + - `실행 컨텍스트에 따라` **가리키는 객체가 달라진다.** + - `Global Enviroment Context` + - 전역 코드 즉, 매개변수가 없는 전역코드를 평가하는 시점에서, VO는 전역객체(Global Object /GO)를 가리킨다. + - 초기 상태의 전역객체는 빌트인 객체와 BOM, DOM이 구현이되어 있다. (구현이 된 후 전역 실행 컨텍스트가 생성) + - 전역 객체는 전역에 선언된 전역 변수와 전역 함수를 프로퍼티로 소유한다. + + - `Funciton Context` + - VO는 활성 객체(Activation Object /AO)를 가리키며 매개변수와 인수들의 정보를 배열의 형태로 담고 있는 객체인 arguments object가 추가 된다. + - Scope + - 스코프는 `식별자를 검색하는 매커니즘이다.` + - [Variable Object + All parent(VO)] + - 리스트 형식으로 현재 실행 컨텍스트의 활성 객체를 선두로 시작하여 상위 컨텍스트의 활성 객체를 가리키며 마지막으로 GO를 가리킨다. + - 함수 프로퍼티인 `[ [Scope] ]`로 참조한다. + - this + - context object (함수를 실행시킨 객체, 전역 코드는 window(브라우저)로 부여한다.) + +- 실행 컨텍스트 실행(처리) 순서 + 1. 스코프 체인의 생성과 초기화 + 2. Variable Instantiation(변수 객체화) 실행 + - Variable Instantiation은 Variable Object에 프로퍼티와 값을 추가하는 것을 의미한다. + + - 프로퍼티 값 설정 순서 + 1. (`Function Code인 경우)` `매개변수(parameter)가` Variable Object의 프로퍼티 `name`으로, `인수(argument)가` `value`로 설정된다. + 2. 대상 코드 내의 `함수 선언`(함수 표현식 제외)을 대상으로 `함수명이` Variable Object의 `name`으로, 생성된 `함수 객체가` `value`로 설정된다.**(함수 호이스팅)** + 3. 대상 코드 내의 `변수 선언을` 대상으로` 변수명이` Variable Object의 `name`으로, `undefined가` `value`로 설정된다.(변수 호이스팅) + + - 변수(프로퍼티) 선언 처리 + 1. 선언 단계(Declaration phase) + - 변수 객체(Variable Object)에 변수를 등록한다. 이 변수 객체는 스코프가 참조할 수 있는 대상이 된다. + 2. 초기화 단계(Initialization phase) + - 변수 객체(Variable Object)에 등록된 변수를 메모리에 할당한다. 이 단계에서 변수는 `undefined로` 초기화된다. + 3. 할당 단계(Assignment phase) + - `EC가 구성된 후` 전체 코드를 순차적으로 실행될 때 시점이다. + - `undefined로` 초기화된 변수에 실제값을 할당한다. + 3. this value 결정 + +- 실행 가능한 함수 code + ```js + var a = 'testA'; + + function outterA() { + var b = 'testB'; + + function nestedB() { + var c = 'testC'; + console.log(a,b,c); + } + nestedB(); + } + + outterA(); + ``` + + - ![EC, GO, AO](./../image/EC_stack.png) \ No newline at end of file diff --git a/image/EC.png b/image/EC.png new file mode 100644 index 0000000000000000000000000000000000000000..fa364ffaad2dc996b2b3f6d7a51d923bbe3f928d GIT binary patch literal 5455 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 z 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℘YN|67xUAx@IrvU9o1WZc|2XjJ=BBCa!(k{ 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 z
    U2O}3kf_@ImN|X=^F=r9vRor^BPD{-iGMu&k3F|ND2kE*pW*L`b_~XgFrR(4p zIap|pVHC53PmTtEg&BBP;zmI)7SksR>n%DPPbxe7{OLk!mnN9J zD}CH@iq{1Ujl?_F#dy8>pnqaC*3+^kaMt7Tg*6VeO*J*no3uuFGemohc{P9C7Qy6> z<`goTOo?ei0mcy3rXi|1rp0^9skk0P`oj54&9Tb3J5{9$>7EwPN@}_#!-`E&k4Z8P zPdw~D^X~FlPzlP2t$Al%m6Ec zN{_#X<3*E#biCkr9^mrm%GtS!&Cl`fwwBvB?k74n=yRm@+nkDJsq1<23*I7KOfCla zF6Bily!!s7n(XvHsd~q?wB-C3=G>ehh%l%E3z*$k>#^@4ZXR1b+??b-d0EWHmE$TC z?`GS(-d!`PHF3DTv$NAG%$l9&J^1+I*Y~`+tLtx7Pd`!dwBJ%8wDQG)%5vZ|y2^vk zUm@;%4Bdb1!HQjkVPa<0L&3W96ZuDgBB2+BdZyI78ER1>mlpO_>Z{caT}m?tOnp zy2J+ECPa&Wes3{vK=nBs7u#Trw`&XG;VTg`F+VM;KBRBIc0$Q#*Vp5cC9w;-HQ!Xk zfn9MbgeZ)-1hzGp`RysOIGhtABS0tESG+BmjAhXZfNY~VOhJG2L<$J>7o_H3fNOFcKwKB61Q{ Date: Sat, 9 May 2020 15:02:11 +0900 Subject: [PATCH 03/20] Statement vs Expressions add --- Modern JS/JS_start.md | 56 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/Modern JS/JS_start.md b/Modern JS/JS_start.md index ed9b9d4..7c3dc31 100644 --- a/Modern JS/JS_start.md +++ b/Modern JS/JS_start.md @@ -1,6 +1,7 @@ # JavaScript Start - [JavaScript Start](#javascript-start) - [Spec](#spec) + - [Statement vs Expressions](#statement-vs-expressions) - [Data type](#data-type) - [typeof 연산자의 반환 값](#typeof-%ec%97%b0%ec%82%b0%ec%9e%90%ec%9d%98-%eb%b0%98%ed%99%98-%ea%b0%92) - [산술 연산](#%ec%82%b0%ec%88%a0-%ec%97%b0%ec%82%b0) @@ -31,6 +32,44 @@ 5. 클로저 지원 - 내장 함수(Nested Function)를 지원 하여 **하나의 인스턴스화, 은닉이 가능** +## Statement vs Expressions + +- 표현식(Expressions) + - 표현식은 값 하나로 귀결되는 JS 코드 조각(snippet) 이다. + ```js + 2 + 2 * 3 / 2 + + (Math.random() * (100-20)) + 20 + + functionCall() + + window.history ? useHistory() : noHistoryFallback() + + 1+1, 2+2, 3+3 + + declaredVariable + + true && functionCall() + + true && declaredVariable + ``` + +- 문장(Statements) + - 문장은 값이 들어와야 할 곳에 들어갈 수 없다. (in JS) + - 함수의 인자로도, 대입 연산의 값으로도, 연산자의 피연산자로도 사용될 수 없다. + ```js + 1. if + 2. if-else + 3. while + 4. do-while + 5. for + 6. switch + 7. for-in + 8. with (deprecated) + 9. debugger + 10. variable declaration + ``` + ## Data type - 원시타입 **(Primitive Type)**: 자바스크립트에서 객체가 **(Reference Type)** 아닌 것들이며 값 그 자체로 저장된다. @@ -77,14 +116,25 @@ |함수 외의 객체|[1,2,3], new String("값"), new Number(12)|"object"| |함수|function(){}|"function"| +- **객체의 이름까지 알고 싶을 때** `toString() 함수를` 이용하여 해당 타입을 확인할 수 있다. + +```js + function getType(target) { + return Object.prototype.toString.call(target).slice(8, -1); + } +``` + ### 산술 연산 - String 타입의 '+' 연산 방식을 제외하고 `대부분의 Data Type의` **'valueOf()'(우선순위 높음) 혹은 toString()으로 리턴된 값으로 연산을 한다.** +- null은 0, undefined는 NaN으로 강제 형변환되어 연산한다. +- `{} (block statements)` 에서 무엇이 반환되던지 **그것은 암묵적으로 0로 강제 형변환되어** `피연산자로` 사용된다. ```js null.valueOf(); // Error null + 1; // 1 undefined + 1 // NaN NaN + "stirng" // "NaNstring" + {3} + 1 // 1 ``` ### ==, === 비교 @@ -104,7 +154,7 @@ NaN == undefined // 어떠한 값과도 동일하지 않다 false NaN == NaN // 어떠한 값과도 동일하지 않다 false ``` -- '===' 비교는 타입이일치 하진 않으면, return false, 타입이 일치할 때 값을 비교를 한다. (Best Code) +- '===' 비교는 `타입이일치 하진 않으면` **return false**, 타입이 `일치할 때` **값을 비교를 한다.** (Best Code) ## function @@ -172,4 +222,6 @@ - [자바스크립트 개발자라면 알아야 할 33가지 개념 #2 자바스크립트의 원시 타입(Primitive Type) (번역)](https://velog.io/@jakeseo_me/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%9D%BC%EB%A9%B4-%EC%95%8C%EC%95%84%EC%95%BC-%ED%95%A0-33%EA%B0%80%EC%A7%80-%EA%B0%9C%EB%85%90-2-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98-%EC%9B%90%EC%8B%9C-%ED%83%80%EC%9E%85Primitive-Type-%EB%B2%88%EC%97%AD) - [자바스크립트 개발자라면 알아야 할 33가지 개념 #3 값(value) vs 참조(reference) (번역)](https://velog.io/@jakeseo_me/2019-04-01-1904-%EC%9E%91%EC%84%B1%EB%90%A8-2bjty7tuuf) - [자바스크립트 개발자라면 알아야 할 33가지 개념 #4 암묵적 타입 변환(implicit coercion) (번역)](https://velog.io/@jakeseo_me/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%9D%BC%EB%A9%B4-%EC%95%8C%EC%95%84%EC%95%BC-%ED%95%A0-33%EA%B0%80%EC%A7%80-%EA%B0%9C%EB%85%90-4-%EC%95%94%EB%AC%B5%EC%A0%81-%ED%83%80%EC%9E%85-%EB%B3%80%ED%99%98-%EB%B2%88%EC%97%AD) -- [자바스크립트 개발자라면 알아야 할 33가지 개념 #5 == vs === 3분만에 배우기 (번역)](https://velog.io/@jakeseo_me/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%9D%BC%EB%A9%B4-%EC%95%8C%EC%95%84%EC%95%BC-%ED%95%A0-33%EA%B0%80%EC%A7%80-%EA%B0%9C%EB%85%90-5-vs-3%EB%B6%84%EB%A7%8C%EC%97%90-%EB%B0%B0%EC%9A%B0%EA%B8%B0-%EB%B2%88%EC%97%AD#-%ED%91%9C%EC%8B%9C-2%EA%B0%9C%EC%9D%98-%EB%8F%99%EB%93%B1-%EB%B9%84%EA%B5%90%EC%97%B0%EC%82%B0%EC%9E%90) \ No newline at end of file +- [자바스크립트 개발자라면 알아야 할 33가지 개념 #5 == vs === 3분만에 배우기 (번역)](https://velog.io/@jakeseo_me/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%9D%BC%EB%A9%B4-%EC%95%8C%EC%95%84%EC%95%BC-%ED%95%A0-33%EA%B0%80%EC%A7%80-%EA%B0%9C%EB%85%90-5-vs-3%EB%B6%84%EB%A7%8C%EC%97%90-%EB%B0%B0%EC%9A%B0%EA%B8%B0-%EB%B2%88%EC%97%AD#-%ED%91%9C%EC%8B%9C-2%EA%B0%9C%EC%9D%98-%EB%8F%99%EB%93%B1-%EB%B9%84%EA%B5%90%EC%97%B0%EC%82%B0%EC%9E%90) +- [자바스크립트 개발자라면 알아야 할 33가지 개념 #6 함수와 블록 스코프 (번역)](https://velog.io/@jakeseo_me/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%9D%BC%EB%A9%B4-%EC%95%8C%EC%95%84%EC%95%BC-%ED%95%A0-33%EA%B0%80%EC%A7%80-%EA%B0%9C%EB%85%90-6-%ED%95%A8%EC%88%98%EC%99%80-%EB%B8%94%EB%A1%9D-%EC%8A%A4%EC%BD%94%ED%94%84-%EB%B2%88%EC%97%AD-dijuhrub1x) +- [자바스크립트 개발자라면 알아야 할 33가지 개념 #7 표현식(Expression)과 문장(Statement) (번역)](https://velog.io/@jakeseo_me/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%9D%BC%EB%A9%B4-%EC%95%8C%EC%95%84%EC%95%BC-%ED%95%A0-33%EA%B0%80%EC%A7%80-%EA%B0%9C%EB%85%90-7-%ED%91%9C%ED%98%84%EC%8B%9D%EA%B3%BC-%EB%AC%B8Statement-%EB%B2%88%EC%97%AD-2xjuhvbal7#%ED%91%9C%ED%98%84%EC%8B%9D%EC%9D%80-%EA%B0%92%EC%9D%84-%EB%A7%8C%EB%93%A4%EC%96%B4%EB%82%B8%EB%8B%A4) \ No newline at end of file From aa729042f99bc8f3a0436d33ef1c99ba0f8c4524 Mon Sep 17 00:00:00 2001 From: yjkwon07 Date: Sat, 9 May 2020 15:30:57 +0900 Subject: [PATCH 04/20] =?UTF-8?q?=EC=98=A4=ED=83=88=EC=9E=90=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Modern JS/JS_Engine.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Modern JS/JS_Engine.md b/Modern JS/JS_Engine.md index 06e204e..53121e3 100644 --- a/Modern JS/JS_Engine.md +++ b/Modern JS/JS_Engine.md @@ -38,7 +38,7 @@ - Queue - Microtask Queue (1순위 stack 반영) (ex. then(...) func. of promise func. ) - - Animation frames (1순위 stack 반영) (ex. UI render or repaint) + - Animation frames (2순위 stack 반영) (ex. UI render or repaint) - Task Queue (3순위 stack 반영) - Web API에서 실행 완료후 CallBack 함수를 Queue에 push 한다. @@ -108,4 +108,5 @@ - [MDN: JS EventLoop](https://developer.mozilla.org/ko/docs/Web/JavaScript/EventLoop) - [자바스크립트와 이벤트 루프](https://meetup.toast.com/posts/89) - [자바스크립트 개발자라면 알아야 할 33가지 개념 #1 콜스택 (번역)](https://velog.io/@jakeseo_me/2019-03-15-2303-%EC%9E%91%EC%84%B1%EB%90%A8-rmjta5a3xh) +- [자바스크립트 개발자라면 알아야 할 33가지 개념 #11 V8 엔진이 JS를 기계 코드로 바꾸는 방법](https://velog.io/@jakeseo_me/2019-04-30-1204-%EC%9E%91%EC%84%B1%EB%90%A8-fxjv37gc4s) - [YouTube: What the heck is event loop? | Philip Roberts | JSConf EU](https://youtu.be/8aGhZQkoFbQ) \ No newline at end of file From 2439207899ebcc19ed0f912a932999718fb1d73b Mon Sep 17 00:00:00 2001 From: yjkwon07 Date: Wed, 20 May 2020 14:38:01 +0900 Subject: [PATCH 05/20] update, start, Function --- Modern JS/JS_Function.md | 66 ++++++++++++++------------ Modern JS/JS_start.md | 100 ++++++++++++++++++--------------------- 2 files changed, 83 insertions(+), 83 deletions(-) diff --git a/Modern JS/JS_Function.md b/Modern JS/JS_Function.md index 31f8eda..040dbff 100644 --- a/Modern JS/JS_Function.md +++ b/Modern JS/JS_Function.md @@ -8,7 +8,9 @@ - [[ [Prototype] ] 접근자 __ proto __ 프로퍼티](#prototype--%ec%a0%91%ea%b7%bc%ec%9e%90--proto--%ed%94%84%eb%a1%9c%ed%8d%bc%ed%8b%b0) - [prototype 객체 변경](#prototype-%ea%b0%9d%ec%b2%b4-%eb%b3%80%ea%b2%bd) - [실행 컨텍스트(Excution Context)](#%ec%8b%a4%ed%96%89-%ec%bb%a8%ed%85%8d%ec%8a%a4%ed%8a%b8excution-context) - + - [실행 컨텍스트(EC) 프로퍼티](#%ec%8b%a4%ed%96%89-%ec%bb%a8%ed%85%8d%ec%8a%a4%ed%8a%b8ec-%ed%94%84%eb%a1%9c%ed%8d%bc%ed%8b%b0) + - [실행 컨텍스트 실행(처리) 순서](#%ec%8b%a4%ed%96%89-%ec%bb%a8%ed%85%8d%ec%8a%a4%ed%8a%b8-%ec%8b%a4%ed%96%89%ec%b2%98%eb%a6%ac-%ec%88%9c%ec%84%9c) + - [Ex. 실행 가능한 함수 [code]](#ex-%ec%8b%a4%ed%96%89-%ea%b0%80%eb%8a%a5%ed%95%9c-%ed%95%a8%ec%88%98-code) ## 함수의 정의 @@ -31,7 +33,7 @@ function hello(x,y){return x * y; } // 함수의 정의(함수 선언) // INNER CORER - var hello = function hello(x,y){return x * y; } // 함수의 정의(함수 선언) + var hello = function hello(x,y){return x * y; } // 함수의 정의(함수 표현식 => 변수 선언) ``` - 함수 표현식에서 함수이름을 정할 수도 있다. 하지만, 해당 함수 이름으로 호출 할 수 없다. **단지 디버깅시 해당 함수를 쉽게 알기 위함.** ```js @@ -90,8 +92,8 @@ - 즉, 프로토타입 객체는 다른 객체에 공유 프로퍼티를 제공하는 객체를 말한다. - **prototype 프로퍼티는 함수 객체만이 소유하는 프로퍼티이다.** (일반 객체에는 prototype 프로퍼티가 없다.) - **해당 Object, Function은 리터럴 객체로 간주한다. (리터럴)** - - 만약 new Object()로 할경우 Object는 생성자 함수로 구현되어있기 때문에 Object.__ proto __ === Fucntion.prototype 을 가리키게 된다. - - {}.__ proto __ === Object.prototype + - 만약 new Object()로 할경우 Object는 생성자 함수로 구현되어있기 때문에 Object.__ proto __ === Fucntion.prototype 을 가리키게 된다. ({}.__ proto __ === Object.prototype) + - ![prototype](../image/function_object_prototype.png) ## prototype 객체 변경 @@ -128,7 +130,7 @@ - **전역 코드** - **함수 코드** - eval 코드 - - eval 코드는 lexcal Environment가 아닌 동적 환경에 실행 된다. + - eval 코드는 lexical Environment가 아닌 동적 환경에 실행 된다. - JS 엔진은 코드를 실행하기 위해 실행에 필요한 정보들을 알고 있어야 한다. - **변수** (전역변수, 지역변수, 매개변수, 객체의 프로퍼티) @@ -136,35 +138,38 @@ - **변수의 유효범위(Scope)** - **this** -- 실행 컨텍스트(EC) 프로퍼티 - - ![EC](./../image/EC.png) - - Variable Object(VO) - - value, parameter, arguments, 함수 선언 - - `실행 컨텍스트에 따라` **가리키는 객체가 달라진다.** - - `Global Enviroment Context` - - 전역 코드 즉, 매개변수가 없는 전역코드를 평가하는 시점에서, VO는 전역객체(Global Object /GO)를 가리킨다. - - 초기 상태의 전역객체는 빌트인 객체와 BOM, DOM이 구현이되어 있다. (구현이 된 후 전역 실행 컨텍스트가 생성) - - 전역 객체는 전역에 선언된 전역 변수와 전역 함수를 프로퍼티로 소유한다. - - - `Funciton Context` - - VO는 활성 객체(Activation Object /AO)를 가리키며 매개변수와 인수들의 정보를 배열의 형태로 담고 있는 객체인 arguments object가 추가 된다. - - Scope - - 스코프는 `식별자를 검색하는 매커니즘이다.` - - [Variable Object + All parent(VO)] - - 리스트 형식으로 현재 실행 컨텍스트의 활성 객체를 선두로 시작하여 상위 컨텍스트의 활성 객체를 가리키며 마지막으로 GO를 가리킨다. - - 함수 프로퍼티인 `[ [Scope] ]`로 참조한다. - - this - - context object (함수를 실행시킨 객체, 전역 코드는 window(브라우저)로 부여한다.) - -- 실행 컨텍스트 실행(처리) 순서 +### 실행 컨텍스트(EC) 프로퍼티 + +- ![EC](./../image/EC.png) + +- Variable Object(VO) + - value, parameter, arguments, 함수 선언 + - `실행 컨텍스트에 따라` **가리키는 객체가 달라진다.** + - `Global Enviroment Context` + - 전역 코드 즉, 매개변수가 없는 전역코드를 평가하는 시점에서, VO는 전역객체(Global Object /GO)를 가리킨다. + - 초기 상태의 전역객체는 빌트인 객체와 BOM, DOM이 구현이되어 있다. (구현이 된 후 전역 실행 컨텍스트가 생성) + - 전역 객체는 전역에 선언된 전역 변수와 전역 함수를 프로퍼티로 소유한다. + + - `Funciton Context` + - VO는 활성 객체(Activation Object /AO)를 가리키며 매개변수와 인수들의 정보를 배열의 형태로 담고 있는 객체인 arguments object가 추가 된다. +- Scope + - 스코프는 `식별자를 검색하는 매커니즘이다.` + - [Variable Object + All parent(VO)] + - 리스트 형식으로 현재 실행 컨텍스트의 활성 객체를 선두로 시작하여 상위 컨텍스트의 활성 객체를 가리키며 마지막으로 GO를 가리킨다. + - 함수 프로퍼티인 `[ [Scope] ]`로 참조한다. +- this + - context object : 함수를 실행시킨 객체, 전역 코드는 window(브라우저)로 부여한다. + +### 실행 컨텍스트 실행(처리) 순서 + 1. 스코프 체인의 생성과 초기화 2. Variable Instantiation(변수 객체화) 실행 - Variable Instantiation은 Variable Object에 프로퍼티와 값을 추가하는 것을 의미한다. - 프로퍼티 값 설정 순서 1. (`Function Code인 경우)` `매개변수(parameter)가` Variable Object의 프로퍼티 `name`으로, `인수(argument)가` `value`로 설정된다. - 2. 대상 코드 내의 `함수 선언`(함수 표현식 제외)을 대상으로 `함수명이` Variable Object의 `name`으로, 생성된 `함수 객체가` `value`로 설정된다.**(함수 호이스팅)** - 3. 대상 코드 내의 `변수 선언을` 대상으로` 변수명이` Variable Object의 `name`으로, `undefined가` `value`로 설정된다.(변수 호이스팅) + 2. 대상 코드 내의 `함수 선언`(함수 표현식 제외)을 대상으로 `함수명이` Variable Object의 `name`으로, 생성된 `함수 객체가` `value`로 설정된다. **(함수 호이스팅)** + 3. 대상 코드 내의 `변수 선언을` 대상으로` 변수명이` Variable Object의 `name`으로, `undefined가` `value`로 설정된다. (변수 호이스팅) - 변수(프로퍼티) 선언 처리 1. 선언 단계(Declaration phase) @@ -176,7 +181,8 @@ - `undefined로` 초기화된 변수에 실제값을 할당한다. 3. this value 결정 -- 실행 가능한 함수 code +### Ex. 실행 가능한 함수 [code] + ```js var a = 'testA'; @@ -193,4 +199,4 @@ outterA(); ``` - - ![EC, GO, AO](./../image/EC_stack.png) \ No newline at end of file +![EC, GO, AO](./../image/EC_stack.png) \ No newline at end of file diff --git a/Modern JS/JS_start.md b/Modern JS/JS_start.md index 7c3dc31..4857bf5 100644 --- a/Modern JS/JS_start.md +++ b/Modern JS/JS_start.md @@ -1,25 +1,26 @@ # JavaScript Start - [JavaScript Start](#javascript-start) - - [Spec](#spec) - - [Statement vs Expressions](#statement-vs-expressions) - - [Data type](#data-type) - - [typeof 연산자의 반환 값](#typeof-%ec%97%b0%ec%82%b0%ec%9e%90%ec%9d%98-%eb%b0%98%ed%99%98-%ea%b0%92) - - [산술 연산](#%ec%82%b0%ec%88%a0-%ec%97%b0%ec%82%b0) - - [==, === 비교](#%eb%b9%84%ea%b5%90) - - [function](#function) - - [object(instance)](#objectinstance) - - [생성자](#%ec%83%9d%ec%84%b1%ec%9e%90) - - [this](#this) - - [array](#array) + - [1. Spec](#1-spec) + - [2. Statement vs Expressions](#2-statement-vs-expressions) + - [3. Data type](#3-data-type) + - [3-1. typeof 연산자의 반환 값](#3-1-typeof-%ec%97%b0%ec%82%b0%ec%9e%90%ec%9d%98-%eb%b0%98%ed%99%98-%ea%b0%92) + - [3-2. 산술 연산](#3-2-%ec%82%b0%ec%88%a0-%ec%97%b0%ec%82%b0) + - [3-3. ==, === 비교](#3-3---%eb%b9%84%ea%b5%90) + - [4. function](#4-function) + - [5. object(instance)](#5-objectinstance) + - [5-1. 생성자](#5-1-%ec%83%9d%ec%84%b1%ec%9e%90) + - [5-2. this](#5-2-this) + - [6. array](#6-array) - [Reference](#reference) -## Spec +## 1. Spec 1. 인터프리터 언어 - **JIT 컴파일러가** 내장되어 실행속도가 빨라짐 2. 동적 프로토타입 기반 객체 지향 언어 - - JAVA, C++ 에서, 프로그램 실행 중 클래스를 인스턴스화 하여 나온 객체들은 메서드 혹은 멤버변수를 수정할 수 없지만, **JS에서는 프로토 타입 상속으로 인해 변경 할 수 있다.** + - JAVA, C++ 에서, 프로그램 실행 중 클래스를 인스턴스화 하여 나온 객체들은 메서드 혹은 멤버변수를 수정할 수 없지만, + - **JS에서는 프로토 타입 상속으로 인해 변경 할 수 있다.** 3. 동적 타입 언어 - **특정 변수 타입이 없다.** @@ -32,7 +33,7 @@ 5. 클로저 지원 - 내장 함수(Nested Function)를 지원 하여 **하나의 인스턴스화, 은닉이 가능** -## Statement vs Expressions +## 2. Statement vs Expressions - 표현식(Expressions) - 표현식은 값 하나로 귀결되는 JS 코드 조각(snippet) 이다. @@ -70,10 +71,10 @@ 10. variable declaration ``` -## Data type +## 3. Data type - 원시타입 **(Primitive Type)**: 자바스크립트에서 객체가 **(Reference Type)** 아닌 것들이며 값 그 자체로 저장된다. - - String, Number, Boolean 같은 경우 객체가 존재 하지만, 원시타입의 리터럴로 정의하여 프로퍼티를 사용할경우 **Wrapper Object**로 자동 변환 되어 프로퍼티를 리턴한다. (Auto Boxing) + - String, Number, Boolean 같은 경우 객체가 존재 하지만, 원시타입의 리터럴로 정의하여 프로퍼티를 사용할경우 **Wrapper Object**로 자동 변환 되어 프로퍼티를 리턴한다. **(Auto Boxing)** ```js 1.toString(); // "1" new Number(1).toString(); // Wrapper Object 리턴후 property 값 리턴 내부에서 이루어진 평가이기 때문에 GC로 없어짐 @@ -86,24 +87,18 @@ - 하지만, `new 연산자로` 객체를 만들경우 Reference Type Objcet로 리턴되어 나와 **Primitive Type을 잃게 된다.** - (원시 값을 갖고 싶으면, new String("값").valueOf() 사용 해야한다.) -1. Boolean +- Boolean +- Null + - 산술 연산자에서는 '0'으로 평가 +- Undefined + - 산술 연산자에서는 'NaN'으로 평가 +- Number (IEEE754로 규정된 64-bit 부동소수점, 자바스크립트에는 정수 타입은 존재하지 않다.) + - 부호(1 bit), 지수(11 bit), 가수(52 bit) +- String + - '+' 연산 외 '*,/,%...' 연산자는 String 타입을 Number(String 타입)으로 연산을 하게된다. +- Symbol (ECMAScript 6에 추가됨) -2. Null - - 산술 연산자에서는 '0'으로 평가 - -3. Undefined - - 산술 연산자에서는 'NaN'으로 평가 - -4. Number (IEEE754로 규정된 64-bit 부동소수점, 자바스크립트에는 정수 타입은 존재하지 않다.) - - 부호(1 bit), 지수(11 bit), 가수(52 bit) - -5. String - - 산술 연산자에서 '+' 연산 시 String 제외한 객체들(Primitve 포함)을 `'toString()'`, 혹은 `'valueOf()'(우선순위 높음)` 으로 반환된 값이랑 연산된다. - - 그외 '*,/,%...' 연산자는 String 타입을 Number(String 타입)으로 연산을 하게된다. - -6. Symbol (ECMAScript 6에 추가됨) - -### typeof 연산자의 반환 값 +### 3-1. typeof 연산자의 반환 값 | data | ex | return | |:-------|:-------|:-------| @@ -117,27 +112,26 @@ |함수|function(){}|"function"| - **객체의 이름까지 알고 싶을 때** `toString() 함수를` 이용하여 해당 타입을 확인할 수 있다. + ```js + function getType(target) { + return Object.prototype.toString.call(target).slice(8, -1); + } + ``` -```js - function getType(target) { - return Object.prototype.toString.call(target).slice(8, -1); - } -``` - -### 산술 연산 +### 3-2. 산술 연산 - String 타입의 '+' 연산 방식을 제외하고 `대부분의 Data Type의` **'valueOf()'(우선순위 높음) 혹은 toString()으로 리턴된 값으로 연산을 한다.** - null은 0, undefined는 NaN으로 강제 형변환되어 연산한다. - `{} (block statements)` 에서 무엇이 반환되던지 **그것은 암묵적으로 0로 강제 형변환되어** `피연산자로` 사용된다. -```js - null.valueOf(); // Error - null + 1; // 1 - undefined + 1 // NaN - NaN + "stirng" // "NaNstring" - {3} + 1 // 1 -``` + ```js + null.valueOf(); // Error + null + 1; // 1 + undefined + 1 // NaN + NaN + "stirng" // "NaNstring" + {3} + 1 // 1 + ``` -### ==, === 비교 +### 3-3. ==, === 비교 - '==' 비교는 타입이 일치 하지 않을 때, 강제 타입으로 변환시켜 비교하게 된다. ```js @@ -156,7 +150,7 @@ ``` - '===' 비교는 `타입이일치 하진 않으면` **return false**, 타입이 `일치할 때` **값을 비교를 한다.** (Best Code) -## function +## 4. function - parameter(인자) - 유효범위는 지역함수 이며, 프로그램 실행하면서 필요한 변수 값 @@ -175,7 +169,7 @@ - **JS에서는 함수가 객체이다.** - 함수 선언문으로 함수를 선언하면 내부적으로는 그 함수 이름을 변수 이름으로 한 변수와 **함수 객체가 만들어지고,** 함수 객체의 참조가 저장 된다. -## object(instance) +## 5. object(instance) - **연관배열(associative array)** 또는 **맵(map),** **딕셔너리(Dictionary)** 라는 데이터 타입이 객체에 해당한다. - key, value 쌍으로 구성되어 있으며, key를 `해당하는(this)` 객체의 프로퍼티로 명한다. @@ -194,7 +188,7 @@ 객체 생성자['propertyName(Method)'] = function(){ console.log(this.propertyName) }; ``` -### 생성자 +### 5-1. 생성자 - 앞에 예제 처럼 `new 연산자로` 객체를 생성시킨 함수를 생성자라고 한다. - 인스턴스는 **실체라는** 뜻이 있다. @@ -204,12 +198,12 @@ - 그래서, 생성자로 생성한 객체는 엄밀히 말해 인스턴스가 아니다. - 하지만, 생성자가 클래스처럼 객체를 생성하는 역할을 담당하고 있어 **생성자로 생성한 객체도 인스턴스라고 부르는것이 관례이다.** -### this +### 5-2. this - 함수가 속해있는 객체를 가리키는 변수이다. - 함수를 어떻게 생성하냐에 따라서 달라질 수 있지만, 맥락에서는 function을 가지고있는 **객체 생성자(value Name), 객체 리터럴(value Name)** 를 말한다. -## array +## 6. array - 앞서 말한(Data type)에서도 원시 타입 이외는 모두 객체 참조이므로 array도 Array객체로 만들어진 **객체** 이다. - 즉, 배열 넘버링(index)이 key값으로 저장된것이다. From 2166f730005108ab9efcf53281272b80b13d8bb0 Mon Sep 17 00:00:00 2001 From: yjkwon07 Date: Sun, 28 Jun 2020 20:40:22 +0900 Subject: [PATCH 06/20] PAGE [U] - JS Start - ES2015 - ES2018 --- ...4\354\236\221\355\225\230\352\270\260.txt" | 9 - ES2015(ES6)/10. Template/README.md | 70 ----- ES2015(ES6)/11. function/README.md | 270 ------------------ ES2015(ES6)/13. module/test.js | 8 - ES2015(ES6)/14. Proxy/interception.js | 71 ----- ES2015(ES6)/3. Array/README.md | 252 ---------------- .../es6-1-practice.js" | 39 --- .../4. \354\213\244\354\212\2651/index.html" | 21 -- ES2015(ES6)/5. Object/README.md | 83 ------ ES2015(ES6)/6. Destructuring/README.md | 139 --------- ES2015(ES6)/7. Set&WeakSet/README.md | 74 ----- ES2015(ES6)/8. Map & WeakMap/README.md | 107 ------- .../9. \354\213\244\354\212\2652/lotto.js" | 33 --- ...34\355\232\214\355\225\230\352\270\260.js" | 0 ...4\354\235\230 \353\263\265\354\202\254.js" | 0 ...0\354\247\200 \355\231\234\354\232\251.js" | 0 ...4 \353\247\214\353\223\244\352\270\260.js" | 0 ES2015(ES6)/Array/README.md | 255 +++++++++++++++++ .../1. Destructuring Array.js | 0 .../2. Destructuring Object.js | 0 ...4\232\251 JSON\355\214\214\354\213\261.js" | 0 ...35\354\262\264\354\240\204\353\213\254.js" | 0 ES2015(ES6)/Destructuring/README.md | 143 ++++++++++ .../index.html | 0 ...rrow function \355\231\234\354\232\251.js" | 0 ...rrow function\354\235\230 this context.js" | 0 .../3. function default parameters.js | 0 .../4. rest paramaters.js | 0 ES2015(ES6)/Function/README.md | 255 +++++++++++++++++ .../{10. Template => Function}/index.css | 0 .../{11. function => Function}/index.html | 0 ...00\354\236\245\355\225\230\352\270\260.js" | 0 ...64\355\230\270\355\225\230\352\270\260.js" | 0 ES2015(ES6)/Map & WeakMap/README.md | 103 +++++++ .../{13. module => Module}/default_module.js | 0 ES2015(ES6)/{13. module => Module}/index.html | 2 +- .../{13. module => Module}/module_test.js | 0 ES2015(ES6)/Module/test.js | 8 + ...35\354\204\261\355\225\230\352\270\260.js" | 0 ES2015(ES6)/Object/README.md | 84 ++++++ ...35\354\262\264\354\203\235\354\204\261.js" | 0 ...64\353\247\214\353\223\244\352\270\260.js" | 0 ...64\353\247\214\353\223\244\352\270\260.js" | 0 ...4 \353\247\214\353\223\244\352\270\260.js" | 0 ...35\354\204\261\355\225\230\352\270\260.js" | 0 .../Object2/README.md | 0 ES2015(ES6)/Proxy/interception.js | 71 +++++ ES2015(ES6)/{1. Scope => Scope}/2. let.js | 0 .../Scope/3. let\352\263\274 closure.js" | 0 ...0 \354\247\200\355\202\244\352\270\260.js" | 0 ...54\204\261\352\263\274 immutable array.js" | 0 ES2015(ES6)/{1. Scope => Scope}/README.md | 73 ++--- ...64\353\247\214\353\223\244\352\270\260.js" | 0 ...00\354\236\245\355\225\230\352\270\260.js" | 0 ES2015(ES6)/Set&WeakSet/README.md | 70 +++++ ...24\354\204\234\353\223\234\353\223\244.js" | 0 ES2015(ES6)/{2. String => String}/README.md | 0 .../1. Template\354\262\230\353\246\254.js" | 0 .../2. Tagged Template literals.js | 0 ES2015(ES6)/Template/README.md | 69 +++++ .../{11. function => Template}/index.css | 0 .../{10. Template => Template}/index.html | 0 ...2\244(Promise)\353\271\204\352\265\220.js" | 164 ++++++----- ES2018/8.PromiseAPI.js | 29 +- ES2018/9.async&await.js | 19 +- Modern JS/Function, Class (this).md | 1 + Modern JS/JS_Function.md | 20 +- Modern JS/JS_Object.md | 31 ++ Modern JS/JS_start.md | 39 ++- README.md | 171 ++++------- 70 files changed, 1329 insertions(+), 1454 deletions(-) delete mode 100644 "ES2015(ES6)/1. Scope/1. ES2015(ES6) \354\213\234\354\236\221\355\225\230\352\270\260.txt" delete mode 100644 ES2015(ES6)/10. Template/README.md delete mode 100644 ES2015(ES6)/11. function/README.md delete mode 100644 ES2015(ES6)/13. module/test.js delete mode 100644 ES2015(ES6)/14. Proxy/interception.js delete mode 100644 ES2015(ES6)/3. Array/README.md delete mode 100644 "ES2015(ES6)/4. \354\213\244\354\212\2651/es6-1-practice.js" delete mode 100644 "ES2015(ES6)/4. \354\213\244\354\212\2651/index.html" delete mode 100644 ES2015(ES6)/5. Object/README.md delete mode 100644 ES2015(ES6)/6. Destructuring/README.md delete mode 100644 ES2015(ES6)/7. Set&WeakSet/README.md delete mode 100644 ES2015(ES6)/8. Map & WeakMap/README.md delete mode 100644 "ES2015(ES6)/9. \354\213\244\354\212\2652/lotto.js" rename "ES2015(ES6)/3. Array/1. for of - \354\210\234\355\232\214\355\225\230\352\270\260.js" => "ES2015(ES6)/Array/1. for of - \354\210\234\355\232\214\355\225\230\352\270\260.js" (100%) rename "ES2015(ES6)/3. Array/2. spread operator - \353\260\260\354\227\264\354\235\230 \353\263\265\354\202\254.js" => "ES2015(ES6)/Array/2. spread operator - \353\260\260\354\227\264\354\235\230 \353\263\265\354\202\254.js" (100%) rename "ES2015(ES6)/3. Array/3. spread operator - \353\252\207\352\260\200\354\247\200 \355\231\234\354\232\251.js" => "ES2015(ES6)/Array/3. spread operator - \353\252\207\352\260\200\354\247\200 \355\231\234\354\232\251.js" (100%) rename "ES2015(ES6)/3. Array/4. from \353\251\224\354\204\234\353\223\234\353\241\234 \354\247\204\354\247\234 \353\260\260\354\227\264 \353\247\214\353\223\244\352\270\260.js" => "ES2015(ES6)/Array/4. from \353\251\224\354\204\234\353\223\234\353\241\234 \354\247\204\354\247\234 \353\260\260\354\227\264 \353\247\214\353\223\244\352\270\260.js" (100%) create mode 100644 ES2015(ES6)/Array/README.md rename ES2015(ES6)/{6. Destructuring => Destructuring}/1. Destructuring Array.js (100%) rename ES2015(ES6)/{6. Destructuring => Destructuring}/2. Destructuring Object.js (100%) rename "ES2015(ES6)/6. Destructuring/3. Destructuring \355\231\234\354\232\251 JSON\355\214\214\354\213\261.js" => "ES2015(ES6)/Destructuring/3. Destructuring \355\231\234\354\232\251 JSON\355\214\214\354\213\261.js" (100%) rename "ES2015(ES6)/6. Destructuring/4. Destructuring \355\231\234\354\232\251_Event\352\260\235\354\262\264\354\240\204\353\213\254.js" => "ES2015(ES6)/Destructuring/4. Destructuring \355\231\234\354\232\251_Event\352\260\235\354\262\264\354\240\204\353\213\254.js" (100%) create mode 100644 ES2015(ES6)/Destructuring/README.md rename ES2015(ES6)/{6. Destructuring => Destructuring}/index.html (100%) rename "ES2015(ES6)/11. function/1. Arrow function \355\231\234\354\232\251.js" => "ES2015(ES6)/Function/1. Arrow function \355\231\234\354\232\251.js" (100%) rename "ES2015(ES6)/11. function/2. Arrow function\354\235\230 this context.js" => "ES2015(ES6)/Function/2. Arrow function\354\235\230 this context.js" (100%) rename ES2015(ES6)/{11. function => Function}/3. function default parameters.js (100%) rename ES2015(ES6)/{11. function => Function}/4. rest paramaters.js (100%) create mode 100644 ES2015(ES6)/Function/README.md rename ES2015(ES6)/{10. Template => Function}/index.css (100%) rename ES2015(ES6)/{11. function => Function}/index.html (100%) rename "ES2015(ES6)/8. Map & WeakMap/1. Map & WeakMap \354\266\224\352\260\200\354\240\225\353\263\264\353\245\274 \353\213\264\354\235\200 \352\260\235\354\262\264\354\240\200\354\236\245\355\225\230\352\270\260.js" => "ES2015(ES6)/Map & WeakMap/1. Map & WeakMap \354\266\224\352\260\200\354\240\225\353\263\264\353\245\274 \353\213\264\354\235\200 \352\260\235\354\262\264\354\240\200\354\236\245\355\225\230\352\270\260.js" (100%) rename "ES2015(ES6)/8. Map & WeakMap/2. WeakMap \355\201\264\353\236\230\354\212\244 \354\235\270\354\212\244\355\204\264\354\212\244 \353\263\200\354\210\230 \353\263\264\355\230\270\355\225\230\352\270\260.js" => "ES2015(ES6)/Map & WeakMap/2. WeakMap \355\201\264\353\236\230\354\212\244 \354\235\270\354\212\244\355\204\264\354\212\244 \353\263\200\354\210\230 \353\263\264\355\230\270\355\225\230\352\270\260.js" (100%) create mode 100644 ES2015(ES6)/Map & WeakMap/README.md rename ES2015(ES6)/{13. module => Module}/default_module.js (100%) rename ES2015(ES6)/{13. module => Module}/index.html (84%) rename ES2015(ES6)/{13. module => Module}/module_test.js (100%) create mode 100644 ES2015(ES6)/Module/test.js rename "ES2015(ES6)/5. Object/1. \352\260\204\353\213\250\355\236\210 \352\260\235\354\262\264\354\203\235\354\204\261\355\225\230\352\270\260.js" => "ES2015(ES6)/Object/1. \352\260\204\353\213\250\355\236\210 \352\260\235\354\262\264\354\203\235\354\204\261\355\225\230\352\270\260.js" (100%) create mode 100644 ES2015(ES6)/Object/README.md rename "ES2015(ES6)/12. \352\260\235\354\262\264/1. class\353\245\274 \355\206\265\355\225\234 \352\260\235\354\262\264\354\203\235\354\204\261.js" => "ES2015(ES6)/Object2/1. class\353\245\274 \355\206\265\355\225\234 \352\260\235\354\262\264\354\203\235\354\204\261.js" (100%) rename "ES2015(ES6)/12. \352\260\235\354\262\264/2. Object assign\354\234\274\353\241\234 JS\352\260\235\354\262\264\353\247\214\353\223\244\352\270\260.js" => "ES2015(ES6)/Object2/2. Object assign\354\234\274\353\241\234 JS\352\260\235\354\262\264\353\247\214\353\223\244\352\270\260.js" (100%) rename "ES2015(ES6)/12. \352\260\235\354\262\264/3. Object assign\354\234\274\353\241\234 Immutable \352\260\235\354\262\264\353\247\214\353\223\244\352\270\260.js" => "ES2015(ES6)/Object2/3. Object assign\354\234\274\353\241\234 Immutable \352\260\235\354\262\264\353\247\214\353\223\244\352\270\260.js" (100%) rename "ES2015(ES6)/12. \352\260\235\354\262\264/4. Object setPrototypeOf\353\241\234 \352\260\235\354\262\264 \353\247\214\353\223\244\352\270\260.js" => "ES2015(ES6)/Object2/4. Object setPrototypeOf\353\241\234 \352\260\235\354\262\264 \353\247\214\353\223\244\352\270\260.js" (100%) rename "ES2015(ES6)/12. \352\260\235\354\262\264/5.Object setPrototypeOf\353\241\234 \352\260\235\354\262\264\352\260\204 prototype chain\354\203\235\354\204\261\355\225\230\352\270\260.js" => "ES2015(ES6)/Object2/5.Object setPrototypeOf\353\241\234 \352\260\235\354\262\264\352\260\204 prototype chain\354\203\235\354\204\261\355\225\230\352\270\260.js" (100%) rename "ES2015(ES6)/12. \352\260\235\354\262\264/README.md" => ES2015(ES6)/Object2/README.md (100%) create mode 100644 ES2015(ES6)/Proxy/interception.js rename ES2015(ES6)/{1. Scope => Scope}/2. let.js (100%) rename "ES2015(ES6)/1. Scope/3. let\352\263\274 closure.js" => "ES2015(ES6)/Scope/3. let\352\263\274 closure.js" (100%) rename "ES2015(ES6)/1. Scope/4. const-\354\204\240\354\226\270\353\220\234 \353\263\200\354\210\230 \354\247\200\355\202\244\352\270\260.js" => "ES2015(ES6)/Scope/4. const-\354\204\240\354\226\270\353\220\234 \353\263\200\354\210\230 \354\247\200\355\202\244\352\270\260.js" (100%) rename "ES2015(ES6)/1. Scope/5. const \355\212\271\354\204\261\352\263\274 immutable array.js" => "ES2015(ES6)/Scope/5. const \355\212\271\354\204\261\352\263\274 immutable array.js" (100%) rename ES2015(ES6)/{1. Scope => Scope}/README.md (55%) rename "ES2015(ES6)/7. Set&WeakSet/1. Set \354\234\274\353\241\234 \354\234\240\353\213\210\355\201\254\355\225\234 \353\260\260\354\227\264\353\247\214\353\223\244\352\270\260.js" => "ES2015(ES6)/Set&WeakSet/1. Set \354\234\274\353\241\234 \354\234\240\353\213\210\355\201\254\355\225\234 \353\260\260\354\227\264\353\247\214\353\223\244\352\270\260.js" (100%) rename "ES2015(ES6)/7. Set&WeakSet/2. WeakSet \354\234\274\353\241\234 \355\232\250\352\263\274\354\240\201\354\234\274\353\241\234 \352\260\235\354\262\264\355\203\200\354\236\205\354\240\200\354\236\245\355\225\230\352\270\260.js" => "ES2015(ES6)/Set&WeakSet/2. WeakSet \354\234\274\353\241\234 \355\232\250\352\263\274\354\240\201\354\234\274\353\241\234 \352\260\235\354\262\264\355\203\200\354\236\205\354\240\200\354\236\245\355\225\230\352\270\260.js" (100%) create mode 100644 ES2015(ES6)/Set&WeakSet/README.md rename "ES2015(ES6)/2. String/1. ES2015 String \354\227\220 \354\203\210\353\241\234\354\232\264 \353\251\224\354\204\234\353\223\234\353\223\244.js" => "ES2015(ES6)/String/1. ES2015 String \354\227\220 \354\203\210\353\241\234\354\232\264 \353\251\224\354\204\234\353\223\234\353\223\244.js" (100%) rename ES2015(ES6)/{2. String => String}/README.md (100%) rename "ES2015(ES6)/10. Template/1. Template\354\262\230\353\246\254.js" => "ES2015(ES6)/Template/1. Template\354\262\230\353\246\254.js" (100%) rename ES2015(ES6)/{10. Template => Template}/2. Tagged Template literals.js (100%) create mode 100644 ES2015(ES6)/Template/README.md rename ES2015(ES6)/{11. function => Template}/index.css (100%) rename ES2015(ES6)/{10. Template => Template}/index.html (100%) create mode 100644 Modern JS/Function, Class (this).md create mode 100644 Modern JS/JS_Object.md diff --git "a/ES2015(ES6)/1. Scope/1. ES2015(ES6) \354\213\234\354\236\221\355\225\230\352\270\260.txt" "b/ES2015(ES6)/1. Scope/1. ES2015(ES6) \354\213\234\354\236\221\355\225\230\352\270\260.txt" deleted file mode 100644 index a9af83f..0000000 --- "a/ES2015(ES6)/1. Scope/1. ES2015(ES6) \354\213\234\354\236\221\355\225\230\352\270\260.txt" +++ /dev/null @@ -1,9 +0,0 @@ -ES6. - -ES6 === ES2015 -(ES2016, ES2017....) - -ES2015 -개선된 JavaScript문법 -ES6 browser compatibility의 훌륭한 지원 -ES6를 기반으로 한 JavaScript 생태계의 확산 diff --git a/ES2015(ES6)/10. Template/README.md b/ES2015(ES6)/10. Template/README.md deleted file mode 100644 index 1468ad7..0000000 --- a/ES2015(ES6)/10. Template/README.md +++ /dev/null @@ -1,70 +0,0 @@ -# Template - -## 1. Template처리 - -__json으로 응답을 받고,__ - -`javascript object로 변환한 후에` - -어떠한 데이터처리 조작을 한 후에 dom에 추가 하는 일 - -__데이터 + HTML문자열의 결합이 필요하기 때문에__ -```javascript - const data = [ - { - name : 'coffe-bean', - order :true, - items : ['americano', 'milk', 'green-tea'] - }, - { - name : 'starbucks', - order : false, - }, - { - name : 'coffe-King', - order :true, - items : ['americano', 'latte'] - }, - ] - - // 각각의 key가 다르기 때문에 좋지 않은 코드 - const template = `
    welcome ${data[0].name} !!
    `; - console.log(template); -``` - -## 2. Tagged Template literals -```javascript - const data = [ - { - name : 'coffe-bean', - order :true, - items : ['americano', 'milk', 'green-tea'] - }, - { - name : 'starbucks', - order : false, - }, - { - name : 'coffe-King', - order :true, - items : ['americano', 'latte'] - }, - ]; - - function fn(tags , name, items) { - console.log('tags : ',tags); - console.log('name : ',name); - console.log('items : ',items); - if(typeof items === "undefined"){ - items = " 주문가능한 상품이 없습니다. "; - } - return (tags[0] + name + tags[1] + items + tags[2]); - } - - data.forEach((V) => { - let template = fn`

    welcome ${V.name} !!

    -

    주문가능항목

    ${V.items}
    `; - console.log(template); - document.querySelector("#message").innerHTML += template; - }); -``` diff --git a/ES2015(ES6)/11. function/README.md b/ES2015(ES6)/11. function/README.md deleted file mode 100644 index fa0ec43..0000000 --- a/ES2015(ES6)/11. function/README.md +++ /dev/null @@ -1,270 +0,0 @@ -# Function -## 1. 함수 - -### 함수 선언문 -```javascript - function add1(x , y) { - return x + y; - } -``` - -### 함수 선언식 -```javascript - var add2 = function(x, y) { - return x + y; - } -``` - -### 리턴 -```javascript - // function(매개) { return 리턴 } - // (매개) => { return 리턴 } - const add3 = (x , y) => { - return x + y; - }; - - // (매개) => {return 리턴} - // 리턴만 있는 경우 - // (매개) => 리턴, - // (매개) => (리턴) - const add4 = ( x, y) => x + y; -``` - -### this -why doesn't desploy function today? - -**Because this keyword!!!!** - -function 내부의 this는 외부의 this와 다르기 때문에!!!! - -this를 that에 저장해서 써야 했다. - -```javascript - var relationship1 = { - name: 'zero', - friends : ['nero', 'hero', 'xero'], - logFrieds: function() { - var that = this; // relationship1을 가리키는 this를 that에 저장 - this.friends.forEach(function(friend) { - console.log(that.name, friend); - }); - }, - }; - relationship1.logFrieds(); -``` - -## 2. Arrow Function -**축약의 장점** -```javascript - // 콜백 함수 -> 나중에 실행되는 함수 - setTimeout(function() { - console.log("settimout"); - }, 1000); - - // 축약 표현 - setTimeout( () => { - console.log("setTimeout arrow"); - } , 1000); - - // callback 함수의 문제가 함수의 인자가 너무 길어... - let newArr = [1, 2, 3, 4, 5].map(function(value , index, object) { - return value * 2; - }); - - console.log(newArr); - - // 더 축약 - // return도 생략 - // brace를 가급적 해주는게 좋다 - let newArr = [1, 2, 3, 4, 5].map( (v) => (v * 2) ); - console.log("arrow newArr", newArr); -``` - -## 3. Arrow function의 this context -**화살표 함수는 함수 내부의 this를 외부 this와 같게 만들어 준다.** - -원래 foreach function안에 this가 window로 가리켰지만, - -relationsthip2를 가리킬 수 있다. - -따라서 바깥 스코프인 logFriends()의 this를 그대로 사용할 수 있다. - -**상위 스코프의 this를 그대로 물려 받는다.** -```javascript - var relationship2 = { - name: 'zero', - friends : ['nero', 'hero', 'xero'], - logFrieds() { - this.friends.forEach((friend) => { - console.log(this.name, friend); - }); - }, - }; - relationship2.logFriends(); -``` - -### 2-1. bind -__context(this) 문제로 `bind를 많이 사용하고 있다.`__ - -**this** Object는 function이 아니다. => keyword - -this -> window는 printData()를 가지고 있지 않다. - -__`보통 함수를 bind로 감싸주면 된다.`__ - -```javascript - const myObj = { - runTimeout() { - setTimeout(function() { - console.log(this === window); - // out: true -> bind()를 안 할때 - // out: false -> bind()를 할 때 - - this.printData(); - // bind 호출하기 전 - // this.printData is not a func at - // so bind로 감싸준다. - }.bind(this), 200); - }, - - printData() { - console.log("hi yjkwon07!!"); - } - } - myObj.runTimeout(); -``` - - -### 2-1. Arow Function -__But, Arrow함수일 경우 다르다.__ - -this가 가리키는게 window가 아니고 - -__this가 가리키는 context가 실행타이밍에 가리키는 것__ - -```javascript - const myObj = { - runTimeout() { - setTimeout( () => { - // out: false!!! - console.log(this === window); - }, 200); - }, - - printData() { - console.log("hi yjkwon07!!"); - } - } -``` - -### 2-2. Event_Queue & callback -**Event_Queue**에 있다가 나중에 실행이 됨 **`this -> window`** - -하지만 arrow는 context를 유지하고 있다. - -```javascript - const el = document.querySelector("p"); - - const myObj = { - - register() { - el.addEventListener("click", function(event) { - // 1. (bind 설정 안할 시)error -> this.printData (not Function) - this.printData(); - // 2. ok - }).bind(this); - }, - - printData() { - console.log("clicked!!!"); - } - } - myObj.register(); -``` - -### 2-2. ArrowFunctiob Effect !!!! - -__this라는 것이 이전에는 실행 타이밍에 `callback()에` 호출하는곳에서 바뀔수 있지만,__ - -callback()함수를 감싸고 있는 Object 선언된걸 this가 가리킨다. - -```javascript - const myObj = { - - register() { - el.addEventListener("click", (event) => { - this.printData(event.target); - // ok - }); - }, - - printData(el) { - console.log("clicked!!!", el.innerText); - } - } - - el.addEventListener("click", function(event) { - // HTMLPargarmentElement -> p 태그를 가리키고 있다. - console.log(this); - }); -``` - -## 4. Function default paramaters -__기본 매개변수__ - -parameter 부분에서 미리 설정 가능 -```javascript - function sum(value , size = {value : 1}) { - // size = size || 1; - return value * size.value; - } - console.log(sum(3, 10)); // 30 - console.log(sum(3, {value : 3})); // 9 - console.log(sum(3)); // 3 -``` - -## 5. rest paramaters -spread operator와 유사 - -들어오는 인자 값이 number?? - -### ES3 -가변인자(argument)활용하기 -> 가짜 배열 - -기본 built-in function인 `arguement가` 있지만 - -__배열로 사용할 수 없다.__ - -__`slice` 실행해 줘~~__ -```javascript - function checkNum() { - - const argArray = Array.prototype.slice.call(arguments); - // Array - console.log(toString.call(argArray)); - // 만약 slice 안하면 Object Arguments 반환 - - // every : 모두가 true일 경우만 true를 반환한다. - const result = argArray.every( (v) => typeof v === "number"); - // false -> "55"는 문자열 - console.log(result); - } - - const result = checkNum(10, 2, 3, 4,5 , "55"); -``` - -### ES6 spread operator - -매개변수에 ... -> reset parameters - -그 이외 변수 값 -> spread operator -```javascript - function checkNum(...argArray) { - // Array - console.log(toStirng.call(argArray)); - const result = argArray.every( (v) => typeof v === "number"); - console.log(result); - } - const reuslt = checkNum(10 , 2, "55"); -``` - diff --git a/ES2015(ES6)/13. module/test.js b/ES2015(ES6)/13. module/test.js deleted file mode 100644 index 2418605..0000000 --- a/ES2015(ES6)/13. module/test.js +++ /dev/null @@ -1,8 +0,0 @@ -import MyLogger from './module_test'; -import _ from './default_module'; - -_.log('my first test data'); - -const logger = new MyLogger(); -_.log(`lectures of yjkwon07 are ${logger.getLecture()}`); -_.log(`current hour is ${logger.getCurrentHour()}`); diff --git a/ES2015(ES6)/14. Proxy/interception.js b/ES2015(ES6)/14. Proxy/interception.js deleted file mode 100644 index fb9d64c..0000000 --- a/ES2015(ES6)/14. Proxy/interception.js +++ /dev/null @@ -1,71 +0,0 @@ -const myObj = {name :"yjkwon07", changeValue : 0}; - -const proxy = new Proxy(myObj, { - get : function(target, property, receiver) { - console.log("get value"); - return target[property]; - }, - set : function(target, property, value) { - console.log("set value"); - target['changeValue']++; - target[property] = value; - } -}); -myObj.name = "go"; -myObj.changeValue; // out: 0 -myObj.name = "ggh"; - -proxy.name = "code"; -proxy.changeValue; // out: 1 -proxy.name = "cocoding"; -proxy.changeValue; // out: 2 - -// 값을 보호 -const proxy = new Proxy({name :"yjkwon07", changeValue : 0}, { - get : function(target, property, receiver) { - console.log("get value"); - return target[property]; - }, - set : function(target, property, value) { - console.log("set value"); - target['changeValue']++; - target[property] = value; - } -}); - -proxy.name = "code"; -proxy.changeValue; -proxy.name = "cocoding"; -proxy.changeValue; - -// Reflect -const proxy = new Proxy({name :"yjkwon07", changeValue : 0}, { - get : function(target, property, receiver) { - return Reflect.get(target, property); - }, - set : function(target, property, value) { - console.log("set value"); - target['changeValue']++; - target[property] = value; - } -}); - -proxy.name = "gogo"; -proxy.name = "gogo2"; -proxy.changeValue; -proxy.name; - -// default value return -const proxy = new Proxy({name :"yjkwon07", changeValue : 0}, { - get : function(target, property, receiver) { - return (property in target) ? target[property] : "anonymous" - }, - set : function(target, property, value) { - console.log("set value"); - target['changeValue']++; - target[property] = value; - } -}); - -proxy.name; -proxy.fddsfa; \ No newline at end of file diff --git a/ES2015(ES6)/3. Array/README.md b/ES2015(ES6)/3. Array/README.md deleted file mode 100644 index 7b4cd07..0000000 --- a/ES2015(ES6)/3. Array/README.md +++ /dev/null @@ -1,252 +0,0 @@ -# Array - -## 1. for of - 순회하기 - -### for - in 의 문제점(Array) - -**Object prototype도 순회한다.** __`array도 일종의 Object`__ - -__자신이 갖고 있지 않은 상위의 값도 포함해서 결과에 출력할 수 있다.__ - -```javascript - var data = [1, 2, undefined, NaN, null, ""]; - for (var i = 0; i < data.length; i++) { - console.log(i); - } - - data.forEach(function (value) { - console.log("valueis", vlaue); - }); - - // bad............ - for (let idx in data) { - console.log(data[idx]); - } -``` - -```javascript - var data = [1, 2, undefined, NaN, null, ""]; - Array.prototype.getIndex = function () { }; - - for (let idx in data) { - console.log(data[idx]); // 출력시 function(){} 출력 - } -``` - - -### for - of(Solve) -__`배열 뿐만 아니라 문자열도 가능하다`__ - -문자 단위로 출력 (공백도 포함) - -```javascript - var data = [1, 2, undefined, NaN, null, ""]; - Array.prototype.getIndex = function () { }; - for(let value of data) { - console.log(value); - } - - var str = "hello world!!!"; - for(let value of str) { - console.log(value); - } -``` - -### Object using for - in -**prototype link의 연결된 prototype Object의 key 까지 출력** - -```javascript - function Ultra(name){ - this.UltraNmae = name, - this.sf = function sf(){console.log("Ultra sf")} - } - Ultra.prototype.ultraProp = true; - - function Super(){} - Super.prototype = new Ultra("ultra"); - - var obj = new Super(); - obj.age = "22" - obj.name = "yjkwon07" - - for(var ss in obj) console.log(ss); -``` - -출력 -``` - age - name - ultraProp -``` - -### Object using for - of -**`for keyword is only using the iterable Data`** - -__But, object is not iterable__ - -```javascript - for(var s of obj) console.log(s); // VM3604:1 Uncaught TypeError: os is not iterable -``` - -__So. Object.key()__ - -```javascript - for (let country of Object.keys(obj)) { - var capital = obj[country]; - console.log(country, capital); - } -// age 22 -``` - -## 2. spread operator, 펼침연산자 -spread(...)를 사용하여 배열의 값들을 복사한다. - -__여기서 pre와 newData는 다른(참조 주소가) 데이터이다.__ - -spread는 **`immutable과정`** 이라는것을 알게된다. - -메모리의 새로운 공간에 새로운 데이터를 넣어 참조 한뒤, __완전히 복사__ - -```javascript - let pre = ["apple", "orange", 100]; - let newData = [...pre]; - - console.log(pre, newData); - // ["apple", "orange", 100] - // ["apple", "orange", 100] - - console.log(pre === newData); // false -``` - -## 3. spread operator - 몇가지 활용 - -### 배열을 특정 위치에 끼워넣을 때 활용 -```javascript - let pre = [100, 200, "hello", null]; - let newData = [0, 1, 2, 3, ...pre, 4]; - console.log(newData); - // [0, 1, 2, 3, 100, 200, "hello", null, 4] -``` - -### 매개변수 인자값을 넣을 때 활용 -```javascript - function sum(a, b, c) { - return a + b + c; - } - let pre2 = [100 ,200 ,300]; - - sum(pre2[0] , pre2[1] , pre2[2]); -``` -모든 인자를 파라미터 값에 넣어야하는것이 너무 귀찮아.🤔 - -__1 sol. 이전 방법__ -```javascript - function sum(a, b, c) { - return a + b + c; - } - let pre2 = [100 ,200 ,300]; - - sum.apply(null, pre2); - // out: 600 -``` - -__2. spread operator__ -```javascript - function sum(a, b, c) { - return a + b + c; - } - let pre2 = [100 ,200 ,300]; - - sum(...pre2); - - console.log(sum.apply(null, pre2)); // 600 - console.log("result =>", sum(...pre2)); // 600 -``` -__immutable array__ - -즉, 배열을 바꾸지 않고 새로운 값을 복사할 수 있는 방법을 제공 - -배열을 merge하거나 spread하는방법으로 - -__배열을 합치거나 펼쳐진 상태로 새로운 인자값으로 전달할 수 있는 기능__ - -## 4. from 메서드로 인자(arguments) 배열 만들기 - -### argument -인자값을 안주더라도 내부값의 **argument(객체)라는** 펀션(function)안에 있는 - -__내부 지역변수와 같은 특별한 값을 이용한다.__ -> 배열과 비슷한 형태 - -__아주 권장되는 패턴은 아니다.__ - -```javascript - function addMark() { - let newData = []; - for (let i = 0; i < arguments.length; i++) { - newData.push(arguments[i] + "!"); - } - console.log(newData); - } - addMark(1, 2, 3, 4, 5); -``` - -### Error -> arguments는 map을 못쓴다. -map을 사용하여 순회하면서 필요한 값을 추가하고, 새로운 배열을 반환 - -__But arguments는 map을 못쓴다.. `배열이 아니기 때문에`__ - -```javascript - function addMark() { - let newData = arguments.map(function (value) { - return value + "!"; - }); - console.log(newData); - } - addMark(1, 2, 3, 4, 5); // Error -``` - -### from(Solve) -```javascript - function addMark2() { - let newArray = Array.from(arguments); - let newData = newArray.map(function (value) { - return value + "!"; - }); - console.log(newData); - } - addMark2(1, 2, 3, 4, 5); -``` - -## 5. 변수 초기화 -(...변수)는 rest로 여러 개의 변수를 모아서 배열로 만든다. - -```javascript - const array = ['nodejs', {}, 10, true]; - const [node, obj, ...bool] = array; - - console.log(bool); // [10, true] -``` - -``` javascript - const m = (x, y) => console.log(x, y); - m(5, 6) // 5 6 - - m(5, 6, 7, 8, 9); // 5 6 -``` - -```javascript - const n = (X, ...y) => console.log(X, y); - - n(5, 6, 7, 8, 9) // 5, (4) [ 6, 7, 8, 9] -``` - -```javascript - function o() { - console.log(arguments); - } - o(1, 2, 3, 4, 5) // [1 2,3,4,5]; - - // 더이상 arguement를 사용하지 않는다. - const p = (...rest) => console.log(rest); - p(5, 6, 7, 8, 9) // [5, 6, 7, ,8 ,9 ] -``` diff --git "a/ES2015(ES6)/4. \354\213\244\354\212\2651/es6-1-practice.js" "b/ES2015(ES6)/4. \354\213\244\354\212\2651/es6-1-practice.js" deleted file mode 100644 index ef43844..0000000 --- "a/ES2015(ES6)/4. \354\213\244\354\212\2651/es6-1-practice.js" +++ /dev/null @@ -1,39 +0,0 @@ -const li_list = document.querySelectorAll("ul li"); - -function print() { - /* - filter, includes, from을 사용해서 문자열 'e'가 포함된 - 노드로 구성된 배열을 만들어서 반환하기 - */ - const li_arr = Array.from(li_list); - const result = li_arr.filter(function(value) { - return value.innerHTML.includes("e"); - }); - console.log(result); -} -print(); - - -function print() { - /* - filter, includes, from을 사용해서 문자열 'e'가 포함된 - 노드로 구성된 배열을 만들어서 반환하기 - */ - let list = document.querySelectorAll("li"); - // 타입 체크 하기 - // Object NodeList 출력 - console.log(toString.call(list)); - - let listArray = Array.from(list); // li노드로 구성된 배열 - // Object Array 출력 - console.log(toString.call(listArray)); - - let eArray = listArray.filter(function(v) { - return v.innerText.includes("e"); - }); - console.log(eArray.length); - - console.log(eArray); - return eArray; -} -console.log(print()); diff --git "a/ES2015(ES6)/4. \354\213\244\354\212\2651/index.html" "b/ES2015(ES6)/4. \354\213\244\354\212\2651/index.html" deleted file mode 100644 index 0df478f..0000000 --- "a/ES2015(ES6)/4. \354\213\244\354\212\2651/index.html" +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - JS - - - -
      -
    • apple
    • -
    • orange
    • -
    • banana
    • -
    • straberry
    • -
    -
    Lorem ipsum dolor sit amet consectetur, adipisicing elit. Excepturi necessitatibus temporibus, doloribus eligendi sapiente magnam error dicta doloremque. Voluptatem repellendus enim modi asperiores itaque, officiis odio eum minima sed tempora!
    -
    -

    mydiv

    - - - \ No newline at end of file diff --git a/ES2015(ES6)/5. Object/README.md b/ES2015(ES6)/5. Object/README.md deleted file mode 100644 index a445b83..0000000 --- a/ES2015(ES6)/5. Object/README.md +++ /dev/null @@ -1,83 +0,0 @@ -# Object - -```javascript - const name = "yjkwon07"; - const age = 26; - - var obj = { - name : name, - age : age - }; - console.log("obj 1 : ", obj); -``` - -## 1. 새로운 Object 반환 - -```javascript - function getObj() { - const name = "Im ck"; - - const getName = function() { - return name; - } - - const setName = function(newname) { - name = newname; - } - - const printName = function() { - console.log(name); - } - - // Object 리터럴 - return { - // getName : getName, - // setName : setName - - // 이름과 value 값이 일치하면, - getName, - setName, - - // Object의 value도 반환 가능 - name - } - } - var obj2 = getObj(); - console.log("obj2 : " , obj2); -``` - -## 2. key와 function 없이 생성 -```javascript - const data = { - name, - getName() { - - }, - }; - console.log("obj3 : " ,data); -``` -## 3. 동적 속성 할당을 리러털 안에 표현 - -```javascript - var sayNode = function() { - console.log("Node"); - } - var es = "ES"; - - const newObject = { - // function{} - sayJS() { - console.log("JS"); - }, - // key , value가 같다면 하 나로!! - sayNode, - // 동적 속성 할당을 리러털 안에 표현이 가능하다. - // { [변수] : 값 } - [es+6]: "Fatasitic", - }; - newObject[es + 7] = 'Fantasitic'; - newObject.sayNode(); // Node - newObject.sayJS(); // JS - console.log(newObject.ES6); - console.log(newObject.ES7); -``` \ No newline at end of file diff --git a/ES2015(ES6)/6. Destructuring/README.md b/ES2015(ES6)/6. Destructuring/README.md deleted file mode 100644 index 7382b71..0000000 --- a/ES2015(ES6)/6. Destructuring/README.md +++ /dev/null @@ -1,139 +0,0 @@ -# Destructuring -## 1. Destructuring Array - -필요한 배열에 특정 인덱스값이 의미가 있을 때 뽑아서 쓸 수 있다. -```javascript - let data = ["yjkwon07", "honux", "jk", "jinny"]; - - let jisu = data[0]; - let jung = data[2]; -``` - -변수에 배열이나 Object에 값을 할당할 때 유용함 -```javascript - let [jisu, ,jung] = data; - console.log(jisu, jung); // out: yjkwon07, honux -``` - -## 2. Destructuring Object -```javascript - let obj = { - name : "yjkwon07", - address : "Korea", - age : 10 - } - - let {name, age} = obj; - console.log(name , age); // out: yjkwon07 10 -``` - -다른 변수 명을 정할 수 있다. -```javascript - let obj = { - name : "yjkwon07", - address : "Korea", - age : 10 - } - - let {name : myName , age : myAge} = obj; - console.log(myName , myAge); -``` - -## 3. Destructuring 활용 JSON파싱 -```javascript - var news = [ - { - "title" : "sbs", - "image" : "https://", - "newslist" : [ - "[가나다] 가나다", - "가나다 [가나다]" - ] - }, - { - "title" : "mbc", - "image" : "https://", - "newslist" : [ - "[라마바사] 라마바사", - "라마바사 [라마바사]" - ] - } - ]; - - let [, mbc] = news; - let {title, image} = mbc; - console.log(title , image); // out: mbc https:// -``` - -### 로직 개선 - -한방에 뽑는 방법 - -한줄을 줄여줌 !!! 완전 우아하네 ~~ - -```javascript - let [, {title, image}] = news; - console.log(image); -``` - -### 또다른 방법 - -매개변수에서 destructuring - -newslist만 출력 - -```javascript - function getNewsList([, {newslist}]) { - console.log(newslist); - } - getNewsList(news); -``` - -## 4. Destructuring활용_Event 객체 전달 - -event객체에서 target만 가져온다. - -```javascript - document.querySelector("div").addEventListener("click", function (event) { - // event -> 오브젝트 - console.log(event); - console.log(event.target.tagName); - }); - document.querySelector("div").addEventListener("click", function ({ target }) { - console.log(target.tagName); - }); -``` - -## 5. Destructuring의 문제점 -getCandy로 따로 값을 받아오게 된다면 this의 위치를 못찾아서 값을 undefined로 리턴한다. - -arrow func 으로 해도 못 찾는다. -```javascript -// 객체 리터럴 -const candyMachine = { - status: { - name : 'node', - count : 5, - }, - getCandy() { - this.status.count--; - return this.status.count; - } -}; -// const a = 객체.a -// const b = 객체.b를 -// const{ a, b } = 객체로 바꿀 수 있다. -const {status , getCandy} = candyMachine; - -// 비구조화 할당 시 this가 의도와 다르게 동작하는 현상이 있을 수 있다. -candyMachine.getCandy(); // 4 -getCandy(); // undefined -``` - -### call(Solve) - -```javascript -candyMachine.getCandy(); // 3 -getCandy.call(candyMachine); // 2 -getCandy(); // undefined -``` diff --git a/ES2015(ES6)/7. Set&WeakSet/README.md b/ES2015(ES6)/7. Set&WeakSet/README.md deleted file mode 100644 index 39ae8d1..0000000 --- a/ES2015(ES6)/7. Set&WeakSet/README.md +++ /dev/null @@ -1,74 +0,0 @@ -# Set&WeakSet -## 1. Set으로 유니크한 배열만들기 - -'object' of Set - -__`set:` 중복없이 유일한 값을 저장하려고 할때.__ - -이미 존재하는지 체크할 때 유용. - -__set도 사실 `배열과` 유사함__ - -```javascript - let mySet = new Set(); - console.log(toString.call(mySet)); - - mySet.add("yjkwon07"); - mySet.add("navie"); - mySet.add("ck"); - - // 존재 하는지? - // has : 가지고 있는지 - console.log(mySet.has("yjkwon07")); - - // 순회 - mySet.forEach(function(v) { - console.log(v); - }); - - // delete : value삭제 - mySet.delete("yjkwon07"); - // 순회 - console.log("after, delete : "); - mySet.forEach(function(v) { - console.log(v); - }); -``` - -## 2. WeakSet으로 효과적으로 객체타입저장하기 - -**`weakset :`** **참조를 가지고 있는 객체만** 저장이 가능하다. - -객체형태를 중복없이 저장하려 할 때 유용하다. -```javascript - let arr = [1, 2, 3, 4]; - let arr2 = [5, 6, 7, 8]; - let obj = {arr, arr2}; - - let ws = new WeakSet(); - - // invalid type Error (Only Object) - // primitive type Nope!~~ - // ws.add(111); - // ws.add("111"); - // ws.add(null); - - ws.add(arr); - ws.add(arr2); - ws.add(obj); - - // ok 함수는 참조객체니깐 - ws.add(function(){}); - - // garbageCollection 대상이 된다.!!!! - arr = null; - - // WeakSet에서는 존재하는것 처럼 보인다. - console.log(ws); - - // arr -> 유효하지 않은 객체라는것을 알고 있다. - // (null!!! -> garbageCollector) - console.log(ws.has(arr), ws.has(arr2)); - // out: false true -``` - diff --git a/ES2015(ES6)/8. Map & WeakMap/README.md b/ES2015(ES6)/8. Map & WeakMap/README.md deleted file mode 100644 index 7f0d8a0..0000000 --- a/ES2015(ES6)/8. Map & WeakMap/README.md +++ /dev/null @@ -1,107 +0,0 @@ -# Map & WeakMap -## 1. Map & WeakMap 추가정보를 담은 객체 저장하기 - -개선해보려고 노력한 STL - -`Array` -> set, weakSet - -`Object` -> map, weakMap - -__map은 key / value__ - -WeakMap -```javascript - let wm = new WeakMap(); - let myfun = function(){}; - - // 이 함수가 얼마나 실행됐지?를 알려고 할 때...? count - wm.set(myfun, 0); - - // out: function => 0 - console.log(wm); - - let count = 0; - for(let i = 0; i < 10; i++) { - count = wm.get(myfun); // get value - count++; - wm.set(myfun, count); - } - - // console.log(wm); - // out: 10 - console.log(wm.get(myfun)); - - // garbageCollector - myfun = null; - // out: undefined - console.log(wm.get(myfun)); - // out: false - console.log(wm.has(myfun)); -``` - -## 2. WeakMap 클래스 인스턴스 변수 보호하기 - -WeakMap 활용 - -### 1. 객체 생성 -private variable - -__But!!__ -```javascript - function Area(height ,width){ - this.height = height; - this.width = width; - } - - Area.prototype.getArea = function() { - return this.height * this.width; - } - - let myarea = new Area(10, 20); - console.log(myarea.getArea()); - console.log(myarea.height); // 출력이 된다... -``` - -```javascript - const obj = {}; - function Area3(height ,width){ - obj['height'] = height; - obj['width'] = width; - } - Area3.prototype.getArea = function() { - return obj.height * obj.width; - } - let myarea3 = new Area3(10, 20); - - console.log(obj); - // garbageCollector 대상이 아니다. - // 계속 쌓여 나감... - myarea = null; - console.log(obj); -``` -### 2. 개선 방향 -weakMap!!! - -__wm 장점 부각__ -```javascript - const wm = new WeakMap(); - function Area2(height ,width){ - // 단점은 클래스 밖에 전역변수를 보관하고 있다... - wm.set(this, {height, width}); - } - Area2.prototype.getArea = function() { - const {height, width} = wm.get(this); - return height * width; - } - let myarea2 = new Area2(10, 20); - console.log(myarea2.getArea()); - console.log(myarea2.height); // undefined - - // 전역변수 -> weakMap 활용 !! - console.log(wm.has(myarea2)); - // out: true - - myarea2 = null; - console.log(wm.has(myarea2)); - // out: false -``` \ No newline at end of file diff --git "a/ES2015(ES6)/9. \354\213\244\354\212\2652/lotto.js" "b/ES2015(ES6)/9. \354\213\244\354\212\2652/lotto.js" deleted file mode 100644 index 40df044..0000000 --- "a/ES2015(ES6)/9. \354\213\244\354\212\2652/lotto.js" +++ /dev/null @@ -1,33 +0,0 @@ -/* - 로또 번호 만들기 - 1. 유일한값을 추출하는 과정에서 Set을 사용한다. - 2. getRandomNumber함수에 변수를 전달하는 과전에서 destructuring을 사용 -*/ - -const SETING = { - name : "LUCKY LOTTO!", - count : 6, - maxNumber : 45 -} -// min (포함) 과 max (포함) 사이의 임의 정수를 반환 -// Math.round() 를 사용하면 고르지 않은 분포를 얻게된다! -// https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Math/random 에서 가져옴 ;; -function getRandomIntInclusive(min, max) { - return Math.floor(Math.random() * (max - min + 1)) + min; -} - -function getRandomNumber() { - // 랜덤한 유일한 숫자값을 추출 - // set - let numSet = new Set(); - let {count , maxNumber} = SETING; - - // 6개 추출 - while(numSet.size < count){ - numSet.add(getRandomIntInclusive(1, maxNumber)); - } - return [...Array.from(numSet)]; -} - -console.log(getRandomNumber()); - diff --git "a/ES2015(ES6)/3. Array/1. for of - \354\210\234\355\232\214\355\225\230\352\270\260.js" "b/ES2015(ES6)/Array/1. for of - \354\210\234\355\232\214\355\225\230\352\270\260.js" similarity index 100% rename from "ES2015(ES6)/3. Array/1. for of - \354\210\234\355\232\214\355\225\230\352\270\260.js" rename to "ES2015(ES6)/Array/1. for of - \354\210\234\355\232\214\355\225\230\352\270\260.js" diff --git "a/ES2015(ES6)/3. Array/2. spread operator - \353\260\260\354\227\264\354\235\230 \353\263\265\354\202\254.js" "b/ES2015(ES6)/Array/2. spread operator - \353\260\260\354\227\264\354\235\230 \353\263\265\354\202\254.js" similarity index 100% rename from "ES2015(ES6)/3. Array/2. spread operator - \353\260\260\354\227\264\354\235\230 \353\263\265\354\202\254.js" rename to "ES2015(ES6)/Array/2. spread operator - \353\260\260\354\227\264\354\235\230 \353\263\265\354\202\254.js" diff --git "a/ES2015(ES6)/3. Array/3. spread operator - \353\252\207\352\260\200\354\247\200 \355\231\234\354\232\251.js" "b/ES2015(ES6)/Array/3. spread operator - \353\252\207\352\260\200\354\247\200 \355\231\234\354\232\251.js" similarity index 100% rename from "ES2015(ES6)/3. Array/3. spread operator - \353\252\207\352\260\200\354\247\200 \355\231\234\354\232\251.js" rename to "ES2015(ES6)/Array/3. spread operator - \353\252\207\352\260\200\354\247\200 \355\231\234\354\232\251.js" diff --git "a/ES2015(ES6)/3. Array/4. from \353\251\224\354\204\234\353\223\234\353\241\234 \354\247\204\354\247\234 \353\260\260\354\227\264 \353\247\214\353\223\244\352\270\260.js" "b/ES2015(ES6)/Array/4. from \353\251\224\354\204\234\353\223\234\353\241\234 \354\247\204\354\247\234 \353\260\260\354\227\264 \353\247\214\353\223\244\352\270\260.js" similarity index 100% rename from "ES2015(ES6)/3. Array/4. from \353\251\224\354\204\234\353\223\234\353\241\234 \354\247\204\354\247\234 \353\260\260\354\227\264 \353\247\214\353\223\244\352\270\260.js" rename to "ES2015(ES6)/Array/4. from \353\251\224\354\204\234\353\223\234\353\241\234 \354\247\204\354\247\234 \353\260\260\354\227\264 \353\247\214\353\223\244\352\270\260.js" diff --git a/ES2015(ES6)/Array/README.md b/ES2015(ES6)/Array/README.md new file mode 100644 index 0000000..dfe6c87 --- /dev/null +++ b/ES2015(ES6)/Array/README.md @@ -0,0 +1,255 @@ +# Array + +## 1. for of - 순회하기 + +### for - in 의 문제점(Array) + +- **Object prototype도 순회한다.** __`array도 일종의 Object`__ + +```javascript + var data = [1, 2, undefined, NaN, null, ""]; + for (var i = 0; i < data.length; i++) { + console.log(i); + } + + data.forEach(function (value) { + console.log("valueis", vlaue); + }); + + // bad............ + for (let idx in data) { + console.log(data[idx]); + } +``` + +- __자신이 갖고 있지 않은 상위의 값도 포함해서 결과에 출력할 수 있다.__ + +```javascript + var data = [1, 2, undefined, NaN, null, ""]; + Array.prototype.getIndex = function () { }; + + for (let idx in data) { + console.log(data[idx]); // 출력시 function(){} 출력 + } +``` + +### for - of(Solve) + +- __`배열 뿐만 아니라 문자열도 iterable이 가능하다`__ +- 문자 단위로 출력 (공백도 포함) + +```javascript + var data = [1, 2, undefined, NaN, null, ""]; + Array.prototype.getIndex = function () { }; + for(let value of data) { + console.log(value); + } + + var str = "hello world!!!"; + for(let value of str) { + console.log(value); + } +``` + +### Object using for - in + +- **prototype link의 연결된 prototype Object의 key 까지 출력** + +```javascript + function Ultra(name){ + this.UltraNmae = name, + this.sf = function sf(){console.log("Ultra sf")} + } + Ultra.prototype.ultraProp = true; + + function Super(){} + Super.prototype = new Ultra("ultra"); + + var obj = new Super(); + obj.age = "22" + obj.name = "yjkwon07" + + for(var ss in obj) console.log(ss); +``` + +``` + age + name + UltraNmae + sf + ultraProp +``` + +### Object using for - of + +**`for keyword is only using the iterable Data`** + +- __But, object is not iterable__ + +```javascript + for(var s of obj) console.log(s); // VM3604:1 Uncaught TypeError: os is not iterable +``` + +- __So. Object.key()__ + +```javascript + for (let country of Object.keys(obj)) { + var capital = obj[country]; + console.log(country, capital); + } + // age 22 +``` + +## 2. spread operator, 펼침연산자(immutable) + +- spread(...)를 사용하여 배열의 값들을 복사한다. +- __여기서 pre와 newData는 다른(참조 주소가) 데이터이다.__ +- spread는 **`immutable과정`** 이라는것을 알게된다. +- 메모리의 새로운 공간에 새로운 데이터를 넣어 참조 한뒤, __완전히 복사__ + +```javascript + let pre = ["apple", "orange", 100]; + let newData = [...pre]; + + console.log(pre, newData); + // ["apple", "orange", 100] + // ["apple", "orange", 100] + + console.log(pre === newData); // false +``` + +## 3. spread operator - 몇가지 활용 + +### 배열을 특정 위치에 끼워넣을 때 활용 + +```javascript + let pre = [100, 200, "hello", null]; + let newData = [0, 1, 2, 3, ...pre, 4]; + console.log(newData); + // [0, 1, 2, 3, 100, 200, "hello", null, 4] +``` + +### 매개변수 인자값을 넣을 때 활용 + +```javascript + function sum(a, b, c) { + return a + b + c; + } + + let pre2 = [100 ,200 ,300]; + sum(pre2[0] , pre2[1] , pre2[2]); +``` + +- 모든 인자를 파라미터 값에 넣어야하는것이 너무 귀찮아.🤔 +- __1 sol. 이전 방법__ + +```javascript + function sum(a, b, c) { + return a + b + c; + } + let pre2 = [100 ,200 ,300]; + + sum.apply(null, pre2); + // out: 600 +``` + +__2. spread operator__ + +```javascript + function sum(a, b, c) { + return a + b + c; + } + let pre2 = [100 ,200 ,300]; + + sum(...pre2); + + console.log(sum.apply(null, pre2)); // 600 + console.log("result =>", sum(...pre2)); // 600 +``` + +- __immutable array__ +- 즉, 배열을 바꾸지 않고 새로운 값을 복사할 수 있는 방법을 제공 +- 배열을 merge하거나 spread하는방법으로 +- __배열을 합치거나 펼쳐진 상태로 새로운 인자값으로 전달할 수 있는 기능__ + +## 4. from 메서드로 인자(arguments) 배열 만들기 + +### argument + +- 인자값을 안주더라도 내부값의 **argument(객체)라는** 펀션(function)안에 있는 +- __내부 지역변수와 같은 특별한 값을 이용한다.__ -> 배열과 비슷한 형태 +- __아주 권장되는 패턴은 아니다.__ + +```javascript + function addMark() { + let newData = []; + for (let i = 0; i < arguments.length; i++) { + newData.push(arguments[i] + "!"); + } + console.log(newData); + } + addMark(1, 2, 3, 4, 5); +``` + +### Error -> arguments는 map을 못쓴다. + +- map을 사용하여 순회하면서 필요한 값을 추가하고, 새로운 배열을 반환 +- __But arguments는 map을 못쓴다.. `배열이 아니기 때문에`__ + +```javascript + function addMark() { + let newData = arguments.map(function (value) { + return value + "!"; + }); + console.log(newData); + } + addMark(1, 2, 3, 4, 5); // Error +``` + +### from(Solve) + +```javascript + function addMark2() { + let newArray = Array.from(arguments); + let newData = newArray.map(function (value) { + return value + "!"; + }); + console.log(newData); + } + addMark2(1, 2, 3, 4, 5); +``` + +## 5. 변수 초기화 + +- (...변수)는 rest로 여러 개의 변수를 모아서 배열로 만든다. + +```javascript + const array = ['nodejs', {}, 10, true]; + const [node, obj, ...bool] = array; + + console.log(bool); // [10, true] +``` + +``` javascript + const m = (x, y) => console.log(x, y); + m(5, 6) // 5 6 + + m(5, 6, 7, 8, 9); // 5 6 +``` + +```javascript + const n = (X, ...y) => console.log(X, y); + + n(5, 6, 7, 8, 9) // 5, [ 6, 7, 8, 9] +``` + +```javascript + function o() { + console.log(arguments); + } + o(1, 2, 3, 4, 5) // [1 2,3,4,5]; + + // 더이상 arguement를 사용하지 않는다. + const p = (...rest) => console.log(rest); + p(5, 6, 7, 8, 9) // [5, 6, 7, ,8 ,9 ] +``` \ No newline at end of file diff --git a/ES2015(ES6)/6. Destructuring/1. Destructuring Array.js b/ES2015(ES6)/Destructuring/1. Destructuring Array.js similarity index 100% rename from ES2015(ES6)/6. Destructuring/1. Destructuring Array.js rename to ES2015(ES6)/Destructuring/1. Destructuring Array.js diff --git a/ES2015(ES6)/6. Destructuring/2. Destructuring Object.js b/ES2015(ES6)/Destructuring/2. Destructuring Object.js similarity index 100% rename from ES2015(ES6)/6. Destructuring/2. Destructuring Object.js rename to ES2015(ES6)/Destructuring/2. Destructuring Object.js diff --git "a/ES2015(ES6)/6. Destructuring/3. Destructuring \355\231\234\354\232\251 JSON\355\214\214\354\213\261.js" "b/ES2015(ES6)/Destructuring/3. Destructuring \355\231\234\354\232\251 JSON\355\214\214\354\213\261.js" similarity index 100% rename from "ES2015(ES6)/6. Destructuring/3. Destructuring \355\231\234\354\232\251 JSON\355\214\214\354\213\261.js" rename to "ES2015(ES6)/Destructuring/3. Destructuring \355\231\234\354\232\251 JSON\355\214\214\354\213\261.js" diff --git "a/ES2015(ES6)/6. Destructuring/4. Destructuring \355\231\234\354\232\251_Event\352\260\235\354\262\264\354\240\204\353\213\254.js" "b/ES2015(ES6)/Destructuring/4. Destructuring \355\231\234\354\232\251_Event\352\260\235\354\262\264\354\240\204\353\213\254.js" similarity index 100% rename from "ES2015(ES6)/6. Destructuring/4. Destructuring \355\231\234\354\232\251_Event\352\260\235\354\262\264\354\240\204\353\213\254.js" rename to "ES2015(ES6)/Destructuring/4. Destructuring \355\231\234\354\232\251_Event\352\260\235\354\262\264\354\240\204\353\213\254.js" diff --git a/ES2015(ES6)/Destructuring/README.md b/ES2015(ES6)/Destructuring/README.md new file mode 100644 index 0000000..cbb7c37 --- /dev/null +++ b/ES2015(ES6)/Destructuring/README.md @@ -0,0 +1,143 @@ +# Destructuring + +## 1. Destructuring Array + +- 필요한 배열에 특정 인덱스값이 의미가 있을 때 뽑아서 쓸 수 있다. + +```javascript + let data = ["yjkwon07", "honux", "jk", "jinny"]; + let jisu = data[0]; + let jung = data[2]; +``` + +- 변수에 배열이나 Object에 값을 할당할 때 유용함 + +```javascript + let [jisu, ,jung] = data; + console.log(jisu, jung); // out: yjkwon07, honux +``` + +## 2. Destructuring Object + +```javascript + let obj = { + name : "yjkwon07", + address : "Korea", + age : 10 + } + + let {name, age} = obj; + console.log(name , age); // out: yjkwon07 10 +``` + +- 다른 변수 명을 정할 수 있다. + +```javascript + let obj = { + name : "yjkwon07", + address : "Korea", + age : 10 + } + + let {name : myName , age : myAge} = obj; + console.log(myName , myAge); +``` + +## 3. Destructuring 활용 JSON파싱 + +```javascript + var news = [ + { + "title" : "sbs", + "image" : "https://", + "newslist" : [ + "[가나다] 가나다", + "가나다 [가나다]" + ] + }, + { + "title" : "mbc", + "image" : "https://", + "newslist" : [ + "[라마바사] 라마바사", + "라마바사 [라마바사]" + ] + } + ]; + + let [, mbc] = news; + let {title, image} = mbc; + console.log(title , image); // out: mbc https:// +``` + +### 로직 개선 + +- 한방에 뽑는 방법 + +```javascript + let [, {title, image}] = news; + console.log(image); +``` + +### 또다른 방법 + +- 매개변수에서 destructuring +- newslist만 출력 + +```javascript + function getNewsList([, {newslist}]) { + console.log(newslist); + } + getNewsList(news); +``` + +## 4. Destructuring활용_Event 객체 전달 + +- event객체에서 target만 가져온다. + +```javascript + document.querySelector("div").addEventListener("click", function (event) { + // event -> 오브젝트 + console.log(event); + console.log(event.target.tagName); + }); + document.querySelector("div").addEventListener("click", function ({ target }) { + console.log(target.tagName); + }); +``` + +## 5. Destructuring의 문제점 + +- getCandy로 따로 값을 받아오게 된다면 this의 위치를 못찾아서 값을 undefined로 리턴한다. +- arrow func 으로 해도 못 찾는다. + +```javascript + // 객체 리터럴 + const candyMachine = { + status: { + name : 'node', + count : 5, + }, + getCandy() { + this.status.count--; + return this.status.count; + } + }; + + // const a = 객체.a + // const b = 객체.b를 + // const{ a, b } = 객체로 바꿀 수 있다. + const {status , getCandy} = candyMachine; + + // 비구조화 할당 시 this가 의도와 다르게 동작하는 현상이 있을 수 있다. + candyMachine.getCandy(); // 4 + getCandy(); // undefined +``` + +### call(Solve) + +```javascript + candyMachine.getCandy(); // 3 + getCandy.call(candyMachine); // 2 + getCandy(); // undefined +``` \ No newline at end of file diff --git a/ES2015(ES6)/6. Destructuring/index.html b/ES2015(ES6)/Destructuring/index.html similarity index 100% rename from ES2015(ES6)/6. Destructuring/index.html rename to ES2015(ES6)/Destructuring/index.html diff --git "a/ES2015(ES6)/11. function/1. Arrow function \355\231\234\354\232\251.js" "b/ES2015(ES6)/Function/1. Arrow function \355\231\234\354\232\251.js" similarity index 100% rename from "ES2015(ES6)/11. function/1. Arrow function \355\231\234\354\232\251.js" rename to "ES2015(ES6)/Function/1. Arrow function \355\231\234\354\232\251.js" diff --git "a/ES2015(ES6)/11. function/2. Arrow function\354\235\230 this context.js" "b/ES2015(ES6)/Function/2. Arrow function\354\235\230 this context.js" similarity index 100% rename from "ES2015(ES6)/11. function/2. Arrow function\354\235\230 this context.js" rename to "ES2015(ES6)/Function/2. Arrow function\354\235\230 this context.js" diff --git a/ES2015(ES6)/11. function/3. function default parameters.js b/ES2015(ES6)/Function/3. function default parameters.js similarity index 100% rename from ES2015(ES6)/11. function/3. function default parameters.js rename to ES2015(ES6)/Function/3. function default parameters.js diff --git a/ES2015(ES6)/11. function/4. rest paramaters.js b/ES2015(ES6)/Function/4. rest paramaters.js similarity index 100% rename from ES2015(ES6)/11. function/4. rest paramaters.js rename to ES2015(ES6)/Function/4. rest paramaters.js diff --git a/ES2015(ES6)/Function/README.md b/ES2015(ES6)/Function/README.md new file mode 100644 index 0000000..5d385fd --- /dev/null +++ b/ES2015(ES6)/Function/README.md @@ -0,0 +1,255 @@ +# Function + +## 1. 함수 + +### 함수 선언문 + +```javascript + function add1(x , y) { + return x + y; + } +``` + +### 함수 표현식 + +```javascript + var add2 = function(x, y) { + return x + y; + } +``` + +### 리턴 + +```javascript + // function(매개) { return 리턴 } + // (매개) => { return 리턴 } + const add3 = (x , y) => { + return x + y; + }; + + // (매개) => {return 리턴} + // 리턴만 있는 경우 + // (매개) => 리턴, + // (매개) => (리턴) + const add4 = (x, y) => x + y; +``` + +### this + +- why doesn't desploy function today? +- **Because this keyword!!!!** +- function 내부의 this는 외부의 this와 다르기 때문에!!!! +- this를 that에 저장해서 써야 했다. + +```javascript + var relationship1 = { + name: 'zero', + friends : ['nero', 'hero', 'xero'], + logFrieds: function() { + var that = this; // relationship1을 가리키는 this를 that에 저장 + this.friends.forEach(function(friend) { + console.log(that.name, friend); + }); + }, + }; + relationship1.logFrieds(); +``` + +## 2. Arrow Function + +- **축약의 장점** + +```javascript + // 콜백 함수 -> 나중에 실행되는 함수 + setTimeout(function() { + console.log("settimout"); + }, 1000); + + // 축약 표현 + setTimeout(() => { + console.log("setTimeout arrow"); + }, 1000); + + // callback 함수의 문제가 함수의 인자가 너무 길어... + let newArr = [1, 2, 3, 4, 5].map(function(value , index, object) { + return value * 2; + }); + console.log(newArr); + + // 더 축약 + // return도 생략 + // brace를 가급적 해주는게 좋다 + let newArr = [1, 2, 3, 4, 5].map((v) => (v * 2)); + console.log("arrow newArr", newArr); +``` + +## 3. Arrow function의 this context + +- **화살표 함수는 함수 내부의 this를 외부 this와 같게 만들어 준다.** +- 원래 forEach function안에 this가 window로 가리켰지만, relationsthip2를 가리킬 수 있다. +- 따라서 바깥 스코프인 logFriends()의 this를 그대로 사용할 수 있다. +- **상위 스코프의 this를 그대로 물려 받는다.** + +```javascript + var relationship2 = { + name: 'zero', + friends : ['nero', 'hero', 'xero'], + logFrieds() { + this.friends.forEach((friend) => { + console.log(this.name, friend); + }); + } + }; + relationship2.logFriends(); +``` + +### 3-1. bind + +- __context(this) 문제로 `bind를 많이 사용하고 있다.`__ +- **this** Object는 function이 아니다. => keyword +- this -> window는 printData()를 가지고 있지 않다. +- __`보통 함수를 bind로 감싸주면 된다.`__ + +```javascript + const myObj = { + runTimeout() { + setTimeout(function() { + console.log(this === window); + // out: true -> bind()를 안 할때 + // out: false -> bind()를 할 때 + + this.printData(); + // bind 호출하기 전 + // this.printData is not a func at + // so bind로 감싸준다. + }.bind(this), 200); + }, + + printData() { + console.log("hi yjkwon07!!"); + } + } + myObj.runTimeout(); +``` + +### 3-2. Arow Function + +- __But, Arrow함수일 경우 다르다.__ +- this가 가리키는게 window가 아니고 +- __this가 가리키는 context가 실행타이밍에 가리키는 것__ + +```javascript + const myObj = { + runTimeout() { + setTimeout(() => { + // out: false!!! + console.log(this === window); + }, 200); + }, + printData() { + console.log("hi yjkwon07!!"); + } + } +``` + +### 3-3. Event_Queue & callback + +- **Event_Queue**에 있다가 나중에 실행이 됨 **`this -> window`** +- 하지만 arrow는 context를 유지하고 있다. + +```javascript + const el = document.querySelector("p"); + const myObj = { + register() { + el.addEventListener("click", function(event) { + // 1. (bind 설정 안할 시)error -> this.printData (not Function) + this.printData(); + // 2. ok + }).bind(this); + }, + printData() { + console.log("clicked!!!"); + } + } + myObj.register(); +``` + +### 3-4. ArrowFunctiob Effect !!!! + +- __this라는 것이 이전에는 실행 타이밍에 `callback()에` 호출하는곳에서 바뀔수 있지만,__ +- callback()함수를 감싸고 있는 Object 선언된걸 this가 가리킨다. + +```javascript + const myObj = { + register() { + el.addEventListener("click", (event) => { + this.printData(event.target); + // ok + }); + }, + printData(el) { + console.log("clicked!!!", el.innerText); + } + } + el.addEventListener("click", function(event) { + // HTMLPargarmentElement -> p 태그를 가리키고 있다. + console.log(this); + }); +``` + +## 4. Function default paramaters + +- __기본 매개변수__ +- parameter 부분에서 미리 설정 가능 + +```javascript + function sum(value, size = {value : 1}) { + // size = size || 1; + return value * size.value; + } + console.log(sum(3, 10)); // 30 + console.log(sum(3, {value : 3})); // 9 + console.log(sum(3)); // 3 +``` + +## 5. rest paramaters + +- spread operator와 유사 +- 들어오는 인자 값이 number?? + +### ES3 + +- 가변인자(argument)활용하기 -> 유사 배열 +- 기본 built-in function인 `arguement가` 있지만 +- __배열로 사용할 수 없다.__ +- __`slice`__ + +```javascript + function checkNum() { + const argArray = Array.prototype.slice.call(arguments); + // Array + console.log(toString.call(argArray)); + // 만약 slice 안하면 Object Arguments 반환 + + // every : 모두가 true일 경우만 true를 반환한다. + const result = argArray.every( (v) => typeof v === "number"); + // false -> "55"는 문자열 + console.log(result); + } + const result = checkNum(10, 2, 3, 4,5 , "55"); +``` + +### ES6 spread operator + +- 매개변수에 ... -> reset parameters +- 그 이외 변수 값 -> spread operator + +```javascript + function checkNum(...argArray) { + // Array + console.log(toStirng.call(argArray)); + const result = argArray.every( (v) => typeof v === "number"); + console.log(result); + } + const reuslt = checkNum(10 , 2, "55"); +``` \ No newline at end of file diff --git a/ES2015(ES6)/10. Template/index.css b/ES2015(ES6)/Function/index.css similarity index 100% rename from ES2015(ES6)/10. Template/index.css rename to ES2015(ES6)/Function/index.css diff --git a/ES2015(ES6)/11. function/index.html b/ES2015(ES6)/Function/index.html similarity index 100% rename from ES2015(ES6)/11. function/index.html rename to ES2015(ES6)/Function/index.html diff --git "a/ES2015(ES6)/8. Map & WeakMap/1. Map & WeakMap \354\266\224\352\260\200\354\240\225\353\263\264\353\245\274 \353\213\264\354\235\200 \352\260\235\354\262\264\354\240\200\354\236\245\355\225\230\352\270\260.js" "b/ES2015(ES6)/Map & WeakMap/1. Map & WeakMap \354\266\224\352\260\200\354\240\225\353\263\264\353\245\274 \353\213\264\354\235\200 \352\260\235\354\262\264\354\240\200\354\236\245\355\225\230\352\270\260.js" similarity index 100% rename from "ES2015(ES6)/8. Map & WeakMap/1. Map & WeakMap \354\266\224\352\260\200\354\240\225\353\263\264\353\245\274 \353\213\264\354\235\200 \352\260\235\354\262\264\354\240\200\354\236\245\355\225\230\352\270\260.js" rename to "ES2015(ES6)/Map & WeakMap/1. Map & WeakMap \354\266\224\352\260\200\354\240\225\353\263\264\353\245\274 \353\213\264\354\235\200 \352\260\235\354\262\264\354\240\200\354\236\245\355\225\230\352\270\260.js" diff --git "a/ES2015(ES6)/8. Map & WeakMap/2. WeakMap \355\201\264\353\236\230\354\212\244 \354\235\270\354\212\244\355\204\264\354\212\244 \353\263\200\354\210\230 \353\263\264\355\230\270\355\225\230\352\270\260.js" "b/ES2015(ES6)/Map & WeakMap/2. WeakMap \355\201\264\353\236\230\354\212\244 \354\235\270\354\212\244\355\204\264\354\212\244 \353\263\200\354\210\230 \353\263\264\355\230\270\355\225\230\352\270\260.js" similarity index 100% rename from "ES2015(ES6)/8. Map & WeakMap/2. WeakMap \355\201\264\353\236\230\354\212\244 \354\235\270\354\212\244\355\204\264\354\212\244 \353\263\200\354\210\230 \353\263\264\355\230\270\355\225\230\352\270\260.js" rename to "ES2015(ES6)/Map & WeakMap/2. WeakMap \355\201\264\353\236\230\354\212\244 \354\235\270\354\212\244\355\204\264\354\212\244 \353\263\200\354\210\230 \353\263\264\355\230\270\355\225\230\352\270\260.js" diff --git a/ES2015(ES6)/Map & WeakMap/README.md b/ES2015(ES6)/Map & WeakMap/README.md new file mode 100644 index 0000000..5edec51 --- /dev/null +++ b/ES2015(ES6)/Map & WeakMap/README.md @@ -0,0 +1,103 @@ +# Map & WeakMap + +## 1. Map & WeakMap 추가정보를 담은 객체 저장하기 + +- 개선해보려고 노력한 STL +- `Array` -> set, weakSet +- `Object` -> map, weakMap +- __map은 key / value__ + +**WeakMap** + +```javascript + let wm = new WeakMap(); + let myfun = function(){}; + + // 이 함수가 얼마나 실행됐지?를 알려고 할 때...? count + wm.set(myfun, 0); + + // out: function => 0 + console.log(wm); + + let count = 0; + for(let i = 0; i < 10; i++) { + count = wm.get(myfun); // get value + count++; + wm.set(myfun, count); + } + + // console.log(wm); + // out: 10 + console.log(wm.get(myfun)); + + // garbageCollector + myfun = null; + // out: undefined + console.log(wm.get(myfun)); + // out: false + console.log(wm.has(myfun)); +``` + +## 2. WeakMap 클래스 인스턴스 변수 보호하기 + +### 1. 객체 생성 + +- private variable create + +```javascript + function Area(height, width){ + this.height = height; + this.width = width; + } + + Area.prototype.getArea = function() { + return this.height * this.width; + } + + let myarea = new Area(10, 20); + console.log(myarea.getArea()); + console.log(myarea.height); // 출력이 된다... +``` + +```javascript + const obj = {}; + function Area3(height, width){ + obj['height'] = height; + obj['width'] = width; + } + Area3.prototype.getArea = function() { + return obj.height * obj.width; + } + let myarea3 = new Area3(10, 20); + + console.log(obj); + // garbageCollector 대상이 아니다. + // 계속 쌓여 나감... (Warning) + myarea = null; + console.log(obj); +``` + +### 2. 개선 방향 + +__wm 장점 부각__ + +```javascript + const wm = new WeakMap(); + function Area2(height, width){ + // 단점은 클래스 밖에 전역변수를 보관하고 있다... + wm.set(this, {height, width}); + } + Area2.prototype.getArea = function() { + const {height, width} = wm.get(this); + return height * width; + } + let myarea2 = new Area2(10, 20); + console.log(myarea2.getArea()); + console.log(myarea2.height); // undefined + // 전역변수 -> weakMap 활용 !! + console.log(wm.has(myarea2)); + // out: true + myarea2 = null; + console.log(wm.has(myarea2)); + // out: false +``` \ No newline at end of file diff --git a/ES2015(ES6)/13. module/default_module.js b/ES2015(ES6)/Module/default_module.js similarity index 100% rename from ES2015(ES6)/13. module/default_module.js rename to ES2015(ES6)/Module/default_module.js diff --git a/ES2015(ES6)/13. module/index.html b/ES2015(ES6)/Module/index.html similarity index 84% rename from ES2015(ES6)/13. module/index.html rename to ES2015(ES6)/Module/index.html index b1bc27a..01a325a 100644 --- a/ES2015(ES6)/13. module/index.html +++ b/ES2015(ES6)/Module/index.html @@ -8,6 +8,6 @@ Hello world!!! - + \ No newline at end of file diff --git a/ES2015(ES6)/13. module/module_test.js b/ES2015(ES6)/Module/module_test.js similarity index 100% rename from ES2015(ES6)/13. module/module_test.js rename to ES2015(ES6)/Module/module_test.js diff --git a/ES2015(ES6)/Module/test.js b/ES2015(ES6)/Module/test.js new file mode 100644 index 0000000..3db2ebb --- /dev/null +++ b/ES2015(ES6)/Module/test.js @@ -0,0 +1,8 @@ +import MyLogger from './module_test.js'; +import _ from './default_module.js'; + +_.log('my first test data'); + +const logger = new MyLogger(); +_.log(`lectures of yjkwon07 are ${logger.getLecture()}`); +_.log(`current hour is ${logger.getCurrentHour()}`); \ No newline at end of file diff --git "a/ES2015(ES6)/5. Object/1. \352\260\204\353\213\250\355\236\210 \352\260\235\354\262\264\354\203\235\354\204\261\355\225\230\352\270\260.js" "b/ES2015(ES6)/Object/1. \352\260\204\353\213\250\355\236\210 \352\260\235\354\262\264\354\203\235\354\204\261\355\225\230\352\270\260.js" similarity index 100% rename from "ES2015(ES6)/5. Object/1. \352\260\204\353\213\250\355\236\210 \352\260\235\354\262\264\354\203\235\354\204\261\355\225\230\352\270\260.js" rename to "ES2015(ES6)/Object/1. \352\260\204\353\213\250\355\236\210 \352\260\235\354\262\264\354\203\235\354\204\261\355\225\230\352\270\260.js" diff --git a/ES2015(ES6)/Object/README.md b/ES2015(ES6)/Object/README.md new file mode 100644 index 0000000..6d6f0cd --- /dev/null +++ b/ES2015(ES6)/Object/README.md @@ -0,0 +1,84 @@ +# Object + +```javascript + const name = "yjkwon07"; + const age = 26; + + var obj = { + name : name, + age : age + }; + console.log("obj 1 : ", obj); +``` + +## 1. 새로운 Object 반환 + +```javascript + function getObj() { + const name = "Im ck"; + + const getName = function() { + return name; + } + + const setName = function(newname) { + name = newname; + } + + const printName = function() { + console.log(name); + } + + // Object 리터럴 + return { + // getName : getName, + // setName : setName + + // 이름과 value 값이 일치하면, + getName, + setName, + // Object의 value도 반환 가능 + name + } + } + var obj2 = getObj(); + console.log("obj2 : " , obj2); +``` + +## 2. key와 function 없이 생성 + +```javascript + const data = { + name, + getName() { + + }, + }; + console.log("obj3 : " ,data); +``` + +## 3. 동적 속성 할당을 리러털 안에 표현 + +```javascript + var sayNode = function() { + console.log("Node"); + } + var es = "ES"; + + const newObject = { + // function{} + sayJS() { + console.log("JS"); + }, + // key , value가 같다면 하 나로!! + sayNode, + // 동적 속성 할당을 리러털 안에 표현이 가능하다. + // { [변수] : 값 } + [es+6]: "Fatasitic", + }; + newObject[es + 7] = 'Fantasitic'; + newObject.sayNode(); // Node + newObject.sayJS(); // JS + console.log(newObject.ES6); + console.log(newObject.ES7); +``` \ No newline at end of file diff --git "a/ES2015(ES6)/12. \352\260\235\354\262\264/1. class\353\245\274 \355\206\265\355\225\234 \352\260\235\354\262\264\354\203\235\354\204\261.js" "b/ES2015(ES6)/Object2/1. class\353\245\274 \355\206\265\355\225\234 \352\260\235\354\262\264\354\203\235\354\204\261.js" similarity index 100% rename from "ES2015(ES6)/12. \352\260\235\354\262\264/1. class\353\245\274 \355\206\265\355\225\234 \352\260\235\354\262\264\354\203\235\354\204\261.js" rename to "ES2015(ES6)/Object2/1. class\353\245\274 \355\206\265\355\225\234 \352\260\235\354\262\264\354\203\235\354\204\261.js" diff --git "a/ES2015(ES6)/12. \352\260\235\354\262\264/2. Object assign\354\234\274\353\241\234 JS\352\260\235\354\262\264\353\247\214\353\223\244\352\270\260.js" "b/ES2015(ES6)/Object2/2. Object assign\354\234\274\353\241\234 JS\352\260\235\354\262\264\353\247\214\353\223\244\352\270\260.js" similarity index 100% rename from "ES2015(ES6)/12. \352\260\235\354\262\264/2. Object assign\354\234\274\353\241\234 JS\352\260\235\354\262\264\353\247\214\353\223\244\352\270\260.js" rename to "ES2015(ES6)/Object2/2. Object assign\354\234\274\353\241\234 JS\352\260\235\354\262\264\353\247\214\353\223\244\352\270\260.js" diff --git "a/ES2015(ES6)/12. \352\260\235\354\262\264/3. Object assign\354\234\274\353\241\234 Immutable \352\260\235\354\262\264\353\247\214\353\223\244\352\270\260.js" "b/ES2015(ES6)/Object2/3. Object assign\354\234\274\353\241\234 Immutable \352\260\235\354\262\264\353\247\214\353\223\244\352\270\260.js" similarity index 100% rename from "ES2015(ES6)/12. \352\260\235\354\262\264/3. Object assign\354\234\274\353\241\234 Immutable \352\260\235\354\262\264\353\247\214\353\223\244\352\270\260.js" rename to "ES2015(ES6)/Object2/3. Object assign\354\234\274\353\241\234 Immutable \352\260\235\354\262\264\353\247\214\353\223\244\352\270\260.js" diff --git "a/ES2015(ES6)/12. \352\260\235\354\262\264/4. Object setPrototypeOf\353\241\234 \352\260\235\354\262\264 \353\247\214\353\223\244\352\270\260.js" "b/ES2015(ES6)/Object2/4. Object setPrototypeOf\353\241\234 \352\260\235\354\262\264 \353\247\214\353\223\244\352\270\260.js" similarity index 100% rename from "ES2015(ES6)/12. \352\260\235\354\262\264/4. Object setPrototypeOf\353\241\234 \352\260\235\354\262\264 \353\247\214\353\223\244\352\270\260.js" rename to "ES2015(ES6)/Object2/4. Object setPrototypeOf\353\241\234 \352\260\235\354\262\264 \353\247\214\353\223\244\352\270\260.js" diff --git "a/ES2015(ES6)/12. \352\260\235\354\262\264/5.Object setPrototypeOf\353\241\234 \352\260\235\354\262\264\352\260\204 prototype chain\354\203\235\354\204\261\355\225\230\352\270\260.js" "b/ES2015(ES6)/Object2/5.Object setPrototypeOf\353\241\234 \352\260\235\354\262\264\352\260\204 prototype chain\354\203\235\354\204\261\355\225\230\352\270\260.js" similarity index 100% rename from "ES2015(ES6)/12. \352\260\235\354\262\264/5.Object setPrototypeOf\353\241\234 \352\260\235\354\262\264\352\260\204 prototype chain\354\203\235\354\204\261\355\225\230\352\270\260.js" rename to "ES2015(ES6)/Object2/5.Object setPrototypeOf\353\241\234 \352\260\235\354\262\264\352\260\204 prototype chain\354\203\235\354\204\261\355\225\230\352\270\260.js" diff --git "a/ES2015(ES6)/12. \352\260\235\354\262\264/README.md" b/ES2015(ES6)/Object2/README.md similarity index 100% rename from "ES2015(ES6)/12. \352\260\235\354\262\264/README.md" rename to ES2015(ES6)/Object2/README.md diff --git a/ES2015(ES6)/Proxy/interception.js b/ES2015(ES6)/Proxy/interception.js new file mode 100644 index 0000000..caa87b0 --- /dev/null +++ b/ES2015(ES6)/Proxy/interception.js @@ -0,0 +1,71 @@ +const myObj = {name :"yjkwon07", changeValue : 0}; + +const proxy = new Proxy(myObj, { + get : function(target, property, receiver) { + console.log("get value"); + return target[property]; + }, + set : function(target, property, value) { + console.log("set value"); + target['changeValue']++; + target[property] = value; + } +}); +myObj.name = "go"; +myObj.changeValue; // out: 0 +myObj.name = "ggh"; + +proxy.name = "code"; +proxy.changeValue; // out: 1 +proxy.name = "cocoding"; +proxy.changeValue; // out: 2 + +// 값을 보호 +const proxy = new Proxy({name :"yjkwon07", changeValue : 0}, { + get : function(target, property, receiver) { + console.log("get value"); + return target[property]; + }, + set : function(target, property, value) { + console.log("set value"); + target['changeValue']++; + target[property] = value; + } +}); + +proxy.name = "code"; +proxy.changeValue; +proxy.name = "cocoding"; +proxy.changeValue; + +// Reflect +const proxy = new Proxy({name :"yjkwon07", changeValue : 0}, { + get : function(target, property, receiver) { + return Reflect.get(target, property); + }, + set : function(target, property, value) { + console.log("set value"); + target['changeValue']++; + target[property] = value; + } +}); + +proxy.name = "gogo"; +proxy.name = "gogo2"; +proxy.changeValue; +proxy.name; + +// default value return +const proxy = new Proxy({name :"yjkwon07", changeValue : 0}, { + get : function(target, property, receiver) { + return (property in target) ? target[property] : "anonymous" + }, + set : function(target, property, value) { + console.log("set value"); + target['changeValue']++; + target[property] = value; + } +}); + +proxy.name; +proxy.fddsfa; \ No newline at end of file diff --git a/ES2015(ES6)/1. Scope/2. let.js b/ES2015(ES6)/Scope/2. let.js similarity index 100% rename from ES2015(ES6)/1. Scope/2. let.js rename to ES2015(ES6)/Scope/2. let.js diff --git "a/ES2015(ES6)/1. Scope/3. let\352\263\274 closure.js" "b/ES2015(ES6)/Scope/3. let\352\263\274 closure.js" similarity index 100% rename from "ES2015(ES6)/1. Scope/3. let\352\263\274 closure.js" rename to "ES2015(ES6)/Scope/3. let\352\263\274 closure.js" diff --git "a/ES2015(ES6)/1. Scope/4. const-\354\204\240\354\226\270\353\220\234 \353\263\200\354\210\230 \354\247\200\355\202\244\352\270\260.js" "b/ES2015(ES6)/Scope/4. const-\354\204\240\354\226\270\353\220\234 \353\263\200\354\210\230 \354\247\200\355\202\244\352\270\260.js" similarity index 100% rename from "ES2015(ES6)/1. Scope/4. const-\354\204\240\354\226\270\353\220\234 \353\263\200\354\210\230 \354\247\200\355\202\244\352\270\260.js" rename to "ES2015(ES6)/Scope/4. const-\354\204\240\354\226\270\353\220\234 \353\263\200\354\210\230 \354\247\200\355\202\244\352\270\260.js" diff --git "a/ES2015(ES6)/1. Scope/5. const \355\212\271\354\204\261\352\263\274 immutable array.js" "b/ES2015(ES6)/Scope/5. const \355\212\271\354\204\261\352\263\274 immutable array.js" similarity index 100% rename from "ES2015(ES6)/1. Scope/5. const \355\212\271\354\204\261\352\263\274 immutable array.js" rename to "ES2015(ES6)/Scope/5. const \355\212\271\354\204\261\352\263\274 immutable array.js" diff --git a/ES2015(ES6)/1. Scope/README.md b/ES2015(ES6)/Scope/README.md similarity index 55% rename from ES2015(ES6)/1. Scope/README.md rename to ES2015(ES6)/Scope/README.md index a2862e9..96eacf6 100644 --- a/ES2015(ES6)/1. Scope/README.md +++ b/ES2015(ES6)/Scope/README.md @@ -1,12 +1,12 @@ # Scope ## 1. Scope Chain -### var -__function단위의 scope만 존재했기 때문에__ -fucntion안의 지역변수값을 먼저 찾고 그게 없다면 +### var -전역변수로 위로 scope chain으로 찾게 된다. +- __function단위의 scope만 존재했기 때문에__ +- fucntion안의 지역변수값을 먼저 찾고 그게 없다면 +- 전역변수로 위로 scope chain으로 찾게 된다. ```javascript var name = "global var"; @@ -26,6 +26,7 @@ fucntion안의 지역변수값을 먼저 찾고 그게 없다면 ``` ### let + **block scope**를 갖게 된다. ```javascript @@ -43,35 +44,26 @@ fucntion안의 지역변수값을 먼저 찾고 그게 없다면 console.log(myif) // -> exception ``` -### var VS. let, const 차이점~!! -- Hoist -- [var(function-scope) VS. let, const(block-scope)](https://gist.github.com/LeoHeo/7c2a2a6dbcf80becaaa1e61e90091e5d) ## 2. Closure scope -### var -__callback은 나중에 실행된다.__ - -callback이 가지고 있는 i 값은 callback 밖에 있는 var i를 참조 하여 - -클로저 변수를 가지게 된다. -i 값이 변경이 되다 보니... i를 참조하여 쉐어 하고 있는 상황에 - -i는 마지막에 4가 되어 모두 4가 나오게 된다. +### var (전역변수화) ```javascript (function closure_p() { var list = document.querySelector("li"); for (var i = 0; i < list.clientHeight; i++) { list[i].addEventListener("click", function () { - console.log(i + "번째 리스트 입니다."); + console.log(i + "번째 리스트 입니다."); // 4번째 리스트 입니다. }); } })(); ``` -### let을 사용하기 (지역변수화 시키기) -i는 **let키워드**를 사용했기 때문에 각각의 **블록함수로써 지역변수** 값을 할당하게 된다. +### let을 사용하기 (지역변수화) + +- i는 **let키워드**를 사용했기 때문에 각각의 **블록함수로써 지역변수** 값을 할당하게 된다. + ```javascript (function closure_p() { var list = document.querySelector("li"); @@ -84,9 +76,9 @@ i는 **let키워드**를 사용했기 때문에 각각의 **블록함수로써 ``` ## 3. const -**var로** 대문자로 약속을 하는 상황 -**상수 키워드로 약속 지켰지만 변경이 됨..** +- **상수 키워드로 약속 지켰지만 변경이 됨..** + ``` javascript function isYourHome() { var HOME_NAME = "my house"; @@ -94,13 +86,9 @@ i는 **let키워드**를 사용했기 때문에 각각의 **블록함수로써 } ``` -const로 변경을 금지 시킴 - -const를 기본으로 사용한다. - -__그런데 변경이 될 수 잇는 변수는 let을 사용한다.__ - -**`var는 사용하지 않는다.(지양한다.)`** +- const로 변경을 금지 시킴 +- const를 기본으로 사용한다. +- __그런데 변경이 될 수 잇는 변수는 let을 사용한다.__ ```javascript function isYourHome() { @@ -118,14 +106,14 @@ __그런데 변경이 될 수 잇는 변수는 let을 사용한다.__ ## 4. const 특성과 immutable array -### const 특성 -추가가 됨.... -__const를 사용하더라도 배열과 오브젝트의 값을 변경하는 것은 가능하다.__ - -__`절대 불변이 아니다.`__ +### const 특성 -__일종의 값을(객체 참조) 재할당하는 코드만 불가능하다.(주소)__ +- __const를 사용하더라도 배열과 오브젝트의 값을 변경하는 것은 가능하다.__ +- __`절대 불변이 아니다.`__ +- __일종의 값을(객체 참조) 재할당하는 코드만 불가능하다.(주소)__ +- **const는 메모리 주소 참조를 하고 있으므로 주소 값을 바꾸지는 못한다.** +- **`즉, const 키워드를 가진 객체는 주소를 못바꾸지만 가지고 있는 변수의 값을 바꿀 수는 있다.`** ```javascript function whatIsHome() { @@ -133,15 +121,6 @@ __일종의 값을(객체 참조) 재할당하는 코드만 불가능하다.(주 list.push("bananaa"); } ``` -**const는 메모리 주소 참조를 하고 있으므로 주소 값을 바꾸지는 못한다.** - - const a = 0 => **리터럴 상수** - - const a = {a:2, b:3} => **객체 참조(주소)** - -**`즉, const 키워드를 가진 객체는 주소를 못바꾸지만 가지고 있는 변수의 값을 바꿀 수는 있다.`** - - const에 객체가 할당된 경우 객체 내부 속성은 바꿀 수 있다. ```javascript const h = [1, 2, 3, 4, 5]; @@ -155,14 +134,10 @@ __일종의 값을(객체 참조) 재할당하는 코드만 불가능하다.(주 ### immutable array?🤔 - 뒤로가기, 앞으로가기 데이터를 저장해서 보여주어야 하는 상황. - - conast array는 참조하는 값이 바뀜.. - - 이전의 데이터를(original) 알 수 없다. -__So immutable(불변) array!!!__ - -### immutable array +#### concat ```javascript const list = ["apple", "orange", "watermelon"]; // 새로운 배열 @@ -171,4 +146,4 @@ __So immutable(불변) array!!!__ console.log(list === list2); // out: false ``` -list를 그대로 보관 하여 값이 바뀜이 없다. \ No newline at end of file +- list를 그대로 보관 하여 값이 바뀜이 없다. \ No newline at end of file diff --git "a/ES2015(ES6)/7. Set&WeakSet/1. Set \354\234\274\353\241\234 \354\234\240\353\213\210\355\201\254\355\225\234 \353\260\260\354\227\264\353\247\214\353\223\244\352\270\260.js" "b/ES2015(ES6)/Set&WeakSet/1. Set \354\234\274\353\241\234 \354\234\240\353\213\210\355\201\254\355\225\234 \353\260\260\354\227\264\353\247\214\353\223\244\352\270\260.js" similarity index 100% rename from "ES2015(ES6)/7. Set&WeakSet/1. Set \354\234\274\353\241\234 \354\234\240\353\213\210\355\201\254\355\225\234 \353\260\260\354\227\264\353\247\214\353\223\244\352\270\260.js" rename to "ES2015(ES6)/Set&WeakSet/1. Set \354\234\274\353\241\234 \354\234\240\353\213\210\355\201\254\355\225\234 \353\260\260\354\227\264\353\247\214\353\223\244\352\270\260.js" diff --git "a/ES2015(ES6)/7. Set&WeakSet/2. WeakSet \354\234\274\353\241\234 \355\232\250\352\263\274\354\240\201\354\234\274\353\241\234 \352\260\235\354\262\264\355\203\200\354\236\205\354\240\200\354\236\245\355\225\230\352\270\260.js" "b/ES2015(ES6)/Set&WeakSet/2. WeakSet \354\234\274\353\241\234 \355\232\250\352\263\274\354\240\201\354\234\274\353\241\234 \352\260\235\354\262\264\355\203\200\354\236\205\354\240\200\354\236\245\355\225\230\352\270\260.js" similarity index 100% rename from "ES2015(ES6)/7. Set&WeakSet/2. WeakSet \354\234\274\353\241\234 \355\232\250\352\263\274\354\240\201\354\234\274\353\241\234 \352\260\235\354\262\264\355\203\200\354\236\205\354\240\200\354\236\245\355\225\230\352\270\260.js" rename to "ES2015(ES6)/Set&WeakSet/2. WeakSet \354\234\274\353\241\234 \355\232\250\352\263\274\354\240\201\354\234\274\353\241\234 \352\260\235\354\262\264\355\203\200\354\236\205\354\240\200\354\236\245\355\225\230\352\270\260.js" diff --git a/ES2015(ES6)/Set&WeakSet/README.md b/ES2015(ES6)/Set&WeakSet/README.md new file mode 100644 index 0000000..62a5eb2 --- /dev/null +++ b/ES2015(ES6)/Set&WeakSet/README.md @@ -0,0 +1,70 @@ +# Set&WeakSet + +## 1. Set으로 유니크한 배열만들기 + +- 'object' of Set +- __`set:` 중복없이 유일한 값을 저장하려고 할때.__ +- 이미 존재하는지 체크할 때 유용. +- __set도 사실 `배열과` 유사함__ + +```javascript + let mySet = new Set(); + console.log(toString.call(mySet)); + mySet.add("yjkwon07"); + mySet.add("navie"); + mySet.add("ck"); + // 존재 하는지? + // has : 가지고 있는지 + console.log(mySet.has("yjkwon07")); + + // 순회 + mySet.forEach(function(v) { + console.log(v); + }); + + // delete : value삭제 + mySet.delete("yjkwon07"); + // 순회 + console.log("after, delete : "); + mySet.forEach(function(v) { + console.log(v); + }); +``` + +## 2. WeakSet으로 효과적으로 객체타입저장하기 + +- **`weakset :`** **참조를 가지고 있는 객체만** 저장이 가능하다. +- 객체형태를 중복없이 저장하려 할 때 유용하다. + +```javascript + let arr = [1, 2, 3, 4]; + let arr2 = [5, 6, 7, 8]; + let obj = {arr, arr2}; + + let ws = new WeakSet(); + + // invalid type Error (Only Object) + // primitive type Nope!~~ + // ws.add(111); + // ws.add("111"); + // ws.add(null); + + ws.add(arr); + ws.add(arr2); + ws.add(obj); + + // ok 함수는 참조객체니깐 + ws.add(function(){}); + + // garbageCollection 대상이 된다.!!!! + arr = null; + + // WeakSet에서는 존재하는것 처럼 보인다. + console.log(ws); + + // arr -> 유효하지 않은 객체라는것을 알고 있다. + // (null!!! -> garbageCollector) + console.log(ws.has(arr), ws.has(arr2)); + // out: false true +``` + diff --git "a/ES2015(ES6)/2. String/1. ES2015 String \354\227\220 \354\203\210\353\241\234\354\232\264 \353\251\224\354\204\234\353\223\234\353\223\244.js" "b/ES2015(ES6)/String/1. ES2015 String \354\227\220 \354\203\210\353\241\234\354\232\264 \353\251\224\354\204\234\353\223\234\353\223\244.js" similarity index 100% rename from "ES2015(ES6)/2. String/1. ES2015 String \354\227\220 \354\203\210\353\241\234\354\232\264 \353\251\224\354\204\234\353\223\234\353\223\244.js" rename to "ES2015(ES6)/String/1. ES2015 String \354\227\220 \354\203\210\353\241\234\354\232\264 \353\251\224\354\204\234\353\223\234\353\223\244.js" diff --git a/ES2015(ES6)/2. String/README.md b/ES2015(ES6)/String/README.md similarity index 100% rename from ES2015(ES6)/2. String/README.md rename to ES2015(ES6)/String/README.md diff --git "a/ES2015(ES6)/10. Template/1. Template\354\262\230\353\246\254.js" "b/ES2015(ES6)/Template/1. Template\354\262\230\353\246\254.js" similarity index 100% rename from "ES2015(ES6)/10. Template/1. Template\354\262\230\353\246\254.js" rename to "ES2015(ES6)/Template/1. Template\354\262\230\353\246\254.js" diff --git a/ES2015(ES6)/10. Template/2. Tagged Template literals.js b/ES2015(ES6)/Template/2. Tagged Template literals.js similarity index 100% rename from ES2015(ES6)/10. Template/2. Tagged Template literals.js rename to ES2015(ES6)/Template/2. Tagged Template literals.js diff --git a/ES2015(ES6)/Template/README.md b/ES2015(ES6)/Template/README.md new file mode 100644 index 0000000..80e6786 --- /dev/null +++ b/ES2015(ES6)/Template/README.md @@ -0,0 +1,69 @@ +# Template + +## 1. Template처리 + +- __json으로 응답을 받고,__ +- `javascript object로 변환한 후에` +- 어떠한 데이터처리 조작을 한 후에 dom에 추가 하는 일 +- __데이터 + HTML문자열의 결합이 필요하기 때문에__ + +```javascript + const data = [ + { + name : 'coffe-bean', + order :true, + items : ['americano', 'milk', 'green-tea'] + }, + { + name : 'starbucks', + order : false, + }, + { + name : 'coffe-King', + order :true, + items : ['americano', 'latte'] + }, + ] + + // 각각의 key가 다르기 때문에 좋지 않은 코드 + const template = `
    welcome ${data[0].name} !!
    `; + console.log(template); +``` + +## 2. Tagged Template literals + +```javascript + const data = [ + { + name : 'coffe-bean', + order :true, + items : ['americano', 'milk', 'green-tea'] + }, + { + name : 'starbucks', + order : false, + }, + { + name : 'coffe-King', + order :true, + items : ['americano', 'latte'] + }, + ]; + + function fn(tags , name, items) { + console.log('tags : ',tags); + console.log('name : ',name); + console.log('items : ',items); + if(typeof items === "undefined"){ + items = " 주문가능한 상품이 없습니다. "; + } + return (tags[0] + name + tags[1] + items + tags[2]); + } + + data.forEach((V) => { + let template = fn`

    welcome ${V.name} !!

    +

    주문가능항목

    ${V.items}
    `; + console.log(template); + document.querySelector("#message").innerHTML += template; + }); +``` diff --git a/ES2015(ES6)/11. function/index.css b/ES2015(ES6)/Template/index.css similarity index 100% rename from ES2015(ES6)/11. function/index.css rename to ES2015(ES6)/Template/index.css diff --git a/ES2015(ES6)/10. Template/index.html b/ES2015(ES6)/Template/index.html similarity index 100% rename from ES2015(ES6)/10. Template/index.html rename to ES2015(ES6)/Template/index.html diff --git "a/ES2018/7.\354\275\234\353\260\261\352\263\274 \355\224\204\353\241\234\353\257\270\354\212\244(Promise)\353\271\204\352\265\220.js" "b/ES2018/7.\354\275\234\353\260\261\352\263\274 \355\224\204\353\241\234\353\257\270\354\212\244(Promise)\353\271\204\352\265\220.js" index ed622a9..ef44b95 100644 --- "a/ES2018/7.\354\275\234\353\260\261\352\263\274 \355\224\204\353\241\234\353\257\270\354\212\244(Promise)\353\271\204\352\265\220.js" +++ "b/ES2018/7.\354\275\234\353\260\261\352\263\274 \355\224\204\353\241\234\353\257\270\354\212\244(Promise)\353\271\204\352\265\220.js" @@ -1,7 +1,7 @@ -// 콜백을 쓰는 이유가 JS 코드 중 논블록킹(비동기)으로 작동하기 때문에 +// * 콜백을 쓰는 이유가 JS 코드 중 논블록킹(비동기)으로 작동하기 때문에 -// But, 연달아 콜백이 일어날 때 문제가 발생할 수 있다. -// 콜백 안에 또 콜백을 호출... call back hell..... +// * But, 연달아 콜백이 일어날 때 문제가 발생할 수 있다. +// * 콜백 안에 또 콜백을 호출... call back hell..... Users.findOne('zero', (err, updateUser)=> { if(err) return console.log(err); console.log(user); @@ -13,77 +13,78 @@ Users.findOne('zero', (err, updateUser)=> { }); }); }); + //--------------------------------------------------- -// sol 1.콜백을 변수로 빼서 사용 -// But, 흐름 파악하기 까다로움.... 코드를 계속해서 찾아야 한다.... +// * sol 1.콜백을 변수로 빼서 사용 +// * But, 흐름 파악하기 까다로움.... 코드를 계속해서 찾아야 한다.... const afterRemove = (err, removeUser) => { - console.log(removeUser); + console.log(removeUser); } const afterUpdate = (err, updateUser) => { - console.log(updateUser); - Users.remove('nero', afterRemove); + console.log(updateUser); + Users.remove('nero', afterRemove); } Users.findOne('zero', (err, user) => { - if(err) return console.err(err); - console.log(user); - Users.update('zero', 'nero', afterUpdate); + if(err) return console.err(err); + console.log(user); + Users.update('zero', 'nero', afterUpdate); }); //--------------------------------------------------------------------- -// 노드의 API들이 'Promise기반'으로 재편되고 있어 중요해졌다. -// sol 2. Promise 생성자 -// Promise를 지원하는 메서드는 내부적으로 지원해주기 때문에 사용이 가능하다. +// * 노드의 API들이 'Promise기반'으로 재편되고 있어 중요해졌다. +// * sol 2. Promise 생성자 +// * Promise를 지원하는 메서드는 내부적으로 지원해주기 때문에 사용이 가능하다. const plus = new Promise((resolve, reject) => { - // 콜백 함수 구현 - const a = 1; - const b = 2; - if(a + b > 2){ - // 성공메시지 전송 - resolve(a + b); - } else { - // 실패메시지 전송 - reject(a + b); - } + // 콜백 함수 구현 + const a = 1; + const b = 2; + if(a + b > 2){ + // 성공메시지 전송 + resolve(a + b); + } else { + // 실패메시지 전송 + reject(a + b); + } }); plus - .then((sucess) => { - console.log(sucess); - }) - .catch((fail) => { - console.log(fail); - }); +.then((sucess) => { + console.log(sucess); +}) +.catch((fail) => { + console.log(fail); +}); // out : 3 const Users = { - findOne() { - return new Promise((res , rej) => { - if('사용자를 찾으면') { - res('사용자'); - } - else { - rej("못 찾겠으"); - } - }) - }, - remove() { - return new Promise(); - }, - update() { - return new Promise(); - } + findOne() { + return new Promise((res , rej) => { + if('사용자를 찾으면') { + res('사용자'); + } + else { + rej("못 찾겠으"); + } + }) + }, + remove() { + return new Promise(); + }, + update() { + return new Promise(); + } }; Users.findOne() .then() .catch(); -// then에 리턴 값이 있으면, 다음 then으로 넘어간다. -// Promise를 리턴하면 resolve나 reject 되어 넘어간다. +// * then에 리턴 값이 있으면, 다음 then으로 넘어간다. +// * Promise를 리턴하면 resolve나 reject 되어 넘어간다. const condition = true; -const promise = new Promise( (resolve, reject) => { +const promise = new Promise((resolve, reject) => { if(condition) { resolve('성공'); } @@ -91,36 +92,55 @@ const promise = new Promise( (resolve, reject) => { reject('실패'); } }); -// 구현 된 생성사자 결과값을 message로 본낸다. -// 받고 난 후 다시 return 시 Promise객체를 리턴한다. -// 다시 .then으로 이전 then에서 return한 Promise를 사용하여 계산한다. + +// * 구현 된 생성사자 결과값을 message로 본낸다. +// * 받고 난 후 다시 return 시 Promise객체를 리턴한다. +// * 다시 .then으로 이전 then에서 return한 Promise를 사용하여 계산한다. promise - .then( (message) => { - return new Promise( (resolve, reject) => { - // 로직 구현 - resolve(message); - }) - .then( (message2) => { - console.log(message2); - return new Promise( (resolve, reject) => { - resolve(message3); - }); - }) - .then((message3) => { - console.log(message3); - }) - .catch((err) =>{ - console.log(err); - }); +.then((message) => { + return new Promise((resolve, reject) => { + // * 로직 구현 + resolve(message); + }) + .then((message2) => { + console.log(message2); + return new Promise((resolve, reject) => { + resolve(message2); + }); + }) + .then((message3) => { + console.log(message3); + }) + .catch((err) =>{ + console.log(err); + }); +}); + +promise +.then(async (message) => { + try { + const message2 = await new Promise((resolve, reject) => { + // * 로직 구현 + resolve(message); }); + console.log(message2); + const message3 = await new Promise((resolve, reject) => { + resolve(message2); + }); + console.log(message3); + } + catch (err) { + console.log(err); + } +}); // out : 성공 // 무조건 실패 -const promis = new Promise( (res, rej) => { - rej("실패"); +const promis = new Promise((res, rej) => { + rej("실패"); }); // 무조건 성공 const sucessPromise = Promise.resolve('성공'); // catch 쓸 필요 없어 // 무조건 실패 -const failuerPromise = Promise.reject('실패'); // then 쓸 필요 없어 +const failuerPromise = Promise.reject('실패'); // then 쓸 필요 없어 \ No newline at end of file diff --git a/ES2018/8.PromiseAPI.js b/ES2018/8.PromiseAPI.js index 0cc9433..d9dc2ae 100644 --- a/ES2018/8.PromiseAPI.js +++ b/ES2018/8.PromiseAPI.js @@ -1,28 +1,27 @@ -// Promise.all로 여러 프로미스를 동시에 실행 가능하다. -// 단, 하나라도 실패하면 catch로 간다. +// * Promise.all로 여러 프로미스를 동시에 실행 가능하다. +// * 단, 하나라도 실패하면 catch로 간다. Promise.all([Users.findOne(), Users.remove(), Users.update()]) .then( (result) => { }) .catch( (error) => { }); -// call back : 결과를 바로 이어져서 나와야 한다. -// promise : 결과를 갖고 있지만 나중에 나와도(then이나 catch로) 된다. +// * call back : 결과를 바로 이어져서 나와야 한다. +// * promise : 결과를 갖고 있지만 나중에 나와도(then이나 catch로) 된다. -// call back -// 하나로 합쳐짐 +// * call back +// * 하나로 합쳐짐 Users.findOne('zero', (err, user) => { - console.log(user); + console.log(user); }); -// promise +// * promise const zero = Users.findOne('zero'); -// zero에는 결과값을 갖고있는 상태이다. +// * zero에는 결과값을 갖고있는 상태이다. -// 중간에 결과값을 수정도 할 수 있다. -// 개발자에게 자유도, 활용도를 높여주게끔 되어있다. +// * 중간에 결과값을 수정도 할 수 있다. +// * 개발자에게 자유도, 활용도를 높여주게끔 되어있다. zero = Users.findOne('nero'); -// 다른 로직 -// 다른 로직 -zero.then( (z) => { - console.log(z); +// * 다른 로직 +zero.then((z) => { + console.log(z); }); diff --git a/ES2018/9.async&await.js b/ES2018/9.async&await.js index 9eb9cdc..f14f9fe 100644 --- a/ES2018/9.async&await.js +++ b/ES2018/9.async&await.js @@ -14,21 +14,20 @@ Users.findOne('zero') console.error(error); }); console.log("다 찾았니?"); -// console.log가 더 빨리 출력이 된다. -// then보다 더 빨리 출력이된다는것은 순서가 이루어져있지 않다.. +// * console.log가 더 빨리 출력이 된다. +// * then보다 더 빨리 출력이된다는것은 순서가 이루어져있지 않다.. //------------------------------------------------- /* - async () => { - const 변수 = await 값 - } + * async () => { + * const 변수 = await 값 + * } */ -// async/await도 Promise기반이므로 Promise를 먼저 알아야 한다. -// 동기식으로 보이기 때문에 코드 순서와 실행 순서가 같다. -// 에러 처리를 위해 await을 try catch문으로 감싼다. -// try{} catch(error) {} +// * 동기식으로 보이기 때문에 코드 순서와 실행 순서가 같다. +// * 에러 처리를 위해 await을 try catch문으로 감싼다. +// * try{} catch(error) {} -// const func = async() => {} +// * const func = async() => {} async function func(){ try { const user = await USers.findOne('zero'); diff --git a/Modern JS/Function, Class (this).md b/Modern JS/Function, Class (this).md new file mode 100644 index 0000000..d14170c --- /dev/null +++ b/Modern JS/Function, Class (this).md @@ -0,0 +1 @@ +- [자바스크립트 개발자라면 알아야 할 33가지 개념 #15 자바스크립트 : this, call(), apply(), bind()](https://velog.io/@jakeseo_me/2019-05-07-1605-%EC%9E%91%EC%84%B1%EB%90%A8-qpjvdgllm8) \ No newline at end of file diff --git a/Modern JS/JS_Function.md b/Modern JS/JS_Function.md index 040dbff..cf24ed8 100644 --- a/Modern JS/JS_Function.md +++ b/Modern JS/JS_Function.md @@ -1,16 +1,16 @@ # JS Function - [JS Function](#js-function) - - [함수의 정의](#%ed%95%a8%ec%88%98%ec%9d%98-%ec%a0%95%ec%9d%98) - - [함수 선언 vs 함수 표현식](#%ed%95%a8%ec%88%98-%ec%84%a0%ec%96%b8-vs-%ed%95%a8%ec%88%98-%ed%91%9c%ed%98%84%ec%8b%9d) - - [호이스팅](#%ed%98%b8%ec%9d%b4%ec%8a%a4%ed%8c%85) - - [Function 인자 가변 길이 인수(Arguments 객체)](#function-%ec%9d%b8%ec%9e%90-%ea%b0%80%eb%b3%80-%ea%b8%b8%ec%9d%b4-%ec%9d%b8%ec%88%98arguments-%ea%b0%9d%ec%b2%b4) - - [[ [Prototype] ] 접근자 __ proto __ 프로퍼티](#prototype--%ec%a0%91%ea%b7%bc%ec%9e%90--proto--%ed%94%84%eb%a1%9c%ed%8d%bc%ed%8b%b0) - - [prototype 객체 변경](#prototype-%ea%b0%9d%ec%b2%b4-%eb%b3%80%ea%b2%bd) - - [실행 컨텍스트(Excution Context)](#%ec%8b%a4%ed%96%89-%ec%bb%a8%ed%85%8d%ec%8a%a4%ed%8a%b8excution-context) - - [실행 컨텍스트(EC) 프로퍼티](#%ec%8b%a4%ed%96%89-%ec%bb%a8%ed%85%8d%ec%8a%a4%ed%8a%b8ec-%ed%94%84%eb%a1%9c%ed%8d%bc%ed%8b%b0) - - [실행 컨텍스트 실행(처리) 순서](#%ec%8b%a4%ed%96%89-%ec%bb%a8%ed%85%8d%ec%8a%a4%ed%8a%b8-%ec%8b%a4%ed%96%89%ec%b2%98%eb%a6%ac-%ec%88%9c%ec%84%9c) - - [Ex. 실행 가능한 함수 [code]](#ex-%ec%8b%a4%ed%96%89-%ea%b0%80%eb%8a%a5%ed%95%9c-%ed%95%a8%ec%88%98-code) + - [함수의 정의](#함수의-정의) + - [함수 선언 vs 함수 표현식](#함수-선언-vs-함수-표현식) + - [호이스팅](#호이스팅) + - [Function 인자 가변 길이 인수(Arguments 객체)](#function-인자-가변-길이-인수arguments-객체) + - [[ [Prototype] ] 접근자 __ proto __ 프로퍼티](#-prototype--접근자-__-proto-__-프로퍼티) + - [prototype 객체 변경](#prototype-객체-변경) + - [실행 컨텍스트(Excution Context)](#실행-컨텍스트excution-context) + - [실행 컨텍스트(EC) 프로퍼티](#실행-컨텍스트ec-프로퍼티) + - [실행 컨텍스트 실행(처리) 순서](#실행-컨텍스트-실행처리-순서) + - [Ex. 실행 가능한 함수 [code]](#ex-실행-가능한-함수-code) ## 함수의 정의 diff --git a/Modern JS/JS_Object.md b/Modern JS/JS_Object.md new file mode 100644 index 0000000..fd26f75 --- /dev/null +++ b/Modern JS/JS_Object.md @@ -0,0 +1,31 @@ +# JS Object + +## new 연산자 역할 + +```js + function Circle(center, radius) { + this.center = center; + this.radius = radius; + } + Circle.prototype.area = function() { + return Math.PI*this.radius*this.radius; + } + + var c = new Circle({x:0,y:0},2.0) + var newObj = {}; + + newObj.__proto__ = Cicle,prototype; + Circle.apply(newObj, arguments); + return new Obj; +``` + +```js + Object.keys + Object.getOwnProperyNames + + + Object.preventExtensions // 추가 + Object.seal // 추가,삭제,수정 + Object.freeze // 재정의,추가,삭제,수정 +``` + diff --git a/Modern JS/JS_start.md b/Modern JS/JS_start.md index 4857bf5..4306d16 100644 --- a/Modern JS/JS_start.md +++ b/Modern JS/JS_start.md @@ -1,14 +1,15 @@ # JavaScript Start - [JavaScript Start](#javascript-start) - [1. Spec](#1-spec) - - [2. Statement vs Expressions](#2-statement-vs-expressions) + - [2. Expressions vs Statement](#2-expressions-vs-statement) - [3. Data type](#3-data-type) - - [3-1. typeof 연산자의 반환 값](#3-1-typeof-%ec%97%b0%ec%82%b0%ec%9e%90%ec%9d%98-%eb%b0%98%ed%99%98-%ea%b0%92) - - [3-2. 산술 연산](#3-2-%ec%82%b0%ec%88%a0-%ec%97%b0%ec%82%b0) - - [3-3. ==, === 비교](#3-3---%eb%b9%84%ea%b5%90) + - [3-1. typeof 연산자의 반환 값](#3-1-typeof-연산자의-반환-값) + - [3-2. 산술 연산](#3-2-산술-연산) + - [3-3. {} block statements VS object literal](#3-3--block-statements-vs-object-literal) + - [3-4. ==, === 비교](#3-4---비교) - [4. function](#4-function) - [5. object(instance)](#5-objectinstance) - - [5-1. 생성자](#5-1-%ec%83%9d%ec%84%b1%ec%9e%90) + - [5-1. 생성자](#5-1-생성자) - [5-2. this](#5-2-this) - [6. array](#6-array) - [Reference](#reference) @@ -33,7 +34,7 @@ 5. 클로저 지원 - 내장 함수(Nested Function)를 지원 하여 **하나의 인스턴스화, 은닉이 가능** -## 2. Statement vs Expressions +## 2. Expressions vs Statement - 표현식(Expressions) - 표현식은 값 하나로 귀결되는 JS 코드 조각(snippet) 이다. @@ -74,6 +75,7 @@ ## 3. Data type - 원시타입 **(Primitive Type)**: 자바스크립트에서 객체가 **(Reference Type)** 아닌 것들이며 값 그 자체로 저장된다. + - `Primitive types are immutable` - String, Number, Boolean 같은 경우 객체가 존재 하지만, 원시타입의 리터럴로 정의하여 프로퍼티를 사용할경우 **Wrapper Object**로 자동 변환 되어 프로퍼티를 리턴한다. **(Auto Boxing)** ```js 1.toString(); // "1" @@ -86,7 +88,6 @@ ``` - 하지만, `new 연산자로` 객체를 만들경우 Reference Type Objcet로 리턴되어 나와 **Primitive Type을 잃게 된다.** - (원시 값을 갖고 싶으면, new String("값").valueOf() 사용 해야한다.) - - Boolean - Null - 산술 연산자에서는 '0'으로 평가 @@ -123,6 +124,7 @@ - String 타입의 '+' 연산 방식을 제외하고 `대부분의 Data Type의` **'valueOf()'(우선순위 높음) 혹은 toString()으로 리턴된 값으로 연산을 한다.** - null은 0, undefined는 NaN으로 강제 형변환되어 연산한다. - `{} (block statements)` 에서 무엇이 반환되던지 **그것은 암묵적으로 0로 강제 형변환되어** `피연산자로` 사용된다. + ```js null.valueOf(); // Error null + 1; // 1 @@ -131,7 +133,17 @@ {3} + 1 // 1 ``` -### 3-3. ==, === 비교 +### 3-3. {} block statements VS object literal + +- 블록 문장을 값이나 표현식으로 사용할 수는 없다. +- console.log는 문장(statement)을 인자로 받아들일 수 없다. +- 하지만, 오브젝트 리터럴은 인자로 받아들일 수 있다. +- 문장(statements)은 어느것도 반환하도록 되어있지 않다.(값으로 리턴될 수 없기 때문) +- 그래서 자바스크립트는 error을 내보내지 않는 대신에 `+ 연산자의 피연산자를` **숫자나 문자열로 바꾼다.** + - 만일 바꿀 수 없는 값이라면 에러를 리턴한다 +- `블록 문장(block statements)`에서 무엇이 반환되던지 그것은 암묵적으로 **0로 강제 형변환되어 피연산자로 사용된다.** + +### 3-4. ==, === 비교 - '==' 비교는 타입이 일치 하지 않을 때, 강제 타입으로 변환시켜 비교하게 된다. ```js @@ -144,14 +156,19 @@ null == 0 // => false undefined == 0 // => false - NaN == null // 어떠한 값과도 동일하지 않다 false - NaN == undefined // 어떠한 값과도 동일하지 않다 false - NaN == NaN // 어떠한 값과도 동일하지 않다 false + NaN == null // 어떠한 값과도 동일하지 않다 false (Warning) + NaN == undefined // 어떠한 값과도 동일하지 않다 false (Warning) + NaN == NaN // 어떠한 값과도 동일하지 않다 false (Warning) ``` - '===' 비교는 `타입이일치 하진 않으면` **return false**, 타입이 `일치할 때` **값을 비교를 한다.** (Best Code) ## 4. function +```js + function name(인자) {} + name(인수) +``` + - parameter(인자) - 유효범위는 지역함수 이며, 프로그램 실행하면서 필요한 변수 값 diff --git a/README.md b/README.md index 6e4b346..48d3bbb 100644 --- a/README.md +++ b/README.md @@ -1,124 +1,75 @@ # JavaScript -- [유용한 사이트](https://github.com/yjkwon07/Front-End#%EC%9C%A0%EC%9A%A9%ED%95%9C-%EC%82%AC%EC%9D%B4%ED%8A%B8) -- [JavaScript 기본개념](https://github.com/yjkwon07/Front-End#JavaScript%20%EA%B8%B0%EB%B3%B8%EA%B0%9C%EB%85%90) -- [JavaScript 보충개념](https://github.com/yjkwon07/Front-End#JavaScript%20%EB%B3%B4%EC%B6%A9%EA%B0%9C%EB%85%90) -- [JavaScropt 33가지 개념](https://velog.io/@jakeseo_me/series/33conceptsofjavascript) -- [JavaScropt ToyProject](https://github.com/yjkwon07/Front-End#JavaScropt%20ToyProject) - -## 유용한 사이트 -- [Frontend Developers](https://github.com/FEDevelopers) -- [웹 프로그래밍 튜토리얼](https://poiemaweb.com/) -- [_Jbee 참고](https://github.com/JaeYeopHan) - -**[위로](https://github.com/yjkwon07/Front-End#js)** - -## JavaScript 기본개념 -- [JavaScript](https://github.com/yjkwon07/Front-End/wiki#javascript) -- [CH1. Basic](https://github.com/yjkwon07/Front-End/wiki#ch1-basic-) -- [CH2. 함수지향](https://github.com/yjkwon07/Front-End/wiki#ch2-%ED%95%A8%EC%88%98%EC%A7%80%ED%96%A5-) -- [CH3. 객체지향](https://github.com/yjkwon07/Front-End/wiki#ch3-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-) - -**[위로](https://github.com/yjkwon07/Front-End#JavaScript)** - -### CH1. Basic -- [JavaScript](https://github.com/yjkwon07/Front-End/wiki/CH1.-JavaScript#1-javascript) -- [Data type](https://github.com/yjkwon07/Front-End/wiki/CH1.-JavaScript#2-data-type) -- [비교](https://github.com/yjkwon07/Front-End/wiki/CH1.-JavaScript#3-%EB%B9%84%EA%B5%90) -- [객체(Object)](https://github.com/yjkwon07/Front-End/wiki/CH1.-JavaScript#4-%EA%B0%9D%EC%B2%B4object) -- [함수](https://github.com/yjkwon07/Front-End/wiki/CH1.-JavaScript#5-%ED%95%A8%EC%88%98) -- [배열](https://github.com/yjkwon07/Front-End/wiki/CH1.-JavaScript#6-%EB%B0%B0%EC%97%B4) -- [모듈](https://github.com/yjkwon07/Front-End/wiki/CH1.-JavaScript#7-%EB%AA%A8%EB%93%88) - -**[위로](https://github.com/yjkwon07/Front-End#JavaScript%20%EA%B8%B0%EB%B3%B8%EA%B0%9C%EB%85%90)** - -### CH2. 함수지향 -- [유효범위](https://github.com/yjkwon07/Front-End/wiki/CH2.-JavaScript#1-%EC%9C%A0%ED%9A%A8%EB%B2%94%EC%9C%84) -- [값으로서의 함수와 콜백](https://github.com/yjkwon07/Front-End/wiki/CH2.-JavaScript#2-%EA%B0%92%EC%9C%BC%EB%A1%9C%EC%84%9C%EC%9D%98-%ED%95%A8%EC%88%98%EC%99%80-%EC%BD%9C%EB%B0%B1) -- [클로저](https://github.com/yjkwon07/Front-End/wiki/CH2.-JavaScript#3-%ED%81%B4%EB%A1%9C%EC%A0%80) -- [arguments](https://github.com/yjkwon07/Front-End/wiki/CH2.-JavaScript#4-arguments) -- [함수의 호출](https://github.com/yjkwon07/Front-End/wiki/CH2.-JavaScript#5-%ED%95%A8%EC%88%98%EC%9D%98-%ED%98%B8%EC%B6%9C) - -**[위로](https://github.com/yjkwon07/Front-End#JavaScript%20%EA%B8%B0%EB%B3%B8%EA%B0%9C%EB%85%90)** - -### CH3. 객체지향 -- [생성자와 new](https://github.com/yjkwon07/Front-End/wiki/CH3.-JavaScript#1-%EC%83%9D%EC%84%B1%EC%9E%90%EC%99%80-new) -- [전역객체](https://github.com/yjkwon07/Front-End/wiki/CH3.-JavaScript#2-%EC%A0%84%EC%97%AD%EA%B0%9D%EC%B2%B4) -- [this](https://github.com/yjkwon07/Front-End/wiki/CH3.-JavaScript#3-this-) -- [상속](https://github.com/yjkwon07/Front-End/wiki/CH3.-JavaScript#4-%EC%83%81%EC%86%8D) -- [prototype](https://github.com/yjkwon07/Front-End/wiki/CH3.-JavaScript#5-prototype) -- [표준 내장 객체의 확장](https://github.com/yjkwon07/Front-End/wiki/CH3.-JavaScript#6-%ED%91%9C%EC%A4%80-%EB%82%B4%EC%9E%A5-%EA%B0%9D%EC%B2%B4%EC%9D%98-%ED%99%95%EC%9E%A5) -- [Object](https://github.com/yjkwon07/Front-End/wiki/CH3.-JavaScript#7-object) -- [데이터 타입](https://github.com/yjkwon07/Front-End/wiki/CH3.-JavaScript#8-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%83%80%EC%9E%85) -- [참조](https://github.com/yjkwon07/Front-End/wiki/CH3.-JavaScript#9-%EC%B0%B8%EC%A1%B0) - -**[위로](https://github.com/yjkwon07/Front-End#JavaScript%20%EA%B8%B0%EB%B3%B8%EA%B0%9C%EB%85%90)** - - -## JavaScript 보충개념 -- [JavaScript Event Loop](https://github.com/yjkwon07/Front-End#JavaScript%20Event%20Loop) -- [Hoisting](https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/JavaScript#hoisting) -- [Closure](https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/JavaScript#closure) -- [this](https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/JavaScript#this-%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C) -- [Prototype](https://github.com/yjkwon07/Front-End#Prototype) -- [JavaScript Immutability 🎥](https://www.youtube.com/watch?v=iJcSFzR9s8Y&list=PLuHgQVnccGMBxNK38TqfBWk-QpEI7UkY8&index=1) -- [JavaScript Object Oriented Programming 🎥](https://www.youtube.com/playlist?list=PLuHgQVnccGMAMctarDlPyv6upFUUnpSO3) - -**[위로](https://github.com/yjkwon07/Front-End#JavaScript)** - -### JavaScript Event Loop -- [JavaScript 이벤트 루프에 대해서](https://asfirstalways.tistory.com/362) -- [자바스크립트의 비동기 처리 과정](http://sculove.github.io/blog/2018/01/18/javascriptflow/) - -**[위로](https://github.com/yjkwon07/Front-End#JavaScript%20%EB%B3%B4%EC%B6%A9%EA%B0%9C%EB%85%90)** - -### Prototype -- [prototype](https://opentutorials.org/module/4047/24610) -- [객체 간의 상속](https://opentutorials.org/module/4047/24626) -- [prototype vs _ _proto__](https://opentutorials.org/module/4047/24629) -- [프로토타입 이해](https://medium.com/@bluesh55/javascript-prototype-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-f8e67c286b67) -- [그림으로 보는 프로토타입 이해](http://www.nextree.co.kr/p7323/) -- [생성자를 통한 상속](https://opentutorials.org/module/4047/24630) -- [코드로 보는 프로토타입 이해](http://insanehong.kr/post/javascript-prototype/) - -**[위로](https://github.com/yjkwon07/Front-End#JavaScript%20%EB%B3%B4%EC%B6%A9%EA%B0%9C%EB%85%90)** - -## ES2015 -**ES2015(ES6) 시작하기** - -ES6 === ES2015 - -(ES2016, ES2017....) - -ES2015 -개선된 JavaScript문법 +- [JS Engine(V8)](./Modern%20JS/JS_Engine.md) + - Compile & RunTime Engine + - V8 Engine + - Single Thread & EventLoop, Queue + - Hidden Class & Inline Cache (V8 Engine) + - Optimised JavaSript Code + +- [JS Start](./Modern%20JS/JS_start.md) + - Spec + - Statement vs Expressions + - Data Type + - typeof 연산자의 반환 값 + - 산술 연산 + - ==, === 비교 + - function + - object(instance) + - 생성자 + - this + - array + +- [JS Function](./Modern%20JS/JS_Function.md) + - 함수의 정의 + - 함수 선언 vs 함수 표현식 + - 호이스팅 + - Function 인자 가변 길이 인수(Arguments 객체) + - [ [Prototype] ] 접근자 __ proto __ 프로퍼티 + - prototype 객체 변경 + - 실행 컨텍스트(Excution Context) + - [실행 컨텍스트(EC) 프로퍼티] + - [실행 컨텍스트 실행(처리) 순서] + - [Ex. 실행 가능한 함수 [code]] + +- [Js Object]() + +**[위로](#javascript)** -ES6 browser compatibility의 훌륭한 지원 +## ES2015 -- [Scope](https://github.com/yjkwon07/Front-End/tree/master/ES2015(ES6)/1.%20Scope) -- [String](https://github.com/yjkwon07/Front-End/tree/master/ES2015(ES6)/2.%20String) -- [Array](https://github.com/yjkwon07/Front-End/tree/master/ES2015(ES6)/3.%20Array) -- [Object](https://github.com/yjkwon07/Front-End/tree/master/ES2015(ES6)/5.%20Object) -- [Destructuring](https://github.com/yjkwon07/Front-End/tree/master/ES2015(ES6)/6.%20Destructuring) -- [Set&WeakSet](https://github.com/yjkwon07/Front-End/tree/master/ES2015(ES6)/7.%20Set%26WeakSet) -- [Map&WeakMap](https://github.com/yjkwon07/Front-End/tree/master/ES2015(ES6)/8.%20Map%20%26%20WeakMap) -- [Template](https://github.com/yjkwon07/Front-End/tree/master/ES2015(ES6)/10.%20Template) -- [function](https://github.com/yjkwon07/Front-End/tree/master/ES2015(ES6)/11.%20function) -- [module](https://github.com/yjkwon07/Front-End/blob/master/ES2015(ES6)/13.%20module/test.js) -- [Proxy](https://github.com/yjkwon07/Front-End/blob/master/ES2015(ES6)/14.%20Proxy/interception.js) +- [Scope](./ES2015(ES6)/Scope) +- [String](./ES2015(ES6)/String) +- [Array](./ES2015(ES6)/Array) +- [Object](./ES2015(ES6)/Object) +- [Object2](./ES2015(ES6)/Object2) +- [Destructuring](./ES2015(ES6)/Destructuring) +- [Set&WeakSet](./ES2015(ES6)/Set%26WeakSet) +- [Map&WeakMap](./ES2015(ES6)/Map%WeakMap) +- [Function](./ES2015(ES6)/Function) +- [Module](./ES2015(ES6)/Module) +- [Proxy](./ES2015(ES6)/Proxy) -**[위로](https://github.com/yjkwon07/Front-End#JavaScript)** +**[위로](#javascript)** ## ES2018 + - [promise](https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/JavaScript#promise) -- [promise1](https://github.com/yjkwon07/Front-End/blob/master/ES2018/7.%EC%BD%9C%EB%B0%B1%EA%B3%BC%20%ED%94%84%EB%A1%9C%EB%AF%B8%EC%8A%A4(Promise)%EB%B9%84%EA%B5%90.js) -- [promise2](https://github.com/yjkwon07/Front-End/blob/master/ES2018/8.PromiseAPI.js) -- [async&await](https://github.com/yjkwon07/Front-End/blob/master/ES2018/9.async%26await.js) +- [promise1](./ES2018/7.%EC%BD%9C%EB%B0%B1%EA%B3%BC%20%ED%94%84%EB%A1%9C%EB%AF%B8%EC%8A%A4(Promise)%EB%B9%84%EA%B5%90.js) +- [promise2](./ES2018/8.PromiseAPI.js) +- [async&await](./ES2018/9.async%26await.js) -**[위로](https://github.com/yjkwon07/Front-End#JavaScript)** +**[위로](#javascript)** ## JavaScropt ToyProject + - [ToDoList](https://github.com/yjkwon07/Front-End/tree/master/JS/ToDoList) - [blog_LikeSelector](https://github.com/yjkwon07/Front-End/tree/master/blog_LikeSelector(ES6)) -**[위로](https://github.com/yjkwon07/Front-End#JavaScript)** \ No newline at end of file +**[위로](#javascript)** + +## 참고 사이트 + +- [JavaScropt 33가지 개념](https://velog.io/@jakeseo_me/series/33conceptsofjavascript) +- [Poiemaweb](https://poiemaweb.com/) +- [Frontend Developers](https://github.com/FEDevelopers) \ No newline at end of file From 501ee067bba8c96e39687df446c8ddfbb378a189 Mon Sep 17 00:00:00 2001 From: yjkwon07 Date: Sun, 5 Jul 2020 22:53:02 +0900 Subject: [PATCH 07/20] function README [U] --- Modern JS/JS_Function.md | 33 ++++++++++----------- README.md | 5 ++-- image/function_object_prototype.png | Bin 57724 -> 57722 bytes image/function_object_prototype_backup.png | Bin 0 -> 57724 bytes 4 files changed, 19 insertions(+), 19 deletions(-) create mode 100644 image/function_object_prototype_backup.png diff --git a/Modern JS/JS_Function.md b/Modern JS/JS_Function.md index cf24ed8..a4ba94a 100644 --- a/Modern JS/JS_Function.md +++ b/Modern JS/JS_Function.md @@ -78,8 +78,8 @@ - Argumetns 객체는 인수 목록과 연동되어 **arguments 값을 바꾸면 인수도 바뀐다.** ```js (function(x,y){ - arguments[0] = 55; - console.log(x, y); // 55, 2 + arguments[0] = 55; + console.log(x, y); // 55, 2 })(2,2); ``` @@ -91,9 +91,8 @@ - 내부 슬롯을 직접 접근을 못하므로 **`__ proto __ 접근자 프로퍼티로` 접근을 한다.** - 즉, 프로토타입 객체는 다른 객체에 공유 프로퍼티를 제공하는 객체를 말한다. - **prototype 프로퍼티는 함수 객체만이 소유하는 프로퍼티이다.** (일반 객체에는 prototype 프로퍼티가 없다.) - - **해당 Object, Function은 리터럴 객체로 간주한다. (리터럴)** - - 만약 new Object()로 할경우 Object는 생성자 함수로 구현되어있기 때문에 Object.__ proto __ === Fucntion.prototype 을 가리키게 된다. ({}.__ proto __ === Object.prototype) - + - 만약 new Object()로 할경우 Object는 생성자 함수로 구현되어있기 때문에 Object.__ proto __ === Fucntion.prototype 을 가리키게 된다. + - Object로 생성된 인스턴스는 Object.prototype을 가리키게 된다.({}.__ proto __ === Object.prototype) - ![prototype](../image/function_object_prototype.png) ## prototype 객체 변경 @@ -183,20 +182,20 @@ ### Ex. 실행 가능한 함수 [code] - ```js - var a = 'testA'; +```js + var a = 'testA'; - function outterA() { - var b = 'testB'; + function outterA() { + var b = 'testB'; - function nestedB() { - var c = 'testC'; - console.log(a,b,c); - } - nestedB(); + function nestedB() { + var c = 'testC'; + console.log(a,b,c); } - - outterA(); - ``` + nestedB(); + } + + outterA(); +``` ![EC, GO, AO](./../image/EC_stack.png) \ No newline at end of file diff --git a/README.md b/README.md index 48d3bbb..21d2b54 100644 --- a/README.md +++ b/README.md @@ -9,10 +9,11 @@ - [JS Start](./Modern%20JS/JS_start.md) - Spec - - Statement vs Expressions + - Expressions vs Statement - Data Type - typeof 연산자의 반환 값 - 산술 연산 + - {} block statements VS object literal - ==, === 비교 - function - object(instance) @@ -32,7 +33,7 @@ - [실행 컨텍스트 실행(처리) 순서] - [Ex. 실행 가능한 함수 [code]] -- [Js Object]() +- [Js Object](./Modern%20JS/JS_Object.md) **[위로](#javascript)** diff --git a/image/function_object_prototype.png b/image/function_object_prototype.png index ed0dbb4c50519a7304bca6062842bdc6c79b55e3..3deb49e7cc64f29e0c9cbf6c4f813fd29a8e7552 100644 GIT binary patch literal 57722 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 literal 57724 zcmZs?2|U!__b_hBlC{N>vb2|o8DkdNjhV5H!7#&A7|dc8V~kmhZAzu6v~P-5vdfkt zjU*LW5=CN4J3`h7|F_TQ`+c6@|9KuS?)$#)``mNSJ@;()-0PT+H%3!!y_%eyoTj^* ztDl^lf(ZD7swx95DBskha&lVnv8cdUwul9Z-1ZwgMem;3s3_-z^wnRieT2JK#Oy9G>bx{gn32+ zqobh^xCI0TH1G6u^T&E^vqA!ORwR=GJTR1SCTF<|k{-ih11)F-fY$?YY+N+u-)0(zLt_D>T5W@%0B-(=Z2(B*e;6fVqWwa+*f>8|rl*^yh-Zxn5dMoK ziVTqZ55s)`UhM||iv&&phcRq8)@UDVu=_SE7l3mvv0h#bD`&P(I8bMS+-zbZ@T@=x zg5m2K=}X09qiNn8UmrNkh62U8yE1&;T~V%F5Q!Xs$A*gqKp$Z4KJ0LD92Msp77e@* z!)$zLyg-nvD;FeL zNTdp_T!_F5qCqi?SdVB5fsc!g16B#m2q*h<{b^zkPoGE@G{TvHgbPTnOmBAq85Use zPl1qK;dC#|GCO?8aRM$yEOrY+dhrO$Bng2igi%1v6%`?HM@EKOLwG_Wln9~XaK0EoDAAD+5*>K3iGEZ+EJ|!`MUC`^ zdhqdlzAqIVfdxMKxUkt_)Cey!!WlvITt-en0eIsWk$!mKg$71jQ}}3#O*k#a8$ybt zuwXC|f*k|LQk>nGfzXI(VGP`lA|^5L1Zy;e=wK&J=5Ypo^CW z08fZ=_X=P@84xO!O!C4Aa9}~4$cADa$?)`#VnA>lFhH?O6w{CH9YqQhNBIIhkOTqF zox}@5NBgp@!~#q>6~^%r3!zxBHOSi~j%SU)Kv7n{vEEFfl^}o*r$xG2Gx>B^7ZEiq z1|99{yUe3lYy<-79v9Ta49@j6N7saJO@l>}6*Fd;CBZlBf3`8*i&dvVsX| zUPzRSFTk__o~sMq7wZO$AA>^hsDKo@_+p_z35|5&xLcF(ZvJsD2zR14Ivj&xM!0yp zMY~wX(S+{sKp#OAA;2a!Hkuy^!$MIUn>cVlP#ggjgrtVKiQq1LG(B3xf`^5ZP)r!f z4{POW6()$~2H<17NMIiZ(#jJH0kgJ$?#J^Gvw`ug5O8`RG7uDm z@(ZAFn7+O)&aQkH^0HNOM>yl)0xmer3(ltt*$|W~4;_F9(Qs_fD61fE6piie3icI4 zd;;8242~Cy!GHt3c!3;tj4#!j8s_25w8Du9o?ccSa45=#B=jSN1^9Tu+?{>#ICl;s zjElwxM#Mm2xG2{cf=?V`SuhzfU^WOGi3oHTqR2=h2_?jdJoy9~nC2F{tZ{+BA182G z9X*6@C}%F&2ZLJ~3D1?k0yQ(1l} zs{nswK;*J)5F@QzDUn=%U!lK?KN{r=it@o={9U~O1#}l;u`r$uo8W;G6JiL&K(xp& z&V%ren)6*eVE#m;4T=MciNkSy-90&;{AETka6~JlNC4)t!`uUD%5)>cMmO<_CJ?Ao%cDJ_OAZM8vrI1=7UcHbl>; zFg$|o7sVHmqseR*7#8j!Bm-Uq9WHdXg1UtR>!7Kb9a!3b^;4`!S@%moxl3P(}7LK_cX1~rfcSo=6C-XF{o!9iZJZb1ME{yqW_ z*oW`y53(VXsS$B5d~cSY7YZ8(SZ8M<2q*Ty@oi%8u@rI)9K+>%5WRhbbf0D7S-$Qb zKI|wj1}Y%R3hHYu4qUdjz!#TDQEY$*Cf1i19T<*f3sBrBHW4m@vXEcS}fx%>Vd^9OQNcLdGL7+BdcW~G;Ngi$lnu`qv#fFGQ?j$1K4TKi8z37T*9aG@C^Xea2p0y5C|-M3$Y%In# z(wzsV1b9NgJevrD4aA2JC0Uc1K0zodR1`-H1lv%NgjlvK)iahH$VUkFK#o_xP3gcZih)i*4N6-W%gBRG*1TAV-5QzYc^Av6ISits^)3Aq#q z!4D&hWd-=fV1Nk2C4lV5aYHguY$`HNOeaSBGkHRg7vC4{h9*;3Q4u7hXSf^M3JHP= z8T>Fso`ZF+YK>wJySR8>&1a=^3 zusatIqWa>ae1Lcl&47ARUBn=~PdIPcdPjwekO)*P8wQ|`u=eMAQyDN<3{>C=a$B|t zWS?c#^e0+-T0?~4epUoZxEm)N$&3P7$B3-`$Pfsc8v%566Jp4I;jSD!2j>ArdV<|C zK14qd(es}+kqaNtd^C~=6_LH8L_tKNS6D3H(}U#!isZTA1p=1{7SA1qaU&rCTxh&k zc#JpNO5hSkq505V7-STN?+o%I3Pe^kMw|^-?CnNJ(F9-~&J);ZM00%zZa7{9g@hr} zBO*aOk4O;K5A27FVL^G`M1c*O6&vVJ^ojEXP*bshyB7l$422%S3IIW4$#HJ(A_iB? zLh@`PVV-QUM+}4%;Ke4!q6s`-?`1z4>w^*rp?*HmXlAr8h3nzM43FbP_z`Rnb;6%cF>Fyw=r?Uq-GQu0@<$m8n6M_=ZCM0rl z8|BxbWpub*@w*fT-PXVUZtgZP%Y-Dn%U7pk)`F`QuUoR#v9iKM#y)3 z2}U`&YNTE--dUQia@4|DqE;Hi=`GN5zRQwmA*I<@_Y(fLhs z2}=tz(6PNWg54F&w_2)tKa!%NEGEBqC_WU97R#H2{O{>X)n)?@RIjj8c*q~>cAlRe zxe@X>Y3%7*ob*D^Zq2LfnM=Bh_72IxL#1-xy9)HpL+bXm{bs)_-Lyh(VZG1v z|77bjs+UiU91;Q*D_dH;b`J?gAI&h@sTV$Ox!X{-Fh7%8mpK1K6W%9hMkth!8;;bU zG_nmH|I|3AV<9y9@6s%@^KZVKqOs({$4nS|z1`Fs{Q9S>-@UqOgU`%IeQ&4~&W4y1 z?}ecrKRde+_CFW3PHRsNpGP&YD>o&D|BZa9=a^e5tPWCyN68N3A6#1f`F~O??`U=k zWMJ1)yE~}Nb->w7xl#2H;smqrlCy0TH+A>_pG`pr4k_4OB|(4P)-8{T)loApcgf~_ zco^_L!MA|0+rhZ8%|7TJXYl=_l6PUHE&P#Ec%asN`}^kX>bLOV#EI|eb>oMPR^})q z{cNlEZ;vk-R2!?kn6dXbQEAWiWO;oZ=<&Br>ht?jLsh&aK`Z|Z=Nr#CRc>h?dG|iQ z#ipvf`X}3G$aOsEdcr-0)4OE%7Y*~4j*+tDEq%ANwHXoQSJYBb#O=2|2A+s7DV1#h zTwWml{;I3$kJgxleSNd1ei0D&%RCb+RWDk8y@ zZAKAWU1W0ngMOv*_xM`otf>x4LzLnm_xz!Qe>X08MW85ToJO3M{|+vnT?#Q$9c%pi zdeiI>Rnm)5rpT9Rd-l5R<{ zwrwW%v{uvy?YT%w@~|D|p?9s`E9EAPE-%qb;y z$0f?<0kIJqIwkJ1~*!7juwD*ZV9?ogYdM-(gCNA`weH^}^_VHTn&gMFx+{I+gjNX5Cq zasSM2>lB#Zz}sL;xqUoKr}`eBOIArqV>KZVQEHvy-S=hh?Bq8tJ_e^?f*zkcV-SDO z{6a45xo^u~_ACb6*Y$k1YoW+Q!R~#~Pp*_>P^+Ao>ipnYWOT%9OtDo+?<>A(U6b5| zDESnV$1~xoW%*N)O8PCsIf;Z>p2N9UcZ-o5oDJPk{NvgB#*T_A$`%K*za_6+H}e~7 z*`BX+%|3U=@}O-Q|JQd@w_+cyv{v1pd{jt#@GH!o$SUvTGIc-F+rzhiQ=C}p>|=t) z>8(#TOl;N=O-tZ{;dhssju|?Ie9{}Es|8RWcEMMZF$s5^wq}|?!4|x(*nO}kZAZF% zMkqERQ~}h{Eo8Pd5|eaM`ZxI#beDCp5*pGSga8uwjRmn@+LoO-H z#zn2>ECjD1YMmVHl`E6b;JV@=k!0Yc9HPQrXN-Qr$eGk1EFu0-i7N}(-%6u;zqGw6Ponw%f*og(X%fyD(Wx(x-nWA z^5>DV)1{9)lYOrc^y=OI!n^HHE#wgNEGzboXz#9czAS6GM84&96!8U}9VDMcAAIw3 z6q(RaAKbEvRJp@N*@aPke6!ZkAI(SVn=Kz}tPsp5{P^*sl-{wq`u9t-kDp(heObpi zZ$>;K97xnRP8f4W#C%r0efzf4VKrUr_J+cK;zjM>3z_DszkPLH6OKctz$@(1cz3){ zR0e)B(U>%t!l(K6?CC=0(DRIbreAt>%Te{X6SZYUTH>0e>g%wTV|Q_B4u;87Oee=5 zH5;q+&zXiQ116i|NGLlJo&UQzF7?L5yFI6_1O=B+l|&ffHKji1G+VF6-(@4*2Ty&a zSZVXpgLPl4lKjQ{`!zHEs)?WwPfo8?Rpvi-VMfm4m%pKQx#k9e%)sId0bfB40+%6Y z=+cI^#x}L2Jvj{qa#R?+K$WI^fc*UsDF5h?9A%Fip(5(gkgCqgC;0=Ndm=QmzBk=CJ?b*|G!rR##kvy0p}o>_i@d!0Ox$fb zRG9^+ck#x};9AB0BiPIv{0XYB=V9hp-<6w_k29YzIwR>(v8q-uR0arrzFQzprX9qjo(PY#DtSG^rDvJ{1FxDlozqNmKgc=2WLjhKt(yLs4+9tL*f+J*+wwHFc3pV|^ApNz)(gX`9R zZB5pk`;e&LCqOnGrBJ2mfmRRHp6$P#aH@|N3%~EzygXtR^e^_!K zom(qS4^S?7fA4CrrqS^ClKG8A z^_|vcJwD+uRQil*%C|0^-Bpo&rJJ7YyN$1Kp68wrN*hFdubFbgw$Z9T-*{xKn|vbQ zZ#!Chi_#zc;3*L9hBjZ=?E{2v?1q4axv9$0Lhu$0e++)hIYs$cW_^RyN3ZRdXG4#z z?crGm(^V^FW(pgM;{P34p^H*zh`1qHoSEUDjIB%f57^%e*I2a>{WUQRWr*=IYTa^Vtae0 zeLQS=N1&`_c-K4y9{x<@d&jL*81|5X?O+A=lw4cX*~6+LsthIWoXl0FR@}>F%rs9K zReTa2m^)WJcz&^68dLG2q1t)#6|5c|H{6i4IE7syZ7}bDXSz-0yn^crv6X~&ob#>q zTBYMtEklGAMD=bm)w=#kYj3$x`S**LUer6=B{yV9Y$HYl9iJYE(esEA>iu-s zdg)qc?YFP;vTnX=YlH94NEuOHITmr!{f35dB!lmj7Bp~u_}!*8V^0*Z=;)T1#?2 zT?Vba)Q|Yxa4et#3;Qe3%6dtgczNN2WM}a;-lwyL*RIP0^51_9y=&-7Q6+MokX^vC zy-+ng$1_jF_rRj6M4@;8#0fq+;Q&>+^>p|BK84xTby>ctnT3TgEJ$W>lX0`kP@xASj98*+AEP~HpY}gYua1`ag)P_Vejqwsh597hN0~ z*`H+Z-MCVA%!$T2C*OAcC^)^T$M$^4qo?;8B{PgqE8ZX8QMq9iC6_R=?`-ATL#Ct} z+L!rzcxka?!KC>G39ZlF%;BQJyN<*i65=B`xq>2M}^?D>{Mw#s(MHY@5l zB0l$b!9_&Xy0LX*S0@EE^1ga4!wIJ<8zi*ctpnP*lKsgi^`}|{9Y+*x4W#LZVcd!B z>X7lt`#`L37S?h9(@pHMYusVf6XkSH31Vv!F#?kHn7)`nzH$7Sb|2$M zn)#(3`}D$VBfN_}mp{!HIt3~{nfi9!GqvfK>{lgOa)Y>1QAn5WCP zRl1#9x7Y?#w!06d&KF8dbWQc`&?9v{X>{GUzfqvBsly}^D zU9H8xXFO&5u%emdvh~BO5pM!tgaMnvgg0w}LPtYzSU1{NJ|Hyb<;nDnmpMW5kxC>% z9p3DHejKD!{Qgh{*y6e5Tdso?DCnh@g_3x+y9$s1L0`OIRg2nlGpS@p$$2mLHY*VY z!#Q%h7n?klCo|V6zO>@oB9t^=*uoy%^ykQGpV&{Uu4W41I&97TpR@X^w9oyp!JEZL zbvW((n^4y>5p=;h{>A2|w>!v&SyU+=w>!U=?A6|h+P4DT~36N)4pn|7?1 ztu8#4aZHXd`QgebQ<8#9c-+CtRn=Rrx>L)q3ie5+^9`G3)5U|^6X zhm6)4zn`lLil6z#|KR?Qhz%?9k}m|jH2G5dvn@aCf;{g083(1>o5=T-kv_Z4wzF#6 zZxltGMa5jixWL(`EdDfAYOZ&G6_qA#IHH=qf`ty$m0z2=-KTNtP)D$asAJc+0Wo5u zSYBf>U}IoboUY|RgRsukzQ%N$Sm*~IxZXH);6`|*%9FRuajaesxc zys>w~uQ|grR`2&H+nu{87+w!7Os`RI@KrS|hqXu3$o=TLvCY0_>nJJHiW@WnK1{qW z5alh4euVCnhe=R!^}Ymo<0gEOLa~DJLq^Sun-LQ!7nB;HB46*0w6a6j!l0LbL5&}T z!BOc!_O(wx)T83!u^GZ+TlZ;*PT$o%US_vZd5ibwJH&CnWf^&neqojvvG6fQL)52I zs2goGw%LArRP_k6D5%et{@?We28?*4Go+H-R5k`7YuRrOhdoz^zPt35_% zUD|G&bZ(9?x)uxAlpR0+lv@C3j;Eg|1~+>CBSjmwl}w(VN^J(qxF%!rG8@f}NpjKh~zq_xJx=;>Rys*cntQ zz94rCQ$uv}^8|%ryeiQ^&oj67|1smxBBxL}+|-dHfdaJxqk0X|z2j-N>k3c(UoxF7 zc?($PB>kd;twvzkkINM%bqWb4X0rFj9{sDhzd~+7FHR~-nlHRv#B$<5)Q^)fO0-E~ zou9#AR8aW-J&4Qw`wom8GR(P}ystd(PbV*DI;4E&rJm7({22zkGqGYKFM7ezCD>Pa z+lXwa)kVv#b;;liBSNxB)#UCNgD)NYoNnvlyV$m=1U{&dbwF5LcLwx_~K?HN49>QRW~vtWjS8mrU7 znRdmlyEV62_L1g}Emj#ndd83Q(y7$k22$dcVd$3s!Jj$UcW{1Eu(~b{W^rLUFZz|2 z8{<7j@&2jiPrCHUeeO^QG`Yyytat9TARSoLy8QpQBl9tdGJ?v^D?B`7zVCOy z3>}07ZS%(HB_TA=l$a>EZ&40 z*Lc-}j%Iwwe}tzg`0}SU|0+y6PC95xg4)}PrSt!IG=no`dvtL@SDf}9P2YyUyx!>! z{K%6G8q%-Xc4HpvaG2B#p@@3Fr1_#K{^v%jnrNFzT6DzKHF`sv-smPxmnjFUN)CHs zTw>lHd-xbpnNL~TnsD%ECDQ7^dPLR8M8QbgH{@ll#?B|!My%;Qkl>WuoC)Rnmmlss z$Z1n(D)j-=tL3PlKTFM;zdkHJ{Eu!=A9&!{yz5IwOz;#f0N31f`>tQvyOTl*(dxv? zt|1*-eT>k_?}R$^Zl~0=vRFCPJ>d0?=*F$rrxGTs#mXfzbEo>tr_6%_rSI>fGPSxl zMK#B`MfIYxx1;C9=vU8jZy$MkC}M}f*c-t!Q3Z_m&V`=zYTNiMo%_dY!`rAM!+DAO zl41XsCs`Dcrk~uEh@}v(j`bUKLM9H+R8+=o!{40^DIg{vV~$Pc^{q{0y6N?h z<>09M;NY=-F?X9{@Fky^WG#Z@OunOv=lQ4O1RL4MR#G`uFQ;a|XAZk@Plb2uI)#G$ z6&2lWth0x!Yv3!)4__;Jb28ZRIBqVs0@!rRkG0ojC0g6*l+>p$S+3VUTAy~0sCYBK zC3BZ;neV4X^MZ4ZFXOth7se}w4-XmG?dv4`1dMmi%S-hxxfT2bsMX}Fl>!N^>f|fc zxH~6Frak*MJ;~7$r8uhgTxNd3n?5f`Y(Lx$NVi*y-vvW(L(}c2OZsP2o`yEQE0Fj7 zk8S_eR_5{N)>Yy{j|r|h7@=Id(bG+izQXab-CA77+_p78|Em6!RFenAv!5p_L3fu{ zMS?F_?7ew@M9hT$*pp=Ty-RZUUvGn4H9yf&dkaLFb6p1$ZN1&?c0SSn%a@yfylwbT z3Koao;EG32Dy+tJJRCeSPiRCQJ<$W5*?WTVwRe23UkXQ zIov+QZ*PZ<1e=s=Wl5(C?Swq1zIzk#>p&GI6|DX>`TluoyhVos(MGca=G^ES&@Bt| z1a_Sk+gf&Nz`toWE>&PObzr>bTTcC(t1n3BJL5Ftv!N2`9bQ>!H39u;;}K9}fUi%Kfi9g*yu@LC~K#XM72xrWwU zpQ#lcNHC1PYoWFEZ3UaNXWi;kmn+L@qZy>>lNN^WUNdqUCVOxf*ZV|<>XCgb+*3Zy zo78Ry>qLw-e_x9=C{cF(M=1*l9h0;{6S;SK^6}St4K_t%lG+m?Znv!7HCaCTY}GlZ ziX1eFS3o;1(oLo6Z>+b+q(=8C*8K~urboYRu? zF;tSWh5~9S12VQ0C#|o>uZIm^*sifcd5&DozEDj2yi+l3g;n_WQ;XOX-AYsHj%Xj< z#7nU8AZfjJ{pp;pyY}~UB^T?e6;2Y~n{GIGxA~fVyk4;AqY@%o=JW+F@$VHLc zuREU{eopYV?NE)H52y8f+QfxU`ySs$y)d4k`4baHZOPZh57f`W1$9A+cK1q-wi-a1 zbn&}>I?=n99{1F`&kwpxy0=`&q>QPq&(m7murSByB>E=jer?SxqWrokUvpi-*d*3` zq3g`9ok}8=f!L)8p($tW_4YqYGfoP2luvdy^(Ddy&HLY(U+7K^2iDd{&fZOh-dlOD zMR`{(E=b*Ql3sfAKqD*B2#e{EKBSK1pMr{Rnp9UC=|4zM0cpJ+Ef!%^@ExgfZMzR$ z{OV|OChmsuU_|NJAAD7ju7$(yl3LS_|K0__`@3HTGL|+~5FkO)1dGtrVU-xJmIY10 z8EvYIvk&&0z@F3vJv*_nMOB2!Fz&br^)U!v$~|5&+jPiCcDZXc6k1$=_K&ykkqjq) z7&`31bqbI=xOuFMZ)7UPzu&qyTxktP-V)Gb{RlWBZKg;W0c1fbZNqZf>{UhF%Hdk_t2@#U!Ztp<;f%;UJx#Nfu3ajXM!ulSwW+4hat3uQla3^R zmK_da|5bc$Dm#{l@RI`LgJmbC9>zEAkJk`!_5G4II-0KfAz629vQ64w z@Lc*m?4XMPyms{u9ro6T2-9YXe()o=`SNP{C)M@N`z9jcD6?sD%?~lyw)@5ce^U*8 z%jKKUW?6@ok^-tvx{3Pe70l-nrIB*MzFmjCnL0*-bCh|xz-i~7-3B$J0q;0A4|E;RSC7uG;hy3 zTknnDt87;(N$vJ$m6a;kDImDH<`*h^Z*MA|hd4x5Z(I57+QVm~PSsewXV)sq229J% z?|Yf(HLoagoX}z4Uab|9C66o0Vx7=c^_8ki&)RHn6e$N*hi`sro-MLF)&(}5m41?= zUuXmsU)!>`tm!sgu~vmPti*PjoEy?(C&OH_RDS}^f$VBwZfsZw$c#u7m2SQgJ-3d$FWLX>NG9dUBa}qG z4g2Lo`3N;x&^Gk6vPE*S`d-rxn$&Z6cA~SUP?D*5Gg}^aRS&Wk4jgL7H1S^4W-jz> zySTQO)h@?r$O+MAH<=rUwCcF6w-vBXL)Pwl&s2JL+%##wcE}=8PUY!#qV?~`w}x-z zNH17EP65J>KuvX}YDbjeU>qDD8bgQR& ze}Up+#^?9``Tba-Ayqq-Vq!V{_!jv0sd?V{UjgeE_txzvuXzClM4GnupX%B9hN8W- zYRg!~JJ{SUt-7kc+JzH4w5pU&5@%;m{D?P>m=LYLS#9(EC-N(t8}|W>TXEK4`zYFvSCIR5)UCD>xb& zh9#lEwF-UQc$&^w(w>Lv)MSuW6o;=}5&5peKW#t8yS{qn@!|O5LKUM8xu)mSAtH}2 zholO|3hyO17OpR4E5B3dUk zg*L>@vr2XfHTPjHDczd3(t-IRi!b^IKGe1)OSDdOhVljRU+N&Tyz_7H(k(k{s`jfa zhZVB}-LKk*iXA}Wr=pR(XSns6O*q51i%T`5k5hv1-{?yj8&fIcq*@u9{^t5UWfrqr zSNP;cPXjc1%Y0amr{x2$@|v;AKcpVphy6PR+;I2ffUt}~WNtb0fz@%^yiDzUi2Re#ZU;8`^2nA$oGH@)S$fNN+=T-*1uVpNnSee z>k&s~#hned1BLaS#LT+a2VP#fv-crurQOU-&?Xtipf;L<$G54!kgaaVX4`q<&z8k& zPbPw%s^kmF=>4w-9!yY~8;?%a4LsOCVRWE;N|*fxz3n(u*{e)TT>3SQ?}nA|6yW$^AJFTKYWQrch@MHy|MK7wsLX87vj*H?D){Y^|HSl;fS z)ytzdsvDO6?(|Cfx)Mt}ly~l&&Z+}i5c((op`!g!+Lv!?602}+b(72FYpVuSPw)U?+fn`cV1<$3@@!z);cHB?Y)Me0Idh(&0W3+`G zbL_K?-J?QeM$(p#`GkuumH7doFAIqkG!iIWVe+S7t)YWhL#+9?U^%#8flzztkd{yZd%^i_Q_J>wIlLvW_P+O8YH=BOiAHZkJ{GZ_eukk4Ef4r#}$kz zLvu}Wl5#C}Z`Jvq+nEF6)mN-r-^g+P{KQSo&)NiEx&aBkbZ_WQ9rn4sLT%7Q@Y|2x zg{jlMm65*!;OC=g3ul-g3-T@N$3wL0^;HHWoC%MTqAlUyh$SkOmRD8O>+GnJkE0H2 z-$=TXvT0^$->G1Ywr>Fk=WY8mPcZlA4>TR`ySOdr0lVoexwC^K^QtFw&OvuwNQp0g zu(J5Uta9fx_}1)jzINzny>8CTy~S4-VW|U^znDLk!k6YWsz!rCmWXi`7s z`-jBIb6*nsLO7XK67aN>G7N3bb5=dahC+h8~Hgr z6x7fLq$&;Q9s9i)AL~ogc`YiZE+IaL-5SUkQcvxV3reXW*)N$Z0bH^>msSR-RISP* zll6BfKb0pR;Z^Ju?sfj5g+9NOM}lQI-0~V&Oi6{>KEV8T$)TI#1Bd=z5yLX95*OxT zQz8eCxHO(qvp}22bdEln-mvaZw)*wbuNHYP-?z3Lf}r^3%`o#N;@zu%hphAO$!-rU zDMm5I=T}MNuYaBjpKpC^c!t4|RFrY{D!#5nlE3f9UG5KgWUs%->0aw|zt6gPjPiRoQc|uE3KNQ{KWQPbMBK?wm+30NzDe`n<29aHb}VFQQT)sSum#%$#2LgYYjVpCC|-bm=PC`N0<_x9pj$`?f+zpB-a z4Iq@v=X~yX1YDY!2@=PRJB&R4vcDq#A^C5wvveqFN;;b;MZ}lAefwprhK&4uXZnsK zV8ic!41nta#`RZ>WXEPG@)>1(XN6kJi^1xsw+ZsOt;VV6_kL?g2boNnRVAq2>MSpc)&Wnw~BhAlp=Z#jI3kw^M+tKd4JDksEE!WHeZ&&Rkrx<4%8L`zOr_4JADX;ZH>2XyER` zyKI6)S18IBG}lc} zzjR`kmF`h#Q=9yGoBCuvWBAQ&Aj50${p0q7*TP%iz#aB{iB7_w!My07EnK$}g32%Y zhK0SQYZS&5*5E^GUKrSgq~@OEbtnY)ci3HW7!O)!7qjY(TakR5{et0VuPk}>{w!_c zzBp8#;KJ@;nq?vLrqV!cNIUGB26bfe3}m=5(-5aMUkqo zLFIV6aqRCxcVNG69&mG}n|*3ZZLIF$HpN!sIrrv@fT-6V`nMB`#O)&1xJ?w5`0;Y* z*oZ9iiQ2n}x%gB2Zrr3?9toe5_9#03oWYGQ>LuA2KD6*C+;>BeSUt9Q?^F^qWNbpG zs9M=_&R8!5I?^BEj59kJT$z?9*2DQDS3G)?_GQiH^d^aZ$bia#qo!ikC{pKB=xqrm z`hHZ`o)22o5r>fZ2N&w&7rVZZzu206tRx1f2;Nq9%D1aJplyR*m4*K7%WJ>xOEs0x z`*oDtKpy$Ym$1{n2$LSGA8`Qbtl$5}r(piq>zPTfO%%OxUigMs&hR<#SX*3r=+M`q zO%CBkjQ4>dhx(2`H0Yh^j~?QX8_Ui=T-qNWdsuN^%PHn^#C{bB;^gfnk&?(7l^!kZ zG3%fyZ;peNmwoJ(0U-^4IdJ~PP7IPl4h9ph>9ywt5%IK@lcartMh}At@87HZt_Grz z4fWhd8-hixSJRqVyhG>rlbES9yquOJL6$9Y=Qr3r<;|V^Y;=G|b1WKt9xz@=g{>Rw z^XoRM$(L{YPMID{y}s12!1sA#+S_{nuio|(S+|`}i;g+%OtNsf5cKC3=C`#J>9p3F z^=I!WvpuqwzCP%X4Pl~OB3Ig1mVLC?gys=_g-v9 zaN~q*c}p+XA4ktVK5^ylaAHxJ1oP#)hHb*s<)5A_?8Ka+_azqLQoIpLID%3WeaBV< z$Eo@+^P!wByA>B)rSInlgYC<8f0?cvQ>`sEm*0F4f8t8sdf7)*kQ2jk?pRirtWIoQ@y<{s_5qaibo1| zwvM&coRingoAep>(dayY*4h=Nj5pOs1RcTSRdn!*H^a}Xf?Xye;dBYW}I&mZo6 znh$LhO0QgV+>v!SmDWGfGk~vnCs^4Y=l*!Fg7Ogl-Z(!}-m$Yc0sj;$G?@@&+p|;#A zf^q4m{rzZIOETHn?a0ZS5~p_)8TOt<$fxrJe8*kID7X3(re&c_y(w1(yO;ehBu0@_ z(vdt+-0!V3bs$zy9pC?<0Xc@Q}*ZbRX1AOTUYA>c(^+nzWykAGkZds51J5mz;g) z&*9F}cU7vVBNXMevwxJVMgNq3L;Dzv_4#z!XWmn=6W@$xe!hF$ps+_i3(PxG)gsqc zJwa3+TZNw2{-J%#*!a!^w++}9Ic>)Vn(L_q`a7pfV9NHs=w?o3Dm zVX?spsO)eGV$i+m^MTT@`B8Dm^*X_d1UrsQ2EK z{NWowOH+gTFG=m$2d6G)Dc!2k-I0AT7O-(!Ko9>M*?Suz+G$9A<^3)Df`Z+_$4hL@ z#6RG=#p5zdL)qm@A@=<==|ZcB-2E%nzUGcx+biNFU{mp9NJ+M0jGiLzUGuBw(T>lC zwbA&BPjgV;-MwGZvX9}5shLKl8tj+Xv3kG>U19-N#~T)OeShJA?4~j~myTK*TZ%*; z=|ZpR2|l}1vZEmNo}nVL;$>rwag!PB;ryL|w{n(OG=dS*Ej}6->(`>7QDvZJ*$cTl z^tHJu1N+BMIw&<8*gcK~g6GwmvX7ldncp`n+4ZqP`F(1}XIPca4ZkkwY>^pkYWo2; zrDt@nB2mVkep^F684BtBQ2r)m-Pn`li|f|?o!=Y&)d0wrjQfogF(tHwk&BnkH~jGL zEtCv>c?zV&H2M`2P2Rvqf7rwv^A|pNTBg5S7MFKsZ>oyzhmQ5fl=FMT zq`(cN+XH_dnJZ=uZ24TATr6+=klh!MW>8YUMVWy+)Oi=r+s?H0Z;;QbuF?`#z8t=} zd^nP59}HY>d^X)qNEKib|pEUNci`<|g2=>`Q9kdzQ4M5I(ox=Xqn1`rrPKtMu~k_PGS8f1{} z?ixxO2I+nl`upzR-p_vGc;EMU|B}O*S+mxxd)@24&g(os3j;&FX@W+CmfOMg#D*QP z6_m8n9JZP8>22{Fx5=5A-)kPxV%1SLC(~s*==YG{COj-;t96v7sUIU3Q_@-!><8<)WZr^Hy-)C? zQ&M&tp3gz4(Vd;0jhqH>1UjbPjNvfj8x)N14hi9FSky+%D1Il4u|HR+&Fqe0k=2Rn z?R@1Aq!n5#q9{7^-0YvKpbMYEsLw9R@~z9+qZUgE$$hpOP$kesuL85pRtQSATk-Rh zjaqBeQ?FVwJ7&+SiTU7#s=1283r*fDn$tqwyo&Xh?CG@Jk@1Nr5*V;OO^VX2U%j_D zkm^CQm~L;P9lt}-AXA!fZvT*!zjS+?ANunYmleIa36Of6uw z%go4vo z^0X^+)KV;QigjxVW@@<&&SqeqE|BxJc;l0uX&wv3g9Eaa&ZrROtgyv!>diG~gU>bX zYbopqb=b05*u*APm_~^GsQ)CTvMnmND0~+3%x)2Kzb-6g%Dw5{Z1TTXk{QiJ9T7ED z$em20o9C#heAjjEA8>@IpzqLu)th86p8w$UOT4>48yj4*ZhO2iK4;)(5H8^D*kREV z6-G~f-^^%raOU?sD6`TcU4E_LZT;&b8*fG{RcY;&a&bj)FTs@BtYA&;L3qT_<;n94 z8Z|Xb(t+R}J{q(4X7Cv0?gqU7^sQJ(R@GX!Z4JOSi>c=}uFhjO!=I;B&iIz9&!GRC zfL!mM+vbRL2*-zF;4HV68Mhj>hb`}(V%Z&UjgQ`stT0f^RmpzyAkE|)9hck^DYL7J z@tM~Q&7(J-dvd&`k7*&d0nK*<*LR}9&E{JB&S|ZhBR{+qwie;u-j_`ELB%|Z4?^TV z0;2HveT{=Ok!!R^hiH`6^P%Vfx4;B`FXEkRCvN#v0qjrv&vH%~O)v;ciBK7aeHyp- z8jae{h@!u!NZj^WrY%_Vy7y3?t;3|t+zvIaQ+g6ONw^R2q_1cVeNKnU{CV7`gzg#k z%C3Fde`UW|PA5;T`W_|dfXp+~&MU}p%TwUU<53KQ<>6s!(`-JFbnEiW~hZLZmug4N<4>lCYWCT?3_eN6dd*ZB9Fksb4G)`*yb(Yvdxf!qru!iBPny+ zQ{Fc(t9^;?tUwW6sT}nVnDnjE2;~3f3@qS3-6S++O<^O7b*oF%>a4=XEh%srzel9- zlAFsXg5T-$!AX`BZ9nYj&I@|W09VH18+B-{mv_mpR}pt*a|>GzJ= zm5K;6JJCAlIT(|&02MY+=~-Q#?oaZ%(L4ndd0=f>>HBq)SUgLfVdlKo@J7WtEbe^< z9u1h>93*|e6;oRGEB0KqP5jCJ+}vFB&I+OURr)mz_csi3pN+Bnn3{osDf(%q%VmCE z3uNY&xqnF;l;Zh&4XEt2Kv4u$!=!;H{=HW`s=x%l^i2e~%NF9%w-6|_d^5Wp(lqf| z`SzlZ{F@o_-pD6-(7o9os@|M(@!mWXIRhy;_|#^>RT8J=c6~x&5N*t^8 z+|AR7K^|b0sMDeJiwao1U(@EJh*}s(8H!kqCKpHpf^*mc%H)xne+o^SKl?@6#{vay zxGoIh)TQ$be9*! z(n1&Q!ArqAT5053i-7TcOVvSz^*ZRT$)lI-CZf#JB6U4=W8S?_ApR4CG?1atFGX{cf%Bm# z)(Joqc_EL%N@!&m6aquMuJ&O183FqXBluzepd^CU7>=ve1%xtybLDgxK%rWN<-g3& z6|9g<{0NA;m;p9^<8=WD_>!@1l?&Ct6$m3q+axP~7x3~$7yZU4EpTtc^34PR5b4rL z{+W%(U_ErVcm-!-MSqqb?s>ssfz-Rm!1|~S^jFZr=8k~TUO_1cRQDEW+yyqtH>88H zjoT%S@`BQDMSwOB&NQjSu5!)2*?T@bdtGGLgtgrPGp)Znvh;)kDawEzhX)lh6Uc3F zqSU1i-)&jy z$RCgd9y82hz@`sRXi3)2A?OWPtpZwdAD=s8a7PLoUe`gIsbWCC{sb9dB;M z(yyM)@lpb7r;QLS4#@lNxZ5iwp!iSDB=hgZg-iNjPa$ug@J%08$W>*jngXXrHY{+O zS{i170g>r1ihOMhcPWhTjG71HwI3Q!nj0xP2)75JlO_6Cq*Q|~E{DbBia(y4+w6XV z$_^607WrdxY&L5`fk8ZDq_0jsoI!X85bd(GSw1+1C=359m3m$G|D;kMH7CE>q7>gB zIk46eI&^r;S1l}`aDwtF^>?yHw&!U0()cry2ZhSlmI7|osbP5Z!j{Jc6~H9<$~z^| z5Kzs$I`A^d&brY84b>lIsl59Nj4=ia6AbPrUeb86yhMt`L)w?1Hm~lD8mPKYv(uoEkYd2#AKthC27QKu zH`FjSm+z7*{8}mcR|_uOT!yIhI4`EFg5(wg7YHLpc->Gh7V=T){iims_;^hF)Hsu5 z)0A@@Zd+QvrOYvTK2WXt%2wp&t00ynoA|@mr=g|FNiri7sYA<+@@}%DqqZann1ia= zJ5GHvp_*_+Oea2!#-N?OOSMX2yB7O>GRYeFrt#2)a^zHy>7eHr(t)> zEqsKN4{^>$eewf>j(3vkh)snK3)2J^kS>FT#=lpWPfLHV`Jo3BG7vCuT)5@*-qK(8 zN~$|l7{U3#qI!X{W#*WWWk3_jvehpGabE;RULTLY#&dw71h>5%z0N&)Y+yM51#Cfh zO$rqGrAJQUBca16oxR%0za9+;LvXhv{1mR}9 zi+PFzv_Z=nK58D|Y(0Y*Y?2fitQa}~pMTf-_wy_+@;JpUOp+R%-w{4fdRgd0zOZ(F zueDYQUzf8f1_U#pmJDndvZsw*1hcNhR*~AMR`H92ojj8+S&foT37$1qREsU*- zYr%%K)!AveE#7pXBgU;pdJ}QH&M}^F?@&cm8(7f>$ z9Y;x*A$@K+qBvS*|D7C-?uEyPv}PR>&*p;tx`TBHGBg^vl>g(rDA@gObMrTMOp3~hdJP1YxB@#sW z1zZE9T&_O|H4MTLubvOGyTC-_=QQyjjpwW8TJA42{csLTDc6AS;Oatt@h6|{ugArH z>G>K|!1=TJcJFNRHaOE|ox@J8zKWAsGtbiVcD1H-Y3@L@_mYg}X^?aNy6(c@;-Ofw zn333;{!Ktbw6if&??p4M7*?)Fg3_f)cEz|##)$O9KDoPGtH>S@vV>gY_d84s-Cmce zU*j5$f6?T;Oq{(Q+Hdy3!}E=Lo974gvD@XUff}iR%x#+9&sd*atK2g({+)#W)6N4N zZl3KGXG}HQ)Rk)Kaq2NJiOCc)o=}J);f}l$z5jSyDo2Owm zIWM9e57{7gG@H4zvy(@+9=7l}8gL(kyJ$dWS!>CwQLrF{qR1Cx$Mu=DIDIK16lYVc zHvNF>VwNGLrsH}#F`xh_#`)khx4#0VIcYo`b5JHv;J+RZfWWhSL3A&moVskk^V3zlqs{qgScoz5dp+>9bF6E$jZ0 zI1~om5Ev_x;O67?v$x~dxkhjoLz8Sy9t2zL=m;gsf~VaKWHez==luK-zsz?+IL(uc z!{e#u>@N{`5>d zNACK-m!wOZ^q=VUuWga_N`!yfO06G+t|yLJQ@?|&W@V+2-38tnpA+x>_|KRQiSSn= zi0p5@bkw;mTRSJI^$Y@tHM;)5O_H>r7A8!Ih%sv9+~}ahz$#T4V)xv!Jy!Fp7t|~~ zzU8BT6#RRl($C^~hvOZv$?&~D?I0G^R6!y$K)iAp8NK=g*a&?zd93S4pd*EHSM=Yt zZ1__}ZN88q&^hl9Uu-|^0!}wgV%OFaAU-BNVe(S$KVv|4)TQVR95Gi@`hxn7I4I}s z6vz63#4^_2MDc|i2wpV5ZX-U)3mI&_5G{Id@ep>>V>7hZ;4TcJZt1jSDbyyHPZ1%b z=I^QMyNRF_q@5@+z?`bl@?Ae|G}=Iw%ovu&uWs1q@=+QjRWTV3r-PNC$lp(f{UwcEY!J(UfxmYc$DO9!(Vvc`3;l>lV^2!Sz)qvSr z+At1)rEp&?pd$Vg>7-JVNcs3tcpX?Y3pw4&5O70yIw^sjYbmn$TNkMLzhFo&KSaqm ztH;tdUyGve9t9DC70}Ap9GXfcat|`COo?vVcs+o4^(RVkl;;qO?5D-H6OVj@wdILi z8Qz~sBwQcaHVMt-Cu*o(ewvv(YnR#Z@n*QM&$ychEQ24D>w5y{9k$`6=)~EK{}CAb zncZ&J6KPFhuYQ8*acJzr;^09Q*8REyg#HhSkS8~FnuE4MxRhXee~P$=FQgm`l=;+A zMPaPCuXb}&(sF7g9HrfV^?SWWeepXnmHpI+OTI4=EBqHH%CKxf)Zh?M!O|hy+(J6! zv$ZfMSEq~BtG4U#AnrK%_1q{1r@^sH2Q~R`v-MQiRxXuN0$XgN;0@R3*3<+hX2TAn z)s14B^a0IPc?783#W*2{xUsc^o!^BBv;PlN6x!>tWLJ~t+#9twJF!5%iQEQ>73X-N z(ic4Z2-id-GM)Wl_RIV!Wo@GGQjXRW%PROttVhGa(>irmSA5iz#8sSLRzyV*3$v~< zo^fycCEJACp8?T$bkBnSH+_eRP%0$s-1-t92^euE75%F(e+$4}4u3Nt#&4amlHXh4 zu0|T{^<)*+FxbDCYj9&XHOm)|u^&tob6g6d__h`Ezvrr)^Dyo9L_tH9F<`9Vs4Bc# znMlBQ4>aGY_$(}Y@sOWH{LDav##Oh`H#}QQ%HP7PhTHIvNWS+nXx$;f_#dcL&41$8 zUTGxNME(N6RWj9G+X-NL9nYP^tTKq~<|M@Ds8Pq!>DU=LxXWTZ#Ucx>@MZC38z?g~ z)KEvQx}|-Fi(e2oTH)VJO5W0UOCOT^<9W_A%RW+jkrP~3FB|cDbHl1e6OQvYe2(7c z?a_GjX2(4bDJ-b-pWiem9Ef$7REk7m1zbW1opS4>#gt$@oq9{f(G#~fpEBy zpji(oWVd?K==}GZBYUF$@j*5W?Z3)DTM`^kbGMG8za$NYR=(sn8 z%_^)4TB9a!_6)pVsFSAQ*wSY|V-Y02E;;>aOSp=t?X&2eg?{OP&(R1$eCBx*4|U>R zJVGgcGd%6$b<0@Cq`MxO8nBA9mcF5vVW4@0zB~T@dyM(^5liF!Y&ZQ^j}0-}YKG!0 zHEor&SsaJ&Ss-;(A5DHb9nInA-j{f9Gz6 z?_v_BaWrjRDJ4XieW4-S-Gv6kZDbylUg|janIfs0z#-uyUj%K$euK zOC(i1tRv}VG}4(DeEDbs7Zbu?_E3{^po(Hg4C8X|h9&vJQshIUY@kO=s_3hNw;D9b z?GllDD{$7C;`5DTok!BNbqBWxe0^Pr^srmbsng1n>2iu@==Et627g&N6=fy3X;~mK zduQcq@;E|i@FOTd)47^d6-kOIh0+KpJg5Lv3*!zG1^`?}Jy`^_EJt(j-veBiw*WG$ z?)K*L&S3tw)?U9@EgBSc0X>6IPO94cm<0Z&U+5e>_=%Tt@YC1nVs!q&DOLkk*C)3j zgZjR)=;!`Eu)OqpJ>yE8tS1!1k9@>GT~qc_g5P?EytRx54^ko6@T8@3Xupt ze*ziDo2A>)V7$Tz<_hI-S$GzmOeTi(Xk&2fYD02$S;MNUV`V^L#jIp!hgICuovrvl zW}#+vxnf^H`}tZP(+^nih#XU%X(p4wDwQANFSBmT*uA?1Tpx8*lL!S%UCG}2BiHWL zDn?$HhoBZBA5q7xWDF?Kv_g(vTfE#enfT1b4ri)s*};CPpB))d^{JP8)@2D9!(bK2 zJuj*I|364(B++Pk5o}Tqa4%XL_kZ9LK0mup`^*_lMMWk3We^VahOx$eVK3(SjRHB^ z`I+taVoIAW6D$bn`kNGLoANes$_>7)T+*xxw}KG)VHJ@viYH03e)lN-`x3B8FPU$g zBZHswTqs1m>3b<4YTja$dJAw*a^rqevAAw<@Az&IdDFmgN zM1(?XA)Rb>EQMhj(#bDVo%=nJmmRSJ8?%lZw)qNFrZM-&36Omi@6Jg@G%pb(l@ZGiXT&e{OEhW_ouWQX zT2(cvgbrp2J6P{9yT(lmeb!oWAW=n-Bf=EGOuFjIY_s%uHZqwinNrt%d!a8r z+QhKVTA+zOv0<4Ztz>!^++S4e2(_@CrSx!e?C{P^J9FUcN|!eig4;BjJ-w?dQhiRe zg?ujf0WKkiimK|;@uXo$jos`^0E=P_=)s?_K7D;0&Liv2!}oD}pMYKzYrH@`@UeOU z9J$o`hZ3lGk>Y=+r&uJP$TszZ1{2hCARn(=08EKr-V~s_ru#ZOpKIjJJ(TO!Bl)O; zp>%~Ri-Bx=NDwI;&>KrahSZB2cRR#`7#o!4yz$8mp$YeG6G2S-rxYYiO^3SU(}QWv zI{)geVR1cKenRa!d=IsgRP0g=o|{tGRRLY(^2fg2h|oj|>Q_z|a(dirXvlZ5E!*xp zcEw5mcZv*;$w$rT353ibaOzc?>Tl4eq?^*y(qSHm8|J@yrjD3A_Y z>=N(HP5EhHb~?t2CzIp^s2+7MnwA}?AnGRLKtltPZ_6?hAusQA)>1PqV+juxkhtdXo8CN^^C&Oc^>VQ|#P zf6W#^Ww(<*bM5SdS$w7|;qzwh;EkW9(X*LVy&+H(T3h@BhO&{|T zlTY?rOY6FGL-+(9k_XV!UWqWbgVpAYZE8%&uZe*NFnnBhI3sclDVpcf5!D>DWXPT0 zaUYgJg)nX`H9Q+vtpd#2*>J9p&^uMj47qU*$iPpwX};1`g_W15CD9eX(-V=cF^ziN z@-(2L1;qy_Jk95n=W+gK3MitW>lLQTiR+rN2ZcSETS5}l(zP`NdXpL|h#ncC=ZWj-ov4wGp?!;8PO8>XnivQ9EP*X7( zSH2pa5DS$m&^S;ZYP0)##{>Q9tq)9S8zU1{*W1EyT|8>-*r31b4w4RxvIIbbIR!RCKUFW_LO z^VRRLCTPZC6MNd{zB{C4+k@qYee-c5*Tqj)=@$tV_>!Bt1HgmxLhTWNLBQc<_usN| z`Y*61@Gr3D+*b&oow&dX0Fztk=i^P6CkRgx%0KWFvHt%FoOim}T-}0^z}>nc_^t00$fQAR-I;yiTkbLT8JCWD zQvt_XfX)KWQp|+!bS*<%Q`s2H0@`RqE1Rd$`l|nSi1Y zO6lfno(&Kx*MaiWN}L9}rVGX#%f%9Gh+5sJ^(1+^&cRO)&wYj3aTi z#wbuFkWreX)A$3Mc+PWbp`CrDJOHF~qjHZ+DexdS5%}I6I8wzRf{z9u$uR=w_IrR_ z|Ci}dL-QBUzy(7Aq*yW2(LJT5oqE2v^)J-{Yv^NZ6QC0**GZ-gzI_ZAFT06|NVNE$ z@e2T#W*SrN&tUIoEw|ISFN1@GQZg-N*-re!)mZxrT>t{TNj`TGFSqHZ?DrheAusSW zK>rXQ{!N!~sU+k<)aP@}nxmtXfPf4&PWpdGY1p3t=Rk1WY!*8M?)J>)cwKL8iQJjH zZ4Eq(8#`XT^bhX=$LnACiNXFm)J;xT4!`@}iwucPJyp(kH$T0mQ$0gxF(0Tqc zB^3TLCH`U;fTP}{djf2o`_}^_%s2nuJ{|m@eVN0&ql28?4PpjNmKMFke|Ew6|)!fK6fqaE^I^9BG1p4Y}=16?TK`CJHVE*N1NcHr9htw~LJ)4!gHW zf(`_wKQ11R6>1U&<58ic`J5!4>;qPsrn$3&72~lyWygyntKz;A{l=F&?M-<&^wF47 z=!{;LKmQq15C1tBgL@Ysx?hW;S;C^DyS#&XzZA$*U+>yWqCq+|utucnvUt&;`^~pM zFns^z-~mr(Ue?#w4`s;`ZY(r4V!VIf%??M+glYJ)ZvHbKX8t)_+*m%)xCehOKe6|^ zB&Y`Wyh1)ip_!q%Zch{kp6t#_Hv3*9LRnIwvJ5`_%&4-b6dYP0!1^-*wueK(Lxq~$ zT0h>`r>@PG8B1b;-qf{9zag!=oWMk6?AT5)-N)(c>h{-+>vx;i{a@h^ZoL3b*y0r0 zPd>nn`TvgVY=0l^AT)+Ag!99%NxfwfhberKyFeY@wCd#)nag{_zgVFcf3QNb&q^;U z#Zxt!C;*MS1)BT(DYn@Y9e69=VwKe>B0o2EnZffnPu5&`=PVQ;{bl>nZ8yxkWsaJbL)qj8!8ve}|0*DaD20V!T$*-I;883w3 zt$nj!9?Bg7fm+X%uUv{N)Pm+ik-Brny_%+XvrwWzIoIw#G=uS!%gQ2^8`gDozmv|< zf>Xu^p#4Hc^>Ox2ayj?$8j`LLgrIP9rk%Ws8Z%#vyPrt&_N|#|zfB z4p>(fZZ-UVJrR5wx^;f7!s?cDzyrx>RMAC_hbdnoUe^KGp#e2D zbckz$-yZ{yjGKj`^jlrPAkcTG38!0smCgdg^h4Yw7P>_(KTk9EXqXsAfVmqecc#w8 z@F-^pb)Gt4160ePXMSnwqS3K0;)Lq-6O<{)e>^n|c}ne=XLc7dlWdHKSj2Z#S znBpEF6=*au_H3w3g6Te>5P7&Z;hr!|5t@C8Id16icfZN>{8k)lk_%_QO~$;PZJ_#> zLc}dxy=v_#aKGRV$Fw>YN{{^6&MPj?03;ZTkCk9;zV}a(Y-SBHNghQE_k8qw|29!z zTO;JCe{AfKzb z-MEgirB2J5)c2{XxV>KVs}fJx_;RjjtbOrgsdCw){p>nAG*R2vs^7$rUCNj9Q56TffNm*Zv?q{0Kj6-w$d3QDFtn zkn--N8b*Cj{SJ?I(nA{m@ll|~6)I@=UfE=R3K5FOD(1XkAphe)pQ{l$F23R@9{!th z7Net;s5lgu<26G(Gv#&r^XXg*LrPxf=!XdHbALC7rUUo0>$E)%bjZ>VRjiDT{a4IX zZq|K;HypEm0UD8DZcC!W@@8JBY{la&>VLcdMuHCgqPwp<=AK}5EIgU$R5IJAMon#! zF@K1KM5aDT3JwGly!qO~)5|+#@fG|m!TVLE3-kV~E>g~F7hj!*)X!OXABnm?CBC>2 z#Mc^6v{`^L#nEKHX=I(urJ@*IEaM32*jc!OL(?awD=h#S*8qx&Ng(yM z&{Y`?c5%Gjnl2GYJN>yh**%kJ?xb^|qFr*?dMArgu8(7dfo3eKtuH~HA?HWnu>)YG z$AG*uBue2kk7UnL8}lD3xb>^_j5+BH+K5Tu6zoM1@vG2X30@qJ=agpNDE6la>h{h_ zqq^fkM)dhha2w)U*hRefn8)o4!Zp9vQVjGr(uCFcewP|rt?{{Ezb(b8CrpeZ&aJrH z=sA2yTH;MKz*#pKoAVQ#O0+ZNzZF}6`P@5Xumwt??~y67{)@(bc(P|08jQ*kFp5+r zwCVW&!f$vGl#J)j`N46Yamc*9959}lxz=*Ivyi2@m6 zX&b-*!ay#>NrjJ~GA6pUOI~gtL`KoVcnTx@K+n)c%L!$1AiQ^o0l^vwf7Jf#9cwyS`i>0tkUrk#J7~pv*=CV;@8Jus94sQO1{gSbM+j@V9zh zT;`07DVY%l*l0R+r+hGnc<*? z)%i>Ic_rDU^Yn)Ga(Jh+=?oyGPw0M)G(S!!MM_08)@A10oBBd+fRDbCB#}7V5rQr% zbQ0rk7|6Qxc%~K|CtlnN2V$w4Oq^ql~+LsGqD)20MeE>~nJUQEqVlbSsn^R_%oT(su zoB8fOhftQ%vkc+GzO*)0OKALp5Hk}?Nv~W%V!p!YyN-L@_~c9psqMlEEjDK- z_K;sq7KlWTG;Cb2Q`b7oUt(IY7;|9GZ_xZ3!wf1UnKwWl&JiMRisvM&7VhslY%%@=5-ApoYR8H)Z?L2H7s6^t&FdHNi z`A%eLHnEa~ca+ae-X)QeEgA?Q?s49^3AUmMlH4lAMO-5alYqi|J<6Vl0ve(+V_z{< ziwn|BGuX{}VRO{RrlaSeRcGhcCERQo z8T3Tt(L>q|Ad70?VfJLDb6U*hc%Js&t~;yOJVV<_o7Iy_Hy0qY`bqJ~u5mgo>om+p z2e8Yn7diYF1BvcYCs8{vYgO7m_#L++Oy)np+AP#=1+%D*A|vR+ zlo-l0qhU%0&c)I|OC?H^mid9DYH%M0frViuVxj|F-c1$}a0$Zxb^b3H3Gq(;8bkbL zQ4I7J{K%b&NbYjsM?sOy8IlqGMsI#4kj~80xM2*g zCXoIPojAzA=+JNDotFoyAeo_XGjibhBF_tI4QA;cDRKGwu^SGv4nX8PJj7>wqN5+F zM{e>H0IXnIn)E&s6Y9y{yp3VB+}TSoK=j}#d;Vi1XGGBv_C1@I6X46rH`f)=^)Gc~ zf&eNxmKTK8IlPZN)g~VYd8d&0>`w{xAFexAO5FInsp=os0H#yi-C6J2UWIFtI-Adz zm5mn#H3J9EIjna{gXK*3t|Vbvn2R7aJUkl;C`qY{(!Jtkr#_LhU!E#C7yDT2TuXXFCiSzt-9km4v~O(2f7`OEWh+JbF>e9Hq390i$H? z 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℘YN|67xUAx@IrvU9o1WZc|2XjJ=BBCa!(k{ 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 z
      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 z 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℘YN|67xUAx@IrvU9o1WZc|2XjJ=BBCa!(k{ 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 z
        U2O}3kf_@ImN|X=^F=r9vRor^BPD{-iGMu&k3F|ND2kE*pW*L`b_~XgFrR(4p zIap|pVHC53PmTtEg&BBP;zmI)7SksR>n%DPPbxe7{OLk!mnN9J zD}CH@iq{1Ujl?_F#dy8>pnqaC*3+^kaMt7Tg*6VeO*J*no3uuFGemohc{P9C7Qy6> z<`goTOo?ei0mcy3rXi|1rp0^9skk0P`oj54&9Tb3J5{9$>7EwPN@}_#!-`E&k4Z8P zPdw~D^X~FlPzlP2t$Al%m6Ec zN{_#X<3*E#biCkr9^mrm%GtS!&Cl`fwwBvB?k74n=yRm@+nkDJsq1<23*I7KOfCla zF6Bily!!s7n(XvHsd~q?wB-C3=G>ehh%l%E3z*$k>#^@4ZXR1b+??b-d0EWHmE$TC z?`GS(-d!`PHF3DTv$NAG%$l9&J^1+I*Y~`+tLtx7Pd`!dwBJ%8wDQG)%5vZ|y2^vk zUm@;%4Bdb1!HQjkVPa<0L&3W96ZuDgBB2+BdZyI78ER1>mlpO_>Z{caT}m?tOnp zy2J+ECPa&Wes3{vK=nBs7u#Trw`&XG;VTg`F+VM;KBRBIc0$Q#*Vp5cC9w;-HQ!Xk zfn9MbgeZ)-1hzGp`RysOIGhtABS0tESG+BmjAhXZfNY~VOhJG2L<$J>7o_H3fNOFcKwKB61Q{ Date: Mon, 6 Jul 2020 23:19:53 +0900 Subject: [PATCH 08/20] JS_Object --- Modern JS/JS_Object.md | 170 +++++++++++++++++++++++++++++++++++++++-- README.md | 9 +++ 2 files changed, 171 insertions(+), 8 deletions(-) diff --git a/Modern JS/JS_Object.md b/Modern JS/JS_Object.md index fd26f75..c34c1e2 100644 --- a/Modern JS/JS_Object.md +++ b/Modern JS/JS_Object.md @@ -1,5 +1,16 @@ # JS Object +- [JS Object](#js-object) + - [new 연산자 역할](#new-연산자-역할) + - [프로퍼티의 속성](#프로퍼티의-속성) + - [유용한 Object 메소드](#유용한-object-메소드) + - [class vs function (new)](#class-vs-function-new) + - [this of function(method)?](#this-of-functionmethod) + - [function 생성자](#function-생성자) + - [class 생성자](#class-생성자) + - [{} 리턴](#-리턴) + - [allow function](#allow-function) + ## new 연산자 역할 ```js @@ -10,22 +21,165 @@ Circle.prototype.area = function() { return Math.PI*this.radius*this.radius; } +``` - var c = new Circle({x:0,y:0},2.0) - var newObj = {}; +- new 생성자 keyword로 함수를 호출시 흐름 + +```js + var circle = new Circle({x:0,y:0},2.0); - newObj.__proto__ = Cicle,prototype; + var newObj = {}; + newObj.__proto__ = Cicle.prototype; Circle.apply(newObj, arguments); return new Obj; ``` +## 프로퍼티의 속성 + +``` + writable + enumerable + configurable +``` + +- 데이터 프로퍼티 + - value + - writable + - enumerable + - configurable + +- 접근자 프로퍼티 + - get + - set + - enumerable + - configurable + +```js + Object.getOwnPropertyDescriptor(obj, propertyName) // 디스크립터 (상속 관계 프로퍼티는 undefined) + Object.defineProperty(obj, propertyName, descriptor) // 프로퍼티 디스크립터 설정 + Object.defineProperties(obj, descriptor) // 여러 개 프로퍼티 디스크립터 설정 + Object.create(obj, descriptor) // 첫 번 째 해당 인수로 상속을 받는다, 두 번 째 인수에서는 프로퍼티 디스크립터를 작성하여 자신의 프로퍼티로 갖게 된다. +``` + +## 유용한 Object 메소드 + +```js + Object.keys // method returns an array of a given object's own enumerable property + Object.getOwnProperyNames // method returns an array of all properties (including non-enumerable properties except for those which use Symbol) + + Object.preventExtensions // 추가 [불가] + Object.seal // 추가,삭제, 재정의(configuable) [불가] + Object.freeze // 재정의,추가,삭제,수정 [불가] +``` + +## class vs function (new) + +- [MDN](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Classes) + - Class 정의 + - Class body 와 method 정의 + - extends를 통한 클래스 상속(sub classing) + - Species + - super 를 통한 상위 클래스 호출 + - Mix-ins + +## this of function(method)? + +### function 생성자 + +```js + function A(params) { + this.name = params.name; + } + + A.prototype.what = function () { + return this.name; + } + A.prototype.who = function () { + return this; + } +``` + ```js - Object.keys - Object.getOwnProperyNames + var a = new A({name:"yjkwon07"}); + a.what() // "yjkwon07" + a.who() // A {name: "yjkwon07"} +``` +- method get method of refernceType - Object.preventExtensions // 추가 - Object.seal // 추가,삭제,수정 - Object.freeze // 재정의,추가,삭제,수정 +```js + var who = a.who() + who() // global this ``` +### class 생성자 + +```js + class A { + constructor(params) { + this.name = params.name; + } + what() { + return this.name; + } + who() { + return this; + } + } +``` + +```js + var a = new A({name:"yjkwon07"}); + a.what() // "yjkwon07" + a.who() // A {name: "yjkwon07"} +``` + +- method get method of refernceType + +```js + var who = a.who() + who() // undefined => class is use stric mode +``` + +### {} 리턴 + +```js + function A(params) { + this.name = params.name; + function what() { + return this.name; + } + function who(){ + return this; + } + return { + what, + who + } + } +``` + +- [new 연산자 역할 참고](#new-연산자-역할) +- return newObj 하기전 apply에서 이미 `{} 리터럴` 리턴 됨 + +```js + var a = new A({name:"yjkwon07"}); + a.what() // undefined + a.who() // { what, who } +``` + +- new 생성자 키워드를 사용하지 않았기 때문에 window 전역 객체에 name 프로퍼티가 생성된다. + +```js + var a = A({name:"yjkwon07"}); + a.what() // undefined + a.who() // { what, who } + window.name // "yjkwon07" +``` + +## allow function + +- [화살표 함수](../ES2018/4.화살표%20함수.js) +- [MDN](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Functions/%EC%95%A0%EB%A1%9C%EC%9A%B0_%ED%8E%91%EC%85%98) + - 화살표 함수 표현(arrow function expression)은 function 표현에 비해 구문이 짧고 자신의 this, arguments, super 또는 new.target을 바인딩 하지 않는다. + - 화살표 함수는 항상 익명이다. 이 함수 표현은 메소드 함수가 아닌 곳에 가장 적합하다. 그래서 생성자로서 사용할 수 없다. \ No newline at end of file diff --git a/README.md b/README.md index 21d2b54..0b52bfb 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,15 @@ - [Ex. 실행 가능한 함수 [code]] - [Js Object](./Modern%20JS/JS_Object.md) + - new 연산자 역할 + - 프로퍼티의 속성 + - 유용한 Object 메소드 + - class vs function (new) + - this of function(method)? + - function 생성자 + - class 생성자 + - {} 리턴 + - allow function **[위로](#javascript)** From 2faad3c3730beee6f07a3828a2e326e9cd3a0a5f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 18 Jul 2020 01:06:14 +0000 Subject: [PATCH 09/20] Bump lodash from 4.17.15 to 4.17.19 in /blog_LikeSelector(ES6) Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19) Signed-off-by: dependabot[bot] --- blog_LikeSelector(ES6)/package-lock.json | 6 +- blog_LikeSelector(ES6)/yarn.lock | 2099 +++++++++++++++++++++- 2 files changed, 2080 insertions(+), 25 deletions(-) diff --git a/blog_LikeSelector(ES6)/package-lock.json b/blog_LikeSelector(ES6)/package-lock.json index 3485be6..c61a631 100644 --- a/blog_LikeSelector(ES6)/package-lock.json +++ b/blog_LikeSelector(ES6)/package-lock.json @@ -4564,9 +4564,9 @@ } }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" }, "loglevel": { "version": "1.6.3", diff --git a/blog_LikeSelector(ES6)/yarn.lock b/blog_LikeSelector(ES6)/yarn.lock index 45feadf..573fbfc 100644 --- a/blog_LikeSelector(ES6)/yarn.lock +++ b/blog_LikeSelector(ES6)/yarn.lock @@ -2,6 +2,778 @@ # yarn lockfile v1 +"@babel/code-frame@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/compat-data@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.5.tgz#d38425e67ea96b1480a3f50404d1bf85676301a6" + integrity sha512-mPVoWNzIpYJHbWje0if7Ck36bpbtTvIxOi9+6WSK9wjGEXearAqlwBoTQvVjsAY2VIwgcs8V940geY3okzRCEw== + dependencies: + browserslist "^4.12.0" + invariant "^2.2.4" + semver "^5.5.0" + +"@babel/generator@^7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.5.tgz#1b903554bc8c583ee8d25f1e8969732e6b829a69" + integrity sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig== + dependencies: + "@babel/types" "^7.10.5" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" + integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" + integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-compilation-targets@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz#804ae8e3f04376607cc791b9d47d540276332bd2" + integrity sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ== + dependencies: + "@babel/compat-data" "^7.10.4" + browserslist "^4.12.0" + invariant "^2.2.4" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/helper-create-class-features-plugin@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" + integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.10.5" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + +"@babel/helper-create-regexp-features-plugin@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" + integrity sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + regexpu-core "^4.7.0" + +"@babel/helper-define-map@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" + integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/types" "^7.10.5" + lodash "^4.17.19" + +"@babel/helper-explode-assignable-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz#40a1cd917bff1288f699a94a75b37a1a2dbd8c7c" + integrity sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A== + dependencies: + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-get-function-arity@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" + integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-hoist-variables@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" + integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz#172f56e7a63e78112f3a04055f24365af702e7ee" + integrity sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA== + dependencies: + "@babel/types" "^7.10.5" + +"@babel/helper-module-imports@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" + integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.5.tgz#120c271c0b3353673fcdfd8c053db3c544a260d6" + integrity sha512-4P+CWMJ6/j1W915ITJaUkadLObmCRRSC234uctJfn/vHrsLNxsR8dwlcXv9ZhJWzl77awf+mWXSZEKt5t0OnlA== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.5" + lodash "^4.17.19" + +"@babel/helper-optimise-call-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" + integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-regex@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0" + integrity sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg== + dependencies: + lodash "^4.17.19" + +"@babel/helper-remap-async-to-generator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz#fce8bea4e9690bbe923056ded21e54b4e8b68ed5" + integrity sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-wrap-function" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-replace-supers@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" + integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-simple-access@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" + integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== + dependencies: + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-split-export-declaration@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz#2c70576eaa3b5609b24cb99db2888cc3fc4251d1" + integrity sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/helper-wrap-function@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" + integrity sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.10.4", "@babel/parser@^7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.5.tgz#e7c6bf5a7deff957cec9f04b551e2762909d826b" + integrity sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ== + +"@babel/plugin-proposal-async-generator-functions@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" + integrity sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.10.4" + "@babel/plugin-syntax-async-generators" "^7.8.0" + +"@babel/plugin-proposal-class-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" + integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-dynamic-import@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e" + integrity sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + +"@babel/plugin-proposal-json-strings@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db" + integrity sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.0" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a" + integrity sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06" + integrity sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz#50129ac216b9a6a55b3853fdd923e74bf553a4c0" + integrity sha512-6vh4SqRuLLarjgeOf4EaROJAHjvu9Gl+/346PbDH9yWbJyfnJ/ah3jmYKYtswEyCoWZiidvVHjHshd4WgjB9BA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.10.4" + +"@babel/plugin-proposal-optional-catch-binding@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd" + integrity sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.4.tgz#750f1255e930a1f82d8cdde45031f81a0d0adff7" + integrity sha512-ZIhQIEeavTgouyMSdZRap4VPPHqJJ3NEs2cuHs5p0erH+iz6khB0qfgU8g7UuJkG88+fBMy23ZiU+nuHvekJeQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-private-methods@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909" + integrity sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" + integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-async-generators@^7.8.0": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c" + integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-dynamic-import@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-json-strings@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz#4bbeb8917b54fcf768364e0a81f560e33a3ef57d" + integrity sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-arrow-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" + integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-async-to-generator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37" + integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.10.4" + +"@babel/plugin-transform-block-scoped-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8" + integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-block-scoping@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.5.tgz#b81b8aafefbfe68f0f65f7ef397b9ece68a6037d" + integrity sha512-6Ycw3hjpQti0qssQcA6AMSFDHeNJ++R6dIMnpRqUjFeBBTmTDPa8zgF90OVfTvAo11mXZTlVUViY1g8ffrURLg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-classes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" + integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-define-map" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb" + integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-destructuring@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" + integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" + integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-duplicate-keys@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47" + integrity sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-exponentiation-operator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e" + integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-for-of@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9" + integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7" + integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c" + integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-member-expression-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7" + integrity sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-modules-amd@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1" + integrity sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw== + dependencies: + "@babel/helper-module-transforms" "^7.10.5" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" + integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w== + dependencies: + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85" + integrity sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw== + dependencies: + "@babel/helper-hoist-variables" "^7.10.4" + "@babel/helper-module-transforms" "^7.10.5" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e" + integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA== + dependencies: + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6" + integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + +"@babel/plugin-transform-new-target@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888" + integrity sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-object-super@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" + integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + +"@babel/plugin-transform-parameters@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" + integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-property-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0" + integrity sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-regenerator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63" + integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd" + integrity sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-shorthand-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" + integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-spread@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.4.tgz#4e2c85ea0d6abaee1b24dcfbbae426fe8d674cff" + integrity sha512-1e/51G/Ni+7uH5gktbWv+eCED9pP8ZpRhZB3jOaI3mmzfvJTWHkuyYTv0Z5PYtyM+Tr2Ccr9kUdQxn60fI5WuQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-sticky-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" + integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + +"@babel/plugin-transform-template-literals@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" + integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typeof-symbol@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc" + integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-escapes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz#feae523391c7651ddac115dae0a9d06857892007" + integrity sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8" + integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/preset-env@^7.5.5": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.10.4.tgz#fbf57f9a803afd97f4f32e4f798bb62e4b2bef5f" + integrity sha512-tcmuQ6vupfMZPrLrc38d0sF2OjLT3/bZ0dry5HchNCQbrokoQi4reXqclvkkAT5b+gWc23meVWpve5P/7+w/zw== + dependencies: + "@babel/compat-data" "^7.10.4" + "@babel/helper-compilation-targets" "^7.10.4" + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-proposal-async-generator-functions" "^7.10.4" + "@babel/plugin-proposal-class-properties" "^7.10.4" + "@babel/plugin-proposal-dynamic-import" "^7.10.4" + "@babel/plugin-proposal-json-strings" "^7.10.4" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4" + "@babel/plugin-proposal-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread" "^7.10.4" + "@babel/plugin-proposal-optional-catch-binding" "^7.10.4" + "@babel/plugin-proposal-optional-chaining" "^7.10.4" + "@babel/plugin-proposal-private-methods" "^7.10.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.10.4" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.10.4" + "@babel/plugin-transform-arrow-functions" "^7.10.4" + "@babel/plugin-transform-async-to-generator" "^7.10.4" + "@babel/plugin-transform-block-scoped-functions" "^7.10.4" + "@babel/plugin-transform-block-scoping" "^7.10.4" + "@babel/plugin-transform-classes" "^7.10.4" + "@babel/plugin-transform-computed-properties" "^7.10.4" + "@babel/plugin-transform-destructuring" "^7.10.4" + "@babel/plugin-transform-dotall-regex" "^7.10.4" + "@babel/plugin-transform-duplicate-keys" "^7.10.4" + "@babel/plugin-transform-exponentiation-operator" "^7.10.4" + "@babel/plugin-transform-for-of" "^7.10.4" + "@babel/plugin-transform-function-name" "^7.10.4" + "@babel/plugin-transform-literals" "^7.10.4" + "@babel/plugin-transform-member-expression-literals" "^7.10.4" + "@babel/plugin-transform-modules-amd" "^7.10.4" + "@babel/plugin-transform-modules-commonjs" "^7.10.4" + "@babel/plugin-transform-modules-systemjs" "^7.10.4" + "@babel/plugin-transform-modules-umd" "^7.10.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4" + "@babel/plugin-transform-new-target" "^7.10.4" + "@babel/plugin-transform-object-super" "^7.10.4" + "@babel/plugin-transform-parameters" "^7.10.4" + "@babel/plugin-transform-property-literals" "^7.10.4" + "@babel/plugin-transform-regenerator" "^7.10.4" + "@babel/plugin-transform-reserved-words" "^7.10.4" + "@babel/plugin-transform-shorthand-properties" "^7.10.4" + "@babel/plugin-transform-spread" "^7.10.4" + "@babel/plugin-transform-sticky-regex" "^7.10.4" + "@babel/plugin-transform-template-literals" "^7.10.4" + "@babel/plugin-transform-typeof-symbol" "^7.10.4" + "@babel/plugin-transform-unicode-escapes" "^7.10.4" + "@babel/plugin-transform-unicode-regex" "^7.10.4" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.10.4" + browserslist "^4.12.0" + core-js-compat "^3.6.2" + invariant "^2.2.2" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/preset-modules@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" + integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/runtime@^7.8.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.5.tgz#303d8bd440ecd5a491eae6117fd3367698674c5c" + integrity sha512-otddXKhdNn7d0ptoFRHtMLa8LqDxLYwTjB4nYgM1yy5N6gU/MUf8zqyyLltCH3yAVitBzmwK4us+DD0l/MauAg== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" + integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/traverse@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.5.tgz#77ce464f5b258be265af618d8fddf0536f20b564" + integrity sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.10.5" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + "@babel/parser" "^7.10.5" + "@babel/types" "^7.10.5" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.4.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.5.tgz#d88ae7e2fde86bfbfe851d4d81afa70a997b5d15" + integrity sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@types/glob@^7.1.1": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/node@*": + version "14.0.23" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.23.tgz#676fa0883450ed9da0bb24156213636290892806" + integrity sha512-Z4U8yDAl5TFkmYsZdFPdjeMa57NOvnaf1tljHzhouaPEp7LCj2JKkejpI1ODviIAQuW4CcQmxkQ77rnLsOOoKw== + "@webassemblyjs/ast@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" @@ -163,6 +935,14 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + acorn@^6.2.1: version "6.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" @@ -188,6 +968,16 @@ ajv@^6.1.0, ajv@^6.10.2: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -251,6 +1041,28 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" @@ -283,6 +1095,18 @@ async-each@^1.0.1: resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + atob@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" @@ -426,6 +1250,13 @@ babel-plugin-check-es2015-constants@^6.22.0: dependencies: babel-runtime "^6.22.0" +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" @@ -772,6 +1603,11 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -792,6 +1628,34 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -888,11 +1752,26 @@ browserslist@^3.2.6: caniuse-lite "^1.0.30000844" electron-to-chromium "^1.3.47" +browserslist@^4.12.0, browserslist@^4.8.5: + version "4.13.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.13.0.tgz#42556cba011e1b0a2775b611cba6a8eca18e940d" + integrity sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ== + dependencies: + caniuse-lite "^1.0.30001093" + electron-to-chromium "^1.3.488" + escalade "^3.0.1" + node-releases "^1.1.58" + buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" @@ -912,6 +1791,16 @@ builtin-status-codes@^3.0.0: resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + cacache@^12.0.2: version "12.0.2" resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.2.tgz#8db03205e36089a3df6954c66ce92541441ac46c" @@ -958,7 +1847,12 @@ caniuse-lite@^1.0.30000844: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz#b9193e293ccf7e4426c5245134b8f2a56c0ac4b9" integrity sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw== -chalk@2.4.2: +caniuse-lite@^1.0.30001093: + version "1.0.30001102" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001102.tgz#3275e7a8d09548f955f665e532df88de0b63741a" + integrity sha512-fOjqRmHjRXv1H1YD6QVLb96iKqnu17TjcLSaX64TwhGYed0P1E1CCWZ9OujbbK4Z/7zax7zAzvQidzdtjx8RcA== + +chalk@2.4.2, chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -997,6 +1891,25 @@ chokidar@^2.0.2: optionalDependencies: fsevents "^1.2.7" +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + chownr@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" @@ -1076,6 +1989,26 @@ component-emitter@^1.2.1: resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -1091,6 +2024,11 @@ concat-stream@^1.5.0: readable-stream "^2.2.2" typedarray "^0.0.6" +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + console-browserify@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" @@ -1108,6 +2046,28 @@ constants-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + copy-concurrently@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" @@ -1125,6 +2085,14 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= +core-js-compat@^3.6.2: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" + integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== + dependencies: + browserslist "^4.8.5" + semver "7.0.0" + core-js@^2.4.0: version "2.6.9" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" @@ -1204,20 +2172,27 @@ date-now@^0.1.4: resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= -debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.2.6: +debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== dependencies: ms "^2.1.1" +debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -1228,11 +2203,38 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= +deep-equal@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" @@ -1255,11 +2257,29 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + des.js@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" @@ -1268,6 +2288,11 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + detect-file@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" @@ -1278,6 +2303,11 @@ detect-libc@^1.0.2: resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= +detect-node@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -1287,6 +2317,26 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" @@ -1302,11 +2352,21 @@ duplexify@^3.4.2, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + electron-to-chromium@^1.3.47: version "1.3.229" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.229.tgz#accc9a08dd07d0a4d6c76937821bc94eb2e49eae" integrity sha512-N6pUbSuKFBeUifxBZp9hODS1N9jFobJYW47QT2VvZIr+G5AWnHK/iG3ON9RPRGH7lHDQ6KUDVhzpNkj4ZiznoA== +electron-to-chromium@^1.3.488: + version "1.3.499" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.499.tgz#06949f19877dafa42915e57dfeb4c1cfb86a8649" + integrity sha512-y7FwtQm/8xuLMnYQfBQDYzCpNn+VkSnf4c3Km5TWMNXg7JA5RQBuxmcLaKdDVcIK0K5xGIa7TlxpRt4BdNxNoA== + elliptic@^6.0.0: version "6.5.0" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.0.tgz#2b8ed4c891b7de3200e14412a5b8248c7af505ca" @@ -1330,6 +2390,11 @@ emojis-list@^2.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.1" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" @@ -1353,6 +2418,42 @@ errno@^0.1.3, errno@~0.1.7: dependencies: prr "~1.0.1" +es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: + version "1.17.6" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" + integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.0" + is-regex "^1.1.0" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escalade@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4" + integrity sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -1383,11 +2484,28 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eventemitter3@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" + integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== + events@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== +eventsource@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== + dependencies: + original "^1.0.0" + evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" @@ -1429,6 +2547,42 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" +express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -1468,6 +2622,20 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.1: + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + dependencies: + websocket-driver ">=0.5.1" + figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" @@ -1483,6 +2651,19 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" @@ -1517,11 +2698,21 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" +follow-redirects@^1.0.0: + version "1.12.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.12.1.tgz#de54a6205311b93d60398ebc01cf7015682312b6" + integrity sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg== + for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" @@ -1529,6 +2720,11 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" @@ -1567,6 +2763,11 @@ fsevents@^1.2.7: nan "^2.12.1" node-pre-gyp "^0.12.0" +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -1606,6 +2807,18 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" +glob@^7.0.3: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@^7.1.3, glob@^7.1.4: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" @@ -1654,16 +2867,37 @@ global-prefix@^3.0.0: kind-of "^6.0.2" which "^1.3.1" +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: version "4.2.2" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -1676,6 +2910,11 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -1712,6 +2951,13 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + hash-base@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" @@ -1744,12 +2990,88 @@ homedir-polyfill@^1.0.1: dependencies: parse-passwd "^1.0.0" +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-entities@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" + integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-parser-js@>=0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" + integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== + +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -iconv-lite@^0.4.4: +iconv-lite@0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -1773,7 +3095,7 @@ ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" -import-local@2.0.0: +import-local@2.0.0, import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== @@ -1799,7 +3121,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -1819,12 +3141,20 @@ ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + interpret@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== -invariant@^2.2.2: +invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -1836,6 +3166,26 @@ invert-kv@^2.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -1850,6 +3200,11 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-arguments@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" + integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" @@ -1862,6 +3217,11 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== +is-callable@^1.1.4, is-callable@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" + integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -1876,6 +3236,11 @@ is-data-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" @@ -1944,6 +3309,25 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" +is-path-cwd@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -1951,11 +3335,25 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-regex@^1.0.4, is-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz#ece38e389e490df0dc21caea2bd596f987f767ff" + integrity sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw== + dependencies: + has-symbols "^1.0.1" + is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -1988,7 +3386,7 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -"js-tokens@^3.0.0 || ^4.0.0": +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== @@ -1998,6 +3396,11 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" @@ -2013,6 +3416,11 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== +json3@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -2020,6 +3428,11 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -2051,6 +3464,18 @@ lcid@^2.0.0: dependencies: invert-kv "^2.0.0" +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levenary@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" + integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== + dependencies: + leven "^3.1.0" + loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" @@ -2073,10 +3498,15 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" -lodash@^4.17.4: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.4: + version "4.17.19" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" + integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== + +loglevel@^1.6.8: + version "1.6.8" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171" + integrity sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA== loose-envify@^1.0.0: version "1.4.0" @@ -2133,6 +3563,11 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + mem@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" @@ -2150,6 +3585,16 @@ memory-fs@^0.4.0, memory-fs@^0.4.1: errno "^0.1.3" readable-stream "^2.0.1" +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -2177,6 +3622,28 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" +mime-db@1.44.0, "mime-db@>= 1.43.0 < 2": + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +mime-types@~2.1.17, mime-types@~2.1.24: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.4: + version "2.4.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" + integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + mimic-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -2272,11 +3739,29 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + nan@^2.12.1: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" @@ -2308,6 +3793,11 @@ needle@^2.2.1: iconv-lite "^0.4.4" sax "^1.2.4" +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + neo-async@^2.5.0, neo-async@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" @@ -2318,6 +3808,11 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +node-forge@0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" + integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== + node-libs-browser@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" @@ -2363,6 +3858,11 @@ node-pre-gyp@^0.12.0: semver "^5.3.0" tar "^4" +node-releases@^1.1.58: + version "1.1.59" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.59.tgz#4d648330641cec704bff10f8e4fe28e453ab8e8e" + integrity sha512-H3JrdUczbdiwxN5FuJPyCHnGHIFqQ0wWxo+9j1kAXAzqNMAHlo+4I/sYYxpyK0irQ73HgdiyzD32oqQDcU2Osw== + nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" @@ -2418,7 +3918,7 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -2432,6 +3932,24 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" +object-inspect@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" + integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== + +object-is@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6" + integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" @@ -2439,6 +3957,16 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" @@ -2446,6 +3974,23 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -2453,6 +3998,20 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" @@ -2514,6 +4073,18 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" @@ -2550,6 +4121,11 @@ parse-passwd@^1.0.0: resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -2575,11 +4151,21 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + pbkdf2@^3.0.3: version "3.0.17" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" @@ -2591,11 +4177,28 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" @@ -2603,6 +4206,15 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" +portfinder@^1.0.26: + version "1.0.26" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.26.tgz#475658d56ca30bed72ac7f1378ed350bd1b64e70" + integrity sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.1" + posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" @@ -2628,6 +4240,14 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" @@ -2685,6 +4305,11 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -2695,6 +4320,11 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= +querystringify@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" + integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== + randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -2710,6 +4340,21 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -2733,6 +4378,15 @@ rc@^1.2.7: string_decoder "~1.1.1" util-deprecate "~1.0.1" +readable-stream@^3.0.6: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" @@ -2742,16 +4396,33 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + regenerate@^1.2.1: version "1.4.0" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== +regenerate@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" + integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== + regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== +regenerator-runtime@^0.13.4: + version "0.13.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" + integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== + regenerator-transform@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" @@ -2761,6 +4432,13 @@ regenerator-transform@^0.10.0: babel-types "^6.19.0" private "^0.1.6" +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + dependencies: + "@babel/runtime" "^7.8.4" + regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -2769,6 +4447,14 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexp.prototype.flags@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + regexpu-core@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" @@ -2778,11 +4464,28 @@ regexpu-core@^2.0.0: regjsgen "^0.2.0" regjsparser "^0.1.4" +regexpu-core@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" + integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + regjsgen@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + regjsparser@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" @@ -2790,6 +4493,13 @@ regjsparser@^0.1.4: dependencies: jsesc "~0.5.0" +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== + dependencies: + jsesc "~0.5.0" + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -2815,6 +4525,11 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -2845,6 +4560,11 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -2867,16 +4587,21 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@>=5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -2903,16 +4628,80 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +selfsigned@^1.10.7: + version "1.10.7" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b" + integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA== + dependencies: + node-forge "0.9.0" + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + serialize-javascript@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65" integrity sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA== +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -2933,6 +4722,16 @@ setimmediate@^1.0.4: resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" @@ -2988,6 +4787,27 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" +sockjs-client@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" + integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== + dependencies: + debug "^3.2.5" + eventsource "^1.0.7" + faye-websocket "~0.11.1" + inherits "^2.0.3" + json3 "^3.3.2" + url-parse "^1.4.3" + +sockjs@0.3.20: + version "0.3.20" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855" + integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== + dependencies: + faye-websocket "^0.10.0" + uuid "^3.4.0" + websocket-driver "0.6.5" + source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -3017,7 +4837,7 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@^0.5.6: +source-map@^0.5.0, source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -3027,6 +4847,29 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -3049,6 +4892,11 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + stream-browserify@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" @@ -3107,7 +4955,23 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string_decoder@^1.0.0: +string.prototype.trimend@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trimstart@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -3152,7 +5016,7 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -supports-color@6.1.0: +supports-color@6.1.0, supports-color@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== @@ -3221,6 +5085,11 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + timers-browserify@^2.0.4: version "2.0.11" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" @@ -3238,6 +5107,11 @@ to-fast-properties@^1.0.3: resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" @@ -3263,6 +5137,11 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + tslib@^1.9.0: version "1.10.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" @@ -3273,11 +5152,42 @@ tty-browserify@0.0.0: resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -3302,6 +5212,11 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -3327,6 +5242,14 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= +url-parse@^1.4.3: + version "1.4.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -3340,7 +5263,7 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= @@ -3359,11 +5282,26 @@ util@^0.11.0: dependencies: inherits "2.0.3" +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + v8-compile-cache@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + vm-browserify@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" @@ -3378,6 +5316,13 @@ watchpack@^1.6.0: graceful-fs "^4.1.2" neo-async "^2.5.0" +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + webpack-cli@^3.3.6: version "3.3.6" resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.6.tgz#2c8c399a2642133f8d736a359007a052e060032c" @@ -3395,6 +5340,64 @@ webpack-cli@^3.3.6: v8-compile-cache "2.0.3" yargs "13.2.4" +webpack-dev-middleware@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" + integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@^3.8.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" + integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.3.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.8" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.26" + schema-utils "^1.0.0" + selfsigned "^1.10.7" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "0.3.20" + sockjs-client "1.4.0" + spdy "^4.0.2" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "^13.3.2" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + webpack-sources@^1.4.0, webpack-sources@^1.4.1: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" @@ -3432,6 +5435,27 @@ webpack@^4.39.2: watchpack "^1.6.0" webpack-sources "^1.4.1" +websocket-driver@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= + dependencies: + websocket-extensions ">=0.1.1" + +websocket-driver@>=0.5.1: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -3472,6 +5496,13 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +ws@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -3495,6 +5526,14 @@ yargs-parser@^13.1.0: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs@13.2.4: version "13.2.4" resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" @@ -3511,3 +5550,19 @@ yargs@13.2.4: which-module "^2.0.0" y18n "^4.0.0" yargs-parser "^13.1.0" + +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" From 305a792f3ddfc3e668d88a01b76e7938d76ed096 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 31 Jul 2020 14:31:36 +0000 Subject: [PATCH 10/20] Bump elliptic from 6.5.0 to 6.5.3 in /blog_LikeSelector(ES6) Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.0 to 6.5.3. - [Release notes](https://github.com/indutny/elliptic/releases) - [Commits](https://github.com/indutny/elliptic/compare/v6.5.0...v6.5.3) Signed-off-by: dependabot[bot] --- blog_LikeSelector(ES6)/package-lock.json | 6 +- blog_LikeSelector(ES6)/yarn.lock | 2179 +++++++++++++++++++++- 2 files changed, 2150 insertions(+), 35 deletions(-) diff --git a/blog_LikeSelector(ES6)/package-lock.json b/blog_LikeSelector(ES6)/package-lock.json index 3485be6..a484ab8 100644 --- a/blog_LikeSelector(ES6)/package-lock.json +++ b/blog_LikeSelector(ES6)/package-lock.json @@ -2790,9 +2790,9 @@ "integrity": "sha512-7W/L3jw7HYE+tUPbcVOGBmnSrlUmyZ/Uyg24QS7Vx0a9KodtNrN0r0Q/LyGHrcYMtw2rv7E49F/vTXwlV/fuaA==" }, "elliptic": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", - "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", "dev": true, "requires": { "bn.js": "^4.4.0", diff --git a/blog_LikeSelector(ES6)/yarn.lock b/blog_LikeSelector(ES6)/yarn.lock index 45feadf..364a6b2 100644 --- a/blog_LikeSelector(ES6)/yarn.lock +++ b/blog_LikeSelector(ES6)/yarn.lock @@ -2,6 +2,821 @@ # yarn lockfile v1 +"@babel/code-frame@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/compat-data@^7.10.4", "@babel/compat-data@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.11.0.tgz#e9f73efe09af1355b723a7f39b11bad637d7c99c" + integrity sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ== + dependencies: + browserslist "^4.12.0" + invariant "^2.2.4" + semver "^5.5.0" + +"@babel/generator@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.0.tgz#4b90c78d8c12825024568cbe83ee6c9af193585c" + integrity sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ== + dependencies: + "@babel/types" "^7.11.0" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" + integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" + integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-compilation-targets@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz#804ae8e3f04376607cc791b9d47d540276332bd2" + integrity sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ== + dependencies: + "@babel/compat-data" "^7.10.4" + browserslist "^4.12.0" + invariant "^2.2.4" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/helper-create-class-features-plugin@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" + integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.10.5" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + +"@babel/helper-create-regexp-features-plugin@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" + integrity sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + regexpu-core "^4.7.0" + +"@babel/helper-define-map@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" + integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/types" "^7.10.5" + lodash "^4.17.19" + +"@babel/helper-explode-assignable-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz#40a1cd917bff1288f699a94a75b37a1a2dbd8c7c" + integrity sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A== + dependencies: + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-get-function-arity@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" + integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-hoist-variables@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" + integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" + integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-module-imports@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" + integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" + integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/template" "^7.10.4" + "@babel/types" "^7.11.0" + lodash "^4.17.19" + +"@babel/helper-optimise-call-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" + integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-regex@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0" + integrity sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg== + dependencies: + lodash "^4.17.19" + +"@babel/helper-remap-async-to-generator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz#fce8bea4e9690bbe923056ded21e54b4e8b68ed5" + integrity sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-wrap-function" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-replace-supers@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" + integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-simple-access@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" + integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== + dependencies: + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-skip-transparent-expression-wrappers@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz#eec162f112c2f58d3af0af125e3bb57665146729" + integrity sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" + integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/helper-wrap-function@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" + integrity sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.10.4", "@babel/parser@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.0.tgz#a9d7e11aead25d3b422d17b2c6502c8dddef6a5d" + integrity sha512-qvRvi4oI8xii8NllyEc4MDJjuZiNaRzyb7Y7lup1NqJV8TZHF4O27CcP+72WPn/k1zkgJ6WJfnIbk4jTsVAZHw== + +"@babel/plugin-proposal-async-generator-functions@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" + integrity sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.10.4" + "@babel/plugin-syntax-async-generators" "^7.8.0" + +"@babel/plugin-proposal-class-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" + integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-dynamic-import@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e" + integrity sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + +"@babel/plugin-proposal-export-namespace-from@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz#570d883b91031637b3e2958eea3c438e62c05f54" + integrity sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db" + integrity sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.0" + +"@babel/plugin-proposal-logical-assignment-operators@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz#9f80e482c03083c87125dee10026b58527ea20c8" + integrity sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a" + integrity sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06" + integrity sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af" + integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.10.4" + +"@babel/plugin-proposal-optional-catch-binding@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd" + integrity sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz#de5866d0646f6afdaab8a566382fe3a221755076" + integrity sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-private-methods@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909" + integrity sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" + integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-async-generators@^7.8.0": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c" + integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-dynamic-import@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-json-strings@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz#4bbeb8917b54fcf768364e0a81f560e33a3ef57d" + integrity sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-arrow-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" + integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-async-to-generator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37" + integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.10.4" + +"@babel/plugin-transform-block-scoped-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8" + integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-block-scoping@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.5.tgz#b81b8aafefbfe68f0f65f7ef397b9ece68a6037d" + integrity sha512-6Ycw3hjpQti0qssQcA6AMSFDHeNJ++R6dIMnpRqUjFeBBTmTDPa8zgF90OVfTvAo11mXZTlVUViY1g8ffrURLg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-classes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" + integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-define-map" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb" + integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-destructuring@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" + integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" + integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-duplicate-keys@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47" + integrity sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-exponentiation-operator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e" + integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-for-of@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9" + integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7" + integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c" + integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-member-expression-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7" + integrity sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-modules-amd@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1" + integrity sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw== + dependencies: + "@babel/helper-module-transforms" "^7.10.5" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" + integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w== + dependencies: + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85" + integrity sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw== + dependencies: + "@babel/helper-hoist-variables" "^7.10.4" + "@babel/helper-module-transforms" "^7.10.5" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e" + integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA== + dependencies: + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6" + integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + +"@babel/plugin-transform-new-target@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888" + integrity sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-object-super@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" + integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + +"@babel/plugin-transform-parameters@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" + integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-property-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0" + integrity sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-regenerator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63" + integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd" + integrity sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-shorthand-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" + integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-spread@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz#fa84d300f5e4f57752fe41a6d1b3c554f13f17cc" + integrity sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" + +"@babel/plugin-transform-sticky-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" + integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + +"@babel/plugin-transform-template-literals@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" + integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typeof-symbol@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc" + integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-escapes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz#feae523391c7651ddac115dae0a9d06857892007" + integrity sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8" + integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/preset-env@^7.5.5": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.0.tgz#860ee38f2ce17ad60480c2021ba9689393efb796" + integrity sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg== + dependencies: + "@babel/compat-data" "^7.11.0" + "@babel/helper-compilation-targets" "^7.10.4" + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-proposal-async-generator-functions" "^7.10.4" + "@babel/plugin-proposal-class-properties" "^7.10.4" + "@babel/plugin-proposal-dynamic-import" "^7.10.4" + "@babel/plugin-proposal-export-namespace-from" "^7.10.4" + "@babel/plugin-proposal-json-strings" "^7.10.4" + "@babel/plugin-proposal-logical-assignment-operators" "^7.11.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4" + "@babel/plugin-proposal-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread" "^7.11.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.10.4" + "@babel/plugin-proposal-optional-chaining" "^7.11.0" + "@babel/plugin-proposal-private-methods" "^7.10.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.10.4" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.10.4" + "@babel/plugin-transform-arrow-functions" "^7.10.4" + "@babel/plugin-transform-async-to-generator" "^7.10.4" + "@babel/plugin-transform-block-scoped-functions" "^7.10.4" + "@babel/plugin-transform-block-scoping" "^7.10.4" + "@babel/plugin-transform-classes" "^7.10.4" + "@babel/plugin-transform-computed-properties" "^7.10.4" + "@babel/plugin-transform-destructuring" "^7.10.4" + "@babel/plugin-transform-dotall-regex" "^7.10.4" + "@babel/plugin-transform-duplicate-keys" "^7.10.4" + "@babel/plugin-transform-exponentiation-operator" "^7.10.4" + "@babel/plugin-transform-for-of" "^7.10.4" + "@babel/plugin-transform-function-name" "^7.10.4" + "@babel/plugin-transform-literals" "^7.10.4" + "@babel/plugin-transform-member-expression-literals" "^7.10.4" + "@babel/plugin-transform-modules-amd" "^7.10.4" + "@babel/plugin-transform-modules-commonjs" "^7.10.4" + "@babel/plugin-transform-modules-systemjs" "^7.10.4" + "@babel/plugin-transform-modules-umd" "^7.10.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4" + "@babel/plugin-transform-new-target" "^7.10.4" + "@babel/plugin-transform-object-super" "^7.10.4" + "@babel/plugin-transform-parameters" "^7.10.4" + "@babel/plugin-transform-property-literals" "^7.10.4" + "@babel/plugin-transform-regenerator" "^7.10.4" + "@babel/plugin-transform-reserved-words" "^7.10.4" + "@babel/plugin-transform-shorthand-properties" "^7.10.4" + "@babel/plugin-transform-spread" "^7.11.0" + "@babel/plugin-transform-sticky-regex" "^7.10.4" + "@babel/plugin-transform-template-literals" "^7.10.4" + "@babel/plugin-transform-typeof-symbol" "^7.10.4" + "@babel/plugin-transform-unicode-escapes" "^7.10.4" + "@babel/plugin-transform-unicode-regex" "^7.10.4" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.11.0" + browserslist "^4.12.0" + core-js-compat "^3.6.2" + invariant "^2.2.2" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/preset-modules@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" + integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/runtime@^7.8.4": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.0.tgz#f10245877042a815e07f7e693faff0ae9d3a2aac" + integrity sha512-qArkXsjJq7H+T86WrIFV0Fnu/tNOkZ4cgXmjkzAu3b/58D5mFIO8JH/y77t7C9q0OdDRdh9s7Ue5GasYssxtXw== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" + integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/traverse@^7.10.4": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.0.tgz#9b996ce1b98f53f7c3e4175115605d56ed07dd24" + integrity sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.11.0" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.11.0" + "@babel/types" "^7.11.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.4.4": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.0.tgz#2ae6bf1ba9ae8c3c43824e5861269871b206e90d" + integrity sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@types/glob@^7.1.1": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/node@*": + version "14.0.27" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.27.tgz#a151873af5a5e851b51b3b065c9e63390a9e0eb1" + integrity sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g== + "@webassemblyjs/ast@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" @@ -163,6 +978,14 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + acorn@^6.2.1: version "6.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" @@ -188,6 +1011,16 @@ ajv@^6.1.0, ajv@^6.10.2: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -251,6 +1084,28 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" @@ -283,6 +1138,18 @@ async-each@^1.0.1: resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + atob@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" @@ -426,6 +1293,13 @@ babel-plugin-check-es2015-constants@^6.22.0: dependencies: babel-runtime "^6.22.0" +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" @@ -772,6 +1646,11 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -788,9 +1667,37 @@ bluebird@^3.5.5: integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" - integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== + +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" brace-expansion@^1.1.7: version "1.1.11" @@ -888,11 +1795,26 @@ browserslist@^3.2.6: caniuse-lite "^1.0.30000844" electron-to-chromium "^1.3.47" +browserslist@^4.12.0, browserslist@^4.8.5: + version "4.13.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.13.0.tgz#42556cba011e1b0a2775b611cba6a8eca18e940d" + integrity sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ== + dependencies: + caniuse-lite "^1.0.30001093" + electron-to-chromium "^1.3.488" + escalade "^3.0.1" + node-releases "^1.1.58" + buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" @@ -912,6 +1834,16 @@ builtin-status-codes@^3.0.0: resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + cacache@^12.0.2: version "12.0.2" resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.2.tgz#8db03205e36089a3df6954c66ce92541441ac46c" @@ -958,7 +1890,12 @@ caniuse-lite@^1.0.30000844: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz#b9193e293ccf7e4426c5245134b8f2a56c0ac4b9" integrity sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw== -chalk@2.4.2: +caniuse-lite@^1.0.30001093: + version "1.0.30001109" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001109.tgz#a9f3f26a0c3753b063d7acbb48dfb9c0e46f2b19" + integrity sha512-4JIXRodHzdS3HdK8nSgIqXYLExOvG+D2/EenSvcub2Kp3QEADjo2v2oUn5g0n0D+UNwG9BtwKOyGcSq2qvQXvQ== + +chalk@2.4.2, chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -997,6 +1934,25 @@ chokidar@^2.0.2: optionalDependencies: fsevents "^1.2.7" +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + chownr@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" @@ -1076,6 +2032,26 @@ component-emitter@^1.2.1: resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -1091,6 +2067,11 @@ concat-stream@^1.5.0: readable-stream "^2.2.2" typedarray "^0.0.6" +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + console-browserify@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" @@ -1108,6 +2089,28 @@ constants-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + copy-concurrently@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" @@ -1125,6 +2128,14 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= +core-js-compat@^3.6.2: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" + integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== + dependencies: + browserslist "^4.8.5" + semver "7.0.0" + core-js@^2.4.0: version "2.6.9" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" @@ -1204,20 +2215,27 @@ date-now@^0.1.4: resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= -debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.2.6: +debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== dependencies: ms "^2.1.1" +debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -1228,11 +2246,38 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= +deep-equal@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" @@ -1255,11 +2300,29 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + des.js@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" @@ -1268,6 +2331,11 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + detect-file@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" @@ -1278,6 +2346,11 @@ detect-libc@^1.0.2: resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= +detect-node@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -1287,6 +2360,26 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" @@ -1302,15 +2395,25 @@ duplexify@^3.4.2, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + electron-to-chromium@^1.3.47: version "1.3.229" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.229.tgz#accc9a08dd07d0a4d6c76937821bc94eb2e49eae" integrity sha512-N6pUbSuKFBeUifxBZp9hODS1N9jFobJYW47QT2VvZIr+G5AWnHK/iG3ON9RPRGH7lHDQ6KUDVhzpNkj4ZiznoA== +electron-to-chromium@^1.3.488: + version "1.3.515" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.515.tgz#96683d2c2be9bf83f6cca75d504a7b443d763c08" + integrity sha512-C9h2yLQwNSK/GTtWQsA9O6mLKv0ubmiAQgmz1HvHnAIH8g5Sje1shWxcooumbGiwgqvZ9yrTYULe4seMTgMYqQ== + elliptic@^6.0.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.0.tgz#2b8ed4c891b7de3200e14412a5b8248c7af505ca" - integrity sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg== + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -1330,6 +2433,11 @@ emojis-list@^2.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.1" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" @@ -1353,6 +2461,42 @@ errno@^0.1.3, errno@~0.1.7: dependencies: prr "~1.0.1" +es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: + version "1.17.6" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" + integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.0" + is-regex "^1.1.0" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escalade@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4" + integrity sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -1383,11 +2527,28 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eventemitter3@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" + integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== + events@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== +eventsource@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== + dependencies: + original "^1.0.0" + evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" @@ -1429,6 +2590,42 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" +express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -1468,6 +2665,20 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.1: + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + dependencies: + websocket-driver ">=0.5.1" + figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" @@ -1483,6 +2694,19 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" @@ -1517,11 +2741,21 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" +follow-redirects@^1.0.0: + version "1.12.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.12.1.tgz#de54a6205311b93d60398ebc01cf7015682312b6" + integrity sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg== + for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" @@ -1529,6 +2763,11 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" @@ -1567,6 +2806,11 @@ fsevents@^1.2.7: nan "^2.12.1" node-pre-gyp "^0.12.0" +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -1606,6 +2850,18 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" +glob@^7.0.3: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@^7.1.3, glob@^7.1.4: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" @@ -1654,16 +2910,37 @@ global-prefix@^3.0.0: kind-of "^6.0.2" which "^1.3.1" +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: version "4.2.2" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -1676,6 +2953,11 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -1712,6 +2994,13 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + hash-base@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" @@ -1733,23 +3022,99 @@ hmac-drbg@^1.0.0: resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-entities@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" + integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-parser-js@>=0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" + integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== + +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== +http-proxy@^1.17.0: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== dependencies: - parse-passwd "^1.0.0" + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -iconv-lite@^0.4.4: +iconv-lite@0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -1773,7 +3138,7 @@ ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" -import-local@2.0.0: +import-local@2.0.0, import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== @@ -1799,7 +3164,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -1819,12 +3184,20 @@ ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + interpret@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== -invariant@^2.2.2: +invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -1836,6 +3209,26 @@ invert-kv@^2.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -1850,6 +3243,11 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-arguments@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" + integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" @@ -1862,6 +3260,11 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== +is-callable@^1.1.4, is-callable@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" + integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -1876,6 +3279,11 @@ is-data-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" @@ -1944,6 +3352,25 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" +is-path-cwd@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -1951,11 +3378,25 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-regex@^1.0.4, is-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz#ece38e389e490df0dc21caea2bd596f987f767ff" + integrity sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw== + dependencies: + has-symbols "^1.0.1" + is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -1988,7 +3429,7 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -"js-tokens@^3.0.0 || ^4.0.0": +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== @@ -1998,6 +3439,11 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" @@ -2013,6 +3459,11 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== +json3@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -2020,6 +3471,11 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -2051,6 +3507,18 @@ lcid@^2.0.0: dependencies: invert-kv "^2.0.0" +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levenary@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" + integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== + dependencies: + leven "^3.1.0" + loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" @@ -2073,11 +3541,21 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.19: + version "4.17.19" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" + integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== + lodash@^4.17.4: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +loglevel@^1.6.8: + version "1.6.8" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171" + integrity sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA== + loose-envify@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -2133,6 +3611,11 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + mem@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" @@ -2150,6 +3633,16 @@ memory-fs@^0.4.0, memory-fs@^0.4.1: errno "^0.1.3" readable-stream "^2.0.1" +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -2177,6 +3670,28 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" +mime-db@1.44.0, "mime-db@>= 1.43.0 < 2": + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +mime-types@~2.1.17, mime-types@~2.1.24: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.4: + version "2.4.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" + integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + mimic-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -2209,6 +3724,11 @@ minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + minipass@^2.2.1, minipass@^2.3.5: version "2.3.5" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" @@ -2255,6 +3775,13 @@ mkdirp@^0.5.0, mkdirp@^0.5.1: dependencies: minimist "0.0.8" +mkdirp@^0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" @@ -2272,11 +3799,29 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + nan@^2.12.1: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" @@ -2308,6 +3853,11 @@ needle@^2.2.1: iconv-lite "^0.4.4" sax "^1.2.4" +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + neo-async@^2.5.0, neo-async@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" @@ -2318,6 +3868,11 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +node-forge@0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" + integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== + node-libs-browser@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" @@ -2363,6 +3918,11 @@ node-pre-gyp@^0.12.0: semver "^5.3.0" tar "^4" +node-releases@^1.1.58: + version "1.1.60" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.60.tgz#6948bdfce8286f0b5d0e5a88e8384e954dfe7084" + integrity sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA== + nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" @@ -2418,7 +3978,7 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -2432,6 +3992,24 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" +object-inspect@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" + integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== + +object-is@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6" + integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" @@ -2439,6 +4017,16 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" @@ -2446,6 +4034,23 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -2453,6 +4058,20 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" @@ -2514,6 +4133,18 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" @@ -2550,6 +4181,11 @@ parse-passwd@^1.0.0: resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -2575,11 +4211,21 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + pbkdf2@^3.0.3: version "3.0.17" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" @@ -2591,11 +4237,28 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" @@ -2603,6 +4266,15 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" +portfinder@^1.0.26: + version "1.0.28" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.5" + posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" @@ -2628,6 +4300,14 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" @@ -2685,6 +4365,11 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -2695,6 +4380,11 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= +querystringify@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" + integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== + randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -2710,6 +4400,21 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -2733,6 +4438,15 @@ rc@^1.2.7: string_decoder "~1.1.1" util-deprecate "~1.0.1" +readable-stream@^3.0.6: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" @@ -2742,16 +4456,33 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + regenerate@^1.2.1: version "1.4.0" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== +regenerate@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" + integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== + regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== +regenerator-runtime@^0.13.4: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + regenerator-transform@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" @@ -2761,6 +4492,13 @@ regenerator-transform@^0.10.0: babel-types "^6.19.0" private "^0.1.6" +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + dependencies: + "@babel/runtime" "^7.8.4" + regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -2769,6 +4507,14 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexp.prototype.flags@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + regexpu-core@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" @@ -2778,11 +4524,28 @@ regexpu-core@^2.0.0: regjsgen "^0.2.0" regjsparser "^0.1.4" +regexpu-core@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" + integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + regjsgen@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + regjsparser@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" @@ -2790,6 +4553,13 @@ regjsparser@^0.1.4: dependencies: jsesc "~0.5.0" +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== + dependencies: + jsesc "~0.5.0" + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -2815,6 +4585,11 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -2845,6 +4620,11 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -2867,16 +4647,21 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@>=5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -2903,16 +4688,80 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +selfsigned@^1.10.7: + version "1.10.7" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b" + integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA== + dependencies: + node-forge "0.9.0" + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + serialize-javascript@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65" integrity sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA== +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -2933,6 +4782,16 @@ setimmediate@^1.0.4: resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" @@ -2988,6 +4847,27 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" +sockjs-client@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" + integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== + dependencies: + debug "^3.2.5" + eventsource "^1.0.7" + faye-websocket "~0.11.1" + inherits "^2.0.3" + json3 "^3.3.2" + url-parse "^1.4.3" + +sockjs@0.3.20: + version "0.3.20" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855" + integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== + dependencies: + faye-websocket "^0.10.0" + uuid "^3.4.0" + websocket-driver "0.6.5" + source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -3017,7 +4897,7 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@^0.5.6: +source-map@^0.5.0, source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -3027,6 +4907,29 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -3049,6 +4952,11 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + stream-browserify@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" @@ -3107,7 +5015,23 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string_decoder@^1.0.0: +string.prototype.trimend@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trimstart@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -3152,7 +5076,7 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -supports-color@6.1.0: +supports-color@6.1.0, supports-color@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== @@ -3221,6 +5145,11 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + timers-browserify@^2.0.4: version "2.0.11" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" @@ -3238,6 +5167,11 @@ to-fast-properties@^1.0.3: resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" @@ -3263,6 +5197,11 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + tslib@^1.9.0: version "1.10.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" @@ -3273,11 +5212,42 @@ tty-browserify@0.0.0: resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -3302,6 +5272,11 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -3327,6 +5302,14 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= +url-parse@^1.4.3: + version "1.4.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -3340,7 +5323,7 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= @@ -3359,11 +5342,26 @@ util@^0.11.0: dependencies: inherits "2.0.3" +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + v8-compile-cache@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + vm-browserify@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" @@ -3378,6 +5376,13 @@ watchpack@^1.6.0: graceful-fs "^4.1.2" neo-async "^2.5.0" +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + webpack-cli@^3.3.6: version "3.3.6" resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.6.tgz#2c8c399a2642133f8d736a359007a052e060032c" @@ -3395,6 +5400,64 @@ webpack-cli@^3.3.6: v8-compile-cache "2.0.3" yargs "13.2.4" +webpack-dev-middleware@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" + integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@^3.8.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" + integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.3.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.8" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.26" + schema-utils "^1.0.0" + selfsigned "^1.10.7" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "0.3.20" + sockjs-client "1.4.0" + spdy "^4.0.2" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "^13.3.2" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + webpack-sources@^1.4.0, webpack-sources@^1.4.1: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" @@ -3432,6 +5495,27 @@ webpack@^4.39.2: watchpack "^1.6.0" webpack-sources "^1.4.1" +websocket-driver@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= + dependencies: + websocket-extensions ">=0.1.1" + +websocket-driver@>=0.5.1: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -3472,6 +5556,13 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +ws@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -3495,6 +5586,14 @@ yargs-parser@^13.1.0: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs@13.2.4: version "13.2.4" resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" @@ -3511,3 +5610,19 @@ yargs@13.2.4: which-module "^2.0.0" y18n "^4.0.0" yargs-parser "^13.1.0" + +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" From ebdcfc86b1a3940a5b38b46af20555405986f85a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 10 Sep 2020 10:48:31 +0000 Subject: [PATCH 11/20] Bump http-proxy from 1.17.0 to 1.18.1 in /blog_LikeSelector(ES6) Bumps [http-proxy](https://github.com/http-party/node-http-proxy) from 1.17.0 to 1.18.1. - [Release notes](https://github.com/http-party/node-http-proxy/releases) - [Changelog](https://github.com/http-party/node-http-proxy/blob/master/CHANGELOG.md) - [Commits](https://github.com/http-party/node-http-proxy/compare/1.17.0...1.18.1) Signed-off-by: dependabot[bot] --- blog_LikeSelector(ES6)/package-lock.json | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/blog_LikeSelector(ES6)/package-lock.json b/blog_LikeSelector(ES6)/package-lock.json index 3485be6..3893986 100644 --- a/blog_LikeSelector(ES6)/package-lock.json +++ b/blog_LikeSelector(ES6)/package-lock.json @@ -2897,12 +2897,6 @@ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", "dev": true }, - "eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", - "dev": true - }, "events": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", @@ -4139,14 +4133,22 @@ "dev": true }, "http-proxy": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", - "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "requires": { - "eventemitter3": "^3.0.0", + "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" + }, + "dependencies": { + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + } } }, "http-proxy-middleware": { From aaf3e66b6c42cbba25d0f8bd4e04d048257befcd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 11 Dec 2020 18:39:31 +0000 Subject: [PATCH 12/20] Bump ini from 1.3.5 to 1.3.7 in /blog_LikeSelector(ES6) Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.7. - [Release notes](https://github.com/isaacs/ini/releases) - [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.7) Signed-off-by: dependabot[bot] --- blog_LikeSelector(ES6)/package-lock.json | 12 +- blog_LikeSelector(ES6)/yarn.lock | 2165 +++++++++++++++++++++- 2 files changed, 2148 insertions(+), 29 deletions(-) diff --git a/blog_LikeSelector(ES6)/package-lock.json b/blog_LikeSelector(ES6)/package-lock.json index 3485be6..944e1cd 100644 --- a/blog_LikeSelector(ES6)/package-lock.json +++ b/blog_LikeSelector(ES6)/package-lock.json @@ -3502,12 +3502,6 @@ "dev": true, "optional": true }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, @@ -4227,9 +4221,9 @@ "dev": true }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", "dev": true }, "internal-ip": { diff --git a/blog_LikeSelector(ES6)/yarn.lock b/blog_LikeSelector(ES6)/yarn.lock index 45feadf..a0e3a2b 100644 --- a/blog_LikeSelector(ES6)/yarn.lock +++ b/blog_LikeSelector(ES6)/yarn.lock @@ -2,6 +2,806 @@ # yarn lockfile v1 +"@babel/code-frame@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/compat-data@^7.12.5", "@babel/compat-data@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.7.tgz#9329b4782a7d6bbd7eef57e11addf91ee3ef1e41" + integrity sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw== + +"@babel/generator@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.10.tgz#2b188fc329fb8e4f762181703beffc0fe6df3460" + integrity sha512-6mCdfhWgmqLdtTkhXjnIz0LcdVCd26wS2JXRtj2XY0u5klDsXBREA/pG5NVOuVnF2LUrBGNFtQkIqqTbblg0ww== + dependencies: + "@babel/types" "^7.12.10" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.10.4": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz#54ab9b000e60a93644ce17b3f37d313aaf1d115d" + integrity sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ== + dependencies: + "@babel/types" "^7.12.10" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" + integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-compilation-targets@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz#cb470c76198db6a24e9dbc8987275631e5d29831" + integrity sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw== + dependencies: + "@babel/compat-data" "^7.12.5" + "@babel/helper-validator-option" "^7.12.1" + browserslist "^4.14.5" + semver "^5.5.0" + +"@babel/helper-create-class-features-plugin@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz#3c45998f431edd4a9214c5f1d3ad1448a6137f6e" + integrity sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.12.1" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.10.4" + +"@babel/helper-create-regexp-features-plugin@^7.12.1": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz#2084172e95443fa0a09214ba1bb328f9aea1278f" + integrity sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + regexpu-core "^4.7.1" + +"@babel/helper-define-map@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" + integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/types" "^7.10.5" + lodash "^4.17.19" + +"@babel/helper-explode-assignable-expression@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz#8006a466695c4ad86a2a5f2fb15b5f2c31ad5633" + integrity sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-get-function-arity@^7.10.4": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf" + integrity sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag== + dependencies: + "@babel/types" "^7.12.10" + +"@babel/helper-hoist-variables@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" + integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-member-expression-to-functions@^7.12.1": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz#aa77bd0396ec8114e5e30787efa78599d874a855" + integrity sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw== + dependencies: + "@babel/types" "^7.12.7" + +"@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" + integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== + dependencies: + "@babel/types" "^7.12.5" + +"@babel/helper-module-transforms@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" + integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-simple-access" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/helper-validator-identifier" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + lodash "^4.17.19" + +"@babel/helper-optimise-call-expression@^7.10.4": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz#94ca4e306ee11a7dd6e9f42823e2ac6b49881e2d" + integrity sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ== + dependencies: + "@babel/types" "^7.12.10" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-remap-async-to-generator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz#8c4dbbf916314f6047dc05e6a2217074238347fd" + integrity sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-wrap-function" "^7.10.4" + "@babel/types" "^7.12.1" + +"@babel/helper-replace-supers@^7.12.1": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz#f009a17543bbbbce16b06206ae73b63d3fca68d9" + integrity sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.12.1" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.5" + +"@babel/helper-simple-access@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" + integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" + integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" + integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/helper-validator-option@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz#175567380c3e77d60ff98a54bb015fe78f2178d9" + integrity sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A== + +"@babel/helper-wrap-function@^7.10.4": + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz#3332339fc4d1fbbf1c27d7958c27d34708e990d9" + integrity sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.12.10", "@babel/parser@^7.12.7": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.10.tgz#824600d59e96aea26a5a2af5a9d812af05c3ae81" + integrity sha512-PJdRPwyoOqFAWfLytxrWwGrAxghCgh/yTNCYciOz8QgjflA7aZhECPZAa2VUedKg2+QMWkI0L9lynh2SNmNEgA== + +"@babel/plugin-proposal-async-generator-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz#dc6c1170e27d8aca99ff65f4925bd06b1c90550e" + integrity sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + +"@babel/plugin-proposal-class-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de" + integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-dynamic-import@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz#43eb5c2a3487ecd98c5c8ea8b5fdb69a2749b2dc" + integrity sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + +"@babel/plugin-proposal-export-namespace-from@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz#8b9b8f376b2d88f5dd774e4d24a5cc2e3679b6d4" + integrity sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz#d45423b517714eedd5621a9dfdc03fa9f4eb241c" + integrity sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.0" + +"@babel/plugin-proposal-logical-assignment-operators@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz#f2c490d36e1b3c9659241034a5d2cd50263a2751" + integrity sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c" + integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-numeric-separator@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz#8bf253de8139099fea193b297d23a9d406ef056b" + integrity sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" + integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.12.1" + +"@babel/plugin-proposal-optional-catch-binding@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz#ccc2421af64d3aae50b558a71cede929a5ab2942" + integrity sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz#e02f0ea1b5dc59d401ec16fb824679f683d3303c" + integrity sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-private-methods@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz#86814f6e7a21374c980c10d38b4493e703f4a389" + integrity sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz#2a183958d417765b9eae334f47758e5d6a82e072" + integrity sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-async-generators@^7.8.0": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978" + integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-dynamic-import@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-json-strings@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" + integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-arrow-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz#8083ffc86ac8e777fbe24b5967c4b2521f3cb2b3" + integrity sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-async-to-generator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz#3849a49cc2a22e9743cbd6b52926d30337229af1" + integrity sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.12.1" + +"@babel/plugin-transform-block-scoped-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz#f2a1a365bde2b7112e0a6ded9067fdd7c07905d9" + integrity sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-block-scoping@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz#f0ee727874b42a208a48a586b84c3d222c2bbef1" + integrity sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-classes@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz#65e650fcaddd3d88ddce67c0f834a3d436a32db6" + integrity sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-define-map" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.10.4" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz#d68cf6c9b7f838a8a4144badbe97541ea0904852" + integrity sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-destructuring@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz#b9a570fe0d0a8d460116413cb4f97e8e08b2f847" + integrity sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz#a1d16c14862817b6409c0a678d6f9373ca9cd975" + integrity sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-duplicate-keys@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz#745661baba295ac06e686822797a69fbaa2ca228" + integrity sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-exponentiation-operator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz#b0f2ed356ba1be1428ecaf128ff8a24f02830ae0" + integrity sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-for-of@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz#07640f28867ed16f9511c99c888291f560921cfa" + integrity sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-function-name@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz#2ec76258c70fe08c6d7da154003a480620eba667" + integrity sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz#d73b803a26b37017ddf9d3bb8f4dc58bfb806f57" + integrity sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-member-expression-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz#496038602daf1514a64d43d8e17cbb2755e0c3ad" + integrity sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-modules-amd@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz#3154300b026185666eebb0c0ed7f8415fefcf6f9" + integrity sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz#fa403124542636c786cf9b460a0ffbb48a86e648" + integrity sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-simple-access" "^7.12.1" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz#663fea620d593c93f214a464cd399bf6dc683086" + integrity sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q== + dependencies: + "@babel/helper-hoist-variables" "^7.10.4" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-identifier" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz#eb5a218d6b1c68f3d6217b8fa2cc82fec6547902" + integrity sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz#b407f5c96be0d9f5f88467497fa82b30ac3e8753" + integrity sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + +"@babel/plugin-transform-new-target@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz#80073f02ee1bb2d365c3416490e085c95759dec0" + integrity sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-object-super@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz#4ea08696b8d2e65841d0c7706482b048bed1066e" + integrity sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + +"@babel/plugin-transform-parameters@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz#d2e963b038771650c922eff593799c96d853255d" + integrity sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-property-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz#41bc81200d730abb4456ab8b3fbd5537b59adecd" + integrity sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-regenerator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz#5f0a28d842f6462281f06a964e88ba8d7ab49753" + integrity sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz#6fdfc8cc7edcc42b36a7c12188c6787c873adcd8" + integrity sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-shorthand-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz#0bf9cac5550fce0cfdf043420f661d645fdc75e3" + integrity sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-spread@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz#527f9f311be4ec7fdc2b79bb89f7bf884b3e1e1e" + integrity sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + +"@babel/plugin-transform-sticky-regex@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz#560224613ab23987453948ed21d0b0b193fa7fad" + integrity sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-template-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz#b43ece6ed9a79c0c71119f576d299ef09d942843" + integrity sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typeof-symbol@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz#de01c4c8f96580bd00f183072b0d0ecdcf0dec4b" + integrity sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-escapes@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz#5232b9f81ccb07070b7c3c36c67a1b78f1845709" + integrity sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz#cc9661f61390db5c65e3febaccefd5c6ac3faecb" + integrity sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/preset-env@^7.5.5": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.10.tgz#ca981b95f641f2610531bd71948656306905e6ab" + integrity sha512-Gz9hnBT/tGeTE2DBNDkD7BiWRELZt+8lSysHuDwmYXUIvtwZl0zI+D6mZgXZX0u8YBlLS4tmai9ONNY9tjRgRA== + dependencies: + "@babel/compat-data" "^7.12.7" + "@babel/helper-compilation-targets" "^7.12.5" + "@babel/helper-module-imports" "^7.12.5" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-option" "^7.12.1" + "@babel/plugin-proposal-async-generator-functions" "^7.12.1" + "@babel/plugin-proposal-class-properties" "^7.12.1" + "@babel/plugin-proposal-dynamic-import" "^7.12.1" + "@babel/plugin-proposal-export-namespace-from" "^7.12.1" + "@babel/plugin-proposal-json-strings" "^7.12.1" + "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" + "@babel/plugin-proposal-numeric-separator" "^7.12.7" + "@babel/plugin-proposal-object-rest-spread" "^7.12.1" + "@babel/plugin-proposal-optional-catch-binding" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.12.7" + "@babel/plugin-proposal-private-methods" "^7.12.1" + "@babel/plugin-proposal-unicode-property-regex" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.12.1" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.12.1" + "@babel/plugin-transform-arrow-functions" "^7.12.1" + "@babel/plugin-transform-async-to-generator" "^7.12.1" + "@babel/plugin-transform-block-scoped-functions" "^7.12.1" + "@babel/plugin-transform-block-scoping" "^7.12.1" + "@babel/plugin-transform-classes" "^7.12.1" + "@babel/plugin-transform-computed-properties" "^7.12.1" + "@babel/plugin-transform-destructuring" "^7.12.1" + "@babel/plugin-transform-dotall-regex" "^7.12.1" + "@babel/plugin-transform-duplicate-keys" "^7.12.1" + "@babel/plugin-transform-exponentiation-operator" "^7.12.1" + "@babel/plugin-transform-for-of" "^7.12.1" + "@babel/plugin-transform-function-name" "^7.12.1" + "@babel/plugin-transform-literals" "^7.12.1" + "@babel/plugin-transform-member-expression-literals" "^7.12.1" + "@babel/plugin-transform-modules-amd" "^7.12.1" + "@babel/plugin-transform-modules-commonjs" "^7.12.1" + "@babel/plugin-transform-modules-systemjs" "^7.12.1" + "@babel/plugin-transform-modules-umd" "^7.12.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1" + "@babel/plugin-transform-new-target" "^7.12.1" + "@babel/plugin-transform-object-super" "^7.12.1" + "@babel/plugin-transform-parameters" "^7.12.1" + "@babel/plugin-transform-property-literals" "^7.12.1" + "@babel/plugin-transform-regenerator" "^7.12.1" + "@babel/plugin-transform-reserved-words" "^7.12.1" + "@babel/plugin-transform-shorthand-properties" "^7.12.1" + "@babel/plugin-transform-spread" "^7.12.1" + "@babel/plugin-transform-sticky-regex" "^7.12.7" + "@babel/plugin-transform-template-literals" "^7.12.1" + "@babel/plugin-transform-typeof-symbol" "^7.12.10" + "@babel/plugin-transform-unicode-escapes" "^7.12.1" + "@babel/plugin-transform-unicode-regex" "^7.12.1" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.12.10" + core-js-compat "^3.8.0" + semver "^5.5.0" + +"@babel/preset-modules@^0.1.3": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" + integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/runtime@^7.8.4": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" + integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.10.4": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" + integrity sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.12.7" + "@babel/types" "^7.12.7" + +"@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.10.tgz#2d1f4041e8bf42ea099e5b2dc48d6a594c00017a" + integrity sha512-6aEtf0IeRgbYWzta29lePeYSk+YAFIC3kyqESeft8o5CkFlYIMX+EQDDWEiAQ9LHOA3d0oHdgrSsID/CKqXJlg== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.10" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.12.10" + "@babel/types" "^7.12.10" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.4.4": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.10.tgz#7965e4a7260b26f09c56bcfcb0498af1f6d9b260" + integrity sha512-sf6wboJV5mGyip2hIpDSKsr80RszPinEFjsHTalMxZAZkoQ2/2yQzxlcFN52SJqsyPfLtPmenL4g2KB3KJXPDw== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@types/glob@^7.1.1": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/node@*": + version "14.14.12" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.12.tgz#0b1d86f8c40141091285dea02e4940df73bba43f" + integrity sha512-ASH8OPHMNlkdjrEdmoILmzFfsJICvhBsFfAum4aKZ/9U4B6M6tTmTPh+f3ttWdD74CEGV5XvXWkbyfSdXaTd7g== + "@webassemblyjs/ast@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" @@ -163,6 +963,14 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + acorn@^6.2.1: version "6.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" @@ -188,6 +996,16 @@ ajv@^6.1.0, ajv@^6.10.2: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -251,6 +1069,28 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" @@ -283,6 +1123,18 @@ async-each@^1.0.1: resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + atob@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" @@ -426,6 +1278,13 @@ babel-plugin-check-es2015-constants@^6.22.0: dependencies: babel-runtime "^6.22.0" +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" @@ -772,6 +1631,11 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -792,6 +1656,34 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -888,11 +1780,27 @@ browserslist@^3.2.6: caniuse-lite "^1.0.30000844" electron-to-chromium "^1.3.47" +browserslist@^4.14.5, browserslist@^4.15.0: + version "4.16.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.0.tgz#410277627500be3cb28a1bfe037586fbedf9488b" + integrity sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ== + dependencies: + caniuse-lite "^1.0.30001165" + colorette "^1.2.1" + electron-to-chromium "^1.3.621" + escalade "^3.1.1" + node-releases "^1.1.67" + buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" @@ -912,6 +1820,16 @@ builtin-status-codes@^3.0.0: resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + cacache@^12.0.2: version "12.0.2" resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.2.tgz#8db03205e36089a3df6954c66ce92541441ac46c" @@ -948,6 +1866,14 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +call-bind@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" + integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.0" + camelcase@^5.0.0: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -958,7 +1884,12 @@ caniuse-lite@^1.0.30000844: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz#b9193e293ccf7e4426c5245134b8f2a56c0ac4b9" integrity sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw== -chalk@2.4.2: +caniuse-lite@^1.0.30001165: + version "1.0.30001165" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001165.tgz#32955490d2f60290bb186bb754f2981917fa744f" + integrity sha512-8cEsSMwXfx7lWSUMA2s08z9dIgsnR5NAqjXP23stdsU3AUWkCr/rr4s4OFtHXn5XXr6+7kam3QFVoYyXNPdJPA== + +chalk@2.4.2, chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -997,6 +1928,25 @@ chokidar@^2.0.2: optionalDependencies: fsevents "^1.2.7" +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + chownr@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" @@ -1061,6 +2011,11 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +colorette@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== + commander@^2.20.0: version "2.20.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" @@ -1076,6 +2031,26 @@ component-emitter@^1.2.1: resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -1091,6 +2066,11 @@ concat-stream@^1.5.0: readable-stream "^2.2.2" typedarray "^0.0.6" +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + console-browserify@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" @@ -1108,6 +2088,28 @@ constants-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + copy-concurrently@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" @@ -1125,6 +2127,14 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= +core-js-compat@^3.8.0: + version "3.8.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.1.tgz#8d1ddd341d660ba6194cbe0ce60f4c794c87a36e" + integrity sha512-a16TLmy9NVD1rkjUGbwuyWkiDoN0FDpAwrfLONvHFQx0D9k7J9y0srwMT8QP/Z6HE3MIFaVynEeYwZwPX1o5RQ== + dependencies: + browserslist "^4.15.0" + semver "7.0.0" + core-js@^2.4.0: version "2.6.9" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" @@ -1204,13 +2214,20 @@ date-now@^0.1.4: resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= -debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" +debug@^3.1.1, debug@^3.2.5: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" @@ -1218,6 +2235,13 @@ debug@^3.2.6: dependencies: ms "^2.1.1" +debug@^4.1.0, debug@^4.1.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -1228,11 +2252,38 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= +deep-equal@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" @@ -1255,11 +2306,29 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + des.js@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" @@ -1268,6 +2337,11 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + detect-file@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" @@ -1278,6 +2352,11 @@ detect-libc@^1.0.2: resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= +detect-node@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -1287,6 +2366,26 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" @@ -1302,11 +2401,21 @@ duplexify@^3.4.2, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + electron-to-chromium@^1.3.47: version "1.3.229" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.229.tgz#accc9a08dd07d0a4d6c76937821bc94eb2e49eae" integrity sha512-N6pUbSuKFBeUifxBZp9hODS1N9jFobJYW47QT2VvZIr+G5AWnHK/iG3ON9RPRGH7lHDQ6KUDVhzpNkj4ZiznoA== +electron-to-chromium@^1.3.621: + version "1.3.622" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.622.tgz#9726bd2e67a5462154750ce9701ca6af07d07877" + integrity sha512-AJT0Fm1W0uZlMVVkkJrcCVvczDuF8tPm3bwzQf5WO8AaASB2hwTRP7B8pU5rqjireH+ib6am8+hH5/QkXzzYKw== + elliptic@^6.0.0: version "6.5.0" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.0.tgz#2b8ed4c891b7de3200e14412a5b8248c7af505ca" @@ -1330,6 +2439,11 @@ emojis-list@^2.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.1" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" @@ -1353,6 +2467,42 @@ errno@^0.1.3, errno@~0.1.7: dependencies: prr "~1.0.1" +es-abstract@^1.17.0-next.1: + version "1.17.7" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" + integrity sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -1383,11 +2533,28 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + events@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== +eventsource@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== + dependencies: + original "^1.0.0" + evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" @@ -1429,6 +2596,42 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" +express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -1468,6 +2671,20 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.1: + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + dependencies: + websocket-driver ">=0.5.1" + figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" @@ -1483,6 +2700,19 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" @@ -1517,11 +2747,21 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" +follow-redirects@^1.0.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" + integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== + for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" @@ -1529,6 +2769,11 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" @@ -1567,6 +2812,11 @@ fsevents@^1.2.7: nan "^2.12.1" node-pre-gyp "^0.12.0" +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -1586,6 +2836,15 @@ get-caller-file@^2.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-intrinsic@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.1.tgz#94a9768fcbdd0595a1c9273aacf4c89d075631be" + integrity sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -1606,6 +2865,18 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" +glob@^7.0.3: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@^7.1.3, glob@^7.1.4: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" @@ -1654,16 +2925,37 @@ global-prefix@^3.0.0: kind-of "^6.0.2" which "^1.3.1" +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: version "4.2.2" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -1676,6 +2968,11 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -1712,6 +3009,13 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + hash-base@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" @@ -1744,12 +3048,88 @@ homedir-polyfill@^1.0.1: dependencies: parse-passwd "^1.0.0" +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-entities@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" + integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-parser-js@>=0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" + integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== + +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -iconv-lite@^0.4.4: +iconv-lite@0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -1773,7 +3153,7 @@ ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" -import-local@2.0.0: +import-local@2.0.0, import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== @@ -1799,7 +3179,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -1815,9 +3195,17 @@ inherits@2.0.3: integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + version "1.3.7" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" + integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" interpret@1.2.0: version "1.2.0" @@ -1836,6 +3224,26 @@ invert-kv@^2.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -1850,6 +3258,13 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-arguments@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" + integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + dependencies: + call-bind "^1.0.0" + is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" @@ -1862,6 +3277,11 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== +is-callable@^1.1.4, is-callable@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" + integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -1876,6 +3296,11 @@ is-data-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" @@ -1944,6 +3369,25 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" +is-path-cwd@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -1951,11 +3395,25 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-regex@^1.0.4, is-regex@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== + dependencies: + has-symbols "^1.0.1" + is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -1988,7 +3446,7 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -"js-tokens@^3.0.0 || ^4.0.0": +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== @@ -1998,6 +3456,11 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" @@ -2013,6 +3476,11 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== +json3@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -2020,6 +3488,11 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -2073,11 +3546,21 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.19: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + lodash@^4.17.4: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +loglevel@^1.6.8: + version "1.7.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" + integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== + loose-envify@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -2133,6 +3616,11 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + mem@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" @@ -2150,6 +3638,16 @@ memory-fs@^0.4.0, memory-fs@^0.4.1: errno "^0.1.3" readable-stream "^2.0.1" +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -2177,6 +3675,33 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" +mime-db@1.44.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +"mime-db@>= 1.43.0 < 2": + version "1.45.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" + integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== + +mime-types@~2.1.17, mime-types@~2.1.24: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.4: + version "2.4.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" + integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + mimic-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -2209,6 +3734,11 @@ minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + minipass@^2.2.1, minipass@^2.3.5: version "2.3.5" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" @@ -2255,6 +3785,13 @@ mkdirp@^0.5.0, mkdirp@^0.5.1: dependencies: minimist "0.0.8" +mkdirp@^0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" @@ -2272,11 +3809,29 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@^2.1.1: +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@2.1.2, ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + nan@^2.12.1: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" @@ -2308,6 +3863,11 @@ needle@^2.2.1: iconv-lite "^0.4.4" sax "^1.2.4" +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + neo-async@^2.5.0, neo-async@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" @@ -2318,6 +3878,11 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + node-libs-browser@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" @@ -2363,6 +3928,11 @@ node-pre-gyp@^0.12.0: semver "^5.3.0" tar "^4" +node-releases@^1.1.67: + version "1.1.67" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.67.tgz#28ebfcccd0baa6aad8e8d4d8fe4cbc49ae239c12" + integrity sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg== + nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" @@ -2418,7 +3988,7 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -2432,6 +4002,24 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" +object-inspect@^1.8.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" + integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== + +object-is@^1.0.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.4.tgz#63d6c83c00a43f4cbc9434eb9757c8a5b8565068" + integrity sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" @@ -2439,6 +4027,16 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" +object.assign@^4.1.0, object.assign@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" @@ -2446,6 +4044,23 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -2453,6 +4068,20 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" @@ -2514,6 +4143,18 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" @@ -2550,6 +4191,11 @@ parse-passwd@^1.0.0: resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -2575,11 +4221,21 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + pbkdf2@^3.0.3: version "3.0.17" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" @@ -2591,11 +4247,28 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" @@ -2603,6 +4276,15 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" +portfinder@^1.0.26: + version "1.0.28" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.5" + posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" @@ -2628,6 +4310,14 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" @@ -2685,6 +4375,11 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -2695,6 +4390,11 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -2710,6 +4410,21 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -2733,6 +4448,15 @@ rc@^1.2.7: string_decoder "~1.1.1" util-deprecate "~1.0.1" +readable-stream@^3.0.6: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" @@ -2742,16 +4466,33 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + regenerate@^1.2.1: version "1.4.0" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== +regenerate@^1.4.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== +regenerator-runtime@^0.13.4: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + regenerator-transform@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" @@ -2761,6 +4502,13 @@ regenerator-transform@^0.10.0: babel-types "^6.19.0" private "^0.1.6" +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + dependencies: + "@babel/runtime" "^7.8.4" + regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -2769,6 +4517,14 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexp.prototype.flags@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + regexpu-core@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" @@ -2778,11 +4534,28 @@ regexpu-core@^2.0.0: regjsgen "^0.2.0" regjsparser "^0.1.4" +regexpu-core@^4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" + integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + regjsgen@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + regjsparser@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" @@ -2790,6 +4563,13 @@ regjsparser@^0.1.4: dependencies: jsesc "~0.5.0" +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== + dependencies: + jsesc "~0.5.0" + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -2815,6 +4595,11 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -2845,6 +4630,11 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -2867,16 +4657,21 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@>=5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -2903,16 +4698,80 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +selfsigned@^1.10.7: + version "1.10.8" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30" + integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== + dependencies: + node-forge "^0.10.0" + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + serialize-javascript@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65" integrity sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA== +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -2933,6 +4792,16 @@ setimmediate@^1.0.4: resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" @@ -2988,6 +4857,27 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" +sockjs-client@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" + integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== + dependencies: + debug "^3.2.5" + eventsource "^1.0.7" + faye-websocket "~0.11.1" + inherits "^2.0.3" + json3 "^3.3.2" + url-parse "^1.4.3" + +sockjs@0.3.20: + version "0.3.20" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855" + integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== + dependencies: + faye-websocket "^0.10.0" + uuid "^3.4.0" + websocket-driver "0.6.5" + source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -3017,7 +4907,7 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@^0.5.6: +source-map@^0.5.0, source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -3027,6 +4917,29 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -3049,6 +4962,11 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + stream-browserify@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" @@ -3107,7 +5025,23 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string_decoder@^1.0.0: +string.prototype.trimend@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" + integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" + integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -3152,7 +5086,7 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -supports-color@6.1.0: +supports-color@6.1.0, supports-color@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== @@ -3221,6 +5155,11 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + timers-browserify@^2.0.4: version "2.0.11" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" @@ -3238,6 +5177,11 @@ to-fast-properties@^1.0.3: resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" @@ -3263,6 +5207,11 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + tslib@^1.9.0: version "1.10.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" @@ -3273,11 +5222,42 @@ tty-browserify@0.0.0: resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -3302,6 +5282,11 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -3327,6 +5312,14 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= +url-parse@^1.4.3: + version "1.4.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -3340,7 +5333,7 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= @@ -3359,11 +5352,26 @@ util@^0.11.0: dependencies: inherits "2.0.3" +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + v8-compile-cache@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + vm-browserify@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" @@ -3378,6 +5386,13 @@ watchpack@^1.6.0: graceful-fs "^4.1.2" neo-async "^2.5.0" +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + webpack-cli@^3.3.6: version "3.3.6" resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.6.tgz#2c8c399a2642133f8d736a359007a052e060032c" @@ -3395,6 +5410,64 @@ webpack-cli@^3.3.6: v8-compile-cache "2.0.3" yargs "13.2.4" +webpack-dev-middleware@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" + integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@^3.8.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" + integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.3.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.8" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.26" + schema-utils "^1.0.0" + selfsigned "^1.10.7" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "0.3.20" + sockjs-client "1.4.0" + spdy "^4.0.2" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "^13.3.2" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + webpack-sources@^1.4.0, webpack-sources@^1.4.1: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" @@ -3432,6 +5505,27 @@ webpack@^4.39.2: watchpack "^1.6.0" webpack-sources "^1.4.1" +websocket-driver@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= + dependencies: + websocket-extensions ">=0.1.1" + +websocket-driver@>=0.5.1: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -3472,6 +5566,13 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +ws@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -3495,6 +5596,14 @@ yargs-parser@^13.1.0: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs@13.2.4: version "13.2.4" resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" @@ -3511,3 +5620,19 @@ yargs@13.2.4: which-module "^2.0.0" y18n "^4.0.0" yargs-parser "^13.1.0" + +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" From c7fc05e281d91cf3f83ce1abdd9e682d0b141f76 Mon Sep 17 00:00:00 2001 From: yjkwon07 Date: Fri, 1 Jan 2021 22:45:03 +0900 Subject: [PATCH 13/20] Object README [U] --- Modern JS/JS_Object.md | 84 ++++++++++++++++++++++++++++-------------- README.md | 3 +- 2 files changed, 59 insertions(+), 28 deletions(-) diff --git a/Modern JS/JS_Object.md b/Modern JS/JS_Object.md index c34c1e2..04fd51b 100644 --- a/Modern JS/JS_Object.md +++ b/Modern JS/JS_Object.md @@ -2,44 +2,48 @@ - [JS Object](#js-object) - [new 연산자 역할](#new-연산자-역할) - - [프로퍼티의 속성](#프로퍼티의-속성) + - [new 생성자 keyword로 함수를 호출시 흐름](#new-생성자-keyword로-함수를-호출시-흐름) + - [프로퍼티의 속성 및 디스크립터 설정 메서드](#프로퍼티의-속성-및-디스크립터-설정-메서드) - [유용한 Object 메소드](#유용한-object-메소드) - [class vs function (new)](#class-vs-function-new) - - [this of function(method)?](#this-of-functionmethod) + - [who is this of function(method)?](#who-is-this-of-functionmethod) - [function 생성자](#function-생성자) - [class 생성자](#class-생성자) - - [{} 리턴](#-리턴) + - [{} 리턴 new vs don't use new keyword](#-리턴-new-vs-dont-use-new-keyword) - [allow function](#allow-function) ## new 연산자 역할 ```js + // 생성자 함수 function Circle(center, radius) { + // 생성자 필드 (this is newObject what is binded) this.center = center; this.radius = radius; } + // prototype 공간에 추가 Circle.prototype.area = function() { return Math.PI*this.radius*this.radius; } + + var circle = new Circle({x:0,y:0},2.0); ``` -- new 생성자 keyword로 함수를 호출시 흐름 +### new 생성자 keyword로 함수를 호출시 흐름 ```js - var circle = new Circle({x:0,y:0},2.0); - - var newObj = {}; - newObj.__proto__ = Cicle.prototype; - Circle.apply(newObj, arguments); - return new Obj; + var newObj = {}; // 새로운 빈 객체 주소 참조 + newObj.__proto__ = Cicle.prototype; // prototype 공간 주소 참조 + Circle.apply(newObj, arguments); // this bind하여 arguments 정보들로 함수 실행 this bind로 인해, 생성자 필드 정보 부여가 됨 + return new Obj; // 만들어진 객체 리턴 ``` -## 프로퍼티의 속성 +## 프로퍼티의 속성 및 디스크립터 설정 메서드 ``` - writable - enumerable - configurable + writable (쓰기 가능) + enumerable (나열 가능) + configurable (재정의) ``` - 데이터 프로퍼티 @@ -49,8 +53,8 @@ - configurable - 접근자 프로퍼티 - - get - - set + - `get` + - `set` - enumerable - configurable @@ -58,18 +62,18 @@ Object.getOwnPropertyDescriptor(obj, propertyName) // 디스크립터 (상속 관계 프로퍼티는 undefined) Object.defineProperty(obj, propertyName, descriptor) // 프로퍼티 디스크립터 설정 Object.defineProperties(obj, descriptor) // 여러 개 프로퍼티 디스크립터 설정 - Object.create(obj, descriptor) // 첫 번 째 해당 인수로 상속을 받는다, 두 번 째 인수에서는 프로퍼티 디스크립터를 작성하여 자신의 프로퍼티로 갖게 된다. + Object.create(obj, descriptor) // 첫 번 째 인수로 상속을 받는다, 두 번 째 인수에서는 프로퍼티 디스크립터를 작성하여 자신의 프로퍼티로 갖게 된다. ``` ## 유용한 Object 메소드 ```js - Object.keys // method returns an array of a given object's own enumerable property - Object.getOwnProperyNames // method returns an array of all properties (including non-enumerable properties except for those which use Symbol) + Object.keys() // method returns an array of a given object's own enumerable property + Object.getOwnProperyNames() // method returns an array of all properties (including non-enumerable properties except for those which use Symbol) - Object.preventExtensions // 추가 [불가] - Object.seal // 추가,삭제, 재정의(configuable) [불가] - Object.freeze // 재정의,추가,삭제,수정 [불가] + Object.preventExtensions() // 추가 [불가] + Object.seal() // 추가,삭제, 재정의(configuable) [불가] + Object.freeze() // 재정의,추가,삭제,수정 [불가] ``` ## class vs function (new) @@ -81,8 +85,30 @@ - Species - super 를 통한 상위 클래스 호출 - Mix-ins +- [javascript info](https://ko.javascript.info/class) + - **`클래스 필드`** + ```js + class MyClass { + prop = value; // 프로퍼티 + + constructor(...) { // 생성자 메서드 + // ... + } + + method(...) {} // 메서드 -## this of function(method)? + get something(...) {} // getter 메서드 + set something(...) {} // setter 메서드 + + [Symbol.iterator]() {} // 계산된 이름(computed name)을 사용해 만드는 메서드 (심볼) + // ... + } + ``` +- [javascript info](https://ko.javascript.info/class-inheritance#ref-69) + - **`super 키워드와 [[HomeObject]]`** + + +## who is this of function(method)? ### function 생성자 @@ -135,13 +161,14 @@ ``` - method get method of refernceType + - 객체 메서드를 여기저기 전달해 전혀 다른 컨텍스트에서 호출하게 되면 this는 원래 객체를 참조하지 않습니다. ```js var who = a.who() who() // undefined => class is use stric mode ``` -### {} 리턴 +### {} 리턴 new vs don't use new keyword ```js function A(params) { @@ -149,7 +176,7 @@ function what() { return this.name; } - function who(){ + function who() { return this; } return { @@ -161,17 +188,20 @@ - [new 연산자 역할 참고](#new-연산자-역할) - return newObj 하기전 apply에서 이미 `{} 리터럴` 리턴 됨 +- 객체를 return 한다면, this 대신 객체가 반환 +- 원시형을 return 한다면, return문이 무시 ```js - var a = new A({name:"yjkwon07"}); + var a = new A({name:"yjkwon07"}); // new obj a.what() // undefined a.who() // { what, who } + window.name // undefined ``` - new 생성자 키워드를 사용하지 않았기 때문에 window 전역 객체에 name 프로퍼티가 생성된다. ```js - var a = A({name:"yjkwon07"}); + var a = A({name:"yjkwon07"}); // new obj a.what() // undefined a.who() // { what, who } window.name // "yjkwon07" diff --git a/README.md b/README.md index 0b52bfb..561b5fc 100644 --- a/README.md +++ b/README.md @@ -82,4 +82,5 @@ - [JavaScropt 33가지 개념](https://velog.io/@jakeseo_me/series/33conceptsofjavascript) - [Poiemaweb](https://poiemaweb.com/) -- [Frontend Developers](https://github.com/FEDevelopers) \ No newline at end of file +- [Frontend Developers](https://github.com/FEDevelopers) +- [JavaScropt Info](https://ko.javascript.info) \ No newline at end of file From 5c10de5ec86c75a441276249dc9a67eb62931c42 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Jan 2021 13:54:08 +0000 Subject: [PATCH 14/20] Bump websocket-extensions from 0.1.3 to 0.1.4 in /blog_LikeSelector(ES6) Bumps [websocket-extensions](https://github.com/faye/websocket-extensions-node) from 0.1.3 to 0.1.4. - [Release notes](https://github.com/faye/websocket-extensions-node/releases) - [Changelog](https://github.com/faye/websocket-extensions-node/blob/master/CHANGELOG.md) - [Commits](https://github.com/faye/websocket-extensions-node/compare/0.1.3...0.1.4) Signed-off-by: dependabot[bot] --- blog_LikeSelector(ES6)/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/blog_LikeSelector(ES6)/package-lock.json b/blog_LikeSelector(ES6)/package-lock.json index 67c35f8..6eb255b 100644 --- a/blog_LikeSelector(ES6)/package-lock.json +++ b/blog_LikeSelector(ES6)/package-lock.json @@ -7015,9 +7015,9 @@ } }, "websocket-extensions": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true }, "which": { From d40ddd0812cd48ca35a41a012b5179e498e9e32c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Jan 2021 13:54:14 +0000 Subject: [PATCH 15/20] Bump acorn from 6.3.0 to 6.4.2 in /blog_LikeSelector(ES6) Bumps [acorn](https://github.com/acornjs/acorn) from 6.3.0 to 6.4.2. - [Release notes](https://github.com/acornjs/acorn/releases) - [Commits](https://github.com/acornjs/acorn/compare/6.3.0...6.4.2) Signed-off-by: dependabot[bot] --- blog_LikeSelector(ES6)/package-lock.json | 6 +- blog_LikeSelector(ES6)/yarn.lock | 72 +----------------------- 2 files changed, 6 insertions(+), 72 deletions(-) diff --git a/blog_LikeSelector(ES6)/package-lock.json b/blog_LikeSelector(ES6)/package-lock.json index 67c35f8..db08527 100644 --- a/blog_LikeSelector(ES6)/package-lock.json +++ b/blog_LikeSelector(ES6)/package-lock.json @@ -1060,9 +1060,9 @@ } }, "acorn": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", - "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true }, "ajv": { diff --git a/blog_LikeSelector(ES6)/yarn.lock b/blog_LikeSelector(ES6)/yarn.lock index c44a098..ad3a269 100644 --- a/blog_LikeSelector(ES6)/yarn.lock +++ b/blog_LikeSelector(ES6)/yarn.lock @@ -987,9 +987,9 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: negotiator "0.6.2" acorn@^6.2.1: - version "6.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" - integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== ajv-errors@^1.0.0: version "1.0.1" @@ -1699,34 +1699,6 @@ bonjour@^3.5.0: multicast-dns "^6.0.1" multicast-dns-service-types "^1.1.0" -body-parser@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== - dependencies: - bytes "3.1.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.7.2" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" - -bonjour@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" - integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= - dependencies: - array-flatten "^2.1.0" - deep-equal "^1.0.1" - dns-equal "^1.0.0" - dns-txt "^2.0.2" - multicast-dns "^6.0.1" - multicast-dns-service-types "^1.1.0" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1908,14 +1880,6 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -call-bind@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" - integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.0" - camelcase@^5.0.0: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -2053,11 +2017,6 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -colorette@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" - integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== - commander@^2.20.0: version "2.20.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" @@ -2871,15 +2830,6 @@ get-caller-file@^2.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.1.tgz#94a9768fcbdd0595a1c9273aacf4c89d075631be" - integrity sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -3242,22 +3192,6 @@ internal-ip@^4.3.0: default-gateway "^4.2.0" ipaddr.js "^1.9.0" -internal-ip@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" - integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== - dependencies: - default-gateway "^4.2.0" - ipaddr.js "^1.9.0" - -internal-ip@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" - integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== - dependencies: - default-gateway "^4.2.0" - ipaddr.js "^1.9.0" - interpret@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" From 0820dcdc399ab7c32884ce20e07e49b6735d33ca Mon Sep 17 00:00:00 2001 From: yjkwon07 Date: Sun, 3 Jan 2021 15:44:08 +0900 Subject: [PATCH 16/20] JS [U] --- Modern JS/Function, Class (this).md | 1 - Modern JS/JS_Function.md | 278 ++++++++++++++++++++-------- Modern JS/JS_Object.md | 177 ++++++++++-------- Modern JS/JS_class.md | 112 +++++++++++ Modern JS/JS_start.md | 133 +++++++------ README.md | 53 ++++-- 6 files changed, 519 insertions(+), 235 deletions(-) delete mode 100644 Modern JS/Function, Class (this).md create mode 100644 Modern JS/JS_class.md diff --git a/Modern JS/Function, Class (this).md b/Modern JS/Function, Class (this).md deleted file mode 100644 index d14170c..0000000 --- a/Modern JS/Function, Class (this).md +++ /dev/null @@ -1 +0,0 @@ -- [자바스크립트 개발자라면 알아야 할 33가지 개념 #15 자바스크립트 : this, call(), apply(), bind()](https://velog.io/@jakeseo_me/2019-05-07-1605-%EC%9E%91%EC%84%B1%EB%90%A8-qpjvdgllm8) \ No newline at end of file diff --git a/Modern JS/JS_Function.md b/Modern JS/JS_Function.md index a4ba94a..a0ab8b4 100644 --- a/Modern JS/JS_Function.md +++ b/Modern JS/JS_Function.md @@ -5,23 +5,31 @@ - [함수 선언 vs 함수 표현식](#함수-선언-vs-함수-표현식) - [호이스팅](#호이스팅) - [Function 인자 가변 길이 인수(Arguments 객체)](#function-인자-가변-길이-인수arguments-객체) - - [[ [Prototype] ] 접근자 __ proto __ 프로퍼티](#-prototype--접근자-__-proto-__-프로퍼티) + - [[ [Prototype] ] 접근자 \_\_proto\_\_ 프로퍼티](#-prototype--접근자-__proto__-프로퍼티) - [prototype 객체 변경](#prototype-객체-변경) + - [prototype에 프로퍼티 할당과 호출](#prototype에-프로퍼티-할당과-호출) - [실행 컨텍스트(Excution Context)](#실행-컨텍스트excution-context) - [실행 컨텍스트(EC) 프로퍼티](#실행-컨텍스트ec-프로퍼티) - [실행 컨텍스트 실행(처리) 순서](#실행-컨텍스트-실행처리-순서) - [Ex. 실행 가능한 함수 [code]](#ex-실행-가능한-함수-code) + - [Ex. 중첩함수 리턴](#ex-중첩함수-리턴) + - [함수 프로토타입 함수추가 (데코레이터)](#함수-프로토타입-함수추가-데코레이터) + - [Reference](#reference) ## 함수의 정의 ```js - function hello(x,y){return x * y;} // 함수의 정의(함수 선언) +function hello(x, y) { + return x * y; +} // 함수의 정의(함수 선언) - var hello = function(x,y){return x * y}; // 리터럴(anonymous function) (함수 표현식) +var hello = function (x, y) { + return x * y; +}; // 리터럴(anonymous function) (함수 표현식) - var hello = new Function("x,y","return x*y"); // Function 생성자(new 연산자) +var hello = new Function("x,y", "return x*y"); // Function 생성자(new 연산자) - var hello = (x,y) => x * y; // 화살표 함수 +var hello = (x, y) => x * y; // 화살표 함수 ``` ## 함수 선언 vs 함수 표현식 @@ -29,103 +37,149 @@ - 함수 선언도 함수의 표현식과 같은 형태로 저장하는 방식이 같다. - 함수명과 함수 참조값을 가진 변수명이 일치하므로 함수명으로 호출되는 듯 보이지만 **사실은 변수명으로 호출된 것이다.** - 결국 함수 선언도 함수 표현식과 동일하게 **함수 리터럴 방식으로 정의되는 것이다.** - ```js - function hello(x,y){return x * y; } // 함수의 정의(함수 선언) - // INNER CORER - var hello = function hello(x,y){return x * y; } // 함수의 정의(함수 표현식 => 변수 선언) + ```js + function hello(x, y) { + return x * y; + } // 함수의 정의(함수 선언) + + // INNER CORER + var hello = function hello(x, y) { + return x * y; + }; // 함수의 정의(함수 표현식 => 변수 선언) ``` + - 함수 표현식에서 함수이름을 정할 수도 있다. 하지만, 해당 함수 이름으로 호출 할 수 없다. **단지 디버깅시 해당 함수를 쉽게 알기 위함.** ```js - var hello = function world(x,y) {return x * y}; // 리터럴(함수 표현식) - world(2,3); // Error + var hello = function world(x, y) { + return x * y; + }; // 리터럴(함수 표현식) + world(2, 3); // Error ``` ### 호이스팅 -- ES6의 let, const를 포함하여 모든 선언(var, let, const, function, function*, class)을 호이스팅(Hoisting)한다. -- `호이스팅이란` var 선언문이나 function 선언문 등 모든 선언문이 해당 `Scope의 선두로` 옮겨 동작하는 특성을 말한다. +- ES6의 let, const를 포함하여 모든 선언(var, let, const, function, function\*, class)을 호이스팅(Hoisting)한다. +- `호이스팅이란` var 선언문이나 function 선언문 등 모든 선언문이 해당 `Scope의 선두로` 옮겨 동작하는 특성을 말한다. + - 즉, 모든 선언, 할당되기 이전에 참조 가능하다. - 여기서 `함수 선언으로` 작업할 경우, **함수 호이스팅이 발생된다.** + - 함수 호이스팅경우 **해당 함수의 객체를 생성하여(VO)** Reference Type으로 해당 **함수 선언에 연결을 한다.** - 함수 호이스팅으로 선언 이전에 함수를 호출 할 수 있다. + ```js - console.log(hello(2,3)); // 6 - function hello(x,y){ - return x * y; - } + console.log(hello(2, 3)); // 6 + function hello(x, y) { + return x * y; + } ``` - 함수 선언의 경우와는 달리 `함수 표현식의 경우` 함수 호이스팅이 아니라 **변수 호이스팅이 발생한다.** + - 변수 호이스팅경우 선언문의 이름을 **Scope의 선두로 올리고 값을 `undefined로` 부여한다.** - 즉, 함수의 객체가 생성되지 않았기 때문에 **해당 변수를 함수로 보지않는다.** + ```js - var hello = world(5); // Error + var hello = world(5); // Error - var world = function(x,y) { - return x * y; - } + var world = function (x, y) { + return x * y; + }; ``` ## Function 인자 가변 길이 인수(Arguments 객체) - **Arguments** 객체는 프로퍼티로 `length`와 `callee`를 갖고 있다. - 해당 **Function 객체에서는** `arguments 프로퍼티` 부여 - - **유사 배열 객체** + - **유사 배열 객체** - length: 인수 개수 - callee: 현재 실행되고 있는 함수 참조 - Argumetns 객체는 인수 목록과 연동되어 **arguments 값을 바꾸면 인수도 바뀐다.** - ```js - (function(x,y){ - arguments[0] = 55; - console.log(x, y); // 55, 2 - })(2,2); - ``` + ```js + (function (x, y) { + arguments[0] = 55; + console.log(x, y); // 55, 2 + })(2, 2); + ``` -## [ [Prototype] ] 접근자 __ proto __ 프로퍼티 +## [ [Prototype] ] 접근자 \_\_proto\_\_ 프로퍼티 -- `모든 객체는` [ [Prototype] ]이라는 내부 슬롯이 있다. +- `모든 객체는` [ [Prototype] ]이라는 내부 슬롯이 있다. - [ [Prototype] ] 내부 슬롯은 **Prototype 객체를 가리킨다.** - 프로토타입 객체란 프로토타입 기반으로 **상속을 구현하기 위해 사용된다.** - - 내부 슬롯을 직접 접근을 못하므로 **`__ proto __ 접근자 프로퍼티로` 접근을 한다.** + - 내부 슬롯을 직접 접근을 못하므로 **`__proto__ 접근자 프로퍼티로` 접근을 한다.** - 즉, 프로토타입 객체는 다른 객체에 공유 프로퍼티를 제공하는 객체를 말한다. - **prototype 프로퍼티는 함수 객체만이 소유하는 프로퍼티이다.** (일반 객체에는 prototype 프로퍼티가 없다.) - - 만약 new Object()로 할경우 Object는 생성자 함수로 구현되어있기 때문에 Object.__ proto __ === Fucntion.prototype 을 가리키게 된다. - - Object로 생성된 인스턴스는 Object.prototype을 가리키게 된다.({}.__ proto __ === Object.prototype) - - ![prototype](../image/function_object_prototype.png) + + - 만약 new Object()로 할경우 Object는 생성자 함수로 구현되어있기 때문에 Object.\_\_proto\_\_ === Fucntion.prototype 을 가리키게 된다. + - Object로 생성된 인스턴스는 Object.prototype을 가리키게 된다.({}.\_\_proto\_\_ === Object.prototype) + + ![prototype](../image/function_object_prototype.png) + +- 여기서 `declare function by User(F)`의 \_\_proto\_\_가 아닌 `prototype은` new F를 호출해 새롭게 만든 객체의 [[Prototype]]을 할당해 주기 위함이다. ## prototype 객체 변경 -- `prototype 타입도` **객체이다.** +- `prototype`도 **객체이다.** - prototype 객체는 **다른 임의의 객체로 변경할 수 있다.** (객체의 상속) - 프로토타입 객체를 변경하는 시점에 따라 생성된 인스턴스(객체)의 prototype이 가리키는 참조값이 달라진다. ```js - function Hello(next) { - this.next = next; - } +function Hello(next) { + this.next = next; +} - var hi = new Hello('World'); +var hi = new Hello("World"); - // 프로토타입 객체의 변경 - Hello.prototype = { what: 'JavaScript' }; // Object로 생성된 객체 Reference 참조 +// 프로토타입 객체의 변경 +Hello.prototype = { what: "JavaScript" }; // Object로 생성된 객체 Reference 참조 - var hey = new Hello('World!!!!'); +var hey = new Hello("World!!!!"); - console.log(hi.what); // undefined - console.log(hey.what); // 'JavaScript' +console.log(hi.what); // undefined +console.log(hey.what); // 'JavaScript' - console.log(hi.constructor); // Hello(next) - console.log(hey.constructor); // Object() +console.log(hi.constructor); // Hello(next) +console.log(hey.constructor); // Object() ``` - 프로토타입 객체 변경 후, Hello() 생성자 함수의 Prototype 프로퍼티가 가리키는 프로토타입 객체를 Object 객체로 변경하면서 Hello.prototype.constructor 프로퍼티도 삭제되었다. - hey.constructor의 값은 프로토타입 체이닝에 의해 Object 생성자 함수가 된다. +## prototype에 프로퍼티 할당과 호출 + +```js +let hamster = { + stomach: [], + + eat(food) { + this.stomach.push(food); + }, +}; + +let speedy = { + __proto__: hamster, +}; + +let lazy = { + __proto__: hamster, +}; +``` + +- 상속된 prototype의 함수를 호출할 때, 함수안에 this.[key] 에따라 상속 받은 객체와 부모 객체 상태가 달라진다. + + - this.[key] : 프로퍼티 할당 + - this.[key][function] : 함수 호출 + +- 이 때는 `this.stomach.push`를 `호출했기` 때문에 hamster 객체에 `stomach가` 푸쉬된다. +- `this.stomach`로 교체한다면 상속하고 있는 객체 `할당된다`. + ## 실행 컨텍스트(Excution Context) - 실행 가능한 코드(Executable Code)를 만나면 그 코드를 평가(Evaluation)하여 실행 문맥(EC)을 만든다. + - **전역 코드** - **함수 코드** - eval 코드 @@ -142,15 +196,19 @@ - ![EC](./../image/EC.png) - Variable Object(VO) + - value, parameter, arguments, 함수 선언 - `실행 컨텍스트에 따라` **가리키는 객체가 달라진다.** + - `Global Enviroment Context` + - 전역 코드 즉, 매개변수가 없는 전역코드를 평가하는 시점에서, VO는 전역객체(Global Object /GO)를 가리킨다. - 초기 상태의 전역객체는 빌트인 객체와 BOM, DOM이 구현이되어 있다. (구현이 된 후 전역 실행 컨텍스트가 생성) - 전역 객체는 전역에 선언된 전역 변수와 전역 함수를 프로퍼티로 소유한다. - `Funciton Context` - VO는 활성 객체(Activation Object /AO)를 가리키며 매개변수와 인수들의 정보를 배열의 형태로 담고 있는 객체인 arguments object가 추가 된다. + - Scope - 스코프는 `식별자를 검색하는 매커니즘이다.` - [Variable Object + All parent(VO)] @@ -161,41 +219,111 @@ ### 실행 컨텍스트 실행(처리) 순서 - 1. 스코프 체인의 생성과 초기화 - 2. Variable Instantiation(변수 객체화) 실행 - - Variable Instantiation은 Variable Object에 프로퍼티와 값을 추가하는 것을 의미한다. - - - 프로퍼티 값 설정 순서 - 1. (`Function Code인 경우)` `매개변수(parameter)가` Variable Object의 프로퍼티 `name`으로, `인수(argument)가` `value`로 설정된다. - 2. 대상 코드 내의 `함수 선언`(함수 표현식 제외)을 대상으로 `함수명이` Variable Object의 `name`으로, 생성된 `함수 객체가` `value`로 설정된다. **(함수 호이스팅)** - 3. 대상 코드 내의 `변수 선언을` 대상으로` 변수명이` Variable Object의 `name`으로, `undefined가` `value`로 설정된다. (변수 호이스팅) - - - 변수(프로퍼티) 선언 처리 - 1. 선언 단계(Declaration phase) - - 변수 객체(Variable Object)에 변수를 등록한다. 이 변수 객체는 스코프가 참조할 수 있는 대상이 된다. - 2. 초기화 단계(Initialization phase) - - 변수 객체(Variable Object)에 등록된 변수를 메모리에 할당한다. 이 단계에서 변수는 `undefined로` 초기화된다. - 3. 할당 단계(Assignment phase) - - `EC가 구성된 후` 전체 코드를 순차적으로 실행될 때 시점이다. - - `undefined로` 초기화된 변수에 실제값을 할당한다. - 3. this value 결정 +1. 스코프 체인의 생성과 초기화 +2. Variable Instantiation(변수 객체화) 실행 + + - Variable Instantiation은 Variable Object에 프로퍼티와 값을 추가하는 것을 의미한다. + + - 프로퍼티 값 설정 순서 + + 1. (`Function Code인 경우)` `매개변수(parameter)가` Variable Object의 프로퍼티 `name`으로, `인수(argument)가` `value`로 설정된다. + 2. 대상 코드 내의 `함수 선언`(함수 표현식 제외)을 대상으로 `함수명이` Variable Object의 `name`으로, 생성된 `함수 객체가` `value`로 설정된다. **(함수 호이스팅)** + 3. 대상 코드 내의 `변수 선언을` 대상으로` 변수명이` Variable Object의 `name`으로, `undefined가` `value`로 설정된다. (변수 호이스팅) + + - 변수(프로퍼티) 선언 처리 + 1. 선언 단계(Declaration phase) + - 변수 객체(Variable Object)에 변수를 등록한다. 이 변수 객체는 스코프가 참조할 수 있는 대상이 된다. + 2. 초기화 단계(Initialization phase) + - 변수 객체(Variable Object)에 등록된 변수를 메모리에 할당한다. 이 단계에서 변수는 `undefined로` 초기화된다. + 3. 할당 단계(Assignment phase) + - `EC가 구성된 후` 전체 코드를 순차적으로 실행될 때 시점이다. + - `undefined로` 초기화된 변수에 실제값을 할당한다. + +3. this value 결정 ### Ex. 실행 가능한 함수 [code] ```js - var a = 'testA'; +var a = "testA"; - function outterA() { - var b = 'testB'; +function outterA() { + var b = "testB"; - function nestedB() { - var c = 'testC'; - console.log(a,b,c); - } - nestedB(); + function nestedB() { + var c = "testC"; + console.log(a, b, c); } - - outterA(); + nestedB(); +} + +outterA(); +``` + +![EC, GO, AO](./../image/EC_stack.png) + +### Ex. 중첩함수 리턴 + +```js +function makeCounter() { + let count = 0; + + return function () { + return count++; + }; +} + +let counter = makeCounter(); ``` -![EC, GO, AO](./../image/EC_stack.png) \ No newline at end of file +> 모든 함수는 함수가 생성된 곳의 렉시컬 환경을 기억한다는 점입니다. +> 함수는 [[Environment]]라 불리는 숨김 프로퍼티를 갖는데, 여기에 함수가 만들어진 곳의 렉시컬 환경에 대한 참조가 저장됩니다. + +> counter.[[Environment]]엔 {count: 0}이 있는 렉시컬 환경에 대한 참조가 저장됩니다. +> **호출 장소와 상관없이 함수가 자신이 태어난 곳을 기억할 수 있는 건 바로** [[Environment]] 프로퍼티 덕분입니다. +> +> [[Environment]]는 함수가 생성될 때 딱 한 번 그 값이 세팅됩니다. 그리고 이 값은 영원히 변하지 않습니다. +> +> counter()를 호출하면 각 호출마다 새로운 렉시컬 환경이 만들어집니다. +> +> 그리고 이 렉시컬 환경은 counter.[[Environment]]에 저장된 렉시컬 환경을 외부 렉시컬 환경으로서 참조하게 됩니다. + +> new Function을 이용해 만든 함수의 [[Environment]]는 외부 렉시컬 환경이 아닌 전역 렉시컬 환경을 참조하므로 외부 변수를 사용할 수 없습니다. +> +> 단점 같아 보이는 특징이긴 하지만 에러를 예방해 준다는 관점에선 장점이 되기도 합니다. +> +> 구조상으론 매개변수를 사용해 값을 받는 게 더 낫습니다. 압축기에 의한 에러도 방지할 수 있죠. + +## 함수 프로토타입 함수추가 (데코레이터) + +- `데코레이터는` 함수를 감싸는 래퍼로 함수의 행동을 변화시킨다. +- 주요 작업은 여전히 함수에서 처리한다. + +```js +Function.prototype.defer = function (ms) { + let f = this; // 호출한 인스턴스 함수 // ex. sayHi (함수도 Function객체의 인스턴스 이다.) + return function (...args) { + setTimeout(() => f.apply(this, args), ms); + }; +}; + +let user = { + name: "John", + sayHi() { + alert(this.name); + }, +}; + +user.sayHi = user.sayHi.defer(1000); + +user.sayHi(); +``` + +## Reference + +- [변수의 유효범위와 클로져](https://ko.javascript.info/closure#ref-704) +- [객체로서의 함수와 기명 함수 표현식](https://ko.javascript.info/function-object?map) +- ['new Function' 문법](https://ko.javascript.info/new-function) +- [call/apply와 데코레이터, 포워딩](https://ko.javascript.info/call-apply-decorators) +- [프로토타입 상속](https://ko.javascript.info/prototype-inheritance) +- [함수의 prototype 프로퍼티](https://ko.javascript.info/function-prototype) +- [프로토타입 메서드와 \_\_proto\_\_가 없는 객체](https://ko.javascript.info/prototype-methods) diff --git a/Modern JS/JS_Object.md b/Modern JS/JS_Object.md index 04fd51b..0d80871 100644 --- a/Modern JS/JS_Object.md +++ b/Modern JS/JS_Object.md @@ -11,31 +11,32 @@ - [class 생성자](#class-생성자) - [{} 리턴 new vs don't use new keyword](#-리턴-new-vs-dont-use-new-keyword) - [allow function](#allow-function) + - [Reference](#reference) ## new 연산자 역할 ```js - // 생성자 함수 - function Circle(center, radius) { - // 생성자 필드 (this is newObject what is binded) - this.center = center; - this.radius = radius; - } - // prototype 공간에 추가 - Circle.prototype.area = function() { - return Math.PI*this.radius*this.radius; - } - - var circle = new Circle({x:0,y:0},2.0); +// 생성자 함수 +function Circle(center, radius) { + // 생성자 필드 (this is newObject what is binded) + this.center = center; + this.radius = radius; +} +// prototype 공간에 추가 +Circle.prototype.area = function () { + return Math.PI * this.radius * this.radius; +}; + +var circle = new Circle({ x: 0, y: 0 }, 2.0); ``` ### new 생성자 keyword로 함수를 호출시 흐름 ```js - var newObj = {}; // 새로운 빈 객체 주소 참조 - newObj.__proto__ = Cicle.prototype; // prototype 공간 주소 참조 - Circle.apply(newObj, arguments); // this bind하여 arguments 정보들로 함수 실행 this bind로 인해, 생성자 필드 정보 부여가 됨 - return new Obj; // 만들어진 객체 리턴 +var newObj = {}; // 새로운 빈 객체 주소 참조 +newObj.__proto__ = Cicle.prototype; // prototype 공간 주소 참조 +Circle.apply(newObj, arguments); // this bind하여 arguments 정보들로 함수 실행 this bind로 인해, 생성자 필드 정보 부여가 됨 +return new Obj(); // 만들어진 객체 리턴 ``` ## 프로퍼티의 속성 및 디스크립터 설정 메서드 @@ -47,10 +48,11 @@ ``` - 데이터 프로퍼티 + - value - writable - enumerable - - configurable + - configurable - 접근자 프로퍼티 - `get` @@ -58,22 +60,25 @@ - enumerable - configurable +> configurable: false는 플래그 값 변경이나 프로퍼티 삭제를 막기 위해 만들어졌지, 프로퍼티 값 변경을 막기 위해 만들어진 게 아닙니다. + ```js - Object.getOwnPropertyDescriptor(obj, propertyName) // 디스크립터 (상속 관계 프로퍼티는 undefined) - Object.defineProperty(obj, propertyName, descriptor) // 프로퍼티 디스크립터 설정 - Object.defineProperties(obj, descriptor) // 여러 개 프로퍼티 디스크립터 설정 - Object.create(obj, descriptor) // 첫 번 째 인수로 상속을 받는다, 두 번 째 인수에서는 프로퍼티 디스크립터를 작성하여 자신의 프로퍼티로 갖게 된다. +Object.getOwnPropertyDescriptor(obj, propertyName); // 디스크립터 (상속 관계 프로퍼티는 undefined) +Object.defineProperty(obj, propertyName, descriptor); // 프로퍼티 디스크립터 설정 +Object.defineProperties(obj, descriptor); // 여러 개 프로퍼티 디스크립터 설정 +Object.create(obj, descriptor); // 첫 번 째 인수로 상속을 받는다, +// 두 번 째 인수에서는 프로퍼티 디스크립터를 작성하여 자신의 프로퍼티로 갖게 된다. 접근자 __proto__ 프로퍼티는 대상에 포함되지 않는다. ``` ## 유용한 Object 메소드 ```js - Object.keys() // method returns an array of a given object's own enumerable property - Object.getOwnProperyNames() // method returns an array of all properties (including non-enumerable properties except for those which use Symbol) +Object.keys(); // method returns an array of a given object's own enumerable property +Object.getOwnProperyNames(); // method returns an array of all properties (including non-enumerable properties except for those which use Symbol) - Object.preventExtensions() // 추가 [불가] - Object.seal() // 추가,삭제, 재정의(configuable) [불가] - Object.freeze() // 재정의,추가,삭제,수정 [불가] +Object.preventExtensions(); // 추가 [불가] +Object.seal(); // 추가,삭제, 재정의(configuable) [불가] +Object.freeze(); // 재정의,추가,삭제,수정 [불가] ``` ## class vs function (new) @@ -86,7 +91,9 @@ - super 를 통한 상위 클래스 호출 - Mix-ins - [javascript info](https://ko.javascript.info/class) + - **`클래스 필드`** + ```js class MyClass { prop = value; // 프로퍼티 @@ -104,86 +111,87 @@ // ... } ``` + - [javascript info](https://ko.javascript.info/class-inheritance#ref-69) - **`super 키워드와 [[HomeObject]]`** - ## who is this of function(method)? ### function 생성자 ```js - function A(params) { - this.name = params.name; - } - - A.prototype.what = function () { - return this.name; - } - A.prototype.who = function () { - return this; - } +function A(params) { + this.name = params.name; +} + +A.prototype.what = function () { + return this.name; +}; +A.prototype.who = function () { + return this; +}; ``` ```js - var a = new A({name:"yjkwon07"}); - a.what() // "yjkwon07" - a.who() // A {name: "yjkwon07"} +var a = new A({ name: "yjkwon07" }); +a.what(); // "yjkwon07" +a.who(); // A {name: "yjkwon07"} ``` - method get method of refernceType ```js - var who = a.who() - who() // global this +var who = a.who(); +who(); // global this ``` ### class 생성자 ```js - class A { - constructor(params) { - this.name = params.name; - } - what() { - return this.name; - } - who() { - return this; - } +class A { + constructor(params) { + this.name = params.name; + } + what() { + return this.name; } + who() { + return this; + } +} ``` ```js - var a = new A({name:"yjkwon07"}); - a.what() // "yjkwon07" - a.who() // A {name: "yjkwon07"} +var a = new A({ name: "yjkwon07" }); +a.what(); // "yjkwon07" +a.who(); // A {name: "yjkwon07"} ``` - method get method of refernceType - 객체 메서드를 여기저기 전달해 전혀 다른 컨텍스트에서 호출하게 되면 this는 원래 객체를 참조하지 않습니다. ```js - var who = a.who() - who() // undefined => class is use stric mode +var who = a.who(); +who(); // undefined => class is use stric mode ``` ### {} 리턴 new vs don't use new keyword ```js - function A(params) { - this.name = params.name; - function what() { - return this.name; - } - function who() { - return this; - } - return { - what, - who - } - } +function A(params) { + this.name = params.name; + function what() { + return this.name; + } + function who() { + return this; + } + return { + ref: this, + what, + who, + }; +} ``` - [new 연산자 역할 참고](#new-연산자-역할) @@ -192,24 +200,33 @@ - 원시형을 return 한다면, return문이 무시 ```js - var a = new A({name:"yjkwon07"}); // new obj - a.what() // undefined - a.who() // { what, who } - window.name // undefined +var a = new A({ name: "yjkwon07" }); // new obj +a.what(); // undefined +a.who(); // { ref: A, what: ƒ, who: ƒ } => a 객체의 this를 리턴 +a.ref; // A { name: 'yjkwon07' } => new 생성자 A를 만들 때의 this를 리턴 * new 생성자 keyword로 함수를 호출시 흐름 참조 +a.who() === a.ref; // false +window.name; // undefined ``` - new 생성자 키워드를 사용하지 않았기 때문에 window 전역 객체에 name 프로퍼티가 생성된다. ```js - var a = A({name:"yjkwon07"}); // new obj - a.what() // undefined - a.who() // { what, who } - window.name // "yjkwon07" +var a = A({ name: "yjkwon07" }); // new obj +a.what(); // undefined +a.who(); // { ref, what, who } => a 객체의 this를 리턴 +a.ref; // 일반호출 하였기 때문에 this는 global 값이 리턴 +a.who() === a.ref; // false +window.name; // "yjkwon07" ``` ## allow function - [화살표 함수](../ES2018/4.화살표%20함수.js) - [MDN](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Functions/%EC%95%A0%EB%A1%9C%EC%9A%B0_%ED%8E%91%EC%85%98) - - 화살표 함수 표현(arrow function expression)은 function 표현에 비해 구문이 짧고 자신의 this, arguments, super 또는 new.target을 바인딩 하지 않는다. - - 화살표 함수는 항상 익명이다. 이 함수 표현은 메소드 함수가 아닌 곳에 가장 적합하다. 그래서 생성자로서 사용할 수 없다. \ No newline at end of file + - 화살표 함수 표현(arrow function expression)은 function 표현에 비해 구문이 짧고 자신의 this, arguments, super 또는 new.target을 바인딩 하지 않는다. + - 화살표 함수는 항상 익명이다. 이 함수 표현은 메소드 함수가 아닌 곳에 가장 적합하다. 그래서 생성자로서 사용할 수 없다. + +## Reference + +- [프로퍼티 플래그와 설명자](https://ko.javascript.info/property-descriptors) +- [프로퍼티 getter와 setter](https://ko.javascript.info/property-accessors) diff --git a/Modern JS/JS_class.md b/Modern JS/JS_class.md new file mode 100644 index 0000000..b8035a9 --- /dev/null +++ b/Modern JS/JS_class.md @@ -0,0 +1,112 @@ +# JS_class + +- [JS_class](#js_class) + - [class](#class) + - [상속](#상속) + - [super 키워드와 \[[HomeObject]]](#super-키워드와-homeobject) + - [instanceof](#instanceof) + - [Reference](#reference) + +## class + +```js +class MyClass { + prop = value; // (클래스 필드) 프로퍼티 [public] + #prop = value; // (클래스 필드) 프로퍼티 [private] + + constructor(...) { // 생성자 메서드 + // ... 인스턴스 프로퍼티 정의 + } + + method(...) {} // 메서드 + * method(...) {} // 제너레이터 메서드 + + get something(...) {} // getter 메서드 + + + set something(...) {} // setter 메서드 + + [Symbol.iterator]() {} // 계산된 이름(computed name)을 사용해 만드는 메서드 (심볼) + + static displayName = ""; // 정적 클래스 프로퍼티 + + static distance(a, b) { // 정적 클래스 메서드 + this // class MyClass + const dx = a.x - b.x; + const dy = a.y - b.y; + + return Math.hypot(dx, dy); + } +} +``` + +- `클래스 필드` + + - 어떤 종류의 프로퍼티도 클래스에 추가할 수 있다. + - 생성자.prototype이 아닌 개별 객체에만 클래스 필드가 설정된다. + - 즉, 생성자 역할을 다 한 이후에 클래스 필드가 처리된다. + +- `method(...) {}` 표현은 + + - 메서드는 생성자로 사용할 수 없다. 즉 prototype 프로퍼티를 가지지 않으므로 new 연산자로 인스턴스를 생성할 수 없다. + - 객체 표현에서도 동일하다. + +## 상속 + +> 자바스크립트는 `'상속 클래스의 생성자 함수(derived constructor)'와` 그렇지 않은 생성자 함수를 구분합니다. +> 상속 클래스의 생성자 함수엔 특수 내부 프로퍼티인 `[[ConstructorKind]]:"derived"가` 이름표처럼 붙습니다. + +> 일반 클래스가 `new와` 함께 실행되면, 빈 객체가 만들어지고 `this에` 이 객체를 할당합니다. +> 반면, 상속 클래스의 생성자 함수가 실행되면, 일반 클래스에서 일어난 일이 일어나지 않습니다. +> 상속 클래스의 생성자 함수는 빈 객체를 만들고 `this에` 이 객체를 할당하는 일을 부모 클래스의 생성자가 처리해주길 기대합니다. + +> 이런 차이 때문에 상속 클래스의 생성자에선 `super를` 호출해 부모 생성자를 실행해 주어야 합니다. 그렇지 않으면 `this가` 될 객체가 만들어지지 않아 에러가 발생합니다. + +- **클래스 필드 초기화 순서** + + - `아무것도 상속받지 않는 베이스 클래스는` 생성자 실행 이전에 초기화된다. + - `부모 클래스가 있는 경우엔` `super()` 실행 직후에 초기화 된다. + +- **클래스 생성자의 상속 관계** + + - class B extends A는 `클래스 B의` 프로토타입이(\_\_proto\_\_) `클래스 A를` 가리키게 한다. + - (B.[[Prototype]] = A). 따라서 B에서 원하는 프로퍼티나 메서드를 찾지 못하면 A로 검색이 이어진다. + - `class` 키워드에서만 이루어지고 `일반 함수의` 생성자 프로토타입 상속은 일반 함수 prototype의 상속관계만 이루어진다. 함수의 생성자의 \_\_proto\_\_은 Function 프로토타입을 가리킨다. + +## super 키워드와 \[[HomeObject]] + +- 클래스이거나 객체 메서드인 함수의 \[[HomeObject]] 프로퍼티는 해당 객체가 저장된다. +- `super는` \[[HomeObject]]를 이용해 부모 프로토타입과 메서드를 찾는다. +- \[[HomeObject]]는 오직 `super 내부에서만` 유효하다. + +> \[[HomeObject]]는 클래스와 일반 객체의 메서드에서 정의됩니다. +> 그런데 객체 메서드의 경우 \[[HomeObject]]가 제대로 동작하게 하려면 메서드를 반드시 method() 형태로 정의해야 합니다. +> "method: function()" 형태로 정의하면 안 됩니다. + +## instanceof + +```js +class Animal {} +class Rabbit extends Animal {} + +let rabbit = new Rabbit(); +alert(rabbit instanceof Animal); // true + +// rabbit.__proto__ === Rabbit.prototype +// rabbit.__proto__.__proto__ === Animal.prototype (일치!) +``` + +> 한편, objA가 objB의 프로토타입 체인 상 어딘가에 있으면 true를 반환해주는 메서드, `objA.isPrototypeOf(objB)도` 있습니다. +> `obj instanceof Class는` `Class.prototype.isPrototypeOf(obj)와` 동일합니다. +> 검사 시, 프로토타입 체인과 Class.prototype만 고려합니다. +> `instanceof는` `평가 시`, 함수는 고려하지 않고 평가 대상의 prototype을 고려합니다. +> 평가 대상의 prototype이 프로토타입 체인 상에 있는 프로토타입과 일치하는지 여부를 고려하죠. + +## Reference + +- [클래스와 기본 문법](https://ko.javascript.info/class) +- [클래스 상속](https://ko.javascript.info/class-inheritance) +- [정적 메서드와 정적 프로퍼티](https://ko.javascript.info/static-properties-methods) +- [private, protected 프로퍼티와 메서드](https://ko.javascript.info/private-protected-properties-methods) +- [내장 클래스 확장하기](https://ko.javascript.info/extend-natives) +- [믹스인](https://ko.javascript.info/mixins) diff --git a/Modern JS/JS_start.md b/Modern JS/JS_start.md index 4306d16..8b43913 100644 --- a/Modern JS/JS_start.md +++ b/Modern JS/JS_start.md @@ -1,4 +1,5 @@ # JavaScript Start + - [JavaScript Start](#javascript-start) - [1. Spec](#1-spec) - [2. Expressions vs Statement](#2-expressions-vs-statement) @@ -17,17 +18,21 @@ ## 1. Spec 1. 인터프리터 언어 + - **JIT 컴파일러가** 내장되어 실행속도가 빨라짐 - + 2. 동적 프로토타입 기반 객체 지향 언어 + - JAVA, C++ 에서, 프로그램 실행 중 클래스를 인스턴스화 하여 나온 객체들은 메서드 혹은 멤버변수를 수정할 수 없지만, - **JS에서는 프로토 타입 상속으로 인해 변경 할 수 있다.** 3. 동적 타입 언어 + - **특정 변수 타입이 없다.** - const, let, var 4. 일급 객체 함수 + - **함수(fucntion)도 객체로 지정(Funciton)** - 즉, 값으로 평가한다. @@ -37,23 +42,23 @@ ## 2. Expressions vs Statement - 표현식(Expressions) + - 표현식은 값 하나로 귀결되는 JS 코드 조각(snippet) 이다. - ```js - 2 + 2 * 3 / 2 - (Math.random() * (100-20)) + 20 + ```js + 2 + (2 * 3) / 2(Math.random() * (100 - 20)) + 20; - functionCall() + functionCall(); - window.history ? useHistory() : noHistoryFallback() + window.history ? useHistory() : noHistoryFallback(); - 1+1, 2+2, 3+3 + 1 + 1, 2 + 2, 3 + 3; - declaredVariable + declaredVariable; - true && functionCall() + true && functionCall(); - true && declaredVariable + true && declaredVariable; ``` - 문장(Statements) @@ -75,16 +80,16 @@ ## 3. Data type - 원시타입 **(Primitive Type)**: 자바스크립트에서 객체가 **(Reference Type)** 아닌 것들이며 값 그 자체로 저장된다. - - `Primitive types are immutable` + - `Primitive types are immutable` - String, Number, Boolean 같은 경우 객체가 존재 하지만, 원시타입의 리터럴로 정의하여 프로퍼티를 사용할경우 **Wrapper Object**로 자동 변환 되어 프로퍼티를 리턴한다. **(Auto Boxing)** ```js - 1.toString(); // "1" + 1.toString(); // "1" new Number(1).toString(); // Wrapper Object 리턴후 property 값 리턴 내부에서 이루어진 평가이기 때문에 GC로 없어짐 ``` - 연산 이후, GC로 해당 Wrapper Object 삭제 (할당이 되어이 있지 않기 때문에) ```js - "string".newProperty = 1; // no error - console.log("string".newProperty); // undefined + "string".newProperty = 1; // no error + console.log("string".newProperty); // undefined ``` - 하지만, `new 연산자로` 객체를 만들경우 Reference Type Objcet로 리턴되어 나와 **Primitive Type을 잃게 된다.** - (원시 값을 갖고 싶으면, new String("값").valueOf() 사용 해야한다.) @@ -93,30 +98,30 @@ - 산술 연산자에서는 '0'으로 평가 - Undefined - 산술 연산자에서는 'NaN'으로 평가 -- Number (IEEE754로 규정된 64-bit 부동소수점, 자바스크립트에는 정수 타입은 존재하지 않다.) +- Number (IEEE754로 규정된 64-bit 부동소수점, 자바스크립트에는 정수 타입은 존재하지 않다.) - 부호(1 bit), 지수(11 bit), 가수(52 bit) - String - - '+' 연산 외 '*,/,%...' 연산자는 String 타입을 Number(String 타입)으로 연산을 하게된다. + - '+' 연산 외 '\*,/,%...' 연산자는 String 타입을 Number(String 타입)으로 연산을 하게된다. - Symbol (ECMAScript 6에 추가됨) ### 3-1. typeof 연산자의 반환 값 -| data | ex | return | -|:-------|:-------|:-------| -|숫자, NaN|12,NaN, Number(12)|"number"| -|문자열|"값", String("값")|"string"| -|논리값|true, false|"boolean"| -|정의되지 않은 값|undefined|"undefined"| -|null 값|null|"object"| -|심벌|Symbol("값")|"symbol"| -|함수 외의 객체|[1,2,3], new String("값"), new Number(12)|"object"| -|함수|function(){}|"function"| +| data | ex | return | +| :--------------- | :---------------------------------------- | :---------- | +| 숫자, NaN | 12,NaN, Number(12) | "number" | +| 문자열 | "값", String("값") | "string" | +| 논리값 | true, false | "boolean" | +| 정의되지 않은 값 | undefined | "undefined" | +| null 값 | null | "object" | +| 심벌 | Symbol("값") | "symbol" | +| 함수 외의 객체 | [1,2,3], new String("값"), new Number(12) | "object" | +| 함수 | function(){} | "function" | - **객체의 이름까지 알고 싶을 때** `toString() 함수를` 이용하여 해당 타입을 확인할 수 있다. ```js - function getType(target) { - return Object.prototype.toString.call(target).slice(8, -1); - } + function getType(target) { + return Object.prototype.toString.call(target).slice(8, -1); + } ``` ### 3-2. 산술 연산 @@ -126,65 +131,72 @@ - `{} (block statements)` 에서 무엇이 반환되던지 **그것은 암묵적으로 0로 강제 형변환되어** `피연산자로` 사용된다. ```js - null.valueOf(); // Error - null + 1; // 1 - undefined + 1 // NaN - NaN + "stirng" // "NaNstring" - {3} + 1 // 1 + null.valueOf(); // Error + null + 1; // 1 + undefined + 1; // NaN + NaN + "stirng"; // "NaNstring" + { + 3; + } + +1; // 1 ``` ### 3-3. {} block statements VS object literal -- 블록 문장을 값이나 표현식으로 사용할 수는 없다. -- console.log는 문장(statement)을 인자로 받아들일 수 없다. -- 하지만, 오브젝트 리터럴은 인자로 받아들일 수 있다. +- 블록 문장을 값이나 표현식으로 사용할 수는 없다. +- console.log는 문장(statement)을 인자로 받아들일 수 없다. +- 하지만, 오브젝트 리터럴은 인자로 받아들일 수 있다. - 문장(statements)은 어느것도 반환하도록 되어있지 않다.(값으로 리턴될 수 없기 때문) -- 그래서 자바스크립트는 error을 내보내지 않는 대신에 `+ 연산자의 피연산자를` **숫자나 문자열로 바꾼다.** - - 만일 바꿀 수 없는 값이라면 에러를 리턴한다 +- 그래서 자바스크립트는 error을 내보내지 않는 대신에 `+ 연산자의 피연산자를` **숫자나 문자열로 바꾼다.** + - 만일 바꿀 수 없는 값이라면 에러를 리턴한다 - `블록 문장(block statements)`에서 무엇이 반환되던지 그것은 암묵적으로 **0로 강제 형변환되어 피연산자로 사용된다.** ### 3-4. ==, === 비교 - '==' 비교는 타입이 일치 하지 않을 때, 강제 타입으로 변환시켜 비교하게 된다. + ```js - 77 == "77" // => "77" => Number("77")로 변환 후 검사 - false == 0 // => false => Number(false)로 변환 후 검사 - - null == null // => 서로 같으며 자기 자신과도 같습니다. => true - undefined == undefined // => 서로 같으며 자기 자신과도 같습니다. => true - null == undefined // => 서로 같으며 자기 자신과도 같습니다. => true - null == 0 // => false - undefined == 0 // => false - - NaN == null // 어떠한 값과도 동일하지 않다 false (Warning) - NaN == undefined // 어떠한 값과도 동일하지 않다 false (Warning) - NaN == NaN // 어떠한 값과도 동일하지 않다 false (Warning) + 77 == "77"; // => "77" => Number("77")로 변환 후 검사 + false == 0; // => false => Number(false)로 변환 후 검사 + + null == null; // => 서로 같으며 자기 자신과도 같습니다. => true + undefined == undefined; // => 서로 같으며 자기 자신과도 같습니다. => true + null == undefined; // => 서로 같으며 자기 자신과도 같습니다. => true + null == 0; // => false + undefined == 0; // => false + + NaN == null; // 어떠한 값과도 동일하지 않다 false (Warning) + NaN == undefined; // 어떠한 값과도 동일하지 않다 false (Warning) + NaN == NaN; // 어떠한 값과도 동일하지 않다 false (Warning) ``` + - '===' 비교는 `타입이일치 하진 않으면` **return false**, 타입이 `일치할 때` **값을 비교를 한다.** (Best Code) ## 4. function ```js - function name(인자) {} - name(인수) +function name(인자) {} +name(인수); ``` - parameter(인자) + - 유효범위는 지역함수 이며, 프로그램 실행하면서 필요한 변수 값 - argument(인수) + - 함수에 인자값이 있지만, 인수를 안 보내도 함수는 실행이 된다. - 해당하는 인자값을 모두 `undefined`로 정의 됨(lexcal Scope) - 지역 변수 - 함수내의 변수를 선언 할 수 있으며 안에서 식별자(var, const, let)로 선언한 변수들은 모두 지역 변수로 들어간다. - 함수 안에 함수를 실행할 수 있다.(Nested Function) - - return + - return이 없을 경우 undefined를 리턴 한다. -- **JS에서는 함수가 객체이다.** - - 함수 선언문으로 함수를 선언하면 내부적으로는 그 함수 이름을 변수 이름으로 한 변수와 **함수 객체가 만들어지고,** 함수 객체의 참조가 저장 된다. +- **JS에서는 함수가 객체이다.** + - 함수 선언문으로 함수를 선언하면 내부적으로는 그 함수 이름을 변수 이름으로 한 변수와 **함수 객체가 만들어지고,** 함수 객체의 참조가 저장 된다. ## 5. object(instance) @@ -199,7 +211,7 @@ 객체 리터럴['propertyName'] = 10; 객체 리터럴['propertyName(Method)'] = function(){ console.log(this.propertyName) }; delete 객체 리터럴['propertyName']; // property delete -> confiualable일 때만!! - + var 객체 생성자 = new 객체를 만들려는 함수명(); 객체 생성자['propertyName'] = 10; 객체 생성자['propertyName(Method)'] = function(){ console.log(this.propertyName) }; @@ -208,10 +220,10 @@ ### 5-1. 생성자 - 앞에 예제 처럼 `new 연산자로` 객체를 생성시킨 함수를 생성자라고 한다. -- 인스턴스는 **실체라는** 뜻이 있다. +- 인스턴스는 **실체라는** 뜻이 있다. - 객체 지향 언어에서(ex. JAVA, C++) 인스턴스는 `클래스(설계도)로` 생성한 실체를 뜻한다. - 하지만, JS에서는 **클래스가 없다.** - - 또한, 함수 자체도 **함수객체로** 만든 해당 **함수 인스턴스 이다.** + - 또한, 함수 자체도 **함수객체로** 만든 해당 **함수 인스턴스 이다.** - 그래서, 생성자로 생성한 객체는 엄밀히 말해 인스턴스가 아니다. - 하지만, 생성자가 클래스처럼 객체를 생성하는 역할을 담당하고 있어 **생성자로 생성한 객체도 인스턴스라고 부르는것이 관례이다.** @@ -235,4 +247,5 @@ - [자바스크립트 개발자라면 알아야 할 33가지 개념 #4 암묵적 타입 변환(implicit coercion) (번역)](https://velog.io/@jakeseo_me/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%9D%BC%EB%A9%B4-%EC%95%8C%EC%95%84%EC%95%BC-%ED%95%A0-33%EA%B0%80%EC%A7%80-%EA%B0%9C%EB%85%90-4-%EC%95%94%EB%AC%B5%EC%A0%81-%ED%83%80%EC%9E%85-%EB%B3%80%ED%99%98-%EB%B2%88%EC%97%AD) - [자바스크립트 개발자라면 알아야 할 33가지 개념 #5 == vs === 3분만에 배우기 (번역)](https://velog.io/@jakeseo_me/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%9D%BC%EB%A9%B4-%EC%95%8C%EC%95%84%EC%95%BC-%ED%95%A0-33%EA%B0%80%EC%A7%80-%EA%B0%9C%EB%85%90-5-vs-3%EB%B6%84%EB%A7%8C%EC%97%90-%EB%B0%B0%EC%9A%B0%EA%B8%B0-%EB%B2%88%EC%97%AD#-%ED%91%9C%EC%8B%9C-2%EA%B0%9C%EC%9D%98-%EB%8F%99%EB%93%B1-%EB%B9%84%EA%B5%90%EC%97%B0%EC%82%B0%EC%9E%90) - [자바스크립트 개발자라면 알아야 할 33가지 개념 #6 함수와 블록 스코프 (번역)](https://velog.io/@jakeseo_me/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%9D%BC%EB%A9%B4-%EC%95%8C%EC%95%84%EC%95%BC-%ED%95%A0-33%EA%B0%80%EC%A7%80-%EA%B0%9C%EB%85%90-6-%ED%95%A8%EC%88%98%EC%99%80-%EB%B8%94%EB%A1%9D-%EC%8A%A4%EC%BD%94%ED%94%84-%EB%B2%88%EC%97%AD-dijuhrub1x) -- [자바스크립트 개발자라면 알아야 할 33가지 개념 #7 표현식(Expression)과 문장(Statement) (번역)](https://velog.io/@jakeseo_me/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%9D%BC%EB%A9%B4-%EC%95%8C%EC%95%84%EC%95%BC-%ED%95%A0-33%EA%B0%80%EC%A7%80-%EA%B0%9C%EB%85%90-7-%ED%91%9C%ED%98%84%EC%8B%9D%EA%B3%BC-%EB%AC%B8Statement-%EB%B2%88%EC%97%AD-2xjuhvbal7#%ED%91%9C%ED%98%84%EC%8B%9D%EC%9D%80-%EA%B0%92%EC%9D%84-%EB%A7%8C%EB%93%A4%EC%96%B4%EB%82%B8%EB%8B%A4) \ No newline at end of file +- [자바스크립트 개발자라면 알아야 할 33가지 개념 #7 표현식(Expression)과 문장(Statement) (번역)](https://velog.io/@jakeseo_me/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%9D%BC%EB%A9%B4-%EC%95%8C%EC%95%84%EC%95%BC-%ED%95%A0-33%EA%B0%80%EC%A7%80-%EA%B0%9C%EB%85%90-7-%ED%91%9C%ED%98%84%EC%8B%9D%EA%B3%BC-%EB%AC%B8Statement-%EB%B2%88%EC%97%AD-2xjuhvbal7#%ED%91%9C%ED%98%84%EC%8B%9D%EC%9D%80-%EA%B0%92%EC%9D%84-%EB%A7%8C%EB%93%A4%EC%96%B4%EB%82%B8%EB%8B%A4) +- [네이티브 프로토타입](https://ko.javascript.info/native-prototypes) diff --git a/README.md b/README.md index 561b5fc..51d5266 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # JavaScript - [JS Engine(V8)](./Modern%20JS/JS_Engine.md) + - Compile & RunTime Engine - V8 Engine - Single Thread & EventLoop, Queue @@ -8,6 +9,7 @@ - Optimised JavaSript Code - [JS Start](./Modern%20JS/JS_start.md) + - Spec - Expressions vs Statement - Data Type @@ -22,50 +24,63 @@ - array - [JS Function](./Modern%20JS/JS_Function.md) + - 함수의 정의 - 함수 선언 vs 함수 표현식 - 호이스팅 - Function 인자 가변 길이 인수(Arguments 객체) - - [ [Prototype] ] 접근자 __ proto __ 프로퍼티 + - [ [Prototype] ] 접근자 ** proto ** 프로퍼티 - prototype 객체 변경 + - prototype에 프로퍼티 할당과 호출 - 실행 컨텍스트(Excution Context) - [실행 컨텍스트(EC) 프로퍼티] - [실행 컨텍스트 실행(처리) 순서] - [Ex. 실행 가능한 함수 [code]] + - [Ex. 중첩함수 리턴] + - [함수 프로토타입 함수추가 (데코레이터)] - [Js Object](./Modern%20JS/JS_Object.md) + - new 연산자 역할 - - 프로퍼티의 속성 + - new 생성자 keyword로 함수를 호출시 흐름 + - 프로퍼티의 속성 및 디스크립터 설정 메서드 - 유용한 Object 메소드 - class vs function (new) - - this of function(method)? + - who is this of function(method)? - function 생성자 - class 생성자 - - {} 리턴 + - {} 리턴 new vs don't use new keyword - allow function +- [JS class](./Modern%20JS/JS_class.md) + + - class + - 상속 + - super 키워드와 [[HomeObject]] + - instanceof + **[위로](#javascript)** ## ES2015 -- [Scope](./ES2015(ES6)/Scope) -- [String](./ES2015(ES6)/String) -- [Array](./ES2015(ES6)/Array) -- [Object](./ES2015(ES6)/Object) -- [Object2](./ES2015(ES6)/Object2) -- [Destructuring](./ES2015(ES6)/Destructuring) -- [Set&WeakSet](./ES2015(ES6)/Set%26WeakSet) -- [Map&WeakMap](./ES2015(ES6)/Map%WeakMap) -- [Function](./ES2015(ES6)/Function) -- [Module](./ES2015(ES6)/Module) -- [Proxy](./ES2015(ES6)/Proxy) +- [Scope](<./ES2015(ES6)/Scope>) +- [String](<./ES2015(ES6)/String>) +- [Array](<./ES2015(ES6)/Array>) +- [Object](<./ES2015(ES6)/Object>) +- [Object2](<./ES2015(ES6)/Object2>) +- [Destructuring](<./ES2015(ES6)/Destructuring>) +- [Set&WeakSet](<./ES2015(ES6)/Set%26WeakSet>) +- [Map&WeakMap](<./ES2015(ES6)/Map%WeakMap>) +- [Function](<./ES2015(ES6)/Function>) +- [Module](<./ES2015(ES6)/Module>) +- [Proxy](<./ES2015(ES6)/Proxy>) **[위로](#javascript)** ## ES2018 - [promise](https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/JavaScript#promise) -- [promise1](./ES2018/7.%EC%BD%9C%EB%B0%B1%EA%B3%BC%20%ED%94%84%EB%A1%9C%EB%AF%B8%EC%8A%A4(Promise)%EB%B9%84%EA%B5%90.js) +- [promise1](<./ES2018/7.%EC%BD%9C%EB%B0%B1%EA%B3%BC%20%ED%94%84%EB%A1%9C%EB%AF%B8%EC%8A%A4(Promise)%EB%B9%84%EA%B5%90.js>) - [promise2](./ES2018/8.PromiseAPI.js) - [async&await](./ES2018/9.async%26await.js) @@ -74,13 +89,13 @@ ## JavaScropt ToyProject - [ToDoList](https://github.com/yjkwon07/Front-End/tree/master/JS/ToDoList) -- [blog_LikeSelector](https://github.com/yjkwon07/Front-End/tree/master/blog_LikeSelector(ES6)) +- [blog_LikeSelector]() **[위로](#javascript)** -## 참고 사이트 +## Reference - [JavaScropt 33가지 개념](https://velog.io/@jakeseo_me/series/33conceptsofjavascript) - [Poiemaweb](https://poiemaweb.com/) - [Frontend Developers](https://github.com/FEDevelopers) -- [JavaScropt Info](https://ko.javascript.info) \ No newline at end of file +- [JavaScropt Info](https://ko.javascript.info) From 4b43d94a0511d57b32bb83fffdafcdedfb76673f Mon Sep 17 00:00:00 2001 From: yjkwon07 Date: Sun, 3 Jan 2021 15:55:59 +0900 Subject: [PATCH 17/20] JS [U] --- Modern JS/JS_class.md | 5 +++-- README.md | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Modern JS/JS_class.md b/Modern JS/JS_class.md index b8035a9..5cae487 100644 --- a/Modern JS/JS_class.md +++ b/Modern JS/JS_class.md @@ -3,7 +3,7 @@ - [JS_class](#js_class) - [class](#class) - [상속](#상속) - - [super 키워드와 \[[HomeObject]]](#super-키워드와-homeobject) + - [super 키워드와 \[[HomeObject]\]](#super-키워드와-homeobject) - [instanceof](#instanceof) - [Reference](#reference) @@ -73,7 +73,7 @@ class MyClass { - (B.[[Prototype]] = A). 따라서 B에서 원하는 프로퍼티나 메서드를 찾지 못하면 A로 검색이 이어진다. - `class` 키워드에서만 이루어지고 `일반 함수의` 생성자 프로토타입 상속은 일반 함수 prototype의 상속관계만 이루어진다. 함수의 생성자의 \_\_proto\_\_은 Function 프로토타입을 가리킨다. -## super 키워드와 \[[HomeObject]] +## super 키워드와 \[[HomeObject]\] - 클래스이거나 객체 메서드인 함수의 \[[HomeObject]] 프로퍼티는 해당 객체가 저장된다. - `super는` \[[HomeObject]]를 이용해 부모 프로토타입과 메서드를 찾는다. @@ -109,4 +109,5 @@ alert(rabbit instanceof Animal); // true - [정적 메서드와 정적 프로퍼티](https://ko.javascript.info/static-properties-methods) - [private, protected 프로퍼티와 메서드](https://ko.javascript.info/private-protected-properties-methods) - [내장 클래스 확장하기](https://ko.javascript.info/extend-natives) +- ['instanceof'로 클래스 확인하기](https://ko.javascript.info/instanceof) - [믹스인](https://ko.javascript.info/mixins) diff --git a/README.md b/README.md index 51d5266..f35ce67 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ - 함수 선언 vs 함수 표현식 - 호이스팅 - Function 인자 가변 길이 인수(Arguments 객체) - - [ [Prototype] ] 접근자 ** proto ** 프로퍼티 + - [ [Prototype] ] 접근자 \_\_proto\_\_ 프로퍼티 - prototype 객체 변경 - prototype에 프로퍼티 할당과 호출 - 실행 컨텍스트(Excution Context) From a9b3f28c9352c1082a60b64947b51d693e742caf Mon Sep 17 00:00:00 2001 From: yjkwon07 Date: Sat, 9 Jan 2021 19:45:55 +0900 Subject: [PATCH 18/20] =?UTF-8?q?[JS=5Fstart,=20JS=5FFunction]:=20-=20lite?= =?UTF-8?q?eral=20=EC=B6=94=EA=B0=80=20-=20=EB=AC=B8=EC=9E=A5=20=EC=97=B0?= =?UTF-8?q?=EC=82=B0=20=EC=A0=95=EC=9D=98=EC=97=90=20=EB=8C=80=ED=95=9C=20?= =?UTF-8?q?=EB=B6=80=EB=B6=84=20=EC=98=A4=EB=A5=98=EB=9D=BC=EA=B3=A0=20?= =?UTF-8?q?=EC=83=9D=EA=B0=81=ED=95=98=EC=97=AC=20=EC=9D=98=EA=B2=AC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20-=20[[=20=EA=B2=B9=EC=B9=A8=EC=9D=80=20\[\?= =?UTF-8?q?[=20=EC=9D=B4=EC=8A=A4=EC=BC=80=EC=9D=B4=ED=94=84=EB=A1=9C=20?= =?UTF-8?q?=EB=8C=80=EC=B2=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Modern JS/JS_Function.md | 10 ++--- Modern JS/JS_start.md | 80 ++++++++++++++++++++++++++++------------ README.md | 3 +- 3 files changed, 64 insertions(+), 29 deletions(-) diff --git a/Modern JS/JS_Function.md b/Modern JS/JS_Function.md index a0ab8b4..41d1e8b 100644 --- a/Modern JS/JS_Function.md +++ b/Modern JS/JS_Function.md @@ -5,7 +5,7 @@ - [함수 선언 vs 함수 표현식](#함수-선언-vs-함수-표현식) - [호이스팅](#호이스팅) - [Function 인자 가변 길이 인수(Arguments 객체)](#function-인자-가변-길이-인수arguments-객체) - - [[ [Prototype] ] 접근자 \_\_proto\_\_ 프로퍼티](#-prototype--접근자-__proto__-프로퍼티) + - [\[\[Prototype\]\] 접근자 \_\_proto\_\_ 프로퍼티](#prototype-접근자-__proto__-프로퍼티) - [prototype 객체 변경](#prototype-객체-변경) - [prototype에 프로퍼티 할당과 호출](#prototype에-프로퍼티-할당과-호출) - [실행 컨텍스트(Excution Context)](#실행-컨텍스트excution-context) @@ -104,10 +104,10 @@ var hello = (x, y) => x * y; // 화살표 함수 })(2, 2); ``` -## [ [Prototype] ] 접근자 \_\_proto\_\_ 프로퍼티 +## \[\[Prototype\]\] 접근자 \_\_proto\_\_ 프로퍼티 -- `모든 객체는` [ [Prototype] ]이라는 내부 슬롯이 있다. -- [ [Prototype] ] 내부 슬롯은 **Prototype 객체를 가리킨다.** +- `모든 객체는` \[\[Prototype\]\]이라는 내부 슬롯이 있다. +- \[\[Prototype\]\] 내부 슬롯은 **Prototype 객체를 가리킨다.** - 프로토타입 객체란 프로토타입 기반으로 **상속을 구현하기 위해 사용된다.** - 내부 슬롯을 직접 접근을 못하므로 **`__proto__ 접근자 프로퍼티로` 접근을 한다.** - 즉, 프로토타입 객체는 다른 객체에 공유 프로퍼티를 제공하는 객체를 말한다. @@ -213,7 +213,7 @@ let lazy = { - 스코프는 `식별자를 검색하는 매커니즘이다.` - [Variable Object + All parent(VO)] - 리스트 형식으로 현재 실행 컨텍스트의 활성 객체를 선두로 시작하여 상위 컨텍스트의 활성 객체를 가리키며 마지막으로 GO를 가리킨다. - - 함수 프로퍼티인 `[ [Scope] ]`로 참조한다. + - 함수 프로퍼티인 `[[Scope]]`로 참조한다. - this - context object : 함수를 실행시킨 객체, 전역 코드는 window(브라우저)로 부여한다. diff --git a/Modern JS/JS_start.md b/Modern JS/JS_start.md index 8b43913..24660ca 100644 --- a/Modern JS/JS_start.md +++ b/Modern JS/JS_start.md @@ -3,6 +3,7 @@ - [JavaScript Start](#javascript-start) - [1. Spec](#1-spec) - [2. Expressions vs Statement](#2-expressions-vs-statement) + - [2-1. literal](#2-1-literal) - [3. Data type](#3-data-type) - [3-1. typeof 연산자의 반환 값](#3-1-typeof-연산자의-반환-값) - [3-2. 산술 연산](#3-2-산술-연산) @@ -23,8 +24,8 @@ 2. 동적 프로토타입 기반 객체 지향 언어 - - JAVA, C++ 에서, 프로그램 실행 중 클래스를 인스턴스화 하여 나온 객체들은 메서드 혹은 멤버변수를 수정할 수 없지만, - - **JS에서는 프로토 타입 상속으로 인해 변경 할 수 있다.** + - JAVA, C++ 에서, 프로그램 실행 중 클래스를 인스턴스화 하여 나온 객체들은 메서드 혹은 상속을 수정할 수 없지만, + - JS에서는 `Descriptor에` 따라 `동적으로` 프로토타입, 프로퍼티와 메서드를 **추가, 변경, 삭제 모두 할 수 있다.** 3. 동적 타입 언어 @@ -62,6 +63,8 @@ ``` - 문장(Statements) + - 단어가 저절히 조합된 한 문장으로 `의사를` 표현한다. + - 문장 여러 개를 `{}`로 감싼 코드를 복합문 또는 블록문이라고 한다. - 문장은 값이 들어와야 할 곳에 들어갈 수 없다. (in JS) - 함수의 인자로도, 대입 연산의 값으로도, 연산자의 피연산자로도 사용될 수 없다. ```js @@ -77,6 +80,16 @@ 10. variable declaration ``` +### 2-1. literal + +- 프로그램에서 직접 작성할 수 있는 상수 값은 `리터럴이라고` 한다. + - 정수 리터럴 => 123, 0x2a, 0o73, 0b101 + - 부동소수점 리터럴 => 3.14, 6.02e23 + - 문자열 리터럴 => "문자열 리터럴" + - 템플릿 리터럴 => \`${변수} aa\` + - 객체 리터럴 => { propertyName : 1 } + - 함수 리터럴 => var a = function(x) { return x }; + ## 3. Data type - 원시타입 **(Primitive Type)**: 자바스크립트에서 객체가 **(Reference Type)** 아닌 것들이며 값 그 자체로 저장된다. @@ -106,16 +119,16 @@ ### 3-1. typeof 연산자의 반환 값 -| data | ex | return | -| :--------------- | :---------------------------------------- | :---------- | -| 숫자, NaN | 12,NaN, Number(12) | "number" | -| 문자열 | "값", String("값") | "string" | -| 논리값 | true, false | "boolean" | -| 정의되지 않은 값 | undefined | "undefined" | -| null 값 | null | "object" | -| 심벌 | Symbol("값") | "symbol" | -| 함수 외의 객체 | [1,2,3], new String("값"), new Number(12) | "object" | -| 함수 | function(){} | "function" | +- | data | ex | return | + | :--------------- | :---------------------------------------- | :---------- | + | 숫자, NaN | 12,NaN, Number(12) | "number" | + | 문자열 | "값", String("값") | "string" | + | 논리값 | true, false | "boolean" | + | 정의되지 않은 값 | undefined | "undefined" | + | null 값 | null | "object" | + | 심벌 | Symbol("값") | "symbol" | + | 함수 외의 객체 | [1,2,3], new String("값"), new Number(12) | "object" | + | 함수 | function(){} | "function" | - **객체의 이름까지 알고 싶을 때** `toString() 함수를` 이용하여 해당 타입을 확인할 수 있다. ```js @@ -139,6 +152,8 @@ 3; } +1; // 1 + {} + 1 // 1 + 1 + 1{} // 1[object Object] ``` ### 3-3. {} block statements VS object literal @@ -149,7 +164,8 @@ - 문장(statements)은 어느것도 반환하도록 되어있지 않다.(값으로 리턴될 수 없기 때문) - 그래서 자바스크립트는 error을 내보내지 않는 대신에 `+ 연산자의 피연산자를` **숫자나 문자열로 바꾼다.** - 만일 바꿀 수 없는 값이라면 에러를 리턴한다 -- `블록 문장(block statements)`에서 무엇이 반환되던지 그것은 암묵적으로 **0로 강제 형변환되어 피연산자로 사용된다.** + > `블록 문장(block statements)`에서 무엇이 반환되던지 그것은 암묵적으로 **0로 강제 형변환되어 피연산자로 사용된다.** + - 여기서 생각은 문장이 끝났으므로 0이아닌 문장이 끝난걸로 인식하고 그다음 표현식을 실행했다고 생각이 든다. ### 3-4. ==, === 비교 @@ -175,8 +191,8 @@ ## 4. function ```js -function name(인자) {} -name(인수); +function name(parameter(인자)) {} +name(arguments(인수)); ``` - parameter(인자) @@ -189,13 +205,16 @@ name(인수); - 해당하는 인자값을 모두 `undefined`로 정의 됨(lexcal Scope) - 지역 변수 + - 함수내의 변수를 선언 할 수 있으며 안에서 식별자(var, const, let)로 선언한 변수들은 모두 지역 변수로 들어간다. - 함수 안에 함수를 실행할 수 있다.(Nested Function) + - return - return이 없을 경우 undefined를 리턴 한다. - **JS에서는 함수가 객체이다.** + - 함수 선언문으로 함수를 선언하면 내부적으로는 그 함수 이름을 변수 이름으로 한 변수와 **함수 객체가 만들어지고,** 함수 객체의 참조가 저장 된다. ## 5. object(instance) @@ -205,16 +224,16 @@ name(인수); - 생성된 객체는 메모리(RAM-Heap)에 정의되며 해당하는 **주소값(Reference Type)을 저장하는 구조이다.** ```javascript - const 객체 리터럴 = {'propertyName': 10, 'propertyName(Method)': function(){ console.log(this.propertyName)}}; +const 객체 리터럴 = {'propertyName': 10, 'propertyName(Method)': function(){ console.log(this.propertyName)}}; - var 객체 리터럴 = {}; - 객체 리터럴['propertyName'] = 10; - 객체 리터럴['propertyName(Method)'] = function(){ console.log(this.propertyName) }; - delete 객체 리터럴['propertyName']; // property delete -> confiualable일 때만!! +var 객체 리터럴 = {}; +객체 리터럴['propertyName'] = 10; +객체 리터럴['propertyName(Method)'] = function(){ console.log(this.propertyName) }; +delete 객체 리터럴['propertyName']; // property delete -> confiualable일 때만!! - var 객체 생성자 = new 객체를 만들려는 함수명(); - 객체 생성자['propertyName'] = 10; - 객체 생성자['propertyName(Method)'] = function(){ console.log(this.propertyName) }; +var 객체 생성자 = new 객체를 만들려는 함수명(); +객체 생성자['propertyName'] = 10; +객체 생성자['propertyName(Method)'] = function(){ console.log(this.propertyName) }; ``` ### 5-1. 생성자 @@ -240,6 +259,21 @@ name(인수); - ES6에서 `TypedArray에서는` 연속된 공간에 저장된다. - 객체이기 때문에 delete가 가능한 프로퍼티가 있으면 **희소 배열로** 0 부터 시작되지 않은 배열이 만들어 질 수 있다. +```js +var a = []; +a[1] = 2; +a; // [empty, 2] +a.length; // 2 + +a.forEach((data, idx) => console.log(data, idx)); +// 2 1 => 0이 넘겨짐 + +var s = a[Symbol.iterator](); +for (a of s) console.log(a); +// undefined +// 2 +``` + ## Reference - [자바스크립트 개발자라면 알아야 할 33가지 개념 #2 자바스크립트의 원시 타입(Primitive Type) (번역)](https://velog.io/@jakeseo_me/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%9D%BC%EB%A9%B4-%EC%95%8C%EC%95%84%EC%95%BC-%ED%95%A0-33%EA%B0%80%EC%A7%80-%EA%B0%9C%EB%85%90-2-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98-%EC%9B%90%EC%8B%9C-%ED%83%80%EC%9E%85Primitive-Type-%EB%B2%88%EC%97%AD) diff --git a/README.md b/README.md index f35ce67..9c5b2ca 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ - Spec - Expressions vs Statement + - literal - Data Type - typeof 연산자의 반환 값 - 산술 연산 @@ -29,7 +30,7 @@ - 함수 선언 vs 함수 표현식 - 호이스팅 - Function 인자 가변 길이 인수(Arguments 객체) - - [ [Prototype] ] 접근자 \_\_proto\_\_ 프로퍼티 + - \[\[Prototype\]\] 접근자 \_\_proto\_\_ 프로퍼티 - prototype 객체 변경 - prototype에 프로퍼티 할당과 호출 - 실행 컨텍스트(Excution Context) From 0da333c8cca9b6ded55f5c6afc9bdf9bd4b065b2 Mon Sep 17 00:00:00 2001 From: yjkwon07 Date: Sun, 10 Jan 2021 10:37:55 +0900 Subject: [PATCH 19/20] =?UTF-8?q?[JS=5FObject]:=20-=20=EC=98=A4=ED=83=88?= =?UTF-8?q?=EC=9E=90=20=EC=88=98=EC=A0=95=20-=20arrow=20function=EC=9D=98?= =?UTF-8?q?=20this=EB=8A=94=20=EC=96=B4=EB=94=94=EB=A5=BC=20=EA=B0=80?= =?UTF-8?q?=EB=A6=AC=ED=82=A4=EB=8A=94=EC=A7=80=20=EA=B0=9D=EC=B2=B4=20?= =?UTF-8?q?=EB=B0=98=ED=99=98=EC=9C=BC=EB=A1=9C=20=EB=B6=80=ED=84=B0=20?= =?UTF-8?q?=EB=AA=A8=EB=91=90=20=EA=B4=80=EC=B0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Modern JS/JS_Object.md | 130 +++++++++++++++++++++++++++++++++++++++-- README.md | 1 + 2 files changed, 127 insertions(+), 4 deletions(-) diff --git a/Modern JS/JS_Object.md b/Modern JS/JS_Object.md index 0d80871..f895eb0 100644 --- a/Modern JS/JS_Object.md +++ b/Modern JS/JS_Object.md @@ -10,7 +10,8 @@ - [function 생성자](#function-생성자) - [class 생성자](#class-생성자) - [{} 리턴 new vs don't use new keyword](#-리턴-new-vs-dont-use-new-keyword) - - [allow function](#allow-function) + - [arrow function](#arrow-function) + - [this (\*\*)](#this-) - [Reference](#reference) ## new 연산자 역할 @@ -219,12 +220,133 @@ a.who() === a.ref; // false window.name; // "yjkwon07" ``` -## allow function +## arrow function - [화살표 함수](../ES2018/4.화살표%20함수.js) - [MDN](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Functions/%EC%95%A0%EB%A1%9C%EC%9A%B0_%ED%8E%91%EC%85%98) - - 화살표 함수 표현(arrow function expression)은 function 표현에 비해 구문이 짧고 자신의 this, arguments, super 또는 new.target을 바인딩 하지 않는다. - - 화살표 함수는 항상 익명이다. 이 함수 표현은 메소드 함수가 아닌 곳에 가장 적합하다. 그래서 생성자로서 사용할 수 없다. + + - 화살표 함수 표현(arrow function expression)은 function 표현에 비해 구문이 짧고 자신의 `this`, `arguments`, `super`, `prototype`, `yield` 또는 `new.target`을 **바인딩 하지 않는다.** + - 화살표 함수는 **항상 익명이다.** 이 함수 표현은 메소드 함수가 아닌 곳에 가장 적합하다. 그래서 **생성자로서 사용할 수 없다.** + +> 화살표 함수는 **자신의 this가 없습니다.** 대신 화살표 함수를 둘러싸는 `렉시컬 범위(lexical scope)의 this가 사용됩니다.` +> 화살표 함수는 일반 변수 조회 규칙(normal variable lookup rules)을 따릅니다. 때문에 **현재 범위에서 존재하지 않는 this를 찾을 때**, 화살표 함수는 `바로 바깥 범위에서` `this를` 찾는것으로 검색을 끝내게 됩니다. + +## this (\*\*) + +- arrow function은 this를 EC에서 생성된 binding된 this를 갖게 된다. + +```js +class A { + whoMethod() { + console.log("whoMethod", this); + } + whoarrow = () => { + // 멤버 변수 + console.log("whoarrow ", this); + }; +} + +const classA = new A(); +classA.whoMethod(); // classA +classA.whoarrow(); // classA + +const aMethod = classA.whoMethod; +aMethod(); // undefined +const aarrow = classA.whoarrow; +aarrow(); // classA +``` + +```js +function A() {} +A.prototype.whoFunction = function () { + console.log("whoFunction", this); +}; +A.prototype.whoarrow = () => { + console.log("whoarrow ", this); +}; + +const functionA = new A(); +functionA.whoFunction(); // functionA +functionA.whoarrow(); // global + +const aMethod = functionA.whoFunction; +aMethod(); // global +const aarrow = functionA.whoarrow; +aarrow(); // global +``` + +```js +function A() { + function whoFunction() { + console.log("whoFunction", this); + } + const whoarrow = () => { + console.log("whoarrow ", this); + }; + return { + whoFunction, + whoarrow, + }; +} + +const functionA = new A(); +functionA.whoFunction(); // {} +functionA.whoarrow(); // A + +const aFunction = functionA.whoFunction; +aFunction(); // global +const aarrow = functionA.whoarrow; +aarrow(); // A +``` + +```js +function A() { + function whoFunction() { + console.log("whoFunction", this); + } + const whoarrow = () => { + console.log("whoarrow ", this); + }; + return { + whoFunction, + whoarrow, + }; +} + +const functionA = A(); +functionA.whoFunction(); // {} +functionA.whoarrow(); // global + +const aFunction = functionA.whoFunction; +aFunction(); // global +const aarrow = functionA.whoarrow; +aarrow(); // global +``` + +```js +const ObjectA = { + whoFunction: function () { + console.log("whoFunction", this); + }, + whoMethod() { + console.log("whoMethod", this); + }, + whoarrow: () => { + console.log("whoarrow ", this); + }, +}; + +ObjectA.whoFunction(); // ObjectA +ObjectA.whoMethod(); // ObjectA +ObjectA.whoarrow(); // global + +const ObjectAFunction = ObjectA.whoFunction; +ObjectAFunction(); // global +const ObjectAMethod = ObjectA.whoMethod; +ObjectAMethod(); // global +const ObjectAarrow = ObjectA.whoarrow; +ObjectAarrow(); // global +``` ## Reference diff --git a/README.md b/README.md index 9c5b2ca..c59953d 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,7 @@ - function 생성자 - class 생성자 - {} 리턴 new vs don't use new keyword + - this (\*\*) - allow function - [JS class](./Modern%20JS/JS_class.md) From 99042a49a4e71c697b3bbc16336d872f5410481c Mon Sep 17 00:00:00 2001 From: yjkwon07 Date: Sun, 10 Jan 2021 12:58:19 +0900 Subject: [PATCH 20/20] [JS_Promise] --- Modern JS/JS_Promise.md | 232 ++++++++++++++++++++++++++++++++++++++++ README.md | 6 ++ 2 files changed, 238 insertions(+) create mode 100644 Modern JS/JS_Promise.md diff --git a/Modern JS/JS_Promise.md b/Modern JS/JS_Promise.md new file mode 100644 index 0000000..e76ec11 --- /dev/null +++ b/Modern JS/JS_Promise.md @@ -0,0 +1,232 @@ +# JS Promise + +- [JS Promise](#js-promise) + - [Promise 생성](#promise-생성) + - [async await](#async-await) + - [마이크로태스크](#마이크로태스크) + +## Promise 생성 + +```js +const p1 = new Promsie((resolve, reject) => { + // resolve() // p1 객체는 이행됨(fulfilled) + // reject() // p1 객체는 거부됨(rejected) + // exception 발생 => 거부됨 +}); // 대기중(pending) 상태 return Promise +const p2 = Promise.reject(); // return Promise +const p3 = Promise.resolve(); // reeturn Promise +``` + +- new 키워드를 사용해서 프로미스를 생성하는 순간 생성자의 입력함수가 실행 +- 만약 API 용청을 보내는 비동기 코드가 있다면 **프로미스가 생성되는 순간에** 요청을 보낸다. + +```js +const p1 = Promise.resolve(123); // return Promise +Promise.resolve(p1) === p1; // Promise.resolve 함수에 프로미스가 입력되면 그 자신이 반환된다. +``` + +```js +requestData().then(onResolve, onReject); // 프로미스가 처리됨 상태가 되면 onResolve 함수가 호출 되고, 거부됨 상태가 되면 onRejct 함수가 호출 +Promise.resolve(123).then((data) => console.log(data)); +Promise.reject(123).then(null, (error) => console.log(error)); +``` + +- 결과적으로 `then` 메서드는 **항상 프로미스를 반환한다.** +- 프로미스가 `거부됨 상태인` 경우에는 **onReject 함수가 존재하는 then을 만날때까지 이동한다.** + +```js +Promise.reject(data) + .then((then1) => console.log("then1", then1)) + .then((then2) => console.log("then2", then2)) + .then((then3) => console.log("then3", then3), (then4) => console.log("then4", then4)); + .then((then5) => console.log("then5", then5), (then6) => console.log("then6", then6)); +``` + +- 거부된 상태인 프로미스는 처음으로 만나는 onReject 함수를 호출하므로 빈 코드 블록은 생략 된다. +- onReject 함수는 undefined를 결과로 가지면서 이행됨 상태인 프로미스를 생성한다. +- 따라서 then5가 출력된다. +- result: then4 ~ , then5 ~ + +```js +Promise.reject(data).catch((error) => console.log("error", error)); // catch 메서드는 then 메서드의 onReject 함수와 같은 역할을 한다. +Promise.reject(data) + .catch((error) => error); // catch 메서드도 새로운 프로미스를 반환한다. + .then((then) => console.log("then", then)) +``` + +```js +new Promise(function (resolve, reject) { + setTimeout(() => { + throw new Error("에러 발생!"); + }, 1000); +}).catch(alert); +``` + +- `.catch는` 트리거 되지 않는다. +- 암시적 try, .. catch가 함수 코드를 감사고 있으므로 모든 동기적 에러는 암시적 try, ...catch에서 처리 된다. +- 하지만 여기에서 에러는 excutor(실행자, 실행 함수)가 실행되는 동안이 아니라 나중에 발생한다. +- **따라서 프로미스는 에러를 처리할 수 없다.** +- 하지만 `reject로` 호출했을 때는 `catch로` 전달이 된다. + +```js +requestData() + .then((data) => {}) + .catch((error) => {}) + .finally(() => {}); +``` + +- finally는 처리됨 상태인 프로미스의 데이터를 건드리지 않고 추가 작업을 할 때 유용하게 쓰인다. +- requestData 함수의 반환값은 finally 메서드 호출 이전의 프로미스다. + +```js +Promise.all([requestData(), requestData2()]).then(([data1, data2]) => { + console.log("data1", data1); + console.log("data2", data2); +}); // return Promise +``` + +- `Promise.all` 함수가 반화하는 프로미스는 입력된 **모든 프로미스가 처리됨 상태가** 되어야 처림됨 상태가 된다. +- 하나라도 거부됨 상태가 된다면 즉시, Promise.all 함수가 반환하는 프로미스도 거부됨 상태가 된다. + > fetch를 사용해 호출 여러 개를 만들면, 그중 하나가 실패하더라도 호출은 계속 일어납니다. + > 렇더라도 Promise.all은 다른 호출을 더는 신경 쓰지 않습니다. 프라미스가 처리되긴 하겠지만 그 결과는 무시됩니다. + +```js +Promise.race([ + requestData(), + new Promise((_, reject) => setTimeout(reject, 3000)), +]) + .then((data) => console.log(data)) + .catch((error) => console.log(error)); +``` + +- `Promise.race는` 여러 개의 프로미스 중에서 가장 빨리 처리된 프로미스를 반환하는 함수이다. +- requestData 함수가 3초 안에 데이터를 받으면 then 메서드가 호출, 그렇지 않으면 catch 메서드 호출 + +```js +function requestData(params) { + const p = Promise.resolve(10); // 생성되자 마자 실행 => new reslovePromise(10) + p.then(() => 20); // then 메서드는 기존 객체를 수정하지 않고, 새로운 프로미스를 반환한다. => new Thenalbe(()=> 20) + return p; +} +requestData().then((v) => { + console.log("v", v); // 10 +}); +``` + +- 프로미스는 `불변 객체다`. + +```js +function requestData() { + return Promise.resolve(10).then((v) => { + return 20; + }); +} +requestData().then((v) => { + console.log("v", v); // 20 +}); +``` + +## async await + +```js +async function getData() { + return 123; +} // return Promise +getData().then((data) => console.log("data", data)); // 123 +``` + +- `async는` Promise 객체로 변환하여 리턴해주는 키워드이다. + +```js +async function getData() { + return Promise.resolve(123); // 프로미스의 then 메서드와 마찬가지로 async await 함수 내부에서 반환하는 값이 프로미스라면 그 객체를 그대로 반환 +} +getData().then((data) => console.log(data)); // 123 +``` + +```js +function requestData(value) { + return new Promise((resolve) => + setTimeout(() => { + console.log("requestData", value); + resolve(value); + }, 100) + ); +} +async function getData() { + const data1 = await requestData(10); // 프로미스가 처리됨 상태가 될 때까지 다음 코드를 실행하지 않는다. => .then 역할 + const data2 = await requestData(20); + console.log("data1", data1); + console.log("data2", data2); + return [data1, data2]; +} +getData(); // Promise +``` + +```js +async function getData() { + const p1 = asyncFunc1(); + const p2 = asyncFunc2(); + // 두개의 프로미스가 생성되고 각자의 비동기 코드가 실행된다. + const data1 = await p1; // await으로 프로미스가 생성된 후 기다리기 때문에 두 개의 비동기 함수가 병렬로 처리된다. + const data2 = await p2; +} +async function getData() { + const [data1, data2] = await Promise.all([asyncFunc1(), asyncFunc2()]); +} +``` + +```js +class TEX { + then(resolve, reject) { + setTimeout(() => resolve(1234), 10000); + } +} +async function asyncFunc() { + const result = await new TEX(); + console.log("result", result); // 1234 +} +``` + +- `Thenable은` 프로미스처럼 동작하는 객체다. +- async await은 ES6의 프로미스가 아니더라도 then 메서드를 가진 객체를 **프로미스처럼 취급한다.** +- 프로미스가 아니더라도 then 메서드르 가진 객체를 Thenable이라고 부른다. + +## 마이크로태스크 + +- 프로미스 핸들러 `.then/catch/finally는` 항상 비동기적으로 실행된다. + > 프라미스가 즉시 이행되더라도 `.then/catch/finally` 아래에 있는 코드는 이 핸들러들이 실행되기 전에 실행됩니다. + +```js +let promise = Promise.resolve(); + +promise.then(() => console.log("프로미스 성공!")); + +console.log("코드 종료"); // 이 로그가 가장 먼저 나타난다. +``` + +> 요약하자면, 어떤 프라미스가 준비되었을 때 이 프라미스의 `.then/catch/finally` 핸들러가 마이크로태스크큐에 들어간다고 생각하시면 됩니다. +> +> 이때 핸들러들은 여전히 실행되지 않습니다. `현재 코드에서 자유로운 상태가 되었을 때에서야` 자바스크립트 엔진은 큐에서 작업을 꺼내 실행합니다. + +> 비동기 작업을 처리하려면 적절한 관리가 필요합니다. +> +> 이를 위해 ECMA에선 PromiseJobs라는 내부 큐(internal queue)를 명시합니다. +> +> V8 엔진에선 이를 '마이크로태스크 큐(microtask queue)'라고 부르기 때문에 이 용어가 좀 더 선호됩니다. + +- JS_Engine 참고 + +```js +let promise = Promise.reject(new Error("프로미스 실패!")); +setTimeout(() => promise.catch((err) => alert("잡았다!")), 1000); + +// Error: 프로미스 실패! +window.addEventListener("unhandledrejection", (event) => alert(event.reason)); +``` + +- `unhandledrejection은` 마이크로태스크 큐에 있는 작업 모두가 완료되었을 때 생성된다. + - `.catch`같이 `에러 헨들러가` 없다면 마이크로태스크 큐는 계속해서 에러 핸들러를 처리하고 요청을 하기 때문에 뒤에있는 테스크가 쌓이게 된다. + - 그것을 맞기위해 `unhandlerrejection을` `트리거` 하여 에러를 처리하도록 요청한다. +- 위 예시를 실행하면 setTimeout을 사용해 추가한 `.catch` 역시 트리거 된다. + - 다만 `.catch는` `unhandledrejection이` 발생한 이후에 트리거 되므로 `프로미스 실패!가 출력된다.` diff --git a/README.md b/README.md index c59953d..d086207 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,12 @@ - super 키워드와 [[HomeObject]] - instanceof +- [JS Promise](./Modern%20JS/../Modern%20JS/JS_Promise.md) + + - Promise 생성 + - async await + - 마이크로태스크 + **[위로](#javascript)** ## ES2015