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 - - - - -
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/JS_Engine.md b/Modern JS/JS_Engine.md new file mode 100644 index 0000000..53121e3 --- /dev/null +++ b/Modern JS/JS_Engine.md @@ -0,0 +1,112 @@ +# 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 (2순위 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) +- [자바스크립트 개발자라면 알아야 할 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 diff --git a/Modern JS/JS_Function.md b/Modern JS/JS_Function.md new file mode 100644 index 0000000..41d1e8b --- /dev/null +++ b/Modern JS/JS_Function.md @@ -0,0 +1,329 @@ +# JS Function + +- [JS Function](#js-function) + - [함수의 정의](#함수의-정의) + - [함수 선언 vs 함수 표현식](#함수-선언-vs-함수-표현식) + - [호이스팅](#호이스팅) + - [Function 인자 가변 길이 인수(Arguments 객체)](#function-인자-가변-길이-인수arguments-객체) + - [\[\[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; +} // 함수의 정의(함수 선언) + +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 프로퍼티가 없다.) + + - 만약 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이 가리키는 참조값이 달라진다. + +```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 생성자 함수가 된다. + +## 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 코드 + - eval 코드는 lexical 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 결정 + +### Ex. 실행 가능한 함수 [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) + +### Ex. 중첩함수 리턴 + +```js +function makeCounter() { + let count = 0; + + return function () { + return count++; + }; +} + +let counter = makeCounter(); +``` + +> 모든 함수는 함수가 생성된 곳의 렉시컬 환경을 기억한다는 점입니다. +> 함수는 [[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 new file mode 100644 index 0000000..f895eb0 --- /dev/null +++ b/Modern JS/JS_Object.md @@ -0,0 +1,354 @@ +# JS Object + +- [JS Object](#js-object) + - [new 연산자 역할](#new-연산자-역할) + - [new 생성자 keyword로 함수를 호출시 흐름](#new-생성자-keyword로-함수를-호출시-흐름) + - [프로퍼티의 속성 및 디스크립터 설정 메서드](#프로퍼티의-속성-및-디스크립터-설정-메서드) + - [유용한 Object 메소드](#유용한-object-메소드) + - [class vs function (new)](#class-vs-function-new) + - [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) + - [arrow function](#arrow-function) + - [this (\*\*)](#this-) + - [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); +``` + +### new 생성자 keyword로 함수를 호출시 흐름 + +```js +var newObj = {}; // 새로운 빈 객체 주소 참조 +newObj.__proto__ = Cicle.prototype; // prototype 공간 주소 참조 +Circle.apply(newObj, arguments); // this bind하여 arguments 정보들로 함수 실행 this bind로 인해, 생성자 필드 정보 부여가 됨 +return new Obj(); // 만들어진 객체 리턴 +``` + +## 프로퍼티의 속성 및 디스크립터 설정 메서드 + +``` + writable (쓰기 가능) + enumerable (나열 가능) + configurable (재정의) +``` + +- 데이터 프로퍼티 + + - value + - writable + - enumerable + - configurable + +- 접근자 프로퍼티 + - `get` + - `set` + - enumerable + - configurable + +> configurable: false는 플래그 값 변경이나 프로퍼티 삭제를 막기 위해 만들어졌지, 프로퍼티 값 변경을 막기 위해 만들어진 게 아닙니다. + +```js +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.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 +- [javascript info](https://ko.javascript.info/class) + + - **`클래스 필드`** + + ```js + class MyClass { + prop = value; // 프로퍼티 + + constructor(...) { // 생성자 메서드 + // ... + } + + 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 생성자 + +```js +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"} +``` + +- method get method of refernceType + +```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 + - 객체 메서드를 여기저기 전달해 전혀 다른 컨텍스트에서 호출하게 되면 this는 원래 객체를 참조하지 않습니다. + +```js +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 { + ref: this, + what, + who, + }; +} +``` + +- [new 연산자 역할 참고](#new-연산자-역할) +- return newObj 하기전 apply에서 이미 `{} 리터럴` 리턴 됨 +- 객체를 return 한다면, this 대신 객체가 반환 +- 원시형을 return 한다면, return문이 무시 + +```js +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(); // { ref, what, who } => a 객체의 this를 리턴 +a.ref; // 일반호출 하였기 때문에 this는 global 값이 리턴 +a.who() === a.ref; // false +window.name; // "yjkwon07" +``` + +## 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`, `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 + +- [프로퍼티 플래그와 설명자](https://ko.javascript.info/property-descriptors) +- [프로퍼티 getter와 setter](https://ko.javascript.info/property-accessors) 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/Modern JS/JS_class.md b/Modern JS/JS_class.md new file mode 100644 index 0000000..5cae487 --- /dev/null +++ b/Modern JS/JS_class.md @@ -0,0 +1,113 @@ +# 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) +- ['instanceof'로 클래스 확인하기](https://ko.javascript.info/instanceof) +- [믹스인](https://ko.javascript.info/mixins) diff --git a/Modern JS/JS_start.md b/Modern JS/JS_start.md new file mode 100644 index 0000000..24660ca --- /dev/null +++ b/Modern JS/JS_start.md @@ -0,0 +1,285 @@ +# JavaScript Start + +- [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-산술-연산) + - [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-생성자) + - [5-2. this](#5-2-this) + - [6. array](#6-array) + - [Reference](#reference) + +## 1. Spec + +1. 인터프리터 언어 + + - **JIT 컴파일러가** 내장되어 실행속도가 빨라짐 + +2. 동적 프로토타입 기반 객체 지향 언어 + + - JAVA, C++ 에서, 프로그램 실행 중 클래스를 인스턴스화 하여 나온 객체들은 메서드 혹은 상속을 수정할 수 없지만, + - JS에서는 `Descriptor에` 따라 `동적으로` 프로토타입, 프로퍼티와 메서드를 **추가, 변경, 삭제 모두 할 수 있다.** + +3. 동적 타입 언어 + + - **특정 변수 타입이 없다.** + - const, let, var + +4. 일급 객체 함수 + + - **함수(fucntion)도 객체로 지정(Funciton)** + - 즉, 값으로 평가한다. + +5. 클로저 지원 + - 내장 함수(Nested Function)를 지원 하여 **하나의 인스턴스화, 은닉이 가능** + +## 2. Expressions vs Statement + +- 표현식(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 + ``` + +### 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)** 아닌 것들이며 값 그 자체로 저장된다. + - `Primitive types are immutable` + - 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() 사용 해야한다.) +- Boolean +- Null + - 산술 연산자에서는 '0'으로 평가 +- Undefined + - 산술 연산자에서는 'NaN'으로 평가 +- Number (IEEE754로 규정된 64-bit 부동소수점, 자바스크립트에는 정수 타입은 존재하지 않다.) + - 부호(1 bit), 지수(11 bit), 가수(52 bit) +- 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" | + +- **객체의 이름까지 알고 싶을 때** `toString() 함수를` 이용하여 해당 타입을 확인할 수 있다. + ```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 + {} + 1 // 1 + 1 + 1{} // 1[object Object] + ``` + +### 3-3. {} block statements VS object literal + +- 블록 문장을 값이나 표현식으로 사용할 수는 없다. +- console.log는 문장(statement)을 인자로 받아들일 수 없다. +- 하지만, 오브젝트 리터럴은 인자로 받아들일 수 있다. +- 문장(statements)은 어느것도 반환하도록 되어있지 않다.(값으로 리턴될 수 없기 때문) +- 그래서 자바스크립트는 error을 내보내지 않는 대신에 `+ 연산자의 피연산자를` **숫자나 문자열로 바꾼다.** + - 만일 바꿀 수 없는 값이라면 에러를 리턴한다 + > `블록 문장(block statements)`에서 무엇이 반환되던지 그것은 암묵적으로 **0로 강제 형변환되어 피연산자로 사용된다.** + - 여기서 생각은 문장이 끝났으므로 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) + ``` + +- '===' 비교는 `타입이일치 하진 않으면` **return false**, 타입이 `일치할 때` **값을 비교를 한다.** (Best Code) + +## 4. function + +```js +function name(parameter(인자)) {} +name(arguments(인수)); +``` + +- parameter(인자) + + - 유효범위는 지역함수 이며, 프로그램 실행하면서 필요한 변수 값 + +- argument(인수) + + - 함수에 인자값이 있지만, 인수를 안 보내도 함수는 실행이 된다. + - 해당하는 인자값을 모두 `undefined`로 정의 됨(lexcal Scope) + +- 지역 변수 + + - 함수내의 변수를 선언 할 수 있으며 안에서 식별자(var, const, let)로 선언한 변수들은 모두 지역 변수로 들어간다. + - 함수 안에 함수를 실행할 수 있다.(Nested Function) + +- return + + - return이 없을 경우 undefined를 리턴 한다. + +- **JS에서는 함수가 객체이다.** + + - 함수 선언문으로 함수를 선언하면 내부적으로는 그 함수 이름을 변수 이름으로 한 변수와 **함수 객체가 만들어지고,** 함수 객체의 참조가 저장 된다. + +## 5. 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) }; +``` + +### 5-1. 생성자 + +- 앞에 예제 처럼 `new 연산자로` 객체를 생성시킨 함수를 생성자라고 한다. +- 인스턴스는 **실체라는** 뜻이 있다. +- 객체 지향 언어에서(ex. JAVA, C++) 인스턴스는 `클래스(설계도)로` 생성한 실체를 뜻한다. + - 하지만, JS에서는 **클래스가 없다.** + - 또한, 함수 자체도 **함수객체로** 만든 해당 **함수 인스턴스 이다.** + - 그래서, 생성자로 생성한 객체는 엄밀히 말해 인스턴스가 아니다. + - 하지만, 생성자가 클래스처럼 객체를 생성하는 역할을 담당하고 있어 **생성자로 생성한 객체도 인스턴스라고 부르는것이 관례이다.** + +### 5-2. this + +- 함수가 속해있는 객체를 가리키는 변수이다. +- 함수를 어떻게 생성하냐에 따라서 달라질 수 있지만, 맥락에서는 function을 가지고있는 **객체 생성자(value Name), 객체 리터럴(value Name)** 를 말한다. + +## 6. array + +- 앞서 말한(Data type)에서도 원시 타입 이외는 모두 객체 참조이므로 array도 Array객체로 만들어진 **객체** 이다. +- 즉, 배열 넘버링(index)이 key값으로 저장된것이다. + - 이 말은 즉, 여러 프로그래밍 언어에서 배열 요소는 **메모리에 연속된 공간에 저장 되지만, JS는 객체 그렇지 않다.** + - 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) +- [자바스크립트 개발자라면 알아야 할 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) +- [자바스크립트 개발자라면 알아야 할 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) +- [네이티브 프로토타입](https://ko.javascript.info/native-prototypes) diff --git a/README.md b/README.md index 6e4b346..d086207 100644 --- a/README.md +++ b/README.md @@ -1,124 +1,109 @@ # 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)** +- [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 + - Expressions vs Statement + - literal + - Data Type + - typeof 연산자의 반환 값 + - 산술 연산 + - {} block statements VS object literal + - ==, === 비교 + - function + - object(instance) + - 생성자 + - this + - array + +- [JS Function](./Modern%20JS/JS_Function.md) + + - 함수의 정의 + - 함수 선언 vs 함수 표현식 + - 호이스팅 + - Function 인자 가변 길이 인수(Arguments 객체) + - \[\[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) + - who is this of function(method)? + - function 생성자 + - class 생성자 + - {} 리턴 new vs don't use new keyword + - this (\*\*) + - allow function + +- [JS class](./Modern%20JS/JS_class.md) + + - class + - 상속 + - super 키워드와 [[HomeObject]] + - instanceof + +- [JS Promise](./Modern%20JS/../Modern%20JS/JS_Promise.md) + + - Promise 생성 + - async await + - 마이크로태스크 + +**[위로](#javascript)** ## ES2015 -**ES2015(ES6) 시작하기** - -ES6 === ES2015 - -(ES2016, ES2017....) - -ES2015 - -개선된 JavaScript문법 - -ES6 browser compatibility의 훌륭한 지원 -- [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)) +- [blog_LikeSelector]() + +**[위로](#javascript)** -**[위로](https://github.com/yjkwon07/Front-End#JavaScript)** \ No newline at end of file +## 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) diff --git a/blog_LikeSelector(ES6)/package-lock.json b/blog_LikeSelector(ES6)/package-lock.json index 3485be6..15a3320 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": { @@ -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", @@ -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", @@ -3502,12 +3496,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, @@ -4139,14 +4127,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": { @@ -4227,9 +4223,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": { @@ -4564,9 +4560,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", @@ -7019,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": { diff --git a/blog_LikeSelector(ES6)/yarn.lock b/blog_LikeSelector(ES6)/yarn.lock index 45feadf..ad3a269 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,10 +978,18 @@ 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" - 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" @@ -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== @@ -1815,16 +3180,24 @@ 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" 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" diff --git a/image/EC.png b/image/EC.png new file mode 100644 index 0000000..fa364ff Binary files /dev/null and b/image/EC.png differ diff --git a/image/EC_stack.png b/image/EC_stack.png new file mode 100644 index 0000000..590b270 Binary files /dev/null and b/image/EC_stack.png differ diff --git a/image/function_object_prototype.png b/image/function_object_prototype.png new file mode 100644 index 0000000..3deb49e Binary files /dev/null and b/image/function_object_prototype.png differ diff --git a/image/function_object_prototype_backup.png b/image/function_object_prototype_backup.png new file mode 100644 index 0000000..ed0dbb4 Binary files /dev/null and b/image/function_object_prototype_backup.png differ diff --git a/image/jsRuntime.png b/image/jsRuntime.png new file mode 100644 index 0000000..e6ba464 Binary files /dev/null and b/image/jsRuntime.png differ