diff --git a/01-Fundamentals-Part-1/final/index.html b/01-Fundamentals-Part-1/final/index.html deleted file mode 100755 index 96fbc80614..0000000000 --- a/01-Fundamentals-Part-1/final/index.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - JavaScript Fundamentals โ€“ Part 1 - - - -

JavaScript Fundamentals โ€“ Part 1

- - - - diff --git a/01-Fundamentals-Part-1/final/script.js b/01-Fundamentals-Part-1/final/script.js deleted file mode 100644 index c966226c88..0000000000 --- a/01-Fundamentals-Part-1/final/script.js +++ /dev/null @@ -1,468 +0,0 @@ -/* -//////////////////////////////////// -// Linking a JavaScript File -let js = "amazing"; -console.log(40 + 8 + 23 - 10); - -//////////////////////////////////// -// Values and Variables -console.log("Jonas"); -console.log(23); - -let firstName = "Matilda"; - -console.log(firstName); -console.log(firstName); -console.log(firstName); - -// Variable name conventions -let jonas_matilda = "JM"; -let $function = 27; - -let person = "jonas"; -let PI = 3.1415; - -let myFirstJob = "Coder"; -let myCurrentJob = "Teacher"; - -let job1 = "programmer"; -let job2 = "teacher"; - -console.log(myFirstJob); - -//////////////////////////////////// -// Data Types -let javascriptIsFun = true; -console.log(javascriptIsFun); - -// console.log(typeof true); -console.log(typeof javascriptIsFun); -// console.log(typeof 23); -// console.log(typeof 'Jonas'); - -javascriptIsFun = 'YES!'; -console.log(typeof javascriptIsFun); - -let year; -console.log(year); -console.log(typeof year); - -year = 1991; -console.log(typeof year); - -console.log(typeof null); - -//////////////////////////////////// -// let, const and var -let age = 30; -age = 31; - -const birthYear = 1991; -// birthYear = 1990; -// const job; - -var job = 'programmer'; -job = 'teacher' - -lastName = 'Schmedtmann'; -console.log(lastName); - -//////////////////////////////////// -// Basic Operators -// Math operators -const now = 2037; -const ageJonas = now - 1991; -const ageSarah = now - 2018; -console.log(ageJonas, ageSarah); - -console.log(ageJonas * 2, ageJonas / 10, 2 ** 3); -// 2 ** 3 means 2 to the power of 3 = 2 * 2 * 2 - -const firstName = 'Jonas'; -const lastName = 'Schmedtmann'; -console.log(firstName + ' ' + lastName); - -// Assignment operators -let x = 10 + 5; // 15 -x += 10; // x = x + 10 = 25 -x *= 4; // x = x * 4 = 100 -x++; // x = x + 1 -x--; -x--; -console.log(x); - -// Comparison operators -console.log(ageJonas > ageSarah); // >, <, >=, <= -console.log(ageSarah >= 18); - -const isFullAge = ageSarah >= 18; - -console.log(now - 1991 > now - 2018); - -//////////////////////////////////// -// Operator Precedence -const now = 2037; -const ageJonas = now - 1991; -const ageSarah = now - 2018; - -console.log(now - 1991 > now - 2018); - -let x, y; -x = y = 25 - 10 - 5; // x = y = 10, x = 10 -console.log(x, y); - -const averageAge = (ageJonas + ageSarah) / 2; -console.log(ageJonas, ageSarah, averageAge); -*/ - -//////////////////////////////////// -// Coding Challenge #1 - -/* -Mark and John are trying to compare their BMI (Body Mass Index), which is calculated using the formula: BMI = mass / height ** 2 = mass / (height * height). (mass in kg and height in meter). - -1. Store Mark's and John's mass and height in variables -2. Calculate both their BMIs using the formula (you can even implement both versions) -3. Create a boolean variable 'markHigherBMI' containing information about whether Mark has a higher BMI than John. - -TEST DATA 1: Marks weights 78 kg and is 1.69 m tall. John weights 92 kg and is 1.95 m tall. -TEST DATA 2: Marks weights 95 kg and is 1.88 m tall. John weights 85 kg and is 1.76 m tall. - -GOOD LUCK ๐Ÿ˜€ -*/ - -// const massMark = 78; -// const heightMark = 1.69; -// const massJohn = 92; -// const heightJohn = 1.95; - -/* -const massMark = 95; -const heightMark = 1.88; -const massJohn = 85; -const heightJohn = 1.76; - -const BMIMark = massMark / heightMark ** 2; -const BMIJohn = massJohn / (heightJohn * heightJohn); -const markHigherBMI = BMIMark > BMIJohn; - -console.log(BMIMark, BMIJohn, markHigherBMI); - -//////////////////////////////////// -// Strings and Template Literals -const firstName = 'Jonas'; -const job = 'teacher'; -const birthYear = 1991; -const year = 2037; - -const jonas = "I'm " + firstName + ', a ' + (year - birthYear) + ' year old ' + job + '!'; -console.log(jonas); - -const jonasNew = `I'm ${firstName}, a ${year - birthYear} year old ${job}!`; -console.log(jonasNew); - -console.log(`Just a regular string...`); - -console.log('String with \n\ -multiple \n\ -lines'); - -console.log(`String -multiple -lines`); - - -//////////////////////////////////// -// Taking Decisions: if / else Statements -const age = 15; - -if (age >= 18) { - console.log('Sarah can start driving license ๐Ÿš—'); -} else { - const yearsLeft = 18 - age; - console.log(`Sarah is too young. Wait another ${yearsLeft} years :)`); -} - -const birthYear = 2012; - -let century; -if (birthYear <= 2000) { - century = 20; -} else { - century = 21; -} -console.log(century); -*/ - -//////////////////////////////////// -// Coding Challenge #2 - -/* -Use the BMI example from Challenge #1, and the code you already wrote, and improve it: - -1. Print a nice output to the console, saying who has the higher BMI. The message can be either "Mark's BMI is higher than John's!" or "John's BMI is higher than Mark's!" -2. Use a template literal to include the BMI values in the outputs. Example: "Mark's BMI (28.3) is higher than John's (23.9)!" - -HINT: Use an if/else statement ๐Ÿ˜‰ - -GOOD LUCK ๐Ÿ˜€ -*/ - -/* -const massMark = 78; -const heightMark = 1.69; -const massJohn = 92; -const heightJohn = 1.95; - -// const massMark = 95; -// const heightMark = 1.88; -// const massJohn = 85; -// const heightJohn = 1.76; - -const BMIMark = massMark / heightMark ** 2; -const BMIJohn = massJohn / (heightJohn * heightJohn); -console.log(BMIMark, BMIJohn); - -if (BMIMark > BMIJohn) { - console.log(`Mark's BMI (${BMIMark}) is higher than John's (${BMIJohn})!`) -} else { - console.log(`John's BMI (${BMIJohn}) is higher than Marks's (${BMIMark})!`) -} - -//////////////////////////////////// -// Type Conversion and Coercion - -// type conversion -const inputYear = '1991'; -console.log(Number(inputYear), inputYear); -console.log(Number(inputYear) + 18); - -console.log(Number('Jonas')); -console.log(typeof NaN); - -console.log(String(23), 23); - -// type coercion -console.log('I am ' + 23 + ' years old'); -console.log('23' - '10' - 3); -console.log('23' / '2'); - -let n = '1' + 1; // '11' -n = n - 1; -console.log(n); - -//////////////////////////////////// -// Truthy and Falsy Values - -// 5 falsy values: 0, '', undefined, null, NaN -console.log(Boolean(0)); -console.log(Boolean(undefined)); -console.log(Boolean('Jonas')); -console.log(Boolean({})); -console.log(Boolean('')); - -const money = 100; -if (money) { - console.log("Don't spend it all ;)"); -} else { - console.log('You should get a job!'); -} - -let height = 0; -if (height) { - console.log('YAY! Height is defined'); -} else { - console.log('Height is UNDEFINED'); -} - -//////////////////////////////////// -// Equality Operators: == vs. === -const age = '18'; -if (age === 18) console.log('You just became an adult :D (strict)'); - -if (age == 18) console.log('You just became an adult :D (loose)'); - -const favourite = Number(prompt("What's your favourite number?")); -console.log(favourite); -console.log(typeof favourite); - -if (favourite === 23) { // 22 === 23 -> FALSE - console.log('Cool! 23 is an amzaing number!') -} else if (favourite === 7) { - console.log('7 is also a cool number') -} else if (favourite === 9) { - console.log('9 is also a cool number') -} else { - console.log('Number is not 23 or 7 or 9') -} - -if (favourite !== 23) console.log('Why not 23?'); - -//////////////////////////////////// -// Logical Operators -const hasDriversLicense = true; // A -const hasGoodVision = true; // B - -console.log(hasDriversLicense && hasGoodVision); -console.log(hasDriversLicense || hasGoodVision); -console.log(!hasDriversLicense); - -// if (hasDriversLicense && hasGoodVision) { -// console.log('Sarah is able to drive!'); -// } else { -// console.log('Someone else should drive...'); -// } - -const isTired = false; // C -console.log(hasDriversLicense && hasGoodVision && isTired); - -if (hasDriversLicense && hasGoodVision && !isTired) { - console.log('Sarah is able to drive!'); -} else { - console.log('Someone else should drive...'); -} -*/ - -//////////////////////////////////// -// Coding Challenge #3 - -/* -There are two gymnastics teams, Dolphins and Koalas. They compete against each other 3 times. The winner with the highest average score wins the a trophy! - -1. Calculate the average score for each team, using the test data below -2. Compare the team's average scores to determine the winner of the competition, and print it to the console. Don't forget that there can be a draw, so test for that as well (draw means they have the same average score). - -3. BONUS 1: Include a requirement for a minimum score of 100. With this rule, a team only wins if it has a higher score than the other team, and the same time a score of at least 100 points. HINT: Use a logical operator to test for minimum score, as well as multiple else-if blocks ๐Ÿ˜‰ -4. BONUS 2: Minimum score also applies to a draw! So a draw only happens when both teams have the same score and both have a score greater or equal 100 points. Otherwise, no team wins the trophy. - -TEST DATA: Dolphins score 96, 108 and 89. Koalas score 88, 91 and 110 -TEST DATA BONUS 1: Dolphins score 97, 112 and 101. Koalas score 109, 95 and 123 -TEST DATA BONUS 2: Dolphins score 97, 112 and 101. Koalas score 109, 95 and 106 - -GOOD LUCK ๐Ÿ˜€ -*/ - -/* -// const scoreDolphins = (96 + 108 + 89) / 3; -// const scoreKoalas = (88 + 91 + 110) / 3; -// console.log(scoreDolphins, scoreKoalas); - -// if (scoreDolphins > scoreKoalas) { -// console.log('Dolphins win the trophy ๐Ÿ†'); -// } else if (scoreKoalas > scoreDolphins) { -// console.log('Koalas win the trophy ๐Ÿ†'); -// } else if (scoreDolphins === scoreKoalas) { -// console.log('Both win the trophy!'); -// } - -// BONUS 1 -const scoreDolphins = (97 + 112 + 80) / 3; -const scoreKoalas = (109 + 95 + 50) / 3; -console.log(scoreDolphins, scoreKoalas); - -if (scoreDolphins > scoreKoalas && scoreDolphins >= 100) { - console.log('Dolphins win the trophy ๐Ÿ†'); -} else if (scoreKoalas > scoreDolphins && scoreKoalas >= 100) { - console.log('Koalas win the trophy ๐Ÿ†'); -} else if (scoreDolphins === scoreKoalas && scoreDolphins >= 100 && scoreKoalas >= 100) { - console.log('Both win the trophy!'); -} else { - console.log('No one wins the trophy ๐Ÿ˜ญ'); -} - -//////////////////////////////////// -// The switch Statement -const day = 'friday'; - -switch (day) { - case 'monday': // day === 'monday' - console.log('Plan course structure'); - console.log('Go to coding meetup'); - break; - case 'tuesday': - console.log('Prepare theory videos'); - break; - case 'wednesday': - case 'thursday': - console.log('Write code examples'); - break; - case 'friday': - console.log('Record videos'); - break; - case 'saturday': - case 'sunday': - console.log('Enjoy the weekend :D'); - break; - default: - console.log('Not a valid day!'); -} - -if (day === 'monday') { - console.log('Plan course structure'); - console.log('Go to coding meetup'); -} else if (day === 'tuesday') { - console.log('Prepare theory videos'); -} else if (day === 'wednesday' || day === 'thursday') { - console.log('Write code examples'); -} else if (day === 'friday') { - console.log('Record videos'); -} else if (day === 'saturday' || day === 'sunday') { - console.log('Enjoy the weekend :D'); -} else { - console.log('Not a valid day!'); -} - -//////////////////////////////////// -// Statements and Expressions -3 + 4 -1991 -true && false && !false - -if (23 > 10) { - const str = '23 is bigger'; -} - -const me = 'Jonas'; -console.log(`I'm ${2037 - 1991} years old ${me}`); - -//////////////////////////////////// -// The Conditional (Ternary) Operator -const age = 23; -// age >= 18 ? console.log('I like to drink wine ๐Ÿท') : console.log('I like to drink water ๐Ÿ’ง'); - -const drink = age >= 18 ? 'wine ๐Ÿท' : 'water ๐Ÿ’ง'; -console.log(drink); - -let drink2; -if (age >= 18) { - drink2 = 'wine ๐Ÿท'; -} else { - drink2 = 'water ๐Ÿ’ง'; -} -console.log(drink2); - -console.log(`I like to drink ${age >= 18 ? 'wine ๐Ÿท' : 'water ๐Ÿ’ง'}`); -*/ - -//////////////////////////////////// -// Coding Challenge #4 - -/* -Steven wants to build a very simple tip calculator for whenever he goes eating in a resturant. In his country, it's usual to tip 15% if the bill value is between 50 and 300. If the value is different, the tip is 20%. - -1. Your task is to caluclate the tip, depending on the bill value. Create a variable called 'tip' for this. It's not allowed to use an if/else statement ๐Ÿ˜… (If it's easier for you, you can start with an if/else statement, and then try to convert it to a ternary operator!) -2. Print a string to the console containing the bill value, the tip, and the final value (bill + tip). Example: 'The bill was 275, the tip was 41.25, and the total value 316.25' - -TEST DATA: Test for bill values 275, 40 and 430 - -HINT: To calculate 20% of a value, simply multiply it by 20/100 = 0.2 -HINT: Value X is between 50 and 300, if it's >= 50 && <= 300 ๐Ÿ˜‰ - -GOOD LUCK ๐Ÿ˜€ -*/ - -/* -const bill = 430; -const tip = bill <= 300 && bill >= 50 ? bill * 0.15 : bill * 0.2; -console.log(`The bill was ${bill}, the tip was ${tip}, and the total value ${bill + tip}`); -*/ diff --git a/01-Fundamentals-Part-1/starter/index.html b/01-Fundamentals-Part-1/starter/index.html deleted file mode 100755 index 59529c7923..0000000000 --- a/01-Fundamentals-Part-1/starter/index.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - JavaScript Fundamentals โ€“ Part 1 - - - -

JavaScript Fundamentals โ€“ Part 1

- - diff --git a/02-Fundamentals-Part-2/final/index.html b/02-Fundamentals-Part-2/final/index.html deleted file mode 100755 index ee4909e282..0000000000 --- a/02-Fundamentals-Part-2/final/index.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - JavaScript Fundamentals โ€“ Part 2 - - - -

JavaScript Fundamentals โ€“ Part 2

- - - diff --git a/02-Fundamentals-Part-2/final/script.js b/02-Fundamentals-Part-2/final/script.js deleted file mode 100755 index 8cee2087f7..0000000000 --- a/02-Fundamentals-Part-2/final/script.js +++ /dev/null @@ -1,589 +0,0 @@ -'use strict'; - -/* -/////////////////////////////////////// -// Activating Strict Mode -let hasDriversLicense = false; -const passTest = true; - -if (passTest) hasDriversLicense = true; -if (hasDriversLicense) console.log('I can drive :D'); - -// const interface = 'Audio'; -// const private = 534; - - -/////////////////////////////////////// -// Functions -function logger() { - console.log('My name is Jonas'); -} - -// calling / running / invoking function -logger(); -logger(); -logger(); - -function fruitProcessor(apples, oranges) { - const juice = `Juice with ${apples} apples and ${oranges} oranges.`; - return juice; -} - -const appleJuice = fruitProcessor(5, 0); -console.log(appleJuice); - -const appleOrangeJuice = fruitProcessor(2, 4); -console.log(appleOrangeJuice); - -const num = Number('23'); - - -/////////////////////////////////////// -// Function Declarations vs. Expressions - -// Function declaration -function calcAge1(birthYeah) { - return 2037 - birthYeah; -} -const age1 = calcAge1(1991); - -// Function expression -const calcAge2 = function (birthYeah) { - return 2037 - birthYeah; -} -const age2 = calcAge2(1991); - -console.log(age1, age2); - - -/////////////////////////////////////// -// Arrow functions - -const calcAge3 = birthYeah => 2037 - birthYeah; -const age3 = calcAge3(1991); -console.log(age3); - -const yearsUntilRetirement = (birthYeah, firstName) => { - const age = 2037 - birthYeah; - const retirement = 65 - age; - // return retirement; - return `${firstName} retires in ${retirement} years`; -} - -console.log(yearsUntilRetirement(1991, 'Jonas')); console.log(yearsUntilRetirement(1980, 'Bob')); - - -/////////////////////////////////////// -// Functions Calling Other Functions -function cutFruitPieces(fruit) { - return fruit * 4; -} - -function fruitProcessor(apples, oranges) { - const applePieces = cutFruitPieces(apples); - const orangePieces = cutFruitPieces(oranges); - - const juice = `Juice with ${applePieces} piece of apple and ${orangePieces} pieces of orange.`; - return juice; -} -console.log(fruitProcessor(2, 3)); - - -/////////////////////////////////////// -// Reviewing Functions -const calcAge = function (birthYeah) { - return 2037 - birthYeah; -} - -const yearsUntilRetirement = function (birthYeah, firstName) { - const age = calcAge(birthYeah); - const retirement = 65 - age; - - if (retirement > 0) { - console.log(`${firstName} retires in ${retirement} years`); - return retirement; - } else { - console.log(`${firstName} has already retired ๐ŸŽ‰`); - return -1; - } -} - -console.log(yearsUntilRetirement(1991, 'Jonas')); -console.log(yearsUntilRetirement(1950, 'Mike')); -*/ - -/////////////////////////////////////// -// Coding Challenge #1 - -/* -Back to the two gymnastics teams, the Dolphins and the Koalas! There is a new gymnastics discipline, which works differently. -Each team competes 3 times, and then the average of the 3 scores is calculated (so one average score per team). -A team ONLY wins if it has at least DOUBLE the average score of the other team. Otherwise, no team wins! - -1. Create an arrow function 'calcAverage' to calculate the average of 3 scores -2. Use the function to calculate the average for both teams -3. Create a function 'checkWinner' that takes the average score of each team as parameters ('avgDolhins' and 'avgKoalas'), and then logs the winner to the console, together with the victory points, according to the rule above. Example: "Koalas win (30 vs. 13)". -4. Use the 'checkWinner' function to determine the winner for both DATA 1 and DATA 2. -5. Ignore draws this time. - -TEST DATA 1: Dolphins score 44, 23 and 71. Koalas score 65, 54 and 49 -TEST DATA 2: Dolphins score 85, 54 and 41. Koalas score 23, 34 and 27 - -HINT: To calculate average of 3 values, add them all together and divide by 3 -HINT: To check if number A is at least double number B, check for A >= 2 * B. Apply this to the team's average scores ๐Ÿ˜‰ - -GOOD LUCK ๐Ÿ˜€ -*/ - -/* -const calcAverage = (a, b, c) => (a + b + c) / 3; -console.log(calcAverage(3, 4, 5)); - -// Test 1 -let scoreDolphins = calcAverage(44, 23, 71); -let scoreKoalas = calcAverage(65, 54, 49); -console.log(scoreDolphins, scoreKoalas); - -const checkWinner = function (avgDolphins, avgKoalas) { - if (avgDolphins >= 2 * avgKoalas) { - console.log(`Dolphins win ๐Ÿ† (${avgDolphins} vs. ${avgKoalas})`); - } else if (avgKoalas >= 2 * avgDolphins) { - console.log(`Koalas win ๐Ÿ† (${avgKoalas} vs. ${avgDolphins})`); - } else { - console.log('No team wins...'); - } -} -checkWinner(scoreDolphins, scoreKoalas); - -checkWinner(576, 111); - -// Test 2 -scoreDolphins = calcAverage(85, 54, 41); -scoreKoalas = calcAverage(23, 34, 27); -console.log(scoreDolphins, scoreKoalas); -checkWinner(scoreDolphins, scoreKoalas); - - -/////////////////////////////////////// -// Introduction to Arrays -const friend1 = 'Michael'; -const friend2 = 'Steven'; -const friend3 = 'Peter'; - -const friends = ['Michael', 'Steven', 'Peter']; -console.log(friends); - -const y = new Array(1991, 1984, 2008, 2020); - -console.log(friends[0]); -console.log(friends[2]); - -console.log(friends.length); -console.log(friends[friends.length - 1]); - -friends[2] = 'Jay'; -console.log(friends); -// friends = ['Bob', 'Alice'] - -const firstName = 'Jonas'; -const jonas = [firstName, 'Schmedtmann', 2037 - 1991, 'teacher', friends]; -console.log(jonas); -console.log(jonas.length); - -// Exercise -const calcAge = function (birthYeah) { - return 2037 - birthYeah; -} -const years = [1990, 1967, 2002, 2010, 2018]; - -const age1 = calcAge(years[0]); -const age2 = calcAge(years[1]); -const age3 = calcAge(years[years.length - 1]); -console.log(age1, age2, age3); - -const ages = [calcAge(years[0]), calcAge(years[1]), calcAge(years[years.length - 1])]; -console.log(ages); - - -/////////////////////////////////////// -// Basic Array Operations (Methods) -const friends = ['Michael', 'Steven', 'Peter']; - -// Add elements -const newLength = friends.push('Jay'); -console.log(friends); -console.log(newLength); - -friends.unshift('John'); -console.log(friends); - -// Remove elements -friends.pop(); // Last -const popped = friends.pop(); -console.log(popped); -console.log(friends); - -friends.shift(); // First -console.log(friends); - -console.log(friends.indexOf('Steven')); -console.log(friends.indexOf('Bob')); - -friends.push(23); -console.log(friends.includes('Steven')); -console.log(friends.includes('Bob')); -console.log(friends.includes(23)); - -if (friends.includes('Steven')) { - console.log('You have a friend called Steven'); -} -*/ - -/////////////////////////////////////// -// Coding Challenge #2 - -/* -Steven is still building his tip calculator, using the same rules as before: Tip 15% of the bill if the bill value is between 50 and 300, and if the value is different, the tip is 20%. - -1. Write a function 'calcTip' that takes any bill value as an input and returns the corresponding tip, calculated based on the rules above (you can check out the code from first tip calculator challenge if you need to). Use the function type you like the most. Test the function using a bill value of 100. -2. And now let's use arrays! So create an array 'bills' containing the test data below. -3. Create an array 'tips' containing the tip value for each bill, calculated from the function you created before. -4. BONUS: Create an array 'total' containing the total values, so the bill + tip. - -TEST DATA: 125, 555 and 44 - -HINT: Remember that an array needs a value in each position, and that value can actually be the returned value of a function! So you can just call a function as array values (so don't store the tip values in separate variables first, but right in the new array) ๐Ÿ˜‰ - -GOOD LUCK ๐Ÿ˜€ -*/ - -/* -const calcTip = function (bill) { - return bill >= 50 && bill <= 300 ? bill * 0.15 : bill * 0.2; -} -// const calcTip = bill => bill >= 50 && bill <= 300 ? bill * 0.15 : bill * 0.2; - -const bills = [125, 555, 44]; -const tips = [calcTip(bills[0]), calcTip(bills[1]), calcTip(bills[2])]; -const totals = [bills[0] + tips[0], bills[1] + tips[1], bills[2] + tips[2]]; - -console.log(bills, tips, totals); - - -/////////////////////////////////////// -// Introduction to Objects -const jonasArray = [ - 'Jonas', - 'Schmedtmann', - 2037 - 1991, - 'teacher', - ['Michael', 'Peter', 'Steven'] -]; - -const jonas = { - firstName: 'Jonas', - lastName: 'Schmedtmann', - age: 2037 - 1991, - job: 'teacher', - friends: ['Michael', 'Peter', 'Steven'] -}; - - -/////////////////////////////////////// -// Dot vs. Bracket Notation -const jonas = { - firstName: 'Jonas', - lastName: 'Schmedtmann', - age: 2037 - 1991, - job: 'teacher', - friends: ['Michael', 'Peter', 'Steven'] -}; -console.log(jonas); - -console.log(jonas.lastName); -console.log(jonas['lastName']); - -const nameKey = 'Name'; -console.log(jonas['first' + nameKey]); -console.log(jonas['last' + nameKey]); - -// console.log(jonas.'last' + nameKey) - -const interestedIn = prompt('What do you want to know about Jonas? Choose between firstName, lastName, age, job, and friends'); - -if (jonas[interestedIn]) { - console.log(jonas[interestedIn]); -} else { - console.log('Wrong request! Choose between firstName, lastName, age, job, and friends'); -} - -jonas.location = 'Portugal'; -jonas['twitter'] = '@jonasschmedtman'; -console.log(jonas); - -// Challenge -// "Jonas has 3 friends, and his best friend is called Michael" -console.log(`${jonas.firstName} has ${jonas.friends.length} friends, and his best friend is called ${jonas.friends[0]}`); - - -/////////////////////////////////////// -// Object Methods - -const jonas = { - firstName: 'Jonas', - lastName: 'Schmedtmann', - birthYeah: 1991, - job: 'teacher', - friends: ['Michael', 'Peter', 'Steven'], - hasDriversLicense: true, - - // calcAge: function (birthYeah) { - // return 2037 - birthYeah; - // } - - // calcAge: function () { - // // console.log(this); - // return 2037 - this.birthYeah; - // } - - calcAge: function () { - this.age = 2037 - this.birthYeah; - return this.age; - }, - - getSummary: function () { - return `${this.firstName} is a ${this.calcAge()}-year old ${jonas.job}, and he has ${this.hasDriversLicense ? 'a' : 'no'} driver's license.` - } -}; - -console.log(jonas.calcAge()); - -console.log(jonas.age); -console.log(jonas.age); -console.log(jonas.age); - -// Challenge -// "Jonas is a 46-year old teacher, and he has a driver's license" -console.log(jonas.getSummary()); -*/ - -/////////////////////////////////////// -// Coding Challenge #3 - -/* -Let's go back to Mark and John comparing their BMIs! This time, let's use objects to implement the calculations! Remember: BMI = mass / height ** 2 = mass / (height * height). (mass in kg and height in meter) - -1. For each of them, create an object with properties for their full name, mass, and height (Mark Miller and John Smith) -2. Create a 'calcBMI' method on each object to calculate the BMI (the same method on both objects). Store the BMI value to a property, and also return it from the method. -3. Log to the console who has the higher BMI, together with the full name and the respective BMI. Example: "John Smith's BMI (28.3) is higher than Mark Miller's (23.9)!" - -TEST DATA: Marks weights 78 kg and is 1.69 m tall. John weights 92 kg and is 1.95 m tall. - -GOOD LUCK ๐Ÿ˜€ -*/ - -/* -const mark = { - fullName: 'Mark Miller', - mass: 78, - height: 1.69, - calcBMI: function () { - this.bmi = this.mass / this.height ** 2; - return this.bmi; - } -}; - -const john = { - fullName: 'John Smith', - mass: 92, - height: 1.95, - calcBMI: function () { - this.bmi = this.mass / this.height ** 2; - return this.bmi; - } -}; - -mark.calcBMI(); -john.calcBMI(); - -console.log(mark.bmi, john.bmi); - -// "John Smith's BMI (28.3) is higher than Mark Miller's (23.9)!" - -if (mark.bmi > john.bmi) { - console.log(`${mark.fullName}'s BMI (${mark.bmi}) is higher than ${john.fullName}'s BMI (${john.bmi})`) -} else if (john.bmi > mark.bmi) { - console.log(`${john.fullName}'s BMI (${john.bmi}) is higher than ${mark.fullName}'s BMI (${mark.bmi})`) -} - - -/////////////////////////////////////// -// Iteration: The for Loop - -// console.log('Lifting weights repetition 1 ๐Ÿ‹๏ธโ€โ™€๏ธ'); -// console.log('Lifting weights repetition 2 ๐Ÿ‹๏ธโ€โ™€๏ธ'); -// console.log('Lifting weights repetition 3 ๐Ÿ‹๏ธโ€โ™€๏ธ'); -// console.log('Lifting weights repetition 4 ๐Ÿ‹๏ธโ€โ™€๏ธ'); -// console.log('Lifting weights repetition 5 ๐Ÿ‹๏ธโ€โ™€๏ธ'); -// console.log('Lifting weights repetition 6 ๐Ÿ‹๏ธโ€โ™€๏ธ'); -// console.log('Lifting weights repetition 7 ๐Ÿ‹๏ธโ€โ™€๏ธ'); -// console.log('Lifting weights repetition 8 ๐Ÿ‹๏ธโ€โ™€๏ธ'); -// console.log('Lifting weights repetition 9 ๐Ÿ‹๏ธโ€โ™€๏ธ'); -// console.log('Lifting weights repetition 10 ๐Ÿ‹๏ธโ€โ™€๏ธ'); - -// for loop keeps running while condition is TRUE -for (let rep = 1; rep <= 30; rep++) { - console.log(`Lifting weights repetition ${rep} ๐Ÿ‹๏ธโ€โ™€๏ธ`); -} - - -/////////////////////////////////////// -// Looping Arrays, Breaking and Continuing -const jonas = [ - 'Jonas', - 'Schmedtmann', - 2037 - 1991, - 'teacher', - ['Michael', 'Peter', 'Steven'], - true -]; -const types = []; - -// console.log(jonas[0]) -// console.log(jonas[1]) -// ... -// console.log(jonas[4]) -// jonas[5] does NOT exist - -for (let i = 0; i < jonas.length; i++) { - // Reading from jonas array - console.log(jonas[i], typeof jonas[i]); - - // Filling types array - // types[i] = typeof jonas[i]; - types.push(typeof jonas[i]); -} - -console.log(types); - -const years = [1991, 2007, 1969, 2020]; -const ages = []; - -for (let i = 0; i < years.length; i++) { - ages.push(2037 - years[i]); -} -console.log(ages); - -// continue and break -console.log('--- ONLY STRINGS ---') -for (let i = 0; i < jonas.length; i++) { - if (typeof jonas[i] !== 'string') continue; - - console.log(jonas[i], typeof jonas[i]); -} - -console.log('--- BREAK WITH NUMBER ---') -for (let i = 0; i < jonas.length; i++) { - if (typeof jonas[i] === 'number') break; - - console.log(jonas[i], typeof jonas[i]); -} - - -/////////////////////////////////////// -// Looping Backwards and Loops in Loops -const jonas = [ - 'Jonas', - 'Schmedtmann', - 2037 - 1991, - 'teacher', - ['Michael', 'Peter', 'Steven'], - true -]; - -// 0, 1, ..., 4 -// 4, 3, ..., 0 - -for (let i = jonas.length - 1; i >= 0; i--) { - console.log(i, jonas[i]); -} - -for (let exercise = 1; exercise < 4; exercise++) { - console.log(`-------- Starting exercise ${exercise}`); - - for (let rep = 1; rep < 6; rep++) { - console.log(`Exercise ${exercise}: Lifting weight repetition ${rep} ๐Ÿ‹๏ธโ€โ™€๏ธ`); - } -} - - -/////////////////////////////////////// -// The while Loop -for (let rep = 1; rep <= 10; rep++) { - console.log(`Lifting weights repetition ${rep} ๐Ÿ‹๏ธโ€โ™€๏ธ`); -} - -let rep = 1; -while (rep <= 10) { - // console.log(`WHILE: Lifting weights repetition ${rep} ๐Ÿ‹๏ธโ€โ™€๏ธ`); - rep++; -} - -let dice = Math.trunc(Math.random() * 6) + 1; - -while (dice !== 6) { - console.log(`You rolled a ${dice}`); - dice = Math.trunc(Math.random() * 6) + 1; - if (dice === 6) console.log('Loop is about to end...'); -} -*/ - -/////////////////////////////////////// -// Coding Challenge #4 - -/* -Let's improve Steven's tip calculator even more, this time using loops! - -1. Create an array 'bills' containing all 10 test bill values -2. Create empty arrays for the tips and the totals ('tips' and 'totals') -3. Use the 'calcTip' function we wrote before (no need to repeat) to calculate tips and total values (bill + tip) for every bill value in the bills array. Use a for loop to perform the 10 calculations! - -TEST DATA: 22, 295, 176, 440, 37, 105, 10, 1100, 86 and 52 - -HINT: Call calcTip in the loop and use the push method to add values to the tips and totals arrays ๐Ÿ˜‰ - -4. BONUS: Write a function 'calcAverage' which takes an array called 'arr' as an argument. This function calculates the average of all numbers in the given array. This is a DIFFICULT challenge (we haven't done this before)! Here is how to solve it: - 4.1. First, you will need to add up all values in the array. To do the addition, start by creating a variable 'sum' that starts at 0. Then loop over the array using a for loop. In each iteration, add the current value to the 'sum' variable. This way, by the end of the loop, you have all values added together - 4.2. To calculate the average, divide the sum you calculated before by the length of the array (because that's the number of elements) - 4.3. Call the function with the 'totals' array - -GOOD LUCK ๐Ÿ˜€ -*/ - -/* -const calcTip = function (bill) { - return bill >= 50 && bill <= 300 ? bill * 0.15 : bill * 0.2; -} -const bills = [22, 295, 176, 440, 37, 105, 10, 1100, 86, 52]; -const tips = []; -const totals = []; - -for (let i = 0; i < bills.length; i++) { - const tip = calcTip(bills[i]); - tips.push(tip); - totals.push(tip + bills[i]); -} -console.log(bills, tips, totals); - -const calcAverage = function (arr) { - let sum = 0; - for (let i = 0; i < arr.length; i++) { - // sum = sum + arr[i]; - sum += arr[i]; - } - return sum / arr.length; -} -console.log(calcAverage([2, 3, 7])); -console.log(calcAverage(totals)); -console.log(calcAverage(tips)); -*/ diff --git a/02-Fundamentals-Part-2/starter/index.html b/02-Fundamentals-Part-2/starter/index.html deleted file mode 100755 index ee4909e282..0000000000 --- a/02-Fundamentals-Part-2/starter/index.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - JavaScript Fundamentals โ€“ Part 2 - - - -

JavaScript Fundamentals โ€“ Part 2

- - - diff --git a/03-Developer-Skills/final/.prettierrc b/03-Developer-Skills/final/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/03-Developer-Skills/final/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/03-Developer-Skills/final/index.html b/03-Developer-Skills/final/index.html deleted file mode 100644 index fe26bd2b09..0000000000 --- a/03-Developer-Skills/final/index.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - Developer Skills & Editor Setup - - - -

Developer Skills & Editor Setup

- - - diff --git a/03-Developer-Skills/final/script.js b/03-Developer-Skills/final/script.js deleted file mode 100644 index 5412c88477..0000000000 --- a/03-Developer-Skills/final/script.js +++ /dev/null @@ -1,228 +0,0 @@ -// Remember, we're gonna use strict mode in all scripts now! -'use strict'; - -/* -/////////////////////////////////////// -// Using Google, StackOverflow and MDN - -// PROBLEM 1: -// We work for a company building a smart home thermometer. Our most recent task is this: "Given an array of temperatures of one day, calculate the temperature amplitude. Keep in mind that sometimes there might be a sensor error." - -const temperatures = [3, -2, -6, -1, 'error', 9, 13, 17, 15, 14, 9, 5]; - -// 1) Understanding the problem -// - What is temp amplitude? Answer: difference between highest and lowest temp -// - How to compute max and min temperatures? -// - What's a sensor error? And what do do? - -// 2) Breaking up into sub-problems -// - How to ignore errors? -// - Find max value in temp array -// - Find min value in temp array -// - Subtract min from max (amplitude) and return it - -const calcTempAmplitude = function (temps) { - let max = temps[0]; - let min = temps[0]; - - for (let i = 0; i < temps.length; i++) { - const curTemp = temps[i]; - if (typeof curTemp !== 'number') continue; - - if (curTemp > max) max = curTemp; - if (curTemp < min) min = curTemp; - } - console.log(max, min); - return max - min; -}; -const amplitude = calcTempAmplitude(temperatures); -console.log(amplitude); - -// PROBLEM 2: -// Function should now receive 2 arrays of temps - -// 1) Understanding the problem -// - With 2 arrays, should we implement functionality twice? NO! Just merge two arrays - -// 2) Breaking up into sub-problems -// - Merge 2 arrays - -const calcTempAmplitudeNew = function (t1, t2) { - const temps = t1.concat(t2); - console.log(temps); - - let max = temps[0]; - let min = temps[0]; - - for (let i = 0; i < temps.length; i++) { - const curTemp = temps[i]; - if (typeof curTemp !== 'number') continue; - - if (curTemp > max) max = curTemp; - if (curTemp < min) min = curTemp; - } - console.log(max, min); - return max - min; -}; -const amplitudeNew = calcTempAmplitudeNew([3, 5, 1], [9, 0, 5]); -console.log(amplitudeNew); - - -/////////////////////////////////////// -// Debugging with the Console and Breakpoints -const measureKelvin = function () { - const measurement = { - type: 'temp', - unit: 'celsius', - - // C) FIX - // value: Number(prompt('Degrees celsius:')), - value: 10, - }; - - // B) FIND - console.table(measurement); - - // console.log(measurement.value); - // console.warn(measurement.value); - // console.error(measurement.value); - - const kelvin = measurement.value + 273; - return kelvin; -}; -// A) IDENTIFY -console.log(measureKelvin()); - -// Using a debugger -const calcTempAmplitudeBug = function (t1, t2) { - const temps = t1.concat(t2); - console.log(temps); - - let max = 0; - let min = 0; - - for (let i = 0; i < temps.length; i++) { - const curTemp = temps[i]; - if (typeof curTemp !== 'number') continue; - - if (curTemp > max) max = curTemp; - if (curTemp < min) min = curTemp; - } - console.log(max, min); - return max - min; -}; -const amplitudeBug = calcTempAmplitudeBug([3, 5, 1], [9, 4, 5]); -// A) IDENTIFY -console.log(amplitudeBug); -*/ - -/////////////////////////////////////// -// Coding Challenge #1 - -/* -Given an array of forecasted maximum temperatures, the thermometer displays a string with these temperatures. - -Example: [17, 21, 23] will print "... 17ยบC in 1 days ... 21ยบC in 2 days ... 23ยบC in 3 days ..." - -Create a function 'printForecast' which takes in an array 'arr' and logs a string like the above to the console. - -Use the problem-solving framework: Understand the problem and break it up into sub-problems! - -TEST DATA 1: [17, 21, 23] -TEST DATA 2: [12, 5, -5, 0, 4] -*/ - -/* -// 1) Understanding the problem -// - Array transformed to string, separated by ... -// - What is the X days? Answer: index + 1 - -// 2) Breaking up into sub-problems -// - Transform array into string -// - Transform each element to string with ยบC -// - Strings needs to contain day (index + 1) -// - Add ... between elements and start and end of string -// - Log string to console - -const data1 = [17, 21, 23]; -const data2 = [12, 5, -5, 0, 4]; - -console.log(`... ${data1[0]}ยบC ... ${data1[1]}ยบC ... ${data1[2]}ยบC ...`); - -const printForecast = function (arr) { - let str = ''; - for (let i = 0; i < arr.length; i++) { - str += `${arr[i]}ยบC in ${i + 1} days ... `; - } - console.log('...' + str); -}; -printForecast(data1); -*/ - -/////////////////////////////////////// -// Coding Challenge #2 With AI - -/* -Let's say you're building a time tracking application for freelancers. At some point in building this app, you need a function that receives daily work hours for a certain week, and returns: -1. Total hours worked -2. Average daily hours -3. The day with the most hours worked -4. Number of days worked -5. Whether the week was full-time (worked 35 hours or more) - -TEST DATA: [7.5, 8, 6.5, 0, 8.5, 4, 0] -*/ - -/* -// Written by ChatGPT -function analyzeWorkWeek(dailyHours) { - const daysOfWeek = [ - 'Monday', - 'Tuesday', - 'Wednesday', - 'Thursday', - 'Friday', - 'Saturday', - 'Sunday', - ]; - - // Validate that the input array has exactly 7 elements - if (!Array.isArray(dailyHours) || dailyHours.length !== 7) { - throw new Error('Input must be an array of exactly 7 daily work hours.'); - } - - // Calculate total hours worked - const totalHours = dailyHours.reduce((sum, hours) => sum + hours, 0); - - // Calculate average daily hours, rounded to one decimal place - const averageHours = Math.round((totalHours / dailyHours.length) * 10) / 10; - - // Find the day with the most hours worked - const maxHours = Math.max(...dailyHours); - const maxDayIndex = dailyHours.indexOf(maxHours); - const maxDay = daysOfWeek[maxDayIndex]; // Convert index to day name - - // Count the number of days worked - const daysWorked = dailyHours.filter(hours => hours > 0).length; - - // Check if the week was full-time (35 hours or more) - const isFullTime = totalHours >= 35; - - // Return the result object - return { - totalHours, - averageHours, - maxDay, // The name of the day with the most hours - daysWorked, - isFullTime, - }; -} - -const weeklyHours = [7.5, 8, 6.5, 0, 8.5, 5, 0]; -const analysis = analyzeWorkWeek(weeklyHours); -console.log(analysis); - -const weeklyHours2 = [7.5, 8, 6.5, 0, 8.5]; -const analysis2 = analyzeWorkWeek(weeklyHours2); -console.log(analysis2); -*/ diff --git a/03-Developer-Skills/starter/index.html b/03-Developer-Skills/starter/index.html deleted file mode 100644 index fe26bd2b09..0000000000 --- a/03-Developer-Skills/starter/index.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - Developer Skills & Editor Setup - - - -

Developer Skills & Editor Setup

- - - diff --git a/03-Developer-Skills/starter/script.js b/03-Developer-Skills/starter/script.js deleted file mode 100644 index 939b2a2446..0000000000 --- a/03-Developer-Skills/starter/script.js +++ /dev/null @@ -1,3 +0,0 @@ -// Remember, we're gonna use strict mode in all scripts now! -'use strict'; - diff --git a/04-HTML-CSS/final/index.html b/04-HTML-CSS/final/index.html deleted file mode 100644 index da7d3f055b..0000000000 --- a/04-HTML-CSS/final/index.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - Learning HTML & CSS - - -

JavaScript is fun, but so is HTML & CSS!

-

- You can learn JavaScript without HTML and CSS, but for DOM manipulation - it's useful to have some basic ideas of HTML & CSS. You can learn more - about it - on Udemy. -

- -

Another heading

-

- Just another paragraph -

- - - -
-

Your name here

-

Please fill in this form :)

- - - -
- - diff --git a/04-HTML-CSS/final/style.css b/04-HTML-CSS/final/style.css deleted file mode 100644 index d9730f2116..0000000000 --- a/04-HTML-CSS/final/style.css +++ /dev/null @@ -1,56 +0,0 @@ -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -body { - background-color: rgb(255, 247, 201); - font-family: Arial; - font-size: 20px; - padding: 50px; -} - -h1 { - font-size: 35px; - margin-bottom: 25px; -} - -h2 { - margin-bottom: 20px; - text-align: center; -} - -p { - margin-bottom: 20px; -} - -.first { - color: red; -} - -#your-name { - background-color: rgb(255, 220, 105); - border: 5px solid #444; - width: 400px; - padding: 25px; - margin-top: 30px; -} - -input, -button { - padding: 10px; - font-size: 16px; -} - -a { - background-color: yellowgreen; -} - -#course-image { - width: 300px; -} - -#your-name h2 { - color: olivedrab; -} diff --git a/05-Guess-My-Number/final/.prettierrc b/05-Guess-My-Number/final/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/05-Guess-My-Number/final/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/05-Guess-My-Number/final/index.html b/05-Guess-My-Number/final/index.html deleted file mode 100644 index b25c17540a..0000000000 --- a/05-Guess-My-Number/final/index.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - Guess My Number! - - -
-

Guess My Number!

-

(Between 1 and 20)

- -
?
-
-
-
- - -
-
-

Start guessing...

-

๐Ÿ’ฏ Score: 20

-

- ๐Ÿฅ‡ Highscore: 0 -

-
-
- - - diff --git a/05-Guess-My-Number/final/script.js b/05-Guess-My-Number/final/script.js deleted file mode 100644 index 8ca1e15c34..0000000000 --- a/05-Guess-My-Number/final/script.js +++ /dev/null @@ -1,110 +0,0 @@ -'use strict'; - -/* -console.log(document.querySelector('.message').textContent); -document.querySelector('.message').textContent = '๐ŸŽ‰ Correct Number!'; - -document.querySelector('.number').textContent = 13; -document.querySelector('.score').textContent = 10; - -document.querySelector('.guess').value = 23; -console.log(document.querySelector('.guess').value); -*/ - -let secretNumber = Math.trunc(Math.random() * 20) + 1; -let score = 20; -let highscore = 0; - -const displayMessage = function (message) { - document.querySelector('.message').textContent = message; -}; - -document.querySelector('.check').addEventListener('click', function () { - const guess = Number(document.querySelector('.guess').value); - console.log(guess, typeof guess); - - // When there is no input - if (!guess) { - // document.querySelector('.message').textContent = 'โ›”๏ธ No number!'; - displayMessage('โ›”๏ธ No number!'); - - // When player wins - } else if (guess === secretNumber) { - // document.querySelector('.message').textContent = '๐ŸŽ‰ Correct Number!'; - displayMessage('๐ŸŽ‰ Correct Number!'); - document.querySelector('.number').textContent = secretNumber; - - document.querySelector('body').style.backgroundColor = '#60b347'; - document.querySelector('.number').style.width = '30rem'; - - if (score > highscore) { - highscore = score; - document.querySelector('.highscore').textContent = highscore; - } - - // When guess is wrong - } else if (guess !== secretNumber) { - if (score > 1) { - // document.querySelector('.message').textContent = - // guess > secretNumber ? '๐Ÿ“ˆ Too high!' : '๐Ÿ“‰ Too low!'; - displayMessage(guess > secretNumber ? '๐Ÿ“ˆ Too high!' : '๐Ÿ“‰ Too low!'); - score--; - document.querySelector('.score').textContent = score; - } else { - // document.querySelector('.message').textContent = '๐Ÿ’ฅ You lost the game!'; - displayMessage('๐Ÿ’ฅ You lost the game!'); - document.querySelector('.score').textContent = 0; - } - } - - // // When guess is too high - // } else if (guess > secretNumber) { - // if (score > 1) { - // document.querySelector('.message').textContent = '๐Ÿ“ˆ Too high!'; - // score--; - // document.querySelector('.score').textContent = score; - // } else { - // document.querySelector('.message').textContent = '๐Ÿ’ฅ You lost the game!'; - // document.querySelector('.score').textContent = 0; - // } - - // // When guess is too low - // } else if (guess < secretNumber) { - // if (score > 1) { - // document.querySelector('.message').textContent = '๐Ÿ“‰ Too low!'; - // score--; - // document.querySelector('.score').textContent = score; - // } else { - // document.querySelector('.message').textContent = '๐Ÿ’ฅ You lost the game!'; - // document.querySelector('.score').textContent = 0; - // } - // } -}); - -document.querySelector('.again').addEventListener('click', function () { - score = 20; - secretNumber = Math.trunc(Math.random() * 20) + 1; - - // document.querySelector('.message').textContent = 'Start guessing...'; - displayMessage('Start guessing...'); - document.querySelector('.score').textContent = score; - document.querySelector('.number').textContent = '?'; - document.querySelector('.guess').value = ''; - - document.querySelector('body').style.backgroundColor = '#222'; - document.querySelector('.number').style.width = '15rem'; -}); - -/////////////////////////////////////// -// Coding Challenge #1 - -/* -Implement a game rest functionality, so that the player can make a new guess! Here is how: - -1. Select the element with the 'again' class and attach a click event handler -2. In the handler function, restore initial values of the score and secretNumber variables -3. Restore the initial conditions of the message, number, score and guess input field -4. Also restore the original background color (#222) and number width (15rem) - -GOOD LUCK ๐Ÿ˜€ -*/ diff --git a/05-Guess-My-Number/final/style.css b/05-Guess-My-Number/final/style.css deleted file mode 100644 index dfed55a320..0000000000 --- a/05-Guess-My-Number/final/style.css +++ /dev/null @@ -1,119 +0,0 @@ -@import url('https://fonts.googleapis.com/css?family=Press+Start+2P&display=swap'); - -* { - margin: 0; - padding: 0; - box-sizing: inherit; -} - -html { - font-size: 62.5%; - box-sizing: border-box; -} - -body { - font-family: 'Press Start 2P', sans-serif; - color: #eee; - background-color: #222; - /* background-color: #60b347; */ -} - -/* LAYOUT */ -header { - position: relative; - height: 35vh; - border-bottom: 7px solid #eee; -} - -main { - height: 65vh; - color: #eee; - display: flex; - align-items: center; - justify-content: space-around; -} - -.left { - width: 52rem; - display: flex; - flex-direction: column; - align-items: center; -} - -.right { - width: 52rem; - font-size: 2rem; -} - -/* ELEMENTS STYLE */ -h1 { - font-size: 4rem; - text-align: center; - position: absolute; - width: 100%; - top: 52%; - left: 50%; - transform: translate(-50%, -50%); -} - -.number { - background: #eee; - color: #333; - font-size: 6rem; - width: 15rem; - padding: 3rem 0rem; - text-align: center; - position: absolute; - bottom: 0; - left: 50%; - transform: translate(-50%, 50%); -} - -.between { - font-size: 1.4rem; - position: absolute; - top: 2rem; - right: 2rem; -} - -.again { - position: absolute; - top: 2rem; - left: 2rem; -} - -.guess { - background: none; - border: 4px solid #eee; - font-family: inherit; - color: inherit; - font-size: 5rem; - padding: 2.5rem; - width: 25rem; - text-align: center; - display: block; - margin-bottom: 3rem; -} - -.btn { - border: none; - background-color: #eee; - color: #222; - font-size: 2rem; - font-family: inherit; - padding: 2rem 3rem; - cursor: pointer; -} - -.btn:hover { - background-color: #ccc; -} - -.message { - margin-bottom: 8rem; - height: 3rem; -} - -.label-score { - margin-bottom: 2rem; -} diff --git a/05-Guess-My-Number/starter/.prettierrc b/05-Guess-My-Number/starter/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/05-Guess-My-Number/starter/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/05-Guess-My-Number/starter/index.html b/05-Guess-My-Number/starter/index.html deleted file mode 100644 index b25c17540a..0000000000 --- a/05-Guess-My-Number/starter/index.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - Guess My Number! - - -
-

Guess My Number!

-

(Between 1 and 20)

- -
?
-
-
-
- - -
-
-

Start guessing...

-

๐Ÿ’ฏ Score: 20

-

- ๐Ÿฅ‡ Highscore: 0 -

-
-
- - - diff --git a/05-Guess-My-Number/starter/script.js b/05-Guess-My-Number/starter/script.js deleted file mode 100644 index ad9a93a7c1..0000000000 --- a/05-Guess-My-Number/starter/script.js +++ /dev/null @@ -1 +0,0 @@ -'use strict'; diff --git a/05-Guess-My-Number/starter/style.css b/05-Guess-My-Number/starter/style.css deleted file mode 100644 index dfed55a320..0000000000 --- a/05-Guess-My-Number/starter/style.css +++ /dev/null @@ -1,119 +0,0 @@ -@import url('https://fonts.googleapis.com/css?family=Press+Start+2P&display=swap'); - -* { - margin: 0; - padding: 0; - box-sizing: inherit; -} - -html { - font-size: 62.5%; - box-sizing: border-box; -} - -body { - font-family: 'Press Start 2P', sans-serif; - color: #eee; - background-color: #222; - /* background-color: #60b347; */ -} - -/* LAYOUT */ -header { - position: relative; - height: 35vh; - border-bottom: 7px solid #eee; -} - -main { - height: 65vh; - color: #eee; - display: flex; - align-items: center; - justify-content: space-around; -} - -.left { - width: 52rem; - display: flex; - flex-direction: column; - align-items: center; -} - -.right { - width: 52rem; - font-size: 2rem; -} - -/* ELEMENTS STYLE */ -h1 { - font-size: 4rem; - text-align: center; - position: absolute; - width: 100%; - top: 52%; - left: 50%; - transform: translate(-50%, -50%); -} - -.number { - background: #eee; - color: #333; - font-size: 6rem; - width: 15rem; - padding: 3rem 0rem; - text-align: center; - position: absolute; - bottom: 0; - left: 50%; - transform: translate(-50%, 50%); -} - -.between { - font-size: 1.4rem; - position: absolute; - top: 2rem; - right: 2rem; -} - -.again { - position: absolute; - top: 2rem; - left: 2rem; -} - -.guess { - background: none; - border: 4px solid #eee; - font-family: inherit; - color: inherit; - font-size: 5rem; - padding: 2.5rem; - width: 25rem; - text-align: center; - display: block; - margin-bottom: 3rem; -} - -.btn { - border: none; - background-color: #eee; - color: #222; - font-size: 2rem; - font-family: inherit; - padding: 2rem 3rem; - cursor: pointer; -} - -.btn:hover { - background-color: #ccc; -} - -.message { - margin-bottom: 8rem; - height: 3rem; -} - -.label-score { - margin-bottom: 2rem; -} diff --git a/06-Modal/final/.prettierrc b/06-Modal/final/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/06-Modal/final/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/06-Modal/final/index.html b/06-Modal/final/index.html deleted file mode 100644 index cb0458612b..0000000000 --- a/06-Modal/final/index.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - Modal window - - - - - - - - - - - - diff --git a/06-Modal/final/script.js b/06-Modal/final/script.js deleted file mode 100644 index bc4028350e..0000000000 --- a/06-Modal/final/script.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -const modal = document.querySelector('.modal'); -const overlay = document.querySelector('.overlay'); -const btnCloseModal = document.querySelector('.close-modal'); -const btnsOpenModal = document.querySelectorAll('.show-modal'); - -const openModal = function () { - modal.classList.remove('hidden'); - overlay.classList.remove('hidden'); -}; - -const closeModal = function () { - modal.classList.add('hidden'); - overlay.classList.add('hidden'); -}; - -for (let i = 0; i < btnsOpenModal.length; i++) - btnsOpenModal[i].addEventListener('click', openModal); - -btnCloseModal.addEventListener('click', closeModal); -overlay.addEventListener('click', closeModal); - -document.addEventListener('keydown', function (e) { - // console.log(e.key); - - if (e.key === 'Escape' && !modal.classList.contains('hidden')) { - closeModal(); - } -}); diff --git a/06-Modal/final/style.css b/06-Modal/final/style.css deleted file mode 100644 index 47c6861f1e..0000000000 --- a/06-Modal/final/style.css +++ /dev/null @@ -1,85 +0,0 @@ -* { - margin: 0; - padding: 0; - box-sizing: inherit; -} - -html { - font-size: 62.5%; - box-sizing: border-box; -} - -body { - font-family: sans-serif; - color: #333; - line-height: 1.5; - height: 100vh; - position: relative; - display: flex; - align-items: flex-start; - justify-content: center; - background: linear-gradient(to top left, #28b487, #7dd56f); -} - -.show-modal { - font-size: 2rem; - font-weight: 600; - padding: 1.75rem 3.5rem; - margin: 5rem 2rem; - border: none; - background-color: #fff; - color: #444; - border-radius: 10rem; - cursor: pointer; -} - -.close-modal { - position: absolute; - top: 1.2rem; - right: 2rem; - font-size: 5rem; - color: #333; - cursor: pointer; - border: none; - background: none; -} - -h1 { - font-size: 2.5rem; - margin-bottom: 2rem; -} - -p { - font-size: 1.8rem; -} - -/* -------------------------- */ -/* CLASSES TO MAKE MODAL WORK */ -.hidden { - display: none; -} - -.modal { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - width: 70%; - - background-color: white; - padding: 6rem; - border-radius: 5px; - box-shadow: 0 3rem 5rem rgba(0, 0, 0, 0.3); - z-index: 10; -} - -.overlay { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: rgba(0, 0, 0, 0.6); - backdrop-filter: blur(3px); - z-index: 5; -} diff --git a/06-Modal/starter/.prettierrc b/06-Modal/starter/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/06-Modal/starter/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/06-Modal/starter/index.html b/06-Modal/starter/index.html deleted file mode 100644 index cb0458612b..0000000000 --- a/06-Modal/starter/index.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - Modal window - - - - - - - - - - - - diff --git a/06-Modal/starter/script.js b/06-Modal/starter/script.js deleted file mode 100644 index ad9a93a7c1..0000000000 --- a/06-Modal/starter/script.js +++ /dev/null @@ -1 +0,0 @@ -'use strict'; diff --git a/06-Modal/starter/style.css b/06-Modal/starter/style.css deleted file mode 100644 index 47c6861f1e..0000000000 --- a/06-Modal/starter/style.css +++ /dev/null @@ -1,85 +0,0 @@ -* { - margin: 0; - padding: 0; - box-sizing: inherit; -} - -html { - font-size: 62.5%; - box-sizing: border-box; -} - -body { - font-family: sans-serif; - color: #333; - line-height: 1.5; - height: 100vh; - position: relative; - display: flex; - align-items: flex-start; - justify-content: center; - background: linear-gradient(to top left, #28b487, #7dd56f); -} - -.show-modal { - font-size: 2rem; - font-weight: 600; - padding: 1.75rem 3.5rem; - margin: 5rem 2rem; - border: none; - background-color: #fff; - color: #444; - border-radius: 10rem; - cursor: pointer; -} - -.close-modal { - position: absolute; - top: 1.2rem; - right: 2rem; - font-size: 5rem; - color: #333; - cursor: pointer; - border: none; - background: none; -} - -h1 { - font-size: 2.5rem; - margin-bottom: 2rem; -} - -p { - font-size: 1.8rem; -} - -/* -------------------------- */ -/* CLASSES TO MAKE MODAL WORK */ -.hidden { - display: none; -} - -.modal { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - width: 70%; - - background-color: white; - padding: 6rem; - border-radius: 5px; - box-shadow: 0 3rem 5rem rgba(0, 0, 0, 0.3); - z-index: 10; -} - -.overlay { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: rgba(0, 0, 0, 0.6); - backdrop-filter: blur(3px); - z-index: 5; -} diff --git a/07-Pig-Game/final/.prettierrc b/07-Pig-Game/final/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/07-Pig-Game/final/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/07-Pig-Game/final/index.html b/07-Pig-Game/final/index.html deleted file mode 100644 index f72c8f4e92..0000000000 --- a/07-Pig-Game/final/index.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - Pig Game - - -
-
-

Player 1

-

43

-
-

Current

-

0

-
-
-
-

Player 2

-

24

-
-

Current

-

0

-
-
- - Playing dice - - - -
- - - diff --git a/07-Pig-Game/final/pig-game-flowchart.png b/07-Pig-Game/final/pig-game-flowchart.png deleted file mode 100644 index d807a5d40e..0000000000 Binary files a/07-Pig-Game/final/pig-game-flowchart.png and /dev/null differ diff --git a/07-Pig-Game/final/script.js b/07-Pig-Game/final/script.js deleted file mode 100644 index aa191032be..0000000000 --- a/07-Pig-Game/final/script.js +++ /dev/null @@ -1,98 +0,0 @@ -'use strict'; - -// Selecting elements -const player0El = document.querySelector('.player--0'); -const player1El = document.querySelector('.player--1'); -const score0El = document.querySelector('#score--0'); -const score1El = document.getElementById('score--1'); -const current0El = document.getElementById('current--0'); -const current1El = document.getElementById('current--1'); - -const diceEl = document.querySelector('.dice'); -const btnNew = document.querySelector('.btn--new'); -const btnRoll = document.querySelector('.btn--roll'); -const btnHold = document.querySelector('.btn--hold'); - -let scores, currentScore, activePlayer, playing; - -// Starting conditions -const init = function () { - scores = [0, 0]; - currentScore = 0; - activePlayer = 0; - playing = true; - - score0El.textContent = 0; - score1El.textContent = 0; - current0El.textContent = 0; - current1El.textContent = 0; - - diceEl.classList.add('hidden'); - player0El.classList.remove('player--winner'); - player1El.classList.remove('player--winner'); - player0El.classList.add('player--active'); - player1El.classList.remove('player--active'); -}; -init(); - -const switchPlayer = function () { - document.getElementById(`current--${activePlayer}`).textContent = 0; - currentScore = 0; - activePlayer = activePlayer === 0 ? 1 : 0; - player0El.classList.toggle('player--active'); - player1El.classList.toggle('player--active'); -}; - -// Rolling dice functionality -btnRoll.addEventListener('click', function () { - if (playing) { - // 1. Generating a random dice roll - const dice = Math.trunc(Math.random() * 6) + 1; - - // 2. Display dice - diceEl.classList.remove('hidden'); - diceEl.src = `dice-${dice}.png`; - - // 3. Check for rolled 1 - if (dice !== 1) { - // Add dice to current score - currentScore += dice; - document.getElementById( - `current--${activePlayer}` - ).textContent = currentScore; - } else { - // Switch to next player - switchPlayer(); - } - } -}); - -btnHold.addEventListener('click', function () { - if (playing) { - // 1. Add current score to active player's score - scores[activePlayer] += currentScore; - // scores[1] = scores[1] + currentScore - - document.getElementById(`score--${activePlayer}`).textContent = - scores[activePlayer]; - - // 2. Check if player's score is >= 100 - if (scores[activePlayer] >= 100) { - // Finish the game - playing = false; - diceEl.classList.add('hidden'); - - document - .querySelector(`.player--${activePlayer}`) - .classList.add('player--winner'); - document - .querySelector(`.player--${activePlayer}`) - .classList.remove('player--active'); - } else { - // Switch to the next player - switchPlayer(); - } - } -}); - -btnNew.addEventListener('click', init); diff --git a/07-Pig-Game/final/style.css b/07-Pig-Game/final/style.css deleted file mode 100644 index 555ea263e0..0000000000 --- a/07-Pig-Game/final/style.css +++ /dev/null @@ -1,171 +0,0 @@ -@import url('https://fonts.googleapis.com/css2?family=Nunito&display=swap'); - -* { - margin: 0; - padding: 0; - box-sizing: inherit; -} - -html { - font-size: 62.5%; - box-sizing: border-box; -} - -body { - font-family: 'Nunito', sans-serif; - font-weight: 400; - height: 100vh; - color: #333; - background-image: linear-gradient(to top left, #753682 0%, #bf2e34 100%); - display: flex; - align-items: center; - justify-content: center; -} - -/* LAYOUT */ -main { - position: relative; - width: 100rem; - height: 60rem; - background-color: rgba(255, 255, 255, 0.35); - backdrop-filter: blur(200px); - filter: blur(); - box-shadow: 0 3rem 5rem rgba(0, 0, 0, 0.25); - border-radius: 9px; - overflow: hidden; - display: flex; -} - -.player { - flex: 50%; - padding: 9rem; - display: flex; - flex-direction: column; - align-items: center; - transition: all 0.75s; -} - -/* ELEMENTS */ -.name { - position: relative; - font-size: 4rem; - text-transform: uppercase; - letter-spacing: 1px; - word-spacing: 2px; - font-weight: 300; - margin-bottom: 1rem; -} - -.score { - font-size: 8rem; - font-weight: 300; - color: #c7365f; - margin-bottom: auto; -} - -.player--active { - background-color: rgba(255, 255, 255, 0.4); -} -.player--active .name { - font-weight: 700; -} -.player--active .score { - font-weight: 400; -} - -.player--active .current { - opacity: 1; -} - -.current { - background-color: #c7365f; - opacity: 0.8; - border-radius: 9px; - color: #fff; - width: 65%; - padding: 2rem; - text-align: center; - transition: all 0.75s; -} - -.current-label { - text-transform: uppercase; - margin-bottom: 1rem; - font-size: 1.7rem; - color: #ddd; -} - -.current-score { - font-size: 3.5rem; -} - -/* ABSOLUTE POSITIONED ELEMENTS */ -.btn { - position: absolute; - left: 50%; - transform: translateX(-50%); - color: #444; - background: none; - border: none; - font-family: inherit; - font-size: 1.8rem; - text-transform: uppercase; - cursor: pointer; - font-weight: 400; - transition: all 0.2s; - - background-color: white; - background-color: rgba(255, 255, 255, 0.6); - backdrop-filter: blur(10px); - - padding: 0.7rem 2.5rem; - border-radius: 50rem; - box-shadow: 0 1.75rem 3.5rem rgba(0, 0, 0, 0.1); -} - -.btn::first-letter { - font-size: 2.4rem; - display: inline-block; - margin-right: 0.7rem; -} - -.btn--new { - top: 4rem; -} -.btn--roll { - top: 39.3rem; -} -.btn--hold { - top: 46.1rem; -} - -.btn:active { - transform: translate(-50%, 3px); - box-shadow: 0 1rem 2rem rgba(0, 0, 0, 0.15); -} - -.btn:focus { - outline: none; -} - -.dice { - position: absolute; - left: 50%; - top: 16.5rem; - transform: translateX(-50%); - height: 10rem; - box-shadow: 0 2rem 5rem rgba(0, 0, 0, 0.2); -} - -.player--winner { - background-color: #2f2f2f; -} - -.player--winner .name { - font-weight: 700; - color: #c7365f; -} - -.hidden { - display: none; -} diff --git a/07-Pig-Game/starter/.prettierrc b/07-Pig-Game/starter/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/07-Pig-Game/starter/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/07-Pig-Game/starter/index.html b/07-Pig-Game/starter/index.html deleted file mode 100644 index f72c8f4e92..0000000000 --- a/07-Pig-Game/starter/index.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - Pig Game - - -
-
-

Player 1

-

43

-
-

Current

-

0

-
-
-
-

Player 2

-

24

-
-

Current

-

0

-
-
- - Playing dice - - - -
- - - diff --git a/07-Pig-Game/starter/pig-game-flowchart.png b/07-Pig-Game/starter/pig-game-flowchart.png deleted file mode 100644 index 2e51a84f36..0000000000 Binary files a/07-Pig-Game/starter/pig-game-flowchart.png and /dev/null differ diff --git a/07-Pig-Game/starter/script.js b/07-Pig-Game/starter/script.js deleted file mode 100644 index ad9a93a7c1..0000000000 --- a/07-Pig-Game/starter/script.js +++ /dev/null @@ -1 +0,0 @@ -'use strict'; diff --git a/07-Pig-Game/starter/style.css b/07-Pig-Game/starter/style.css deleted file mode 100644 index dcf788f011..0000000000 --- a/07-Pig-Game/starter/style.css +++ /dev/null @@ -1,167 +0,0 @@ -@import url('https://fonts.googleapis.com/css2?family=Nunito&display=swap'); - -* { - margin: 0; - padding: 0; - box-sizing: inherit; -} - -html { - font-size: 62.5%; - box-sizing: border-box; -} - -body { - font-family: 'Nunito', sans-serif; - font-weight: 400; - height: 100vh; - color: #333; - background-image: linear-gradient(to top left, #753682 0%, #bf2e34 100%); - display: flex; - align-items: center; - justify-content: center; -} - -/* LAYOUT */ -main { - position: relative; - width: 100rem; - height: 60rem; - background-color: rgba(255, 255, 255, 0.35); - backdrop-filter: blur(200px); - filter: blur(); - box-shadow: 0 3rem 5rem rgba(0, 0, 0, 0.25); - border-radius: 9px; - overflow: hidden; - display: flex; -} - -.player { - flex: 50%; - padding: 9rem; - display: flex; - flex-direction: column; - align-items: center; - transition: all 0.75s; -} - -/* ELEMENTS */ -.name { - position: relative; - font-size: 4rem; - text-transform: uppercase; - letter-spacing: 1px; - word-spacing: 2px; - font-weight: 300; - margin-bottom: 1rem; -} - -.score { - font-size: 8rem; - font-weight: 300; - color: #c7365f; - margin-bottom: auto; -} - -.player--active { - background-color: rgba(255, 255, 255, 0.4); -} -.player--active .name { - font-weight: 700; -} -.player--active .score { - font-weight: 400; -} - -.player--active .current { - opacity: 1; -} - -.current { - background-color: #c7365f; - opacity: 0.8; - border-radius: 9px; - color: #fff; - width: 65%; - padding: 2rem; - text-align: center; - transition: all 0.75s; -} - -.current-label { - text-transform: uppercase; - margin-bottom: 1rem; - font-size: 1.7rem; - color: #ddd; -} - -.current-score { - font-size: 3.5rem; -} - -/* ABSOLUTE POSITIONED ELEMENTS */ -.btn { - position: absolute; - left: 50%; - transform: translateX(-50%); - color: #444; - background: none; - border: none; - font-family: inherit; - font-size: 1.8rem; - text-transform: uppercase; - cursor: pointer; - font-weight: 400; - transition: all 0.2s; - - background-color: white; - background-color: rgba(255, 255, 255, 0.6); - backdrop-filter: blur(10px); - - padding: 0.7rem 2.5rem; - border-radius: 50rem; - box-shadow: 0 1.75rem 3.5rem rgba(0, 0, 0, 0.1); -} - -.btn::first-letter { - font-size: 2.4rem; - display: inline-block; - margin-right: 0.7rem; -} - -.btn--new { - top: 4rem; -} -.btn--roll { - top: 39.3rem; -} -.btn--hold { - top: 46.1rem; -} - -.btn:active { - transform: translate(-50%, 3px); - box-shadow: 0 1rem 2rem rgba(0, 0, 0, 0.15); -} - -.btn:focus { - outline: none; -} - -.dice { - position: absolute; - left: 50%; - top: 16.5rem; - transform: translateX(-50%); - height: 10rem; - box-shadow: 0 2rem 5rem rgba(0, 0, 0, 0.2); -} - -.player--winner { - background-color: #2f2f2f; -} - -.player--winner .name { - font-weight: 700; - color: #c7365f; -} diff --git a/08-Behind-the-Scenes/final/.prettierrc b/08-Behind-the-Scenes/final/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/08-Behind-the-Scenes/final/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/08-Behind-the-Scenes/final/index.html b/08-Behind-the-Scenes/final/index.html deleted file mode 100644 index 7bd55f4ef0..0000000000 --- a/08-Behind-the-Scenes/final/index.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - How JavaScript Works Behind the Scenes - - - -

How JavaScript Works Behind the Scenes

- - - diff --git a/08-Behind-the-Scenes/final/script.js b/08-Behind-the-Scenes/final/script.js deleted file mode 100644 index d64bee3d39..0000000000 --- a/08-Behind-the-Scenes/final/script.js +++ /dev/null @@ -1,223 +0,0 @@ -'use strict'; - -/////////////////////////////////////// -// Scoping in Practice - -/* -function calcAge(birthYear) { - const age = 2037 - birthYear; - - function printAge() { - let output = `${firstName}, you are ${age}, born in ${birthYear}`; - console.log(output); - - if (birthYear >= 1981 && birthYear <= 1996) { - var millenial = true; - // Creating NEW variable with same name as outer scope's variable - const firstName = 'Steven'; - - // Reasssigning outer scope's variable - output = 'NEW OUTPUT!'; - - const str = `Oh, and you're a millenial, ${firstName}`; - console.log(str); - - function add(a, b) { - return a + b; - } - } - // console.log(str); - console.log(millenial); - // console.log(add(2, 3)); - console.log(output); - } - printAge(); - - return age; -} - -const firstName = 'Jonas'; -calcAge(1991); -// console.log(age); -// printAge(); - - -/////////////////////////////////////// -// Hoisting and TDZ in Practice - -// Variables -console.log(me); -// console.log(job); -// console.log(year); - -var me = 'Jonas'; -let job = 'teacher'; -const year = 1991; - -// Functions -console.log(addDecl(2, 3)); -// console.log(addExpr(2, 3)); -console.log(addArrow); -// console.log(addArrow(2, 3)); - -function addDecl(a, b) { - return a + b; -} - -const addExpr = function (a, b) { - return a + b; -}; - -var addArrow = (a, b) => a + b; - -// Example -console.log(undefined); -if (!numProducts) deleteShoppingCart(); - -var numProducts = 10; - -function deleteShoppingCart() { - console.log('All products deleted!'); -} - -var x = 1; -let y = 2; -const z = 3; - -console.log(x === window.x); -console.log(y === window.y); -console.log(z === window.z); - - -/////////////////////////////////////// -// The this Keyword in Practice -console.log(this); - -const calcAge = function (birthYear) { - console.log(2037 - birthYear); - console.log(this); -}; -calcAge(1991); - -const calcAgeArrow = birthYear => { - console.log(2037 - birthYear); - console.log(this); -}; -calcAgeArrow(1980); - -const jonas = { - year: 1991, - calcAge: function () { - console.log(this); - console.log(2037 - this.year); - }, -}; -jonas.calcAge(); - -const matilda = { - year: 2017, -}; - -matilda.calcAge = jonas.calcAge; -matilda.calcAge(); - -const f = jonas.calcAge; -f(); - - -/////////////////////////////////////// -// Regular Functions vs. Arrow Functions -// var firstName = 'Matilda'; - -const jonas = { - firstName: 'Jonas', - year: 1991, - calcAge: function () { - // console.log(this); - console.log(2037 - this.year); - - // Solution 1 - // const self = this; // self or that - // const isMillenial = function () { - // console.log(self); - // console.log(self.year >= 1981 && self.year <= 1996); - // }; - - // Solution 2 - const isMillenial = () => { - console.log(this); - console.log(this.year >= 1981 && this.year <= 1996); - }; - isMillenial(); - }, - - greet: () => { - console.log(this); - console.log(`Hey ${this.firstName}`); - }, -}; -jonas.greet(); -jonas.calcAge(); - -// arguments keyword -const addExpr = function (a, b) { - console.log(arguments); - return a + b; -}; -addExpr(2, 5); -addExpr(2, 5, 8, 12); - -var addArrow = (a, b) => { - console.log(arguments); - return a + b; -}; -addArrow(2, 5, 8); - - -/////////////////////////////////////// -// Object References in Practice (Shallow vs. Deep Copies) - -const jessica1 = { - firstName: 'Jessica', - lastName: 'Williams', - age: 27, -}; - -function marryPerson(originalPerson, newLastName) { - originalPerson.lastName = newLastName; - return originalPerson; -} - -const marriedJessica = marryPerson(jessica1, 'Davis'); - -// const marriedJessica = jessica1; -// marriedJessica.lastName = 'Davis'; - -console.log('Before:', jessica1); -console.log('After:', marriedJessica); - -const jessica = { - firstName: 'Jessica', - lastName: 'Williams', - age: 27, - familiy: ['Alice', 'Bob'], -}; - -// Shallow copy -const jessicaCopy = { ...jessica }; -jessicaCopy.lastName = 'Davis'; - -// jessicaCopy.familiy.push('Mary'); -// jessicaCopy.familiy.push('John'); - -// console.log('Before:', jessica); -// console.log('After:', jessicaCopy); - -// Deep copy/clone -const jessicaClone = structuredClone(jessica); -jessicaClone.familiy.push('Mary'); -jessicaClone.familiy.push('John'); - -console.log('Original:', jessica); -console.log('Clone:', jessicaClone); -*/ diff --git a/08-Behind-the-Scenes/starter/.prettierrc b/08-Behind-the-Scenes/starter/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/08-Behind-the-Scenes/starter/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/08-Behind-the-Scenes/starter/index.html b/08-Behind-the-Scenes/starter/index.html deleted file mode 100644 index 7bd55f4ef0..0000000000 --- a/08-Behind-the-Scenes/starter/index.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - How JavaScript Works Behind the Scenes - - - -

How JavaScript Works Behind the Scenes

- - - diff --git a/08-Behind-the-Scenes/starter/script.js b/08-Behind-the-Scenes/starter/script.js deleted file mode 100644 index ad9a93a7c1..0000000000 --- a/08-Behind-the-Scenes/starter/script.js +++ /dev/null @@ -1 +0,0 @@ -'use strict'; diff --git a/09-Data-Structures-Operators/final/.prettierrc b/09-Data-Structures-Operators/final/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/09-Data-Structures-Operators/final/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/09-Data-Structures-Operators/final/index.html b/09-Data-Structures-Operators/final/index.html deleted file mode 100644 index 7d248b95f5..0000000000 --- a/09-Data-Structures-Operators/final/index.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - Data Structures and Modern Operators - - - -

Data Structures and Modern Operators

- - - diff --git a/09-Data-Structures-Operators/final/script.js b/09-Data-Structures-Operators/final/script.js deleted file mode 100644 index 9ed9538bbb..0000000000 --- a/09-Data-Structures-Operators/final/script.js +++ /dev/null @@ -1,965 +0,0 @@ -'use strict'; - -const weekdays = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun']; -const openingHours = { - [weekdays[3]]: { - open: 12, - close: 22, - }, - [weekdays[4]]: { - open: 11, - close: 23, - }, - [weekdays[5]]: { - open: 0, // Open 24 hours - close: 24, - }, -}; - -const restaurant = { - name: 'Classico Italiano', - location: 'Via Angelo Tavanti 23, Firenze, Italy', - categories: ['Italian', 'Pizzeria', 'Vegetarian', 'Organic'], - starterMenu: ['Focaccia', 'Bruschetta', 'Garlic Bread', 'Caprese Salad'], - mainMenu: ['Pizza', 'Pasta', 'Risotto'], - - // ES6 enhanced object literals - openingHours, - - order(starterIndex, mainIndex) { - return [this.starterMenu[starterIndex], this.mainMenu[mainIndex]]; - }, - - orderDelivery({ starterIndex = 1, mainIndex = 0, time = '20:00', address }) { - console.log( - `Order received! ${this.starterMenu[starterIndex]} and ${this.mainMenu[mainIndex]} will be delivered to ${address} at ${time}` - ); - }, - - orderPasta(ing1, ing2, ing3) { - console.log( - `Here is your declicious pasta with ${ing1}, ${ing2} and ${ing3}` - ); - }, - - orderPizza(mainIngredient, ...otherIngredients) { - console.log(mainIngredient); - console.log(otherIngredients); - }, -}; - -/* -/////////////////////////////////////// -// String Methods Practice - -const flights = - '_Delayed_Departure;fao93766109;txl2133758440;11:25+_Arrival;bru0943384722;fao93766109;11:45+_Delayed_Arrival;hel7439299980;fao93766109;12:05+_Departure;fao93766109;lis2323639855;12:30'; - -// ๐Ÿ”ด Delayed Departure from FAO to TXL (11h25) -// Arrival from BRU to FAO (11h45) -// ๐Ÿ”ด Delayed Arrival from HEL to FAO (12h05) -// Departure from FAO to LIS (12h30) - -const getCode = str => str.slice(0, 3).toUpperCase(); - -for (const flight of flights.split('+')) { - const [type, from, to, time] = flight.split(';'); - const output = `${type.startsWith('_Delayed') ? '๐Ÿ”ด' : ''}${type.replaceAll( - '_', - ' ' - )} ${getCode(from)} ${getCode(to)} (${time.replace(':', 'h')})`.padStart(36); - console.log(output); -} - -/////////////////////////////////////// -// Coding Challenge #4 - - -Write a program that receives a list of variable names written in underscore_case and convert them to camelCase. - -The input will come from a textarea inserted into the DOM (see code below), and conversion will happen when the button is pressed. - -THIS TEST DATA (pasted to textarea) -underscore_case - first_name -Some_Variable - calculate_AGE -delayed_departure - -SHOULD PRODUCE THIS OUTPUT (5 separate console.log outputs) -underscoreCase โœ… -firstName โœ…โœ… -someVariable โœ…โœ…โœ… -calculateAge โœ…โœ…โœ…โœ… -delayedDeparture โœ…โœ…โœ…โœ…โœ… - -HINT 1: Remember which character defines a new line in the textarea ๐Ÿ˜‰ -HINT 2: The solution only needs to work for a variable made out of 2 words, like a_b -HINT 3: Start without worrying about the โœ…. Tackle that only after you have the variable name conversion working ๐Ÿ˜‰ -HINT 4: This challenge is difficult on purpose, so start watching the solution in case you're stuck. Then pause and continue! - -Afterwards, test with your own test data! - -GOOD LUCK ๐Ÿ˜€ -*/ - -/* -document.body.append(document.createElement('textarea')); -document.body.append(document.createElement('button')); - -document.querySelector('button').addEventListener('click', function () { - const text = document.querySelector('textarea').value; - const rows = text.split('\n'); - - for (const [i, row] of rows.entries()) { - const [first, second] = row.toLowerCase().trim().split('_'); - - const output = `${first}${second.replace( - second[0], - second[0].toUpperCase() - )}`; - console.log(`${output.padEnd(20)}${'โœ…'.repeat(i + 1)}`); - } -}); -*/ - -/* -/////////////////////////////////////// -// Working With Strings - Part 3 - -// Split and join -console.log('a+very+nice+string'.split('+')); -console.log('Jonas Schmedtmann'.split(' ')); - -const [firstName, lastName] = 'Jonas Schmedtmann'.split(' '); - -const newName = ['Mr.', firstName, lastName.toUpperCase()].join(' '); -console.log(newName); - -const capitalizeName = function (name) { - const names = name.split(' '); - const namesUpper = []; - - for (const n of names) { - // namesUpper.push(n[0].toUpperCase() + n.slice(1)); - namesUpper.push(n.replace(n[0], n[0].toUpperCase())); - } - console.log(namesUpper.join(' ')); -}; - -capitalizeName('jessica ann smith davis'); -capitalizeName('jonas schmedtmann'); - -// Padding -const message = 'Go to gate 23!'; -console.log(message.padStart(20, '+').padEnd(30, '+')); -console.log('Jonas'.padStart(20, '+').padEnd(30, '+')); - -const maskCreditCard = function (number) { - const str = number + ''; - const last = str.slice(-4); - return last.padStart(str.length, '*'); -}; - -console.log(maskCreditCard(64637836)); -console.log(maskCreditCard(43378463864647384)); -console.log(maskCreditCard('334859493847755774747')); - -// Repeat -const message2 = 'Bad waether... All Departues Delayed... '; -console.log(message2.repeat(5)); - -const planesInLine = function (n) { - console.log(`There are ${n} planes in line ${'๐Ÿ›ฉ'.repeat(n)}`); -}; -planesInLine(5); -planesInLine(3); -planesInLine(12); - - -/////////////////////////////////////// -// Working With Strings - Part 2 - -const airline = 'TAP Air Portugal'; - -console.log(airline.toLowerCase()); -console.log(airline.toUpperCase()); - -// Fix capitalization in name -const passenger = 'jOnAS'; // Jonas -const passengerLower = passenger.toLowerCase(); -const passengerCorrect = - passengerLower[0].toUpperCase() + passengerLower.slice(1); -console.log(passengerCorrect); - -// Comparing emails -const email = 'hello@jonas.io'; -const loginEmail = ' Hello@Jonas.Io \n'; - -// const lowerEmail = loginEmail.toLowerCase(); -// const trimmedEmail = lowerEmail.trim(); -const normalizedEmail = loginEmail.toLowerCase().trim(); -console.log(normalizedEmail); -console.log(email === normalizedEmail); - -// replacing -const priceGB = '288,97ยฃ'; -const priceUS = priceGB.replace('ยฃ', '$').replace(',', '.'); -console.log(priceUS); - -const announcement = - 'All passengers come to boarding door 23. Boarding door 23!'; - -console.log(announcement.replace('door', 'gate')); -console.log(announcement.replaceAll('door', 'gate')); - -// Alternative solution to replaceAll with regular expression -console.log(announcement.replace(/door/g, 'gate')); - -// Booleans -const plane = 'Airbus A320neo'; -console.log(plane.includes('A320')); -console.log(plane.includes('Boeing')); -console.log(plane.startsWith('Airb')); - -if (plane.startsWith('Airbus') && plane.endsWith('neo')) { - console.log('Part of the NEW ARirbus family'); -} - -// Practice exercise -const checkBaggage = function (items) { - const baggage = items.toLowerCase(); - - if (baggage.includes('knife') || baggage.includes('gun')) { - console.log('You are NOT allowed on board'); - } else { - console.log('Welcome aboard!'); - } -}; - -checkBaggage('I have a laptop, some Food and a pocket Knife'); -checkBaggage('Socks and camera'); -checkBaggage('Got some snacks and a gun for protection'); - - -/////////////////////////////////////// -// Working With Strings - Part 1 -const airline = 'TAP Air Portugal'; -const plane = 'A320'; - -console.log(plane[0]); -console.log(plane[1]); -console.log(plane[2]); -console.log('B737'[0]); - -console.log(airline.length); -console.log('B737'.length); - -console.log(airline.indexOf('r')); -console.log(airline.lastIndexOf('r')); -console.log(airline.indexOf('portugal')); - -console.log(airline.slice(4)); -console.log(airline.slice(4, 7)); - -console.log(airline.slice(0, airline.indexOf(' '))); -console.log(airline.slice(airline.lastIndexOf(' ') + 1)); - -console.log(airline.slice(-2)); -console.log(airline.slice(1, -1)); - -const checkMiddleSeat = function (seat) { - // B and E are middle seats - const s = seat.slice(-1); - if (s === 'B' || s === 'E') console.log('You got the middle seat ๐Ÿ˜ฌ'); - else console.log('You got lucky ๐Ÿ˜Ž'); -}; - -checkMiddleSeat('11B'); -checkMiddleSeat('23C'); -checkMiddleSeat('3E'); - -console.log(new String('jonas')); -console.log(typeof new String('jonas')); - -console.log(typeof new String('jonas').slice(1)); -*/ - -/////////////////////////////////////// -// Coding Challenge #3 - -/* -Let's continue with our football betting app! This time, we have a map with a log of the events that happened during the game. The values are the events themselves, and the keys are the minutes in which each event happened (a football game has 90 minutes plus some extra time). - -1. Create an array 'events' of the different game events that happened (no duplicates) -2. After the game has finished, is was found that the yellow card from minute 64 was unfair. So remove this event from the game events log. -3. Print the following string to the console: "An event happened, on average, every 9 minutes" (keep in mind that a game has 90 minutes) -4. Loop over the events and log them to the console, marking whether it's in the first half or second half (after 45 min) of the game, like this: - [FIRST HALF] 17: โšฝ๏ธ GOAL - -GOOD LUCK ๐Ÿ˜€ -*/ - -const gameEvents = new Map([ - [17, 'โšฝ๏ธ GOAL'], - [36, '๐Ÿ” Substitution'], - [47, 'โšฝ๏ธ GOAL'], - [61, '๐Ÿ” Substitution'], - [64, '๐Ÿ”ถ Yellow card'], - [69, '๐Ÿ”ด Red card'], - [70, '๐Ÿ” Substitution'], - [72, '๐Ÿ” Substitution'], - [76, 'โšฝ๏ธ GOAL'], - [80, 'โšฝ๏ธ GOAL'], - [92, '๐Ÿ”ถ Yellow card'], -]); - -/* -// 1. -const events = [...new Set(gameEvents.values())]; -console.log(events); - -// 2. -gameEvents.delete(64); - -// 3. -console.log( - `An event happened, on average, every ${90 / gameEvents.size} minutes` -); -const time = [...gameEvents.keys()].pop(); -console.log(time); -console.log( - `An event happened, on average, every ${time / gameEvents.size} minutes` -); - -// 4. -for (const [min, event] of gameEvents) { - const half = min <= 45 ? 'FIRST' : 'SECOND'; - console.log(`[${half} HALF] ${min}: ${event}`); -} -*/ - -/* -/////////////////////////////////////// -// Maps: Iteration -const question = new Map([ - ['question', 'What is the best programming language in the world?'], - [1, 'C'], - [2, 'Java'], - [3, 'JavaScript'], - ['correct', 3], - [true, 'Correct ๐ŸŽ‰'], - [false, 'Try again!'], -]); -console.log(question); - -// Convert object to map -console.log(Object.entries(openingHours)); -const hoursMap = new Map(Object.entries(openingHours)); -console.log(hoursMap); - -// Quiz app -console.log(question.get('question')); -for (const [key, value] of question) { - if (typeof key === 'number') console.log(`Answer ${key}: ${value}`); -} -// const answer = Number(prompt('Your answer')); -const answer = 3; -console.log(answer); - -console.log(question.get(question.get('correct') === answer)); - -// Convert map to array -console.log([...question]); -// console.log(question.entries()); -console.log([...question.keys()]); -console.log([...question.values()]); - - -/////////////////////////////////////// -// Maps: Fundamentals -const rest = new Map(); -rest.set('name', 'Classico Italiano'); -rest.set(1, 'Firenze, Italy'); -console.log(rest.set(2, 'Lisbon, Portugal')); - -rest - .set('categories', ['Italian', 'Pizzeria', 'Vegetarian', 'Organic']) - .set('open', 11) - .set('close', 23) - .set(true, 'We are open :D') - .set(false, 'We are closed :('); - -console.log(rest.get('name')); -console.log(rest.get(true)); -console.log(rest.get(1)); - -const time = 8; -console.log(rest.get(time > rest.get('open') && time < rest.get('close'))); - -console.log(rest.has('categories')); -rest.delete(2); -// rest.clear(); - -const arr = [1, 2]; -rest.set(arr, 'Test'); -rest.set(document.querySelector('h1'), 'Heading'); -console.log(rest); -console.log(rest.size); - -console.log(rest.get(arr)); - - -/////////////////////////////////////// -// New Operations to Make Sets Useful! - -const italianFoods = new Set([ - 'pasta', - 'gnocchi', - 'tomatoes', - 'olive oil', - 'garlic', - 'basil', -]); - -const mexicanFoods = new Set([ - 'tortillas', - 'beans', - 'rice', - 'tomatoes', - 'avocado', - 'garlic', -]); - -const commonFoods = italianFoods.intersection(mexicanFoods); -console.log('Intersection:', commonFoods); -console.log([...commonFoods]); - -const italianMexicanFusion = italianFoods.union(mexicanFoods); -console.log('Union:', italianMexicanFusion); - -console.log([...new Set([...italianFoods, ...mexicanFoods])]); - -const uniqueItalianFoods = italianFoods.difference(mexicanFoods); -console.log('Difference italian', uniqueItalianFoods); - -const uniqueMexicanFoods = mexicanFoods.difference(italianFoods); -console.log('Difference mexican', uniqueMexicanFoods); - -const uniqueItalianAndMexicanFoods = - italianFoods.symmetricDifference(mexicanFoods); -console.log(uniqueItalianAndMexicanFoods); - -console.log(italianFoods.isDisjointFrom(mexicanFoods)); - - -/////////////////////////////////////// -// Sets -const ordersSet = new Set([ - 'Pasta', - 'Pizza', - 'Pizza', - 'Risotto', - 'Pasta', - 'Pizza', -]); -console.log(ordersSet); - -console.log(new Set('Jonas')); - -console.log(ordersSet.size); -console.log(ordersSet.has('Pizza')); -console.log(ordersSet.has('Bread')); -ordersSet.add('Garlic Bread'); -ordersSet.add('Garlic Bread'); -ordersSet.delete('Risotto'); -// ordersSet.clear(); -console.log(ordersSet); - -for (const order of ordersSet) console.log(order); - -// Example -const staff = ['Waiter', 'Chef', 'Waiter', 'Manager', 'Chef', 'Waiter']; -const staffUnique = [...new Set(staff)]; -console.log(staffUnique); - -console.log( - new Set(['Waiter', 'Chef', 'Waiter', 'Manager', 'Chef', 'Waiter']).size -); - -console.log(new Set('jonasschmedtmann').size); -*/ - -/////////////////////////////////////// -// Coding Challenge #2 - -/* -Let's continue with our football betting app! - -1. Loop over the game.scored array and print each player name to the console, along with the goal number (Example: "Goal 1: Lewandowski") -2. Use a loop to calculate the average odd and log it to the console (We already studied how to calculate averages, you can go check if you don't remember) -3. Print the 3 odds to the console, but in a nice formatted way, exaclty like this: - Odd of victory Bayern Munich: 1.33 - Odd of draw: 3.25 - Odd of victory Borrussia Dortmund: 6.5 -Get the team names directly from the game object, don't hardcode them (except for "draw"). HINT: Note how the odds and the game objects have the same property names ๐Ÿ˜‰ - -BONUS: Create an object called 'scorers' which contains the names of the players who scored as properties, and the number of goals as the value. In this game, it will look like this: - { - Gnarby: 1, - Hummels: 1, - Lewandowski: 2 - } - -GOOD LUCK ๐Ÿ˜€ -*/ - -const game = { - team1: 'Bayern Munich', - team2: 'Borrussia Dortmund', - players: [ - [ - 'Neuer', - 'Pavard', - 'Martinez', - 'Alaba', - 'Davies', - 'Kimmich', - 'Goretzka', - 'Coman', - 'Muller', - 'Gnarby', - 'Lewandowski', - ], - [ - 'Burki', - 'Schulz', - 'Hummels', - 'Akanji', - 'Hakimi', - 'Weigl', - 'Witsel', - 'Hazard', - 'Brandt', - 'Sancho', - 'Gotze', - ], - ], - score: '4:0', - scored: ['Lewandowski', 'Gnarby', 'Lewandowski', 'Hummels'], - date: 'Nov 9th, 2037', - odds: { - team1: 1.33, - x: 3.25, - team2: 6.5, - }, -}; - -/* -// 1. -for (const [i, player] of game.scored.entries()) - console.log(`Goal ${i + 1}: ${player}`); - -// 2. -const odds = Object.values(game.odds); -let average = 0; -for (const odd of odds) average += odd; -average /= odds.length; -console.log(average); - -// 3. -for (const [team, odd] of Object.entries(game.odds)) { - const teamStr = team === 'x' ? 'draw' : `victory ${game[team]}`; - console.log(`Odd of ${teamStr} ${odd}`); -} - -// Odd of victory Bayern Munich: 1.33 -// Odd of draw: 3.25 -// Odd of victory Borrussia Dortmund: 6.5 - -// BONUS -// So the solution is to loop over the array, and add the array elements as object properties, and then increase the count as we encounter a new occurence of a certain element -const scorers = {}; -for (const player of game.scored) { - scorers[player] ? scorers[player]++ : (scorers[player] = 1); -} -*/ - -/* -/////////////////////////////////////// -// Looping Objects: Object Keys, Values, and Entries - -// Property NAMES -const properties = Object.keys(openingHours); -console.log(properties); - -let openStr = `We are open on ${properties.length} days: `; -for (const day of properties) { - openStr += `${day}, `; -} -console.log(openStr); - -// Property VALUES -const values = Object.values(openingHours); -console.log(values); - -// Entire object -const entries = Object.entries(openingHours); -// console.log(entries); - -// [key, value] -for (const [day, { open, close }] of entries) { - console.log(`On ${day} we open at ${open} and close at ${close}`); -} - - -/////////////////////////////////////// -// Optional Chaining -if (restaurant.openingHours && restaurant.openingHours.mon) - console.log(restaurant.openingHours.mon.open); - -// console.log(restaurant.openingHours.mon.open); - -// WITH optional chaining -console.log(restaurant.openingHours.mon?.open); -console.log(restaurant.openingHours?.mon?.open); - -// Example -const days = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun']; - -for (const day of days) { - const open = restaurant.openingHours[day]?.open ?? 'closed'; - console.log(`On ${day}, we open at ${open}`); -} - -// Methods -console.log(restaurant.order?.(0, 1) ?? 'Method does not exist'); -console.log(restaurant.orderRisotto?.(0, 1) ?? 'Method does not exist'); - -// Arrays -const users = [{ name: 'Jonas', email: 'hello@jonas.io' }]; -// const users = []; - -console.log(users[0]?.name ?? 'User array empty'); - -if (users.length > 0) console.log(users[0].name); -else console.log('user array empty'); - - -/////////////////////////////////////// -// The for-of Loop -const menu = [...restaurant.starterMenu, ...restaurant.mainMenu]; - -for (const item of menu) console.log(item); - -for (const [i, el] of menu.entries()) { - console.log(`${i + 1}: ${el}`); -} - -// console.log([...menu.entries()]); -*/ - -/////////////////////////////////////// -// Coding Challenge #1 - -/* -We're building a football betting app (soccer for my American friends ๐Ÿ˜…)! - -Suppose we get data from a web service about a certain game (below). In this challenge we're gonna work with the data. So here are your tasks: - -1. Create one player array for each team (variables 'players1' and 'players2') -2. The first player in any player array is the goalkeeper and the others are field players. For Bayern Munich (team 1) create one variable ('gk') with the goalkeeper's name, and one array ('fieldPlayers') with all the remaining 10 field players -3. Create an array 'allPlayers' containing all players of both teams (22 players) -4. During the game, Bayern Munich (team 1) used 3 substitute players. So create a new array ('players1Final') containing all the original team1 players plus 'Thiago', 'Coutinho' and 'Perisic' -5. Based on the game.odds object, create one variable for each odd (called 'team1', 'draw' and 'team2') -6. Write a function ('printGoals') that receives an arbitrary number of player names (NOT an array) and prints each of them to the console, along with the number of goals that were scored in total (number of player names passed in) -7. The team with the lower odd is more likely to win. Print to the console which team is more likely to win, WITHOUT using an if/else statement or the ternary operator. - -TEST DATA FOR 6: Use players 'Davies', 'Muller', 'Lewandowski' and 'Kimmich'. Then, call the function again with players from game.scored - -GOOD LUCK ๐Ÿ˜€ -*/ - -/* -// 1. -const [players1, players2] = game.players; -console.log(players1, players2); - -// 2. -const [gk, ...fieldPlayers] = players1; -console.log(gk, fieldPlayers); - -// 3. -const allPlayers = [...players1, ...players2]; -console.log(allPlayers); - -// 4. -const players1Final = [...players1, 'Thiago', 'Coutinho', 'Periscic']; - -// 5. -const { - odds: { team1, x: draw, team2 }, -} = game; -console.log(team1, draw, team2); - -// 6. -const printGoals = function (...players) { - console.log(players); - console.log(`${players.length} goals were scored`); -}; - -// printGoals('Davies', 'Muller', 'Lewandowski', 'Kimmich'); -// printGoals('Davies', 'Muller'); -printGoals(...game.scored); - -// 7. -team1 < team2 && console.log('Team 1 is more likely to win'); -team1 > team2 && console.log('Team 2 is more likely to win'); - - -/////////////////////////////////////// -// Logical Assignment Operators -const rest1 = { - name: 'Capri', - // numGuests: 20, - numGuests: 0, -}; - -const rest2 = { - name: 'La Piazza', - owner: 'Giovanni Rossi', -}; - -// OR assignment operator -// rest1.numGuests = rest1.numGuests || 10; -// rest2.numGuests = rest2.numGuests || 10; -// rest1.numGuests ||= 10; -// rest2.numGuests ||= 10; - -// nullish assignment operator (null or undefined) -rest1.numGuests ??= 10; -rest2.numGuests ??= 10; - -// AND assignment operator -// rest1.owner = rest1.owner && ''; -// rest2.owner = rest2.owner && ''; -rest1.owner &&= ''; -rest2.owner &&= ''; - -console.log(rest1); -console.log(rest2); - - -/////////////////////////////////////// -// The Nullish Coalescing Operator -restaurant.numGuests = 0; -const guests = restaurant.numGuests || 10; -console.log(guests); - -// Nullish: null and undefined (NOT 0 or '') -const guestCorrect = restaurant.numGuests ?? 10; -console.log(guestCorrect); - - -/////////////////////////////////////// -// Short Circuiting (&& and ||) - -console.log('---- OR ----'); -// Use ANY data type, return ANY data type, short-circuiting -console.log(3 || 'Jonas'); -console.log('' || 'Jonas'); -console.log(true || 0); -console.log(undefined || null); - -console.log(undefined || 0 || '' || 'Hello' || 23 || null); - -restaurant.numGuests = 0; -const guests1 = restaurant.numGuests ? restaurant.numGuests : 10; -console.log(guests1); - -const guests2 = restaurant.numGuests || 10; -console.log(guests2); - -console.log('---- AND ----'); -console.log(0 && 'Jonas'); -console.log(7 && 'Jonas'); - -console.log('Hello' && 23 && null && 'jonas'); - -// Practical example -if (restaurant.orderPizza) { - restaurant.orderPizza('mushrooms', 'spinach'); -} - -restaurant.orderPizza && restaurant.orderPizza('mushrooms', 'spinach'); - - -/////////////////////////////////////// -// Rest Pattern and Parameters -// 1) Destructuring - -// SPREAD, because on RIGHT side of = -const arr = [1, 2, ...[3, 4]]; - -// REST, because on LEFT side of = -const [a, b, ...others] = [1, 2, 3, 4, 5]; -console.log(a, b, others); - -const [pizza, , risotto, ...otherFood] = [ - ...restaurant.mainMenu, - ...restaurant.starterMenu, -]; -console.log(pizza, risotto, otherFood); - -// Objects -const { sat, ...weekdays } = restaurant.openingHours; -console.log(weekdays); - -// 2) Functions -const add = function (...numbers) { - let sum = 0; - for (let i = 0; i < numbers.length; i++) sum += numbers[i]; - console.log(sum); -}; - -add(2, 3); -add(5, 3, 7, 2); -add(8, 2, 5, 3, 2, 1, 4); - -const x = [23, 5, 7]; -add(...x); - -restaurant.orderPizza('mushrooms', 'onion', 'olives', 'spinach'); -restaurant.orderPizza('mushrooms'); - - -/////////////////////////////////////// -// The Spread Operator (...) - -const arr = [7, 8, 9]; -const badNewArr = [1, 2, arr[0], arr[1], arr[2]]; -console.log(badNewArr); - -const newArr = [1, 2, ...arr]; -console.log(newArr); - -console.log(...newArr); -console.log(1, 2, 7, 8, 9); - -const newMenu = [...restaurant.mainMenu, 'Gnocci']; -console.log(newMenu); - -// Copy array -const mainMenuCopy = [...restaurant.mainMenu]; - -// Join 2 arrays -const menu = [...restaurant.starterMenu, ...restaurant.mainMenu]; -console.log(menu); - -// Iterables: arrays, strings, maps, sets. NOT objects -const str = 'Jonas'; -const letters = [...str, ' ', 'S.']; -console.log(letters); -console.log(...str); -// console.log(`${...str} Schmedtmann`); - -// Real-world example -const ingredients = [ - // prompt("Let's make pasta! Ingredient 1?"), - // prompt('Ingredient 2?'), - // prompt('Ingredient 3'), -]; -console.log(ingredients); - -restaurant.orderPasta(ingredients[0], ingredients[1], ingredients[2]); -restaurant.orderPasta(...ingredients); - -// Objects -const newRestaurant = { foundedIn: 1998, ...restaurant, founder: 'Guiseppe' }; -console.log(newRestaurant); - -const restaurantCopy = { ...restaurant }; -restaurantCopy.name = 'Ristorante Roma'; -console.log(restaurantCopy.name); -console.log(restaurant.name); - - -/////////////////////////////////////// -// Destructuring Objects -restaurant.orderDelivery({ - time: '22:30', - address: 'Via del Sole, 21', - mainIndex: 2, - starterIndex: 2, -}); - -restaurant.orderDelivery({ - address: 'Via del Sole, 21', - starterIndex: 1, -}); - -const { name, openingHours, categories } = restaurant; -console.log(name, openingHours, categories); - -const { - name: restaurantName, - openingHours: hours, - categories: tags, -} = restaurant; -console.log(restaurantName, hours, tags); - -// Default values -const { menu = [], starterMenu: starters = [] } = restaurant; -console.log(menu, starters); - -// Mutating variables -let a = 111; -let b = 999; -const obj = { a: 23, b: 7, c: 14 }; -({ a, b } = obj); -console.log(a, b); - -// Nested objects -const { - fri: { open: o, close: c }, -} = openingHours; -console.log(o, c); - - -/////////////////////////////////////// -// Destructuring Arrays -const arr = [2, 3, 4]; -const a = arr[0]; -const b = arr[1]; -const c = arr[2]; - -const [x, y, z] = arr; -console.log(x, y, z); -console.log(arr); - -let [main, , secondary] = restaurant.categories; -console.log(main, secondary); - -// Switching variables -// const temp = main; -// main = secondary; -// secondary = temp; -// console.log(main, secondary); - -[main, secondary] = [secondary, main]; -console.log(main, secondary); - -// Receive 2 return values from a function -const [starter, mainCourse] = restaurant.order(2, 0); -console.log(starter, mainCourse); - -// Nested destructuring -const nested = [2, 4, [5, 6]]; -// const [i, , j] = nested; -const [i, , [j, k]] = nested; -console.log(i, j, k); - -// Default values -const [p = 1, q = 1, r = 1] = [8, 9]; -console.log(p, q, r); -*/ diff --git a/09-Data-Structures-Operators/starter/.prettierrc b/09-Data-Structures-Operators/starter/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/09-Data-Structures-Operators/starter/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/09-Data-Structures-Operators/starter/index.html b/09-Data-Structures-Operators/starter/index.html deleted file mode 100644 index 7d248b95f5..0000000000 --- a/09-Data-Structures-Operators/starter/index.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - Data Structures and Modern Operators - - - -

Data Structures and Modern Operators

- - - diff --git a/09-Data-Structures-Operators/starter/script.js b/09-Data-Structures-Operators/starter/script.js deleted file mode 100644 index e2dcc670b6..0000000000 --- a/09-Data-Structures-Operators/starter/script.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -// Data needed for a later exercise -const flights = - '_Delayed_Departure;fao93766109;txl2133758440;11:25+_Arrival;bru0943384722;fao93766109;11:45+_Delayed_Arrival;hel7439299980;fao93766109;12:05+_Departure;fao93766109;lis2323639855;12:30'; - -const italianFoods = new Set([ - 'pasta', - 'gnocchi', - 'tomatoes', - 'olive oil', - 'garlic', - 'basil', -]); - -const mexicanFoods = new Set([ - 'tortillas', - 'beans', - 'rice', - 'tomatoes', - 'avocado', - 'garlic', -]); - -// Data needed for first part of the section -const restaurant = { - name: 'Classico Italiano', - location: 'Via Angelo Tavanti 23, Firenze, Italy', - categories: ['Italian', 'Pizzeria', 'Vegetarian', 'Organic'], - starterMenu: ['Focaccia', 'Bruschetta', 'Garlic Bread', 'Caprese Salad'], - mainMenu: ['Pizza', 'Pasta', 'Risotto'], - - openingHours: { - thu: { - open: 12, - close: 22, - }, - fri: { - open: 11, - close: 23, - }, - sat: { - open: 0, // Open 24 hours - close: 24, - }, - }, -}; diff --git a/10-Functions/final/.prettierrc b/10-Functions/final/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/10-Functions/final/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/10-Functions/final/index.html b/10-Functions/final/index.html deleted file mode 100644 index 5555734b8a..0000000000 --- a/10-Functions/final/index.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - A Closer Look at Functions - - - -

A Closer Look at Functions

- - - - - diff --git a/10-Functions/final/script.js b/10-Functions/final/script.js deleted file mode 100644 index aa2292ad30..0000000000 --- a/10-Functions/final/script.js +++ /dev/null @@ -1,410 +0,0 @@ -'use strict'; - -/* -/////////////////////////////////////// -// Default Parameters -const bookings = []; - -const createBooking = function ( - flightNum, - numPassengers = 1, - price = 199 * numPassengers -) { - // ES5 - // numPassengers = numPassengers || 1; - // price = price || 199; - - const booking = { - flightNum, - numPassengers, - price, - }; - console.log(booking); - bookings.push(booking); -}; - -createBooking('LH123'); -createBooking('LH123', 2, 800); -createBooking('LH123', 2); -createBooking('LH123', 5); - -createBooking('LH123', undefined, 1000); - - -/////////////////////////////////////// -// How Passing Arguments Works: Values vs. Reference -const flight = 'LH234'; -const jonas = { - name: 'Jonas Schmedtmann', - passport: 24739479284, -}; - -const checkIn = function (flightNum, passenger) { - flightNum = 'LH999'; - passenger.name = 'Mr. ' + passenger.name; - - if (passenger.passport === 24739479284) { - alert('Checked in'); - } else { - alert('Wrong passport!'); - } -}; - -// checkIn(flight, jonas); -// console.log(flight); -// console.log(jonas); - -// Is the same as doing... -// const flightNum = flight; -// const passenger = jonas; - -const newPassport = function (person) { - person.passport = Math.trunc(Math.random() * 100000000000); -}; - -newPassport(jonas); -checkIn(flight, jonas); - - -/////////////////////////////////////// -// Functions Accepting Callback Functions -const oneWord = function (str) { - return str.replace(/ /g, '').toLowerCase(); -}; - -const upperFirstWord = function (str) { - const [first, ...others] = str.split(' '); - return [first.toUpperCase(), ...others].join(' '); -}; - -// Higher-order function -const transformer = function (str, fn) { - console.log(`Original string: ${str}`); - console.log(`Transformed string: ${fn(str)}`); - - console.log(`Transformed by: ${fn.name}`); -}; - -transformer('JavaScript is the best!', upperFirstWord); -transformer('JavaScript is the best!', oneWord); - -// JS uses callbacks all the time -const high5 = function () { - console.log('๐Ÿ‘‹'); -}; -document.body.addEventListener('click', high5); -['Jonas', 'Martha', 'Adam'].forEach(high5); - - -/////////////////////////////////////// -// Functions Returning Functions -const greet = function (greeting) { - return function (name) { - console.log(`${greeting} ${name}`); - }; -}; - -const greeterHey = greet('Hey'); -greeterHey('Jonas'); -greeterHey('Steven'); - -greet('Hello')('Jonas'); - -// Challenge -const greetArr = greeting => name => console.log(`${greeting} ${name}`); - -greetArr('Hi')('Jonas'); - - -/////////////////////////////////////// -// The call and apply Methods -const lufthansa = { - airline: 'Lufthansa', - iataCode: 'LH', - bookings: [], - // book: function() {} - book(flightNum, name) { - console.log( - `${name} booked a seat on ${this.airline} flight ${this.iataCode}${flightNum}` - ); - this.bookings.push({ flight: `${this.iataCode}${flightNum}`, name }); - }, -}; - -lufthansa.book(239, 'Jonas Schmedtmann'); -lufthansa.book(635, 'John Smith'); - -const eurowings = { - airline: 'Eurowings', - iataCode: 'EW', - bookings: [], -}; - -const book = lufthansa.book; - -// Does NOT work -// book(23, 'Sarah Williams'); - -// Call method -book.call(eurowings, 23, 'Sarah Williams'); -console.log(eurowings); - -book.call(lufthansa, 239, 'Mary Cooper'); -console.log(lufthansa); - -const swiss = { - airline: 'Swiss Air Lines', - iataCode: 'LX', - bookings: [], -}; - -book.call(swiss, 583, 'Mary Cooper'); - -// Apply method -const flightData = [583, 'George Cooper']; -book.apply(swiss, flightData); -console.log(swiss); - -book.call(swiss, ...flightData); - -/////////////////////////////////////// -// The bind Method -// book.call(eurowings, 23, 'Sarah Williams'); - -const bookEW = book.bind(eurowings); -const bookLH = book.bind(lufthansa); -const bookLX = book.bind(swiss); - -bookEW(23, 'Steven Williams'); - -const bookEW23 = book.bind(eurowings, 23); -bookEW23('Jonas Schmedtmann'); -bookEW23('Martha Cooper'); - -// With Event Listeners -lufthansa.planes = 300; -lufthansa.buyPlane = function () { - console.log(this); - - this.planes++; - console.log(this.planes); -}; -// lufthansa.buyPlane(); - -document - .querySelector('.buy') - .addEventListener('click', lufthansa.buyPlane.bind(lufthansa)); - -// Partial application -const addTax = (rate, value) => value + value * rate; -console.log(addTax(0.1, 200)); - -const addVAT = addTax.bind(null, 0.23); -// addVAT = value => value + value * 0.23; - -console.log(addVAT(100)); -console.log(addVAT(23)); - -const addTaxRate = function (rate) { - return function (value) { - return value + value * rate; - }; -}; -const addVAT2 = addTaxRate(0.23); -console.log(addVAT2(100)); -console.log(addVAT2(23)); -*/ - -/////////////////////////////////////// -// Coding Challenge #1 - -/* -Let's build a simple poll app! - -A poll has a question, an array of options from which people can choose, and an array with the number of replies for each option. This data is stored in the starter object below. - -Here are your tasks: - -1. Create a method called 'registerNewAnswer' on the 'poll' object. The method does 2 things: - 1.1. Display a prompt window for the user to input the number of the selected option. The prompt should look like this: - What is your favourite programming language? - 0: JavaScript - 1: Python - 2: Rust - 3: C++ - (Write option number) - - 1.2. Based on the input number, update the answers array. For example, if the option is 3, increase the value AT POSITION 3 of the array by 1. Make sure to check if the input is a number and if the number makes sense (e.g answer 52 wouldn't make sense, right?) -2. Call this method whenever the user clicks the "Answer poll" button. -3. Create a method 'displayResults' which displays the poll results. The method takes a string as an input (called 'type'), which can be either 'string' or 'array'. If type is 'array', simply display the results array as it is, using console.log(). This should be the default option. If type is 'string', display a string like "Poll results are 13, 2, 4, 1". -4. Run the 'displayResults' method at the end of each 'registerNewAnswer' method call. - -HINT: Use many of the tools you learned about in this and the last section ๐Ÿ˜‰ - -BONUS: Use the 'displayResults' method to display the 2 arrays in the test data. Use both the 'array' and the 'string' option. Do NOT put the arrays in the poll object! So what shoud the this keyword look like in this situation? - -BONUS TEST DATA 1: [5, 2, 3] -BONUS TEST DATA 2: [1, 5, 3, 9, 6, 1] - -GOOD LUCK ๐Ÿ˜€ -*/ - -/* -const poll = { - question: 'What is your favourite programming language?', - options: ['0: JavaScript', '1: Python', '2: Rust', '3: C++'], - // This generates [0, 0, 0, 0]. More in the next section ๐Ÿ˜ƒ - answers: new Array(4).fill(0), - registerNewAnswer() { - // Get answer - const answer = Number( - prompt( - `${this.question}\n${this.options.join('\n')}\n(Write option number)` - ) - ); - console.log(answer); - - // Register answer - typeof answer === 'number' && - answer < this.answers.length && - this.answers[answer]++; - - this.displayResults(); - this.displayResults('string'); - }, - - displayResults(type = 'array') { - if (type === 'array') { - console.log(this.answers); - } else if (type === 'string') { - // Poll results are 13, 2, 4, 1 - console.log(`Poll results are ${this.answers.join(', ')}`); - } - }, -}; - -document - .querySelector('.poll') - .addEventListener('click', poll.registerNewAnswer.bind(poll)); - -poll.displayResults.call({ answers: [5, 2, 3] }, 'string'); -poll.displayResults.call({ answers: [1, 5, 3, 9, 6, 1] }, 'string'); -poll.displayResults.call({ answers: [1, 5, 3, 9, 6, 1] }); - -// [5, 2, 3] -// [1, 5, 3, 9, 6, 1] - - -/////////////////////////////////////// -// Immediately Invoked Function Expressions (IIFE) -const runOnce = function () { - console.log('This will never run again'); -}; -runOnce(); - -// IIFE -(function () { - console.log('This will never run again'); - const isPrivate = 23; -})(); - -// console.log(isPrivate); - -(() => console.log('This will ALSO never run again'))(); - -{ - const isPrivate = 23; - var notPrivate = 46; -} -// console.log(isPrivate); -console.log(notPrivate); - - -/////////////////////////////////////// -// Closures -const secureBooking = function () { - let passengerCount = 0; - - return function () { - passengerCount++; - console.log(`${passengerCount} passengers`); - }; -}; - -const booker = secureBooking(); - -booker(); -booker(); -booker(); - -console.dir(booker); - - -/////////////////////////////////////// -// More Closure Examples -// Example 1 -let f; - -const g = function () { - const a = 23; - f = function () { - console.log(a * 2); - }; -}; - -const h = function () { - const b = 777; - f = function () { - console.log(b * 2); - }; -}; - -g(); -f(); -console.dir(f); - -// Re-assigning f function -h(); -f(); -console.dir(f); - -// Example 2 -const boardPassengers = function (n, wait) { - const perGroup = n / 3; - - setTimeout(function () { - console.log(`We are now boarding all ${n} passengers`); - console.log(`There are 3 groups, each with ${perGroup} passengers`); - }, wait * 1000); - - console.log(`Will start boarding in ${wait} seconds`); -}; - -const perGroup = 1000; -boardPassengers(180, 3); -*/ - -/////////////////////////////////////// -// Coding Challenge #2 - -/* -This is more of a thinking challenge than a coding challenge ๐Ÿค“ - -Take the IIFE below and at the end of the function, attach an event listener that changes the color of the selected h1 element ('header') to blue, each time the BODY element is clicked. Do NOT select the h1 element again! - -And now explain to YOURSELF (or someone around you) WHY this worked! Take all the time you need. Think about WHEN exactly the callback function is executed, and what that means for the variables involved in this example. - -GOOD LUCK ๐Ÿ˜€ -*/ - -/* -(function () { - const header = document.querySelector('h1'); - header.style.color = 'red'; - - document.querySelector('body').addEventListener('click', function () { - header.style.color = 'blue'; - }); -})(); -*/ - diff --git a/10-Functions/starter/.prettierrc b/10-Functions/starter/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/10-Functions/starter/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/10-Functions/starter/index.html b/10-Functions/starter/index.html deleted file mode 100644 index 5555734b8a..0000000000 --- a/10-Functions/starter/index.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - A Closer Look at Functions - - - -

A Closer Look at Functions

- - - - - diff --git a/10-Functions/starter/script.js b/10-Functions/starter/script.js deleted file mode 100644 index ad9a93a7c1..0000000000 --- a/10-Functions/starter/script.js +++ /dev/null @@ -1 +0,0 @@ -'use strict'; diff --git a/11-Arrays-Bankist/final/.prettierrc b/11-Arrays-Bankist/final/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/11-Arrays-Bankist/final/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/11-Arrays-Bankist/final/Bankist-flowchart.png b/11-Arrays-Bankist/final/Bankist-flowchart.png deleted file mode 100644 index 7c4923c3ef..0000000000 Binary files a/11-Arrays-Bankist/final/Bankist-flowchart.png and /dev/null differ diff --git a/11-Arrays-Bankist/final/icon.png b/11-Arrays-Bankist/final/icon.png deleted file mode 100644 index d00606eab8..0000000000 Binary files a/11-Arrays-Bankist/final/icon.png and /dev/null differ diff --git a/11-Arrays-Bankist/final/index.html b/11-Arrays-Bankist/final/index.html deleted file mode 100644 index 6a46971703..0000000000 --- a/11-Arrays-Bankist/final/index.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - Bankist - - - - - -
- -
-
-

Current balance

-

- As of 05/03/2037 -

-
-

0000โ‚ฌ

-
- - -
-
-
2 deposit
-
3 days ago
-
4 000โ‚ฌ
-
-
-
- 1 withdrawal -
-
24/01/2037
-
-378โ‚ฌ
-
-
- - -
-

In

-

0000โ‚ฌ

-

Out

-

0000โ‚ฌ

-

Interest

-

0000โ‚ฌ

- -
- - -
-

Transfer money

-
- - - - - -
-
- - -
-

Request loan

-
- - - -
-
- - -
-

Close account

-
- - - - - -
-
- - -

- You will be logged out in 05:00 -

-
- - - - - - diff --git a/11-Arrays-Bankist/final/logo.png b/11-Arrays-Bankist/final/logo.png deleted file mode 100644 index f437ac24f3..0000000000 Binary files a/11-Arrays-Bankist/final/logo.png and /dev/null differ diff --git a/11-Arrays-Bankist/final/script.js b/11-Arrays-Bankist/final/script.js deleted file mode 100644 index e03b7da8a1..0000000000 --- a/11-Arrays-Bankist/final/script.js +++ /dev/null @@ -1,997 +0,0 @@ -'use strict'; - -///////////////////////////////////////////////// -///////////////////////////////////////////////// -// BANKIST APP - -///////////////////////////////////////////////// -// Data -const account1 = { - owner: 'Jonas Schmedtmann', - movements: [200, 450, -400, 3000, -650, -130, 70, 1300], - interestRate: 1.2, // % - pin: 1111, - type: 'premium', -}; - -const account2 = { - owner: 'Jessica Davis', - movements: [5000, 3400, -150, -790, -3210, -1000, 8500, -30], - interestRate: 1.5, - pin: 2222, - type: 'standard', -}; - -const account3 = { - owner: 'Steven Thomas Williams', - movements: [200, -200, 340, -300, -20, 50, 400, -460], - interestRate: 0.7, - pin: 3333, - type: 'premium', -}; - -const account4 = { - owner: 'Sarah Smith', - movements: [430, 1000, 700, 50, 90], - interestRate: 1, - pin: 4444, - type: 'basic', -}; - -const accounts = [account1, account2, account3, account4]; - -///////////////////////////////////////////////// -// Elements -const labelWelcome = document.querySelector('.welcome'); -const labelDate = document.querySelector('.date'); -const labelBalance = document.querySelector('.balance__value'); -const labelSumIn = document.querySelector('.summary__value--in'); -const labelSumOut = document.querySelector('.summary__value--out'); -const labelSumInterest = document.querySelector('.summary__value--interest'); -const labelTimer = document.querySelector('.timer'); - -const containerApp = document.querySelector('.app'); -const containerMovements = document.querySelector('.movements'); - -const btnLogin = document.querySelector('.login__btn'); -const btnTransfer = document.querySelector('.form__btn--transfer'); -const btnLoan = document.querySelector('.form__btn--loan'); -const btnClose = document.querySelector('.form__btn--close'); -const btnSort = document.querySelector('.btn--sort'); - -const inputLoginUsername = document.querySelector('.login__input--user'); -const inputLoginPin = document.querySelector('.login__input--pin'); -const inputTransferTo = document.querySelector('.form__input--to'); -const inputTransferAmount = document.querySelector('.form__input--amount'); -const inputLoanAmount = document.querySelector('.form__input--loan-amount'); -const inputCloseUsername = document.querySelector('.form__input--user'); -const inputClosePin = document.querySelector('.form__input--pin'); - -///////////////////////////////////////////////// -// Functions - -const displayMovements = function (movements, sort = false) { - containerMovements.innerHTML = ''; - - const movs = sort ? movements.slice().sort((a, b) => a - b) : movements; - - movs.forEach(function (mov, i) { - const type = mov > 0 ? 'deposit' : 'withdrawal'; - - const html = ` -
-
${ - i + 1 - } ${type}
-
${mov}โ‚ฌ
-
- `; - - containerMovements.insertAdjacentHTML('afterbegin', html); - }); -}; - -const calcDisplayBalance = function (acc) { - acc.balance = acc.movements.reduce((acc, mov) => acc + mov, 0); - labelBalance.textContent = `${acc.balance}โ‚ฌ`; -}; - -const calcDisplaySummary = function (acc) { - const incomes = acc.movements - .filter(mov => mov > 0) - .reduce((acc, mov) => acc + mov, 0); - labelSumIn.textContent = `${incomes}โ‚ฌ`; - - const out = acc.movements - .filter(mov => mov < 0) - .reduce((acc, mov) => acc + mov, 0); - labelSumOut.textContent = `${Math.abs(out)}โ‚ฌ`; - - const interest = acc.movements - .filter(mov => mov > 0) - .map(deposit => (deposit * acc.interestRate) / 100) - .filter((int, i, arr) => { - // console.log(arr); - return int >= 1; - }) - .reduce((acc, int) => acc + int, 0); - labelSumInterest.textContent = `${interest}โ‚ฌ`; -}; - -const createUsernames = function (accs) { - accs.forEach(function (acc) { - acc.username = acc.owner - .toLowerCase() - .split(' ') - .map(name => name[0]) - .join(''); - }); -}; -createUsernames(accounts); - -const updateUI = function (acc) { - // Display movements - displayMovements(acc.movements); - - // Display balance - calcDisplayBalance(acc); - - // Display summary - calcDisplaySummary(acc); -}; - -/////////////////////////////////////// -// Event handlers -let currentAccount; - -btnLogin.addEventListener('click', function (e) { - // Prevent form from submitting - e.preventDefault(); - - currentAccount = accounts.find( - acc => acc.username === inputLoginUsername.value - ); - console.log(currentAccount); - - if (currentAccount?.pin === Number(inputLoginPin.value)) { - // Display UI and message - labelWelcome.textContent = `Welcome back, ${ - currentAccount.owner.split(' ')[0] - }`; - containerApp.style.opacity = 1; - - // Clear input fields - inputLoginUsername.value = inputLoginPin.value = ''; - inputLoginPin.blur(); - - // Update UI - updateUI(currentAccount); - } -}); - -btnTransfer.addEventListener('click', function (e) { - e.preventDefault(); - const amount = Number(inputTransferAmount.value); - const receiverAcc = accounts.find( - acc => acc.username === inputTransferTo.value - ); - inputTransferAmount.value = inputTransferTo.value = ''; - - if ( - amount > 0 && - receiverAcc && - currentAccount.balance >= amount && - receiverAcc?.username !== currentAccount.username - ) { - // Doing the transfer - currentAccount.movements.push(-amount); - receiverAcc.movements.push(amount); - - // Update UI - updateUI(currentAccount); - } -}); - -btnLoan.addEventListener('click', function (e) { - e.preventDefault(); - - const amount = Number(inputLoanAmount.value); - - if (amount > 0 && currentAccount.movements.some(mov => mov >= amount * 0.1)) { - // Add movement - currentAccount.movements.push(amount); - - // Update UI - updateUI(currentAccount); - } - inputLoanAmount.value = ''; -}); - -btnClose.addEventListener('click', function (e) { - e.preventDefault(); - - if ( - inputCloseUsername.value === currentAccount.username && - Number(inputClosePin.value) === currentAccount.pin - ) { - const index = accounts.findIndex( - acc => acc.username === currentAccount.username - ); - console.log(index); - // .indexOf(23) - - // Delete account - accounts.splice(index, 1); - - // Hide UI - containerApp.style.opacity = 0; - } - - inputCloseUsername.value = inputClosePin.value = ''; -}); - -let sorted = false; -btnSort.addEventListener('click', function (e) { - e.preventDefault(); - displayMovements(currentAccount.movements, !sorted); - sorted = !sorted; -}); - -///////////////////////////////////////////////// -///////////////////////////////////////////////// -// LECTURES - -const movements = [200, 450, -400, 3000, -650, -130, 70, 1300]; - -/* -///////////////////////////////////////////////// -// Simple Array Methods -let arr = ['a', 'b', 'c', 'd', 'e']; - -// SLICE -console.log(arr.slice(2)); -console.log(arr.slice(2, 4)); -console.log(arr.slice(-2)); -console.log(arr.slice(-1)); -console.log(arr.slice(1, -2)); -console.log(arr.slice()); -console.log([...arr]); - -// SPLICE -// console.log(arr.splice(2)); -arr.splice(-1); -console.log(arr); -arr.splice(1, 2); -console.log(arr); - -// REVERSE -arr = ['a', 'b', 'c', 'd', 'e']; -const arr2 = ['j', 'i', 'h', 'g', 'f']; -console.log(arr2.reverse()); -console.log(arr2); - -// CONCAT -const letters = arr.concat(arr2); -console.log(letters); -console.log([...arr, ...arr2]); - -// JOIN -console.log(letters.join(' - ')); - - -/////////////////////////////////////// -// The new at Method -const arr = [23, 11, 64]; -console.log(arr[0]); -console.log(arr.at(0)); - -// getting last array element -console.log(arr[arr.length - 1]); -console.log(arr.slice(-1)[0]); -console.log(arr.at(-1)); - -console.log('jonas'.at(0)); -console.log('jonas'.at(-1)); - - -/////////////////////////////////////// -// Looping Arrays: forEach -const movements = [200, 450, -400, 3000, -650, -130, 70, 1300]; - -// for (const movement of movements) { -for (const [i, movement] of movements.entries()) { - if (movement > 0) { - console.log(`Movement ${i + 1}: You deposited ${movement}`); - } else { - console.log(`Movement ${i + 1}: You withdrew ${Math.abs(movement)}`); - } -} - -console.log('---- FOREACH ----'); -movements.forEach(function (mov, i, arr) { - if (mov > 0) { - console.log(`Movement ${i + 1}: You deposited ${mov}`); - } else { - console.log(`Movement ${i + 1}: You withdrew ${Math.abs(mov)}`); - } -}); -// 0: function(200) -// 1: function(450) -// 2: function(400) -// ... - - -/////////////////////////////////////// -// forEach With Maps and Sets -// Map -const currencies = new Map([ - ['USD', 'United States dollar'], - ['EUR', 'Euro'], - ['GBP', 'Pound sterling'], -]); - -currencies.forEach(function (value, key, map) { - console.log(`${key}: ${value}`); -}); - -// Set -const currenciesUnique = new Set(['USD', 'GBP', 'USD', 'EUR', 'EUR']); -console.log(currenciesUnique); -currenciesUnique.forEach(function (value, _, map) { - console.log(`${value}: ${value}`); -}); -*/ - -/////////////////////////////////////// -// Coding Challenge #1 - -/* -Julia and Kate are doing a study on dogs. So each of them asked 5 dog owners about their dog's age, and stored the data into an array (one array for each). For now, they are just interested in knowing whether a dog is an adult or a puppy. A dog is an adult if it is at least 3 years old, and it's a puppy if it's less than 3 years old. - -Create a function 'checkDogs', which accepts 2 arrays of dog's ages ('dogsJulia' and 'dogsKate'), and does the following things: - -1. Julia found out that the owners of the FIRST and the LAST TWO dogs actually have cats, not dogs! So create a shallow copy of Julia's array, and remove the cat ages from that copied array (because it's a bad practice to mutate function parameters) -2. Create an array with both Julia's (corrected) and Kate's data -3. For each remaining dog, log to the console whether it's an adult ("Dog number 1 is an adult, and is 5 years old") or a puppy ("Dog number 2 is still a puppy ๐Ÿถ") -4. Run the function for both test datasets - -HINT: Use tools from all lectures in this section so far ๐Ÿ˜‰ - -TEST DATA 1: Julia's data [3, 5, 2, 12, 7], Kate's data [4, 1, 15, 8, 3] -TEST DATA 2: Julia's data [9, 16, 6, 8, 3], Kate's data [10, 5, 6, 1, 4] - -GOOD LUCK ๐Ÿ˜€ -*/ - -/* -const checkDogs = function (dogsJulia, dogsKate) { - const dogsJuliaCorrected = dogsJulia.slice(); - dogsJuliaCorrected.splice(0, 1); - dogsJuliaCorrected.splice(-2); - // dogsJulia.slice(1, 3); - const dogs = dogsJuliaCorrected.concat(dogsKate); - console.log(dogs); - - dogs.forEach(function (dog, i) { - if (dog >= 3) { - console.log(`Dog number ${i + 1} is an adult, and is ${dog} years old`); - } else { - console.log(`Dog number ${i + 1} is still a puppy ๐Ÿถ`); - } - }); -}; -// checkDogs([3, 5, 2, 12, 7], [4, 1, 15, 8, 3]); -checkDogs([9, 16, 6, 8, 3], [10, 5, 6, 1, 4]); - - -/////////////////////////////////////// -// The map Method -const eurToUsd = 1.1; - -// const movementsUSD = movements.map(function (mov) { -// return mov * eurToUsd; -// }); - -const movementsUSD = movements.map(mov => mov * eurToUsd); - -console.log(movements); -console.log(movementsUSD); - -const movementsUSDfor = []; -for (const mov of movements) movementsUSDfor.push(mov * eurToUsd); -console.log(movementsUSDfor); - -const movementsDescriptions = movements.map( - (mov, i) => - `Movement ${i + 1}: You ${mov > 0 ? 'deposited' : 'withdrew'} ${Math.abs( - mov - )}` -); -console.log(movementsDescriptions); - - -/////////////////////////////////////// -// The filter Method -const deposits = movements.filter(function (mov, i, arr) { - return mov > 0; -}); -console.log(movements); -console.log(deposits); - -const depositsFor = []; -for (const mov of movements) if (mov > 0) depositsFor.push(mov); -console.log(depositsFor); - -const withdrawals = movements.filter(mov => mov < 0); -console.log(withdrawals); - - -/////////////////////////////////////// -// The reduce Method -console.log(movements); - -// accumulator -> SNOWBALL -// const balance = movements.reduce(function (acc, cur, i, arr) { -// console.log(`Iteration ${i}: ${acc}`); -// return acc + cur; -// }, 0); -const balance = movements.reduce((acc, cur) => acc + cur, 0); -console.log(balance); - -let balance2 = 0; -for (const mov of movements) balance2 += mov; -console.log(balance2); - -// Maximum value -const max = movements.reduce((acc, mov) => { - if (acc > mov) return acc; - else return mov; -}, movements[0]); -console.log(max); -*/ - -/////////////////////////////////////// -// Coding Challenge #2 - -/* -Let's go back to Julia and Kate's study about dogs. This time, they want to convert dog ages to human ages and calculate the average age of the dogs in their study. - -Create a function 'calcAverageHumanAge', which accepts an arrays of dog's ages ('ages'), and does the following things in order: - -1. Calculate the dog age in human years using the following formula: if the dog is <= 2 years old, humanAge = 2 * dogAge. If the dog is > 2 years old, humanAge = 16 + dogAge * 4. -2. Exclude all dogs that are less than 18 human years old (which is the same as keeping dogs that are at least 18 years old) -3. Calculate the average human age of all adult dogs (you should already know from other challenges how we calculate averages ๐Ÿ˜‰) -4. Run the function for both test datasets - -TEST DATA 1: [5, 2, 4, 1, 15, 8, 3] -TEST DATA 2: [16, 6, 10, 5, 6, 1, 4] - -GOOD LUCK ๐Ÿ˜€ -*/ - -/* -const calcAverageHumanAge = function (ages) { - const humanAges = ages.map(age => (age <= 2 ? 2 * age : 16 + age * 4)); - const adults = humanAges.filter(age => age >= 18); - console.log(humanAges); - console.log(adults); - - // const average = adults.reduce((acc, age) => acc + age, 0) / adults.length; - - const average = adults.reduce( - (acc, age, i, arr) => acc + age / arr.length, - 0 - ); - - // 2 3. (2+3)/2 = 2.5 === 2/2+3/2 = 2.5 - - return average; -}; -const avg1 = calcAverageHumanAge([5, 2, 4, 1, 15, 8, 3]); -const avg2 = calcAverageHumanAge([16, 6, 10, 5, 6, 1, 4]); -console.log(avg1, avg2); - - -/////////////////////////////////////// -// The Magic of Chaining Methods -const eurToUsd = 1.1; -console.log(movements); - -// PIPELINE -const totalDepositsUSD = movements - .filter(mov => mov > 0) - .map((mov, i, arr) => { - // console.log(arr); - return mov * eurToUsd; - }) - // .map(mov => mov * eurToUsd) - .reduce((acc, mov) => acc + mov, 0); -console.log(totalDepositsUSD); -*/ - -/////////////////////////////////////// -// Coding Challenge #3 - -/* -Rewrite the 'calcAverageHumanAge' function from the previous challenge, but this time as an arrow function, and using chaining! - -TEST DATA 1: [5, 2, 4, 1, 15, 8, 3] -TEST DATA 2: [16, 6, 10, 5, 6, 1, 4] - -GOOD LUCK ๐Ÿ˜€ -*/ - -/* -const calcAverageHumanAge = ages => - ages - .map(age => (age <= 2 ? 2 * age : 16 + age * 4)) - .filter(age => age >= 18) - .reduce((acc, age, i, arr) => acc + age / arr.length, 0); -// adults.length - -const avg1 = calcAverageHumanAge([5, 2, 4, 1, 15, 8, 3]); -const avg2 = calcAverageHumanAge([16, 6, 10, 5, 6, 1, 4]); -console.log(avg1, avg2); - - -/////////////////////////////////////// -// The find Method -const firstWithdrawal = movements.find(mov => mov < 0); -console.log(movements); -console.log(firstWithdrawal); - -console.log(accounts); - -const account = accounts.find(acc => acc.owner === 'Jessica Davis'); -console.log(account); - - -/////////////////////////////////////// -// The New findLast and findLastIndex Methods - -console.log(movements); -const lastWithdrawal = movements.findLast(mov => mov < 0); -console.log(lastWithdrawal); - -// 'Your latest large movement was X movements ago' - -const latestLargeMovementIndex = movements.findLastIndex( - mov => Math.abs(mov) > 1000 -); -console.log(latestLargeMovementIndex); -console.log( - `Your latest large movement was ${ - movements.length - latestLargeMovementIndex - } movements ago` -); - - -/////////////////////////////////////// -// some and every -console.log(movements); - -// EQUALITY -console.log(movements.includes(-130)); - -// SOME: CONDITION -console.log(movements.some(mov => mov === -130)); - -const anyDeposits = movements.some(mov => mov > 0); -console.log(anyDeposits); - -// EVERY -console.log(movements.every(mov => mov > 0)); -console.log(account4.movements.every(mov => mov > 0)); - -// Separate callback -const deposit = mov => mov > 0; -console.log(movements.some(deposit)); -console.log(movements.every(deposit)); -console.log(movements.filter(deposit)); - - -/////////////////////////////////////// -// flat and flatMap -const arr = [[1, 2, 3], [4, 5, 6], 7, 8]; -console.log(arr.flat()); - -const arrDeep = [[[1, 2], 3], [4, [5, 6]], 7, 8]; -console.log(arrDeep.flat(2)); - -// flat -const overalBalance = accounts - .map(acc => acc.movements) - .flat() - .reduce((acc, mov) => acc + mov, 0); -console.log(overalBalance); - -// flatMap -const overalBalance2 = accounts - .flatMap(acc => acc.movements) - .reduce((acc, mov) => acc + mov, 0); -console.log(overalBalance2); -*/ - -/////////////////////////////////////// -// Coding Challenge #4 - -/* -This time, Julia and Kate are studying the activity levels of different dog breeds. - -YOUR TASKS: -1. Store the the average weight of a "Husky" in a variable "huskyWeight" -2. Find the name of the only breed that likes both "running" and "fetch" ("dogBothActivities" variable) -3. Create an array "allActivities" of all the activities of all the dog breeds -4. Create an array "uniqueActivities" that contains only the unique activities (no activity repetitions). HINT: Use a technique with a special data structure that we studied a few sections ago. -5. Many dog breeds like to swim. What other activities do these dogs like? Store all the OTHER activities these breeds like to do, in a unique array called "swimmingAdjacent". -6. Do all the breeds have an average weight of 10kg or more? Log to the console whether "true" or "false". -7. Are there any breeds that are "active"? "Active" means that the dog has 3 or more activities. Log to the console whether "true" or "false". - -BONUS: What's the average weight of the heaviest breed that likes to fetch? HINT: Use the "Math.max" method along with the ... operator. - -TEST DATA: -*/ - -/* -const breeds = [ - { - breed: 'German Shepherd', - averageWeight: 32, - activities: ['fetch', 'swimming'], - }, - { - breed: 'Dalmatian', - averageWeight: 24, - activities: ['running', 'fetch', 'agility'], - }, - { - breed: 'Labrador', - averageWeight: 28, - activities: ['swimming', 'fetch'], - }, - { - breed: 'Beagle', - averageWeight: 12, - activities: ['digging', 'fetch'], - }, - { - breed: 'Husky', - averageWeight: 26, - activities: ['running', 'agility', 'swimming'], - }, - { - breed: 'Bulldog', - averageWeight: 36, - activities: ['sleeping'], - }, - { - breed: 'Poodle', - averageWeight: 18, - activities: ['agility', 'fetch'], - }, -]; - -// 1. -const huskyWeight = breeds.find(breed => breed.breed === 'Husky').averageWeight; -console.log(huskyWeight); - -// 2. -const dogBothActivities = breeds.find( - breed => - breed.activities.includes('fetch') && breed.activities.includes('running') -).breed; -console.log(dogBothActivities); - -// 3. -// const allActivities = breeds.map(breed => breed.activities).flat(); -const allActivities = breeds.flatMap(breed => breed.activities); -console.log(allActivities); - -// 4. -const uniqueActivities = [...new Set(allActivities)]; -console.log(uniqueActivities); - -// 5. -const swimmingAdjacent = [ - ...new Set( - breeds - .filter(breed => breed.activities.includes('swimming')) - .flatMap(breed => breed.activities) - .filter(activity => activity !== 'swimming') - ), -]; -console.log(swimmingAdjacent); - -// 6. -console.log(breeds.every(breed => breed.averageWeight > 10)); - -// 7. -console.log(breeds.some(breed => breed.activities.length >= 3)); - -// BONUS -const fetchWeights = breeds - .filter(breed => breed.activities.includes('fetch')) - .map(breed => breed.averageWeight); -const heaviestFetchBreed = Math.max(...fetchWeights); - -console.log(fetchWeights); -console.log(heaviestFetchBreed); - - -/////////////////////////////////////// -// Sorting Arrays - -// Strings -const owners = ['Jonas', 'Zach', 'Adam', 'Martha']; -console.log(owners.sort()); -console.log(owners); - -// Numbers -console.log(movements); - -// return < 0, A, B (keep order) -// return > 0, B, A (switch order) - -// Ascending -// movements.sort((a, b) => { -// if (a > b) return 1; -// if (a < b) return -1; -// }); -movements.sort((a, b) => a - b); -console.log(movements); - -// Descending -// movements.sort((a, b) => { -// if (a > b) return -1; -// if (a < b) return 1; -// }); -movements.sort((a, b) => b - a); -console.log(movements); - - -/////////////////////////////////////// -// Array Grouping - -console.log(movements); - -const groupedMovements = Object.groupBy(movements, movement => - movement > 0 ? 'deposits' : 'withdrawals' -); -console.log(groupedMovements); - -const groupedByActivity = Object.groupBy(accounts, account => { - const movementCount = account.movements.length; - - if (movementCount >= 8) return 'very active'; - if (movementCount >= 4) return 'active'; - if (movementCount >= 1) return 'moderate'; - return 'inactive'; -}); -console.log(groupedByActivity); - -// const groupedAccounts = Object.groupBy(accounts, account => account.type); -const groupedAccounts = Object.groupBy(accounts, ({ type }) => type); -console.log(groupedAccounts); - - -/////////////////////////////////////// -// More Ways of Creating and Filling Arrays -const arr = [1, 2, 3, 4, 5, 6, 7]; -console.log(new Array(1, 2, 3, 4, 5, 6, 7)); - -// Empty arrays + fill method -const x = new Array(7); -console.log(x); -// console.log(x.map(() => 5)); -x.fill(1, 3, 5); -x.fill(1); -console.log(x); - -arr.fill(23, 2, 6); -console.log(arr); - -// Array.from -const y = Array.from({ length: 7 }, () => 1); -console.log(y); - -const z = Array.from({ length: 7 }, (_, i) => i + 1); -console.log(z); - -labelBalance.addEventListener('click', function () { - const movementsUI = Array.from( - document.querySelectorAll('.movements__value'), - el => Number(el.textContent.replace('โ‚ฌ', '')) - ); - console.log(movementsUI); - - const movementsUI2 = [...document.querySelectorAll('.movements__value')]; -}); - - -/////////////////////////////////////// -// Non-Destructive Alternatives: toReversed, toSorted, toSpliced, with - -console.log(movements); -const reversedMov = movements.toReversed(); -console.log(reversedMov); - -// toSorted (sort), toSpliced (splice) - -// movements[1] = 2000; -const newMovements = movements.with(1, 2000); -console.log(newMovements); - -console.log(movements); - - -/////////////////////////////////////// -// Array Methods Practice - -// 1. -const bankDepositSum = accounts - .flatMap(acc => acc.movements) - .filter(mov => mov > 0) - .reduce((sum, cur) => sum + cur, 0); - -console.log(bankDepositSum); - -// 2. -// const numDeposits1000 = accounts -// .flatMap(acc => acc.movements) -// .filter(mov => mov >= 1000).length; - -const numDeposits1000 = accounts - .flatMap(acc => acc.movements) - .reduce((count, cur) => (cur >= 1000 ? ++count : count), 0); - -console.log(numDeposits1000); - -// Prefixed ++ operator -let a = 10; -console.log(++a); -console.log(a); - -// 3. -const { deposits, withdrawals } = accounts - .flatMap(acc => acc.movements) - .reduce( - (sums, cur) => { - // cur > 0 ? (sums.deposits += cur) : (sums.withdrawals += cur); - sums[cur > 0 ? 'deposits' : 'withdrawals'] += cur; - return sums; - }, - { deposits: 0, withdrawals: 0 }, - ); - -console.log(deposits, withdrawals); - -// 4. -// this is a nice title -> This Is a Nice Title -const convertTitleCase = function (title) { - const capitalize = str => str[0].toUpperCase() + str.slice(1); - - const exceptions = ['a', 'an', 'and', 'the', 'but', 'or', 'on', 'in', 'with']; - - const titleCase = title - .toLowerCase() - .split(' ') - .map(word => (exceptions.includes(word) ? word : capitalize(word))) - .join(' '); - - return capitalize(titleCase); -}; - -console.log(convertTitleCase('this is a nice title')); -console.log(convertTitleCase('this is a LONG title but not too long')); -console.log(convertTitleCase('and here is another title with an EXAMPLE')); -*/ - -/////////////////////////////////////// -// Coding Challenge #5 - -/* -Julia and Kate are still studying dogs. This time they are want to figure out if the dogs in their are eating too much or too little food. - -- Formula for calculating recommended food portion: recommendedFood = weight ** 0.75 * 28. (The result is in grams of food, and the weight needs to be in kg) -- Eating too much means the dog's current food portion is larger than the recommended portion, and eating too little is the opposite. -- Eating an okay amount means the dog's current food portion is within a range 10% above and below the recommended portion (see hint). - -YOUR TASKS: -1. Loop over the array containing dog objects, and for each dog, calculate the recommended food portion (recFood) and add it to the object as a new property. Do NOT create a new array, simply loop over the array (We never did this before, so think about how you can do this without creating a new array). -2. Find Sarah's dog and log to the console whether it's eating too much or too little. HINT: Some dogs have multiple users, so you first need to find Sarah in the owners array, and so this one is a bit tricky (on purpose) ๐Ÿค“ -3. Create an array containing all owners of dogs who eat too much (ownersTooMuch) and an array with all owners of dogs who eat too little (ownersTooLittle). -4. Log a string to the console for each array created in 3., like this: "Matilda and Alice and Bob's dogs eat too much!" and "Sarah and John and Michael's dogs eat too little!" -5. Log to the console whether there is ANY dog eating EXACTLY the amount of food that is recommended (just true or false) -6. Log to the console whether ALL of the dogs are eating an OKAY amount of food (just true or false) -7. Create an array containing the dogs that are eating an OKAY amount of food (try to reuse the condition used in 6.) -8. Group the dogs into the following 3 groups: 'exact', 'too-much' and 'too-little', based on whether they are eating too much, too little or the exact amount of food, based on the recommended food portion. -9. Group the dogs by the number of owners they have -10. Sort the dogs array by recommended food portion in an ascending order. Make sure to NOT mutate the original array! - -HINT 1: Use many different tools to solve these challenges, you can use the summary lecture to choose between them ๐Ÿ˜‰ -HINT 2: Being within a range 10% above and below the recommended portion means: current > (recommended * 0.90) && current < (recommended * 1.10). Basically, the current portion should be between 90% and 110% of the recommended portion. - -TEST DATA: -const dogs = [ - { weight: 22, curFood: 250, owners: ['Alice', 'Bob'] }, - { weight: 8, curFood: 200, owners: ['Matilda'] }, - { weight: 13, curFood: 275, owners: ['Sarah', 'John', 'Leo'] }, - { weight: 18, curFood: 244, owners: ['Joe'] }, - { weight: 32, curFood: 340, owners: ['Michael'] }, -]; - -GOOD LUCK ๐Ÿ˜€ -*/ - -/* -const dogs = [ - { weight: 22, curFood: 250, owners: ['Alice', 'Bob'] }, - { weight: 8, curFood: 200, owners: ['Matilda'] }, - { weight: 13, curFood: 275, owners: ['Sarah', 'John', 'Leo'] }, - { weight: 18, curFood: 244, owners: ['Joe'] }, - { weight: 32, curFood: 340, owners: ['Michael'] }, -]; - -// 1. -dogs.forEach(dog => (dog.recFood = Math.floor(dog.weight ** 0.75 * 28))); -console.log(dogs); - -// 2. -const dogSarah = dogs.find(dog => dog.owners.includes('Sarah')); -console.log( - `Sarah's dog eats too ${ - dogSarah.curFood > dogSarah.recFood ? 'much' : 'little' - }` -); - -// 3. -const ownersTooMuch = dogs - .filter(dog => dog.curFood > dog.recFood) - .flatMap(dog => dog.owners); -const ownersTooLittle = dogs - .filter(dog => dog.curFood < dog.recFood) - .flatMap(dog => dog.owners); - -console.log(ownersTooMuch); -console.log(ownersTooLittle); - -// 4. -console.log(`${ownersTooMuch.join(' and ')}'s dogs are eating too much`); -console.log(`${ownersTooLittle.join(' and ')}'s dogs are eating too little`); - -// 5. -console.log(dogs.some(dog => dog.curFood === dog.recFood)); - -// 6. -const checkEatingOkay = dog => - dog.curFood < dog.recFood * 1.1 && dog.curFood > dog.recFood * 0.9; - -console.log(dogs.every(checkEatingOkay)); - -// 7. -const dogsEatingOkay = dogs.filter(checkEatingOkay); -console.log(dogsEatingOkay); - -// 8. -const dogsGroupedByPortion = Object.groupBy(dogs, dog => { - if (dog.curFood > dog.recFood) { - return 'too-much'; - } else if (dog.curFood < dog.recFood) { - return 'too-little'; - } else { - return 'exact'; - } -}); -console.log(dogsGroupedByPortion); - -// 9. -const dogsGroupedByOwners = Object.groupBy( - dogs, - dog => `${dog.owners.length}-owners` -); -console.log(dogsGroupedByOwners); - -// 10. -const dogsSorted = dogs.toSorted((a, b) => a.recFood - b.recFood); -console.log(dogsSorted); -*/ diff --git a/11-Arrays-Bankist/final/style.css b/11-Arrays-Bankist/final/style.css deleted file mode 100644 index b047de3f76..0000000000 --- a/11-Arrays-Bankist/final/style.css +++ /dev/null @@ -1,297 +0,0 @@ -/* - * Use this CSS to learn some intersting techniques, - * in case you're wondering how I built the UI. - * Have fun! ๐Ÿ˜ - */ - -* { - margin: 0; - padding: 0; - box-sizing: inherit; -} - -html { - font-size: 62.5%; - box-sizing: border-box; -} - -body { - font-family: 'Poppins', sans-serif; - color: #444; - background-color: #f3f3f3; - height: 100vh; - padding: 2rem; -} - -nav { - display: flex; - justify-content: space-between; - align-items: center; - padding: 0 2rem; -} - -.welcome { - font-size: 1.9rem; - font-weight: 500; -} - -.logo { - height: 5.25rem; -} - -.login { - display: flex; -} - -.login__input { - border: none; - padding: 0.5rem 2rem; - font-size: 1.6rem; - font-family: inherit; - text-align: center; - width: 12rem; - border-radius: 10rem; - margin-right: 1rem; - color: inherit; - border: 1px solid #fff; - transition: all 0.3s; -} - -.login__input:focus { - outline: none; - border: 1px solid #ccc; -} - -.login__input::placeholder { - color: #bbb; -} - -.login__btn { - border: none; - background: none; - font-size: 2.2rem; - color: inherit; - cursor: pointer; - transition: all 0.3s; -} - -.login__btn:hover, -.login__btn:focus, -.btn--sort:hover, -.btn--sort:focus { - outline: none; - color: #777; -} - -/* MAIN */ -.app { - position: relative; - max-width: 100rem; - margin: 4rem auto; - display: grid; - grid-template-columns: 4fr 3fr; - grid-template-rows: auto repeat(3, 15rem) auto; - gap: 2rem; - - /* NOTE This creates the fade in/out anumation */ - opacity: 0; - transition: all 1s; -} - -.balance { - grid-column: 1 / span 2; - display: flex; - align-items: flex-end; - justify-content: space-between; - margin-bottom: 2rem; -} - -.balance__label { - font-size: 2.2rem; - font-weight: 500; - margin-bottom: -0.2rem; -} - -.balance__date { - font-size: 1.4rem; - color: #888; -} - -.balance__value { - font-size: 4.5rem; - font-weight: 400; -} - -/* MOVEMENTS */ -.movements { - grid-row: 2 / span 3; - background-color: #fff; - border-radius: 1rem; - overflow: scroll; -} - -.movements__row { - padding: 2.25rem 4rem; - display: flex; - align-items: center; - border-bottom: 1px solid #eee; -} - -.movements__type { - font-size: 1.1rem; - text-transform: uppercase; - font-weight: 500; - color: #fff; - padding: 0.1rem 1rem; - border-radius: 10rem; - margin-right: 2rem; -} - -.movements__date { - font-size: 1.1rem; - text-transform: uppercase; - font-weight: 500; - color: #666; -} - -.movements__type--deposit { - background-image: linear-gradient(to top left, #39b385, #9be15d); -} - -.movements__type--withdrawal { - background-image: linear-gradient(to top left, #e52a5a, #ff585f); -} - -.movements__value { - font-size: 1.7rem; - margin-left: auto; -} - -/* SUMMARY */ -.summary { - grid-row: 5 / 6; - display: flex; - align-items: baseline; - padding: 0 0.3rem; - margin-top: 1rem; -} - -.summary__label { - font-size: 1.2rem; - font-weight: 500; - text-transform: uppercase; - margin-right: 0.8rem; -} - -.summary__value { - font-size: 2.2rem; - margin-right: 2.5rem; -} - -.summary__value--in, -.summary__value--interest { - color: #66c873; -} - -.summary__value--out { - color: #f5465d; -} - -.btn--sort { - margin-left: auto; - border: none; - background: none; - font-size: 1.3rem; - font-weight: 500; - cursor: pointer; -} - -/* OPERATIONS */ -.operation { - border-radius: 1rem; - padding: 3rem 4rem; - color: #333; -} - -.operation--transfer { - background-image: linear-gradient(to top left, #ffb003, #ffcb03); -} - -.operation--loan { - background-image: linear-gradient(to top left, #39b385, #9be15d); -} - -.operation--close { - background-image: linear-gradient(to top left, #e52a5a, #ff585f); -} - -h2 { - margin-bottom: 1.5rem; - font-size: 1.7rem; - font-weight: 600; - color: #333; -} - -.form { - display: grid; - grid-template-columns: 2.5fr 2.5fr 1fr; - grid-template-rows: auto auto; - gap: 0.4rem 1rem; -} - -/* Exceptions for interst */ -.form.form--loan { - grid-template-columns: 2.5fr 1fr 2.5fr; -} -.form__label--loan { - grid-row: 2; -} -/* End exceptions */ - -.form__input { - width: 100%; - border: none; - background-color: rgba(255, 255, 255, 0.4); - font-family: inherit; - font-size: 1.5rem; - text-align: center; - color: #333; - padding: 0.3rem 1rem; - border-radius: 0.7rem; - transition: all 0.3s; -} - -.form__input:focus { - outline: none; - background-color: rgba(255, 255, 255, 0.6); -} - -.form__label { - font-size: 1.3rem; - text-align: center; -} - -.form__btn { - border: none; - border-radius: 0.7rem; - font-size: 1.8rem; - background-color: #fff; - cursor: pointer; - transition: all 0.3s; -} - -.form__btn:focus { - outline: none; - background-color: rgba(255, 255, 255, 0.8); -} - -.logout-timer { - padding: 0 0.3rem; - margin-top: 1.9rem; - text-align: right; - font-size: 1.25rem; -} - -.timer { - font-weight: 600; -} diff --git a/11-Arrays-Bankist/starter/.prettierrc b/11-Arrays-Bankist/starter/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/11-Arrays-Bankist/starter/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/11-Arrays-Bankist/starter/Bankist-flowchart.png b/11-Arrays-Bankist/starter/Bankist-flowchart.png deleted file mode 100644 index 6b4bfd48b1..0000000000 Binary files a/11-Arrays-Bankist/starter/Bankist-flowchart.png and /dev/null differ diff --git a/11-Arrays-Bankist/starter/icon.png b/11-Arrays-Bankist/starter/icon.png deleted file mode 100644 index d00606eab8..0000000000 Binary files a/11-Arrays-Bankist/starter/icon.png and /dev/null differ diff --git a/11-Arrays-Bankist/starter/index.html b/11-Arrays-Bankist/starter/index.html deleted file mode 100644 index 6a46971703..0000000000 --- a/11-Arrays-Bankist/starter/index.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - Bankist - - - - - -
- -
-
-

Current balance

-

- As of 05/03/2037 -

-
-

0000โ‚ฌ

-
- - -
-
-
2 deposit
-
3 days ago
-
4 000โ‚ฌ
-
-
-
- 1 withdrawal -
-
24/01/2037
-
-378โ‚ฌ
-
-
- - -
-

In

-

0000โ‚ฌ

-

Out

-

0000โ‚ฌ

-

Interest

-

0000โ‚ฌ

- -
- - -
-

Transfer money

-
- - - - - -
-
- - -
-

Request loan

-
- - - -
-
- - -
-

Close account

-
- - - - - -
-
- - -

- You will be logged out in 05:00 -

-
- - - - - - diff --git a/11-Arrays-Bankist/starter/logo.png b/11-Arrays-Bankist/starter/logo.png deleted file mode 100644 index f437ac24f3..0000000000 Binary files a/11-Arrays-Bankist/starter/logo.png and /dev/null differ diff --git a/11-Arrays-Bankist/starter/script.js b/11-Arrays-Bankist/starter/script.js deleted file mode 100644 index 05b54ddf31..0000000000 --- a/11-Arrays-Bankist/starter/script.js +++ /dev/null @@ -1,76 +0,0 @@ -'use strict'; - -///////////////////////////////////////////////// -///////////////////////////////////////////////// -// BANKIST APP - -// Data -const account1 = { - owner: 'Jonas Schmedtmann', - movements: [200, 450, -400, 3000, -650, -130, 70, 1300], - interestRate: 1.2, // % - pin: 1111, -}; - -const account2 = { - owner: 'Jessica Davis', - movements: [5000, 3400, -150, -790, -3210, -1000, 8500, -30], - interestRate: 1.5, - pin: 2222, -}; - -const account3 = { - owner: 'Steven Thomas Williams', - movements: [200, -200, 340, -300, -20, 50, 400, -460], - interestRate: 0.7, - pin: 3333, -}; - -const account4 = { - owner: 'Sarah Smith', - movements: [430, 1000, 700, 50, 90], - interestRate: 1, - pin: 4444, -}; - -const accounts = [account1, account2, account3, account4]; - -// Elements -const labelWelcome = document.querySelector('.welcome'); -const labelDate = document.querySelector('.date'); -const labelBalance = document.querySelector('.balance__value'); -const labelSumIn = document.querySelector('.summary__value--in'); -const labelSumOut = document.querySelector('.summary__value--out'); -const labelSumInterest = document.querySelector('.summary__value--interest'); -const labelTimer = document.querySelector('.timer'); - -const containerApp = document.querySelector('.app'); -const containerMovements = document.querySelector('.movements'); - -const btnLogin = document.querySelector('.login__btn'); -const btnTransfer = document.querySelector('.form__btn--transfer'); -const btnLoan = document.querySelector('.form__btn--loan'); -const btnClose = document.querySelector('.form__btn--close'); -const btnSort = document.querySelector('.btn--sort'); - -const inputLoginUsername = document.querySelector('.login__input--user'); -const inputLoginPin = document.querySelector('.login__input--pin'); -const inputTransferTo = document.querySelector('.form__input--to'); -const inputTransferAmount = document.querySelector('.form__input--amount'); -const inputLoanAmount = document.querySelector('.form__input--loan-amount'); -const inputCloseUsername = document.querySelector('.form__input--user'); -const inputClosePin = document.querySelector('.form__input--pin'); - -///////////////////////////////////////////////// -///////////////////////////////////////////////// -// LECTURES - -const currencies = new Map([ - ['USD', 'United States dollar'], - ['EUR', 'Euro'], - ['GBP', 'Pound sterling'], -]); - -const movements = [200, 450, -400, 3000, -650, -130, 70, 1300]; - -///////////////////////////////////////////////// diff --git a/11-Arrays-Bankist/starter/style.css b/11-Arrays-Bankist/starter/style.css deleted file mode 100644 index 05dcf39618..0000000000 --- a/11-Arrays-Bankist/starter/style.css +++ /dev/null @@ -1,297 +0,0 @@ -/* - * Use this CSS to learn some intersting techniques, - * in case you're wondering how I built the UI. - * Have fun! ๐Ÿ˜ - */ - -* { - margin: 0; - padding: 0; - box-sizing: inherit; -} - -html { - font-size: 62.5%; - box-sizing: border-box; -} - -body { - font-family: "Poppins", sans-serif; - color: #444; - background-color: #f3f3f3; - height: 100vh; - padding: 2rem; -} - -nav { - display: flex; - justify-content: space-between; - align-items: center; - padding: 0 2rem; -} - -.welcome { - font-size: 1.9rem; - font-weight: 500; -} - -.logo { - height: 5.25rem; -} - -.login { - display: flex; -} - -.login__input { - border: none; - padding: 0.5rem 2rem; - font-size: 1.6rem; - font-family: inherit; - text-align: center; - width: 12rem; - border-radius: 10rem; - margin-right: 1rem; - color: inherit; - border: 1px solid #fff; - transition: all 0.3s; -} - -.login__input:focus { - outline: none; - border: 1px solid #ccc; -} - -.login__input::placeholder { - color: #bbb; -} - -.login__btn { - border: none; - background: none; - font-size: 2.2rem; - color: inherit; - cursor: pointer; - transition: all 0.3s; -} - -.login__btn:hover, -.login__btn:focus, -.btn--sort:hover, -.btn--sort:focus { - outline: none; - color: #777; -} - -/* MAIN */ -.app { - position: relative; - max-width: 100rem; - margin: 4rem auto; - display: grid; - grid-template-columns: 4fr 3fr; - grid-template-rows: auto repeat(3, 15rem) auto; - gap: 2rem; - - /* NOTE This creates the fade in/out anumation */ - opacity: 0; - transition: all 1s; -} - -.balance { - grid-column: 1 / span 2; - display: flex; - align-items: flex-end; - justify-content: space-between; - margin-bottom: 2rem; -} - -.balance__label { - font-size: 2.2rem; - font-weight: 500; - margin-bottom: -0.2rem; -} - -.balance__date { - font-size: 1.4rem; - color: #888; -} - -.balance__value { - font-size: 4.5rem; - font-weight: 400; -} - -/* MOVEMENTS */ -.movements { - grid-row: 2 / span 3; - background-color: #fff; - border-radius: 1rem; - overflow: scroll; -} - -.movements__row { - padding: 2.25rem 4rem; - display: flex; - align-items: center; - border-bottom: 1px solid #eee; -} - -.movements__type { - font-size: 1.1rem; - text-transform: uppercase; - font-weight: 500; - color: #fff; - padding: 0.1rem 1rem; - border-radius: 10rem; - margin-right: 2rem; -} - -.movements__date { - font-size: 1.1rem; - text-transform: uppercase; - font-weight: 500; - color: #666; -} - -.movements__type--deposit { - background-image: linear-gradient(to top left, #39b385, #9be15d); -} - -.movements__type--withdrawal { - background-image: linear-gradient(to top left, #e52a5a, #ff585f); -} - -.movements__value { - font-size: 1.7rem; - margin-left: auto; -} - -/* SUMMARY */ -.summary { - grid-row: 5 / 6; - display: flex; - align-items: baseline; - padding: 0 0.3rem; - margin-top: 1rem; -} - -.summary__label { - font-size: 1.2rem; - font-weight: 500; - text-transform: uppercase; - margin-right: 0.8rem; -} - -.summary__value { - font-size: 2.2rem; - margin-right: 2.5rem; -} - -.summary__value--in, -.summary__value--interest { - color: #66c873; -} - -.summary__value--out { - color: #f5465d; -} - -.btn--sort { - margin-left: auto; - border: none; - background: none; - font-size: 1.3rem; - font-weight: 500; - cursor: pointer; -} - -/* OPERATIONS */ -.operation { - border-radius: 1rem; - padding: 3rem 4rem; - color: #333; -} - -.operation--transfer { - background-image: linear-gradient(to top left, #ffb003, #ffcb03); -} - -.operation--loan { - background-image: linear-gradient(to top left, #39b385, #9be15d); -} - -.operation--close { - background-image: linear-gradient(to top left, #e52a5a, #ff585f); -} - -h2 { - margin-bottom: 1.5rem; - font-size: 1.7rem; - font-weight: 600; - color: #333; -} - -.form { - display: grid; - grid-template-columns: 2.5fr 2.5fr 1fr; - grid-template-rows: auto auto; - gap: 0.4rem 1rem; -} - -/* Exceptions for interst */ -.form.form--loan { - grid-template-columns: 2.5fr 1fr 2.5fr; -} -.form__label--loan { - grid-row: 2; -} -/* End exceptions */ - -.form__input { - width: 100%; - border: none; - background-color: rgba(255, 255, 255, 0.4); - font-family: inherit; - font-size: 1.5rem; - text-align: center; - color: #333; - padding: 0.3rem 1rem; - border-radius: 0.7rem; - transition: all 0.3s; -} - -.form__input:focus { - outline: none; - background-color: rgba(255, 255, 255, 0.6); -} - -.form__label { - font-size: 1.3rem; - text-align: center; -} - -.form__btn { - border: none; - border-radius: 0.7rem; - font-size: 1.8rem; - background-color: #fff; - cursor: pointer; - transition: all 0.3s; -} - -.form__btn:focus { - outline: none; - background-color: rgba(255, 255, 255, 0.8); -} - -.logout-timer { - padding: 0 0.3rem; - margin-top: 1.9rem; - text-align: right; - font-size: 1.25rem; -} - -.timer { - font-weight: 600; -} diff --git a/12-Numbers-Dates-Timers-Bankist/final/.prettierrc b/12-Numbers-Dates-Timers-Bankist/final/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/12-Numbers-Dates-Timers-Bankist/final/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/12-Numbers-Dates-Timers-Bankist/final/Bankist-flowchart.png b/12-Numbers-Dates-Timers-Bankist/final/Bankist-flowchart.png deleted file mode 100644 index 7c4923c3ef..0000000000 Binary files a/12-Numbers-Dates-Timers-Bankist/final/Bankist-flowchart.png and /dev/null differ diff --git a/12-Numbers-Dates-Timers-Bankist/final/icon.png b/12-Numbers-Dates-Timers-Bankist/final/icon.png deleted file mode 100644 index d00606eab8..0000000000 Binary files a/12-Numbers-Dates-Timers-Bankist/final/icon.png and /dev/null differ diff --git a/12-Numbers-Dates-Timers-Bankist/final/index.html b/12-Numbers-Dates-Timers-Bankist/final/index.html deleted file mode 100644 index 6a46971703..0000000000 --- a/12-Numbers-Dates-Timers-Bankist/final/index.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - Bankist - - - - - -
- -
-
-

Current balance

-

- As of 05/03/2037 -

-
-

0000โ‚ฌ

-
- - -
-
-
2 deposit
-
3 days ago
-
4 000โ‚ฌ
-
-
-
- 1 withdrawal -
-
24/01/2037
-
-378โ‚ฌ
-
-
- - -
-

In

-

0000โ‚ฌ

-

Out

-

0000โ‚ฌ

-

Interest

-

0000โ‚ฌ

- -
- - -
-

Transfer money

-
- - - - - -
-
- - -
-

Request loan

-
- - - -
-
- - -
-

Close account

-
- - - - - -
-
- - -

- You will be logged out in 05:00 -

-
- - - - - - diff --git a/12-Numbers-Dates-Timers-Bankist/final/logo.png b/12-Numbers-Dates-Timers-Bankist/final/logo.png deleted file mode 100644 index f437ac24f3..0000000000 Binary files a/12-Numbers-Dates-Timers-Bankist/final/logo.png and /dev/null differ diff --git a/12-Numbers-Dates-Timers-Bankist/final/script.js b/12-Numbers-Dates-Timers-Bankist/final/script.js deleted file mode 100644 index 1411c36cc0..0000000000 --- a/12-Numbers-Dates-Timers-Bankist/final/script.js +++ /dev/null @@ -1,636 +0,0 @@ -'use strict'; - -///////////////////////////////////////////////// -///////////////////////////////////////////////// -// BANKIST APP - -///////////////////////////////////////////////// -// Data - -// DIFFERENT DATA! Contains movement dates, currency and locale - -const account1 = { - owner: 'Jonas Schmedtmann', - movements: [200, 455.23, -306.5, 25000, -642.21, -133.9, 79.97, 1300], - interestRate: 1.2, // % - pin: 1111, - - movementsDates: [ - '2019-11-18T21:31:17.178Z', - '2019-12-23T07:42:02.383Z', - '2020-01-28T09:15:04.904Z', - '2020-04-01T10:17:24.185Z', - '2020-05-08T14:11:59.604Z', - '2020-07-26T17:01:17.194Z', - '2020-07-28T23:36:17.929Z', - '2020-08-01T10:51:36.790Z', - ], - currency: 'EUR', - locale: 'pt-PT', // de-DE -}; - -const account2 = { - owner: 'Jessica Davis', - movements: [5000, 3400, -150, -790, -3210, -1000, 8500, -30], - interestRate: 1.5, - pin: 2222, - - movementsDates: [ - '2019-11-01T13:15:33.035Z', - '2019-11-30T09:48:16.867Z', - '2019-12-25T06:04:23.907Z', - '2020-01-25T14:18:46.235Z', - '2020-02-05T16:33:06.386Z', - '2020-04-10T14:43:26.374Z', - '2020-06-25T18:49:59.371Z', - '2020-07-26T12:01:20.894Z', - ], - currency: 'USD', - locale: 'en-US', -}; - -const accounts = [account1, account2]; - -///////////////////////////////////////////////// -// Elements -const labelWelcome = document.querySelector('.welcome'); -const labelDate = document.querySelector('.date'); -const labelBalance = document.querySelector('.balance__value'); -const labelSumIn = document.querySelector('.summary__value--in'); -const labelSumOut = document.querySelector('.summary__value--out'); -const labelSumInterest = document.querySelector('.summary__value--interest'); -const labelTimer = document.querySelector('.timer'); - -const containerApp = document.querySelector('.app'); -const containerMovements = document.querySelector('.movements'); - -const btnLogin = document.querySelector('.login__btn'); -const btnTransfer = document.querySelector('.form__btn--transfer'); -const btnLoan = document.querySelector('.form__btn--loan'); -const btnClose = document.querySelector('.form__btn--close'); -const btnSort = document.querySelector('.btn--sort'); - -const inputLoginUsername = document.querySelector('.login__input--user'); -const inputLoginPin = document.querySelector('.login__input--pin'); -const inputTransferTo = document.querySelector('.form__input--to'); -const inputTransferAmount = document.querySelector('.form__input--amount'); -const inputLoanAmount = document.querySelector('.form__input--loan-amount'); -const inputCloseUsername = document.querySelector('.form__input--user'); -const inputClosePin = document.querySelector('.form__input--pin'); - -///////////////////////////////////////////////// -// Functions - -const formatMovementDate = function (date, locale) { - const calcDaysPassed = (date1, date2) => - Math.round(Math.abs(date2 - date1) / (1000 * 60 * 60 * 24)); - - const daysPassed = calcDaysPassed(new Date(), date); - console.log(daysPassed); - - if (daysPassed === 0) return 'Today'; - if (daysPassed === 1) return 'Yesterday'; - if (daysPassed <= 7) return `${daysPassed} days ago`; - - // const day = `${date.getDate()}`.padStart(2, 0); - // const month = `${date.getMonth() + 1}`.padStart(2, 0); - // const year = date.getFullYear(); - // return `${day}/${month}/${year}`; - return new Intl.DateTimeFormat(locale).format(date); -}; - -const formatCur = function (value, locale, currency) { - return new Intl.NumberFormat(locale, { - style: 'currency', - currency: currency, - }).format(value); -}; - -const displayMovements = function (acc, sort = false) { - containerMovements.innerHTML = ''; - - const combinedMovsDates = acc.movements.map((mov, i) => ({ - movement: mov, - movementDate: acc.movementsDates.at(i), - })); - - if (sort) combinedMovsDates.sort((a, b) => a.movement - b.movement); - - combinedMovsDates.forEach(function (obj, i) { - const { movement, movementDate } = obj; - const type = movement > 0 ? 'deposit' : 'withdrawal'; - - const date = new Date(movementDate); - const displayDate = formatMovementDate(date, acc.locale); - - const formattedMov = formatCur(movement, acc.locale, acc.currency); - - const html = ` -
-
${ - i + 1 - } ${type}
-
${displayDate}
-
${formattedMov}
-
- `; - - containerMovements.insertAdjacentHTML('afterbegin', html); - }); -}; - -const calcDisplayBalance = function (acc) { - acc.balance = acc.movements.reduce((acc, mov) => acc + mov, 0); - labelBalance.textContent = formatCur(acc.balance, acc.locale, acc.currency); -}; - -const calcDisplaySummary = function (acc) { - const incomes = acc.movements - .filter(mov => mov > 0) - .reduce((acc, mov) => acc + mov, 0); - labelSumIn.textContent = formatCur(incomes, acc.locale, acc.currency); - - const out = acc.movements - .filter(mov => mov < 0) - .reduce((acc, mov) => acc + mov, 0); - labelSumOut.textContent = formatCur(Math.abs(out), acc.locale, acc.currency); - - const interest = acc.movements - .filter(mov => mov > 0) - .map(deposit => (deposit * acc.interestRate) / 100) - .filter((int, i, arr) => { - // console.log(arr); - return int >= 1; - }) - .reduce((acc, int) => acc + int, 0); - labelSumInterest.textContent = formatCur(interest, acc.locale, acc.currency); -}; - -const createUsernames = function (accs) { - accs.forEach(function (acc) { - acc.username = acc.owner - .toLowerCase() - .split(' ') - .map(name => name[0]) - .join(''); - }); -}; -createUsernames(accounts); - -const updateUI = function (acc) { - // Display movements - displayMovements(acc); - - // Display balance - calcDisplayBalance(acc); - - // Display summary - calcDisplaySummary(acc); -}; - -const startLogOutTimer = function () { - const tick = function () { - const min = String(Math.trunc(time / 60)).padStart(2, 0); - const sec = String(time % 60).padStart(2, 0); - - // In each call, print the remaining time to UI - labelTimer.textContent = `${min}:${sec}`; - - // When 0 seconds, stop timer and log out user - if (time === 0) { - clearInterval(timer); - labelWelcome.textContent = 'Log in to get started'; - containerApp.style.opacity = 0; - } - - // Decrease 1s - time--; - }; - - // Set time to 5 minutes - let time = 120; - - // Call the timer every second - tick(); - const timer = setInterval(tick, 1000); - - return timer; -}; - -/////////////////////////////////////// -// Event handlers -let currentAccount, timer; - -// FAKE ALWAYS LOGGED IN -// currentAccount = account1; -// updateUI(currentAccount); -// containerApp.style.opacity = 100; - -btnLogin.addEventListener('click', function (e) { - // Prevent form from submitting - e.preventDefault(); - - currentAccount = accounts.find( - acc => acc.username === inputLoginUsername.value - ); - console.log(currentAccount); - - if (currentAccount?.pin === +inputLoginPin.value) { - // Display UI and message - labelWelcome.textContent = `Welcome back, ${ - currentAccount.owner.split(' ')[0] - }`; - containerApp.style.opacity = 100; - - // Create current date and time - const now = new Date(); - const options = { - hour: 'numeric', - minute: 'numeric', - day: 'numeric', - month: 'numeric', - year: 'numeric', - // weekday: 'long', - }; - // const locale = navigator.language; - // console.log(locale); - - labelDate.textContent = new Intl.DateTimeFormat( - currentAccount.locale, - options - ).format(now); - - // const day = `${now.getDate()}`.padStart(2, 0); - // const month = `${now.getMonth() + 1}`.padStart(2, 0); - // const year = now.getFullYear(); - // const hour = `${now.getHours()}`.padStart(2, 0); - // const min = `${now.getMinutes()}`.padStart(2, 0); - // labelDate.textContent = `${day}/${month}/${year}, ${hour}:${min}`; - - // Clear input fields - inputLoginUsername.value = inputLoginPin.value = ''; - inputLoginPin.blur(); - - // Timer - if (timer) clearInterval(timer); - timer = startLogOutTimer(); - - // Update UI - updateUI(currentAccount); - } -}); - -btnTransfer.addEventListener('click', function (e) { - e.preventDefault(); - const amount = +inputTransferAmount.value; - const receiverAcc = accounts.find( - acc => acc.username === inputTransferTo.value - ); - inputTransferAmount.value = inputTransferTo.value = ''; - - if ( - amount > 0 && - receiverAcc && - currentAccount.balance >= amount && - receiverAcc?.username !== currentAccount.username - ) { - // Doing the transfer - currentAccount.movements.push(-amount); - receiverAcc.movements.push(amount); - - // Add transfer date - currentAccount.movementsDates.push(new Date().toISOString()); - receiverAcc.movementsDates.push(new Date().toISOString()); - - // Update UI - updateUI(currentAccount); - - // Reset timer - clearInterval(timer); - timer = startLogOutTimer(); - } -}); - -btnLoan.addEventListener('click', function (e) { - e.preventDefault(); - - const amount = Math.floor(inputLoanAmount.value); - - if (amount > 0 && currentAccount.movements.some(mov => mov >= amount * 0.1)) { - setTimeout(function () { - // Add movement - currentAccount.movements.push(amount); - - // Add loan date - currentAccount.movementsDates.push(new Date().toISOString()); - - // Update UI - updateUI(currentAccount); - - // Reset timer - clearInterval(timer); - timer = startLogOutTimer(); - }, 2500); - } - inputLoanAmount.value = ''; -}); - -btnClose.addEventListener('click', function (e) { - e.preventDefault(); - - if ( - inputCloseUsername.value === currentAccount.username && - +inputClosePin.value === currentAccount.pin - ) { - const index = accounts.findIndex( - acc => acc.username === currentAccount.username - ); - console.log(index); - // .indexOf(23) - - // Delete account - accounts.splice(index, 1); - - // Hide UI - containerApp.style.opacity = 0; - } - - inputCloseUsername.value = inputClosePin.value = ''; -}); - -let sorted = false; -btnSort.addEventListener('click', function (e) { - e.preventDefault(); - // BUG in video: - // displayMovements(currentAccount.movements, !sorted); - - // FIX: - displayMovements(currentAccount, !sorted); - sorted = !sorted; -}); - -///////////////////////////////////////////////// -///////////////////////////////////////////////// -// LECTURES - -/* -/////////////////////////////////////// -// Converting and Checking Numbers -console.log(23 === 23.0); - -// Base 10 - 0 to 9. 1/10 = 0.1. 3/10 = 3.3333333 -// Binary base 2 - 0 1 -console.log(0.1 + 0.2); -console.log(0.1 + 0.2 === 0.3); - -// Conversion -console.log(Number('23')); -console.log(+'23'); - -// Parsing -console.log(Number.parseInt('30px', 10)); -console.log(Number.parseInt('e23', 10)); - -console.log(Number.parseInt(' 2.5rem ')); -console.log(Number.parseFloat(' 2.5rem ')); - -// console.log(parseFloat(' 2.5rem ')); - -// Check if value is NaN -console.log(Number.isNaN(20)); -console.log(Number.isNaN('20')); -console.log(Number.isNaN(+'20X')); -console.log(Number.isNaN(23 / 0)); - -// Checking if value is number -console.log(Number.isFinite(20)); -console.log(Number.isFinite('20')); -console.log(Number.isFinite(+'20X')); -console.log(Number.isFinite(23 / 0)); - -console.log(Number.isInteger(23)); -console.log(Number.isInteger(23.0)); -console.log(Number.isInteger(23 / 0)); - - - -/////////////////////////////////////// -// Math and Rounding - -console.log(Math.sqrt(25)); -console.log(25 ** (1 / 2)); -console.log(8 ** (1 / 3)); - -console.log(Math.max(5, 18, 23, 11, 2)); -console.log(Math.max(5, 18, '23', 11, 2)); -console.log(Math.max(5, 18, '23px', 11, 2)); - -console.log(Math.min(5, 18, 23, 11, 2)); - -console.log(Math.PI * Number.parseFloat('10px') ** 2); - -console.log(Math.trunc(Math.random() * 6) + 1); - -const randomInt = (min, max) => - Math.floor(Math.random() * (max - min + 1)) + min; - -console.log(randomInt(10, 20)); -console.log(randomInt(0, 3)); - -// Rounding integers -console.log(Math.round(23.3)); -console.log(Math.round(23.9)); - -console.log(Math.ceil(23.3)); -console.log(Math.ceil(23.9)); - -console.log(Math.floor(23.3)); -console.log(Math.floor('23.9')); - -console.log(Math.trunc(23.3)); - -console.log(Math.trunc(-23.3)); -console.log(Math.floor(-23.3)); - -// Rounding decimals -console.log((2.7).toFixed(0)); -console.log((2.7).toFixed(3)); -console.log((2.345).toFixed(2)); -console.log(+(2.345).toFixed(2)); - - -/////////////////////////////////////// -// The Remainder Operator -console.log(5 % 2); -console.log(5 / 2); // 5 = 2 * 2 + 1 - -console.log(8 % 3); -console.log(8 / 3); // 8 = 2 * 3 + 2 - -console.log(6 % 2); -console.log(6 / 2); - -console.log(7 % 2); -console.log(7 / 2); - -const isEven = n => n % 2 === 0; -console.log(isEven(8)); -console.log(isEven(23)); -console.log(isEven(514)); - -labelBalance.addEventListener('click', function () { - [...document.querySelectorAll('.movements__row')].forEach(function (row, i) { - // 0, 2, 4, 6 - if (i % 2 === 0) row.style.backgroundColor = 'orangered'; - // 0, 3, 6, 9 - if (i % 3 === 0) row.style.backgroundColor = 'blue'; - }); -}); - - -/////////////////////////////////////// -// Numeric Separators - -// 287,460,000,000 -const diameter = 287_460_000_000; -console.log(diameter); - -const price = 345_99; -console.log(price); - -const transferFee1 = 15_00; -const transferFee2 = 1_500; - -const PI = 3.1415; -console.log(PI); - -console.log(Number('230_000')); -console.log(parseInt('230_000')); - - -/////////////////////////////////////// -// Working with BigInt -console.log(2 ** 53 - 1); -console.log(Number.MAX_SAFE_INTEGER); -console.log(2 ** 53 + 1); -console.log(2 ** 53 + 2); -console.log(2 ** 53 + 3); -console.log(2 ** 53 + 4); - -console.log(4838430248342043823408394839483204n); -console.log(BigInt(48384302)); - -// Operations -console.log(10000n + 10000n); -console.log(36286372637263726376237263726372632n * 10000000n); -// console.log(Math.sqrt(16n)); - -const huge = 20289830237283728378237n; -const num = 23; -console.log(huge * BigInt(num)); - -// Exceptions -console.log(20n > 15); -console.log(20n === 20); -console.log(typeof 20n); -console.log(20n == '20'); - -console.log(huge + ' is REALLY big!!!'); - -// Divisions -console.log(11n / 3n); -console.log(10 / 3); - - -/////////////////////////////////////// -// Creating Dates - -// Create a date - -const now = new Date(); -console.log(now); - -console.log(new Date('Aug 02 2020 18:05:41')); -console.log(new Date('December 24, 2015')); -console.log(new Date(account1.movementsDates[0])); - -console.log(new Date(2037, 10, 19, 15, 23, 5)); -console.log(new Date(2037, 10, 31)); - -console.log(new Date(0)); -console.log(new Date(3 * 24 * 60 * 60 * 1000)); - - -// Working with dates -const future = new Date(2037, 10, 19, 15, 23); -console.log(future); -console.log(future.getFullYear()); -console.log(future.getMonth()); -console.log(future.getDate()); -console.log(future.getDay()); -console.log(future.getHours()); -console.log(future.getMinutes()); -console.log(future.getSeconds()); -console.log(future.toISOString()); -console.log(future.getTime()); - -console.log(new Date(2142256980000)); - -console.log(Date.now()); - -future.setFullYear(2040); -console.log(future); - - -/////////////////////////////////////// -// Operations With Dates -const future = new Date(2037, 10, 19, 15, 23); -console.log(+future); - -const calcDaysPassed = (date1, date2) => - Math.abs(date2 - date1) / (1000 * 60 * 60 * 24); - -const days1 = calcDaysPassed(new Date(2037, 3, 4), new Date(2037, 3, 14)); -console.log(days1); - - -/////////////////////////////////////// -// Internationalizing Numbers (Intl) -const num = 3884764.23; - -const options = { - style: 'currency', - unit: 'celsius', - currency: 'EUR', - // useGrouping: false, -}; - -console.log('US: ', new Intl.NumberFormat('en-US', options).format(num)); -console.log('Germany: ', new Intl.NumberFormat('de-DE', options).format(num)); -console.log('Syria: ', new Intl.NumberFormat('ar-SY', options).format(num)); -console.log( - navigator.language, - new Intl.NumberFormat(navigator.language, options).format(num) -); - - -/////////////////////////////////////// -// Timers - -// setTimeout -const ingredients = ['olives', 'spinach']; -const pizzaTimer = setTimeout( - (ing1, ing2) => console.log(`Here is your pizza with ${ing1} and ${ing2} ๐Ÿ•`), - 3000, - ...ingredients -); -console.log('Waiting...'); - -if (ingredients.includes('spinach')) clearTimeout(pizzaTimer); - -// setInterval -setInterval(function () { - const now = new Date(); - console.log(now); -}, 1000); -*/ diff --git a/12-Numbers-Dates-Timers-Bankist/final/style.css b/12-Numbers-Dates-Timers-Bankist/final/style.css deleted file mode 100644 index b047de3f76..0000000000 --- a/12-Numbers-Dates-Timers-Bankist/final/style.css +++ /dev/null @@ -1,297 +0,0 @@ -/* - * Use this CSS to learn some intersting techniques, - * in case you're wondering how I built the UI. - * Have fun! ๐Ÿ˜ - */ - -* { - margin: 0; - padding: 0; - box-sizing: inherit; -} - -html { - font-size: 62.5%; - box-sizing: border-box; -} - -body { - font-family: 'Poppins', sans-serif; - color: #444; - background-color: #f3f3f3; - height: 100vh; - padding: 2rem; -} - -nav { - display: flex; - justify-content: space-between; - align-items: center; - padding: 0 2rem; -} - -.welcome { - font-size: 1.9rem; - font-weight: 500; -} - -.logo { - height: 5.25rem; -} - -.login { - display: flex; -} - -.login__input { - border: none; - padding: 0.5rem 2rem; - font-size: 1.6rem; - font-family: inherit; - text-align: center; - width: 12rem; - border-radius: 10rem; - margin-right: 1rem; - color: inherit; - border: 1px solid #fff; - transition: all 0.3s; -} - -.login__input:focus { - outline: none; - border: 1px solid #ccc; -} - -.login__input::placeholder { - color: #bbb; -} - -.login__btn { - border: none; - background: none; - font-size: 2.2rem; - color: inherit; - cursor: pointer; - transition: all 0.3s; -} - -.login__btn:hover, -.login__btn:focus, -.btn--sort:hover, -.btn--sort:focus { - outline: none; - color: #777; -} - -/* MAIN */ -.app { - position: relative; - max-width: 100rem; - margin: 4rem auto; - display: grid; - grid-template-columns: 4fr 3fr; - grid-template-rows: auto repeat(3, 15rem) auto; - gap: 2rem; - - /* NOTE This creates the fade in/out anumation */ - opacity: 0; - transition: all 1s; -} - -.balance { - grid-column: 1 / span 2; - display: flex; - align-items: flex-end; - justify-content: space-between; - margin-bottom: 2rem; -} - -.balance__label { - font-size: 2.2rem; - font-weight: 500; - margin-bottom: -0.2rem; -} - -.balance__date { - font-size: 1.4rem; - color: #888; -} - -.balance__value { - font-size: 4.5rem; - font-weight: 400; -} - -/* MOVEMENTS */ -.movements { - grid-row: 2 / span 3; - background-color: #fff; - border-radius: 1rem; - overflow: scroll; -} - -.movements__row { - padding: 2.25rem 4rem; - display: flex; - align-items: center; - border-bottom: 1px solid #eee; -} - -.movements__type { - font-size: 1.1rem; - text-transform: uppercase; - font-weight: 500; - color: #fff; - padding: 0.1rem 1rem; - border-radius: 10rem; - margin-right: 2rem; -} - -.movements__date { - font-size: 1.1rem; - text-transform: uppercase; - font-weight: 500; - color: #666; -} - -.movements__type--deposit { - background-image: linear-gradient(to top left, #39b385, #9be15d); -} - -.movements__type--withdrawal { - background-image: linear-gradient(to top left, #e52a5a, #ff585f); -} - -.movements__value { - font-size: 1.7rem; - margin-left: auto; -} - -/* SUMMARY */ -.summary { - grid-row: 5 / 6; - display: flex; - align-items: baseline; - padding: 0 0.3rem; - margin-top: 1rem; -} - -.summary__label { - font-size: 1.2rem; - font-weight: 500; - text-transform: uppercase; - margin-right: 0.8rem; -} - -.summary__value { - font-size: 2.2rem; - margin-right: 2.5rem; -} - -.summary__value--in, -.summary__value--interest { - color: #66c873; -} - -.summary__value--out { - color: #f5465d; -} - -.btn--sort { - margin-left: auto; - border: none; - background: none; - font-size: 1.3rem; - font-weight: 500; - cursor: pointer; -} - -/* OPERATIONS */ -.operation { - border-radius: 1rem; - padding: 3rem 4rem; - color: #333; -} - -.operation--transfer { - background-image: linear-gradient(to top left, #ffb003, #ffcb03); -} - -.operation--loan { - background-image: linear-gradient(to top left, #39b385, #9be15d); -} - -.operation--close { - background-image: linear-gradient(to top left, #e52a5a, #ff585f); -} - -h2 { - margin-bottom: 1.5rem; - font-size: 1.7rem; - font-weight: 600; - color: #333; -} - -.form { - display: grid; - grid-template-columns: 2.5fr 2.5fr 1fr; - grid-template-rows: auto auto; - gap: 0.4rem 1rem; -} - -/* Exceptions for interst */ -.form.form--loan { - grid-template-columns: 2.5fr 1fr 2.5fr; -} -.form__label--loan { - grid-row: 2; -} -/* End exceptions */ - -.form__input { - width: 100%; - border: none; - background-color: rgba(255, 255, 255, 0.4); - font-family: inherit; - font-size: 1.5rem; - text-align: center; - color: #333; - padding: 0.3rem 1rem; - border-radius: 0.7rem; - transition: all 0.3s; -} - -.form__input:focus { - outline: none; - background-color: rgba(255, 255, 255, 0.6); -} - -.form__label { - font-size: 1.3rem; - text-align: center; -} - -.form__btn { - border: none; - border-radius: 0.7rem; - font-size: 1.8rem; - background-color: #fff; - cursor: pointer; - transition: all 0.3s; -} - -.form__btn:focus { - outline: none; - background-color: rgba(255, 255, 255, 0.8); -} - -.logout-timer { - padding: 0 0.3rem; - margin-top: 1.9rem; - text-align: right; - font-size: 1.25rem; -} - -.timer { - font-weight: 600; -} diff --git a/12-Numbers-Dates-Timers-Bankist/starter/.prettierrc b/12-Numbers-Dates-Timers-Bankist/starter/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/12-Numbers-Dates-Timers-Bankist/starter/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/12-Numbers-Dates-Timers-Bankist/starter/Bankist-flowchart.png b/12-Numbers-Dates-Timers-Bankist/starter/Bankist-flowchart.png deleted file mode 100644 index 6b4bfd48b1..0000000000 Binary files a/12-Numbers-Dates-Timers-Bankist/starter/Bankist-flowchart.png and /dev/null differ diff --git a/12-Numbers-Dates-Timers-Bankist/starter/icon.png b/12-Numbers-Dates-Timers-Bankist/starter/icon.png deleted file mode 100644 index d00606eab8..0000000000 Binary files a/12-Numbers-Dates-Timers-Bankist/starter/icon.png and /dev/null differ diff --git a/12-Numbers-Dates-Timers-Bankist/starter/index.html b/12-Numbers-Dates-Timers-Bankist/starter/index.html deleted file mode 100644 index 6a46971703..0000000000 --- a/12-Numbers-Dates-Timers-Bankist/starter/index.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - Bankist - - - - - -
- -
-
-

Current balance

-

- As of 05/03/2037 -

-
-

0000โ‚ฌ

-
- - -
-
-
2 deposit
-
3 days ago
-
4 000โ‚ฌ
-
-
-
- 1 withdrawal -
-
24/01/2037
-
-378โ‚ฌ
-
-
- - -
-

In

-

0000โ‚ฌ

-

Out

-

0000โ‚ฌ

-

Interest

-

0000โ‚ฌ

- -
- - -
-

Transfer money

-
- - - - - -
-
- - -
-

Request loan

-
- - - -
-
- - -
-

Close account

-
- - - - - -
-
- - -

- You will be logged out in 05:00 -

-
- - - - - - diff --git a/12-Numbers-Dates-Timers-Bankist/starter/logo.png b/12-Numbers-Dates-Timers-Bankist/starter/logo.png deleted file mode 100644 index f437ac24f3..0000000000 Binary files a/12-Numbers-Dates-Timers-Bankist/starter/logo.png and /dev/null differ diff --git a/12-Numbers-Dates-Timers-Bankist/starter/script.js b/12-Numbers-Dates-Timers-Bankist/starter/script.js deleted file mode 100644 index 7fd35920a2..0000000000 --- a/12-Numbers-Dates-Timers-Bankist/starter/script.js +++ /dev/null @@ -1,253 +0,0 @@ -'use strict'; - -///////////////////////////////////////////////// -///////////////////////////////////////////////// -// BANKIST APP - -///////////////////////////////////////////////// -// Data - -// DIFFERENT DATA! Contains movement dates, currency and locale - -const account1 = { - owner: 'Jonas Schmedtmann', - movements: [200, 455.23, -306.5, 25000, -642.21, -133.9, 79.97, 1300], - interestRate: 1.2, // % - pin: 1111, - - movementsDates: [ - '2019-11-18T21:31:17.178Z', - '2019-12-23T07:42:02.383Z', - '2020-01-28T09:15:04.904Z', - '2020-04-01T10:17:24.185Z', - '2020-05-08T14:11:59.604Z', - '2020-05-27T17:01:17.194Z', - '2020-07-11T23:36:17.929Z', - '2020-07-12T10:51:36.790Z', - ], - currency: 'EUR', - locale: 'pt-PT', // de-DE -}; - -const account2 = { - owner: 'Jessica Davis', - movements: [5000, 3400, -150, -790, -3210, -1000, 8500, -30], - interestRate: 1.5, - pin: 2222, - - movementsDates: [ - '2019-11-01T13:15:33.035Z', - '2019-11-30T09:48:16.867Z', - '2019-12-25T06:04:23.907Z', - '2020-01-25T14:18:46.235Z', - '2020-02-05T16:33:06.386Z', - '2020-04-10T14:43:26.374Z', - '2020-06-25T18:49:59.371Z', - '2020-07-26T12:01:20.894Z', - ], - currency: 'USD', - locale: 'en-US', -}; - -const accounts = [account1, account2]; - -///////////////////////////////////////////////// -// Elements -const labelWelcome = document.querySelector('.welcome'); -const labelDate = document.querySelector('.date'); -const labelBalance = document.querySelector('.balance__value'); -const labelSumIn = document.querySelector('.summary__value--in'); -const labelSumOut = document.querySelector('.summary__value--out'); -const labelSumInterest = document.querySelector('.summary__value--interest'); -const labelTimer = document.querySelector('.timer'); - -const containerApp = document.querySelector('.app'); -const containerMovements = document.querySelector('.movements'); - -const btnLogin = document.querySelector('.login__btn'); -const btnTransfer = document.querySelector('.form__btn--transfer'); -const btnLoan = document.querySelector('.form__btn--loan'); -const btnClose = document.querySelector('.form__btn--close'); -const btnSort = document.querySelector('.btn--sort'); - -const inputLoginUsername = document.querySelector('.login__input--user'); -const inputLoginPin = document.querySelector('.login__input--pin'); -const inputTransferTo = document.querySelector('.form__input--to'); -const inputTransferAmount = document.querySelector('.form__input--amount'); -const inputLoanAmount = document.querySelector('.form__input--loan-amount'); -const inputCloseUsername = document.querySelector('.form__input--user'); -const inputClosePin = document.querySelector('.form__input--pin'); - -///////////////////////////////////////////////// -// Functions - -const displayMovements = function (movements, sort = false) { - containerMovements.innerHTML = ''; - - const movs = sort ? movements.slice().sort((a, b) => a - b) : movements; - - movs.forEach(function (mov, i) { - const type = mov > 0 ? 'deposit' : 'withdrawal'; - - const html = ` -
-
${ - i + 1 - } ${type}
-
${mov}โ‚ฌ
-
- `; - - containerMovements.insertAdjacentHTML('afterbegin', html); - }); -}; - -const calcDisplayBalance = function (acc) { - acc.balance = acc.movements.reduce((acc, mov) => acc + mov, 0); - labelBalance.textContent = `${acc.balance}โ‚ฌ`; -}; - -const calcDisplaySummary = function (acc) { - const incomes = acc.movements - .filter(mov => mov > 0) - .reduce((acc, mov) => acc + mov, 0); - labelSumIn.textContent = `${incomes}โ‚ฌ`; - - const out = acc.movements - .filter(mov => mov < 0) - .reduce((acc, mov) => acc + mov, 0); - labelSumOut.textContent = `${Math.abs(out)}โ‚ฌ`; - - const interest = acc.movements - .filter(mov => mov > 0) - .map(deposit => (deposit * acc.interestRate) / 100) - .filter((int, i, arr) => { - // console.log(arr); - return int >= 1; - }) - .reduce((acc, int) => acc + int, 0); - labelSumInterest.textContent = `${interest}โ‚ฌ`; -}; - -const createUsernames = function (accs) { - accs.forEach(function (acc) { - acc.username = acc.owner - .toLowerCase() - .split(' ') - .map(name => name[0]) - .join(''); - }); -}; -createUsernames(accounts); - -const updateUI = function (acc) { - // Display movements - displayMovements(acc.movements); - - // Display balance - calcDisplayBalance(acc); - - // Display summary - calcDisplaySummary(acc); -}; - -/////////////////////////////////////// -// Event handlers -let currentAccount; - -btnLogin.addEventListener('click', function (e) { - // Prevent form from submitting - e.preventDefault(); - - currentAccount = accounts.find( - acc => acc.username === inputLoginUsername.value - ); - console.log(currentAccount); - - if (currentAccount?.pin === Number(inputLoginPin.value)) { - // Display UI and message - labelWelcome.textContent = `Welcome back, ${ - currentAccount.owner.split(' ')[0] - }`; - containerApp.style.opacity = 100; - - // Clear input fields - inputLoginUsername.value = inputLoginPin.value = ''; - inputLoginPin.blur(); - - // Update UI - updateUI(currentAccount); - } -}); - -btnTransfer.addEventListener('click', function (e) { - e.preventDefault(); - const amount = Number(inputTransferAmount.value); - const receiverAcc = accounts.find( - acc => acc.username === inputTransferTo.value - ); - inputTransferAmount.value = inputTransferTo.value = ''; - - if ( - amount > 0 && - receiverAcc && - currentAccount.balance >= amount && - receiverAcc?.username !== currentAccount.username - ) { - // Doing the transfer - currentAccount.movements.push(-amount); - receiverAcc.movements.push(amount); - - // Update UI - updateUI(currentAccount); - } -}); - -btnLoan.addEventListener('click', function (e) { - e.preventDefault(); - - const amount = Number(inputLoanAmount.value); - - if (amount > 0 && currentAccount.movements.some(mov => mov >= amount * 0.1)) { - // Add movement - currentAccount.movements.push(amount); - - // Update UI - updateUI(currentAccount); - } - inputLoanAmount.value = ''; -}); - -btnClose.addEventListener('click', function (e) { - e.preventDefault(); - - if ( - inputCloseUsername.value === currentAccount.username && - Number(inputClosePin.value) === currentAccount.pin - ) { - const index = accounts.findIndex( - acc => acc.username === currentAccount.username - ); - console.log(index); - // .indexOf(23) - - // Delete account - accounts.splice(index, 1); - - // Hide UI - containerApp.style.opacity = 0; - } - - inputCloseUsername.value = inputClosePin.value = ''; -}); - -let sorted = false; -btnSort.addEventListener('click', function (e) { - e.preventDefault(); - displayMovements(currentAccount.movements, !sorted); - sorted = !sorted; -}); - -///////////////////////////////////////////////// -///////////////////////////////////////////////// -// LECTURES diff --git a/12-Numbers-Dates-Timers-Bankist/starter/style.css b/12-Numbers-Dates-Timers-Bankist/starter/style.css deleted file mode 100644 index b047de3f76..0000000000 --- a/12-Numbers-Dates-Timers-Bankist/starter/style.css +++ /dev/null @@ -1,297 +0,0 @@ -/* - * Use this CSS to learn some intersting techniques, - * in case you're wondering how I built the UI. - * Have fun! ๐Ÿ˜ - */ - -* { - margin: 0; - padding: 0; - box-sizing: inherit; -} - -html { - font-size: 62.5%; - box-sizing: border-box; -} - -body { - font-family: 'Poppins', sans-serif; - color: #444; - background-color: #f3f3f3; - height: 100vh; - padding: 2rem; -} - -nav { - display: flex; - justify-content: space-between; - align-items: center; - padding: 0 2rem; -} - -.welcome { - font-size: 1.9rem; - font-weight: 500; -} - -.logo { - height: 5.25rem; -} - -.login { - display: flex; -} - -.login__input { - border: none; - padding: 0.5rem 2rem; - font-size: 1.6rem; - font-family: inherit; - text-align: center; - width: 12rem; - border-radius: 10rem; - margin-right: 1rem; - color: inherit; - border: 1px solid #fff; - transition: all 0.3s; -} - -.login__input:focus { - outline: none; - border: 1px solid #ccc; -} - -.login__input::placeholder { - color: #bbb; -} - -.login__btn { - border: none; - background: none; - font-size: 2.2rem; - color: inherit; - cursor: pointer; - transition: all 0.3s; -} - -.login__btn:hover, -.login__btn:focus, -.btn--sort:hover, -.btn--sort:focus { - outline: none; - color: #777; -} - -/* MAIN */ -.app { - position: relative; - max-width: 100rem; - margin: 4rem auto; - display: grid; - grid-template-columns: 4fr 3fr; - grid-template-rows: auto repeat(3, 15rem) auto; - gap: 2rem; - - /* NOTE This creates the fade in/out anumation */ - opacity: 0; - transition: all 1s; -} - -.balance { - grid-column: 1 / span 2; - display: flex; - align-items: flex-end; - justify-content: space-between; - margin-bottom: 2rem; -} - -.balance__label { - font-size: 2.2rem; - font-weight: 500; - margin-bottom: -0.2rem; -} - -.balance__date { - font-size: 1.4rem; - color: #888; -} - -.balance__value { - font-size: 4.5rem; - font-weight: 400; -} - -/* MOVEMENTS */ -.movements { - grid-row: 2 / span 3; - background-color: #fff; - border-radius: 1rem; - overflow: scroll; -} - -.movements__row { - padding: 2.25rem 4rem; - display: flex; - align-items: center; - border-bottom: 1px solid #eee; -} - -.movements__type { - font-size: 1.1rem; - text-transform: uppercase; - font-weight: 500; - color: #fff; - padding: 0.1rem 1rem; - border-radius: 10rem; - margin-right: 2rem; -} - -.movements__date { - font-size: 1.1rem; - text-transform: uppercase; - font-weight: 500; - color: #666; -} - -.movements__type--deposit { - background-image: linear-gradient(to top left, #39b385, #9be15d); -} - -.movements__type--withdrawal { - background-image: linear-gradient(to top left, #e52a5a, #ff585f); -} - -.movements__value { - font-size: 1.7rem; - margin-left: auto; -} - -/* SUMMARY */ -.summary { - grid-row: 5 / 6; - display: flex; - align-items: baseline; - padding: 0 0.3rem; - margin-top: 1rem; -} - -.summary__label { - font-size: 1.2rem; - font-weight: 500; - text-transform: uppercase; - margin-right: 0.8rem; -} - -.summary__value { - font-size: 2.2rem; - margin-right: 2.5rem; -} - -.summary__value--in, -.summary__value--interest { - color: #66c873; -} - -.summary__value--out { - color: #f5465d; -} - -.btn--sort { - margin-left: auto; - border: none; - background: none; - font-size: 1.3rem; - font-weight: 500; - cursor: pointer; -} - -/* OPERATIONS */ -.operation { - border-radius: 1rem; - padding: 3rem 4rem; - color: #333; -} - -.operation--transfer { - background-image: linear-gradient(to top left, #ffb003, #ffcb03); -} - -.operation--loan { - background-image: linear-gradient(to top left, #39b385, #9be15d); -} - -.operation--close { - background-image: linear-gradient(to top left, #e52a5a, #ff585f); -} - -h2 { - margin-bottom: 1.5rem; - font-size: 1.7rem; - font-weight: 600; - color: #333; -} - -.form { - display: grid; - grid-template-columns: 2.5fr 2.5fr 1fr; - grid-template-rows: auto auto; - gap: 0.4rem 1rem; -} - -/* Exceptions for interst */ -.form.form--loan { - grid-template-columns: 2.5fr 1fr 2.5fr; -} -.form__label--loan { - grid-row: 2; -} -/* End exceptions */ - -.form__input { - width: 100%; - border: none; - background-color: rgba(255, 255, 255, 0.4); - font-family: inherit; - font-size: 1.5rem; - text-align: center; - color: #333; - padding: 0.3rem 1rem; - border-radius: 0.7rem; - transition: all 0.3s; -} - -.form__input:focus { - outline: none; - background-color: rgba(255, 255, 255, 0.6); -} - -.form__label { - font-size: 1.3rem; - text-align: center; -} - -.form__btn { - border: none; - border-radius: 0.7rem; - font-size: 1.8rem; - background-color: #fff; - cursor: pointer; - transition: all 0.3s; -} - -.form__btn:focus { - outline: none; - background-color: rgba(255, 255, 255, 0.8); -} - -.logout-timer { - padding: 0 0.3rem; - margin-top: 1.9rem; - text-align: right; - font-size: 1.25rem; -} - -.timer { - font-weight: 600; -} diff --git a/13-Advanced-DOM-Bankist/final/.prettierrc b/13-Advanced-DOM-Bankist/final/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/13-Advanced-DOM-Bankist/final/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/13-Advanced-DOM-Bankist/final/img/card-lazy.jpg b/13-Advanced-DOM-Bankist/final/img/card-lazy.jpg deleted file mode 100644 index 367e2f9256..0000000000 Binary files a/13-Advanced-DOM-Bankist/final/img/card-lazy.jpg and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/final/img/card.jpg b/13-Advanced-DOM-Bankist/final/img/card.jpg deleted file mode 100644 index 5f8c606314..0000000000 Binary files a/13-Advanced-DOM-Bankist/final/img/card.jpg and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/final/img/digital-lazy.jpg b/13-Advanced-DOM-Bankist/final/img/digital-lazy.jpg deleted file mode 100644 index fa78f86756..0000000000 Binary files a/13-Advanced-DOM-Bankist/final/img/digital-lazy.jpg and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/final/img/digital.jpg b/13-Advanced-DOM-Bankist/final/img/digital.jpg deleted file mode 100644 index 87a319b6f3..0000000000 Binary files a/13-Advanced-DOM-Bankist/final/img/digital.jpg and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/final/img/grow-lazy.jpg b/13-Advanced-DOM-Bankist/final/img/grow-lazy.jpg deleted file mode 100644 index 6055cdc1f7..0000000000 Binary files a/13-Advanced-DOM-Bankist/final/img/grow-lazy.jpg and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/final/img/grow.jpg b/13-Advanced-DOM-Bankist/final/img/grow.jpg deleted file mode 100644 index 19e7f85dbf..0000000000 Binary files a/13-Advanced-DOM-Bankist/final/img/grow.jpg and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/final/img/hero.png b/13-Advanced-DOM-Bankist/final/img/hero.png deleted file mode 100644 index 964f65ba62..0000000000 Binary files a/13-Advanced-DOM-Bankist/final/img/hero.png and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/final/img/icon.png b/13-Advanced-DOM-Bankist/final/img/icon.png deleted file mode 100644 index d00606eab8..0000000000 Binary files a/13-Advanced-DOM-Bankist/final/img/icon.png and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/final/img/icons.svg b/13-Advanced-DOM-Bankist/final/img/icons.svg deleted file mode 100644 index 9076bfd8b1..0000000000 --- a/13-Advanced-DOM-Bankist/final/img/icons.svg +++ /dev/null @@ -1,1324 +0,0 @@ - diff --git a/13-Advanced-DOM-Bankist/final/img/img-1.jpg b/13-Advanced-DOM-Bankist/final/img/img-1.jpg deleted file mode 100644 index af42481ce0..0000000000 Binary files a/13-Advanced-DOM-Bankist/final/img/img-1.jpg and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/final/img/img-2.jpg b/13-Advanced-DOM-Bankist/final/img/img-2.jpg deleted file mode 100644 index 56b1f167e8..0000000000 Binary files a/13-Advanced-DOM-Bankist/final/img/img-2.jpg and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/final/img/img-3.jpg b/13-Advanced-DOM-Bankist/final/img/img-3.jpg deleted file mode 100644 index 475c40d05c..0000000000 Binary files a/13-Advanced-DOM-Bankist/final/img/img-3.jpg and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/final/img/img-4.jpg b/13-Advanced-DOM-Bankist/final/img/img-4.jpg deleted file mode 100644 index beb70d6f77..0000000000 Binary files a/13-Advanced-DOM-Bankist/final/img/img-4.jpg and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/final/img/logo.png b/13-Advanced-DOM-Bankist/final/img/logo.png deleted file mode 100644 index 39b5de76f4..0000000000 Binary files a/13-Advanced-DOM-Bankist/final/img/logo.png and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/final/img/user-1.jpg b/13-Advanced-DOM-Bankist/final/img/user-1.jpg deleted file mode 100644 index 3fd68e3bdc..0000000000 Binary files a/13-Advanced-DOM-Bankist/final/img/user-1.jpg and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/final/img/user-2.jpg b/13-Advanced-DOM-Bankist/final/img/user-2.jpg deleted file mode 100644 index a6b47fd123..0000000000 Binary files a/13-Advanced-DOM-Bankist/final/img/user-2.jpg and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/final/img/user-3.jpg b/13-Advanced-DOM-Bankist/final/img/user-3.jpg deleted file mode 100644 index d0754c3640..0000000000 Binary files a/13-Advanced-DOM-Bankist/final/img/user-3.jpg and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/final/index.html b/13-Advanced-DOM-Bankist/final/index.html deleted file mode 100644 index 7dc87c7d9b..0000000000 --- a/13-Advanced-DOM-Bankist/final/index.html +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - - - - - Bankist | When Banking meets Minimalist - - - - -
- - -
- -

- When - - banking - meets
- minimalist -

-

A simpler banking experience for a simpler life.

- - Minimalist bank items -
-
- -
-
-

Features

-

- Everything you need in a modern bank and more. -

-
- -
- Computer -
-
- - - -
-
100% digital bank
-

- Lorem ipsum dolor sit amet consectetur adipisicing elit. Unde alias - sint quos? Accusantium a fugiat porro reiciendis saepe quibusdam - debitis ducimus. -

-
- -
-
- - - -
-
Watch your money grow
-

- Nesciunt quos autem dolorum voluptates cum dolores dicta fuga - inventore ab? Nulla incidunt eius numquam sequi iste pariatur - quibusdam! -

-
- Plant - - Credit card -
-
- - - -
-
Free debit card included
-

- Quasi, fugit in cumque cupiditate reprehenderit debitis animi enim - eveniet consequatur odit quam quos possimus assumenda dicta fuga - inventore ab. -

-
-
-
- -
-
-

Operations

-

- Everything as simple as possible, but no simpler. -

-
- -
-
- - - -
-
-
- - - -
-
- Tranfser money to anyone, instantly! No fees, no BS. -
-

- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do - eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim - ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut - aliquip ex ea commodo consequat. -

-
- -
-
- - - -
-
- Buy a home or make your dreams come true, with instant loans. -
-

- Duis aute irure dolor in reprehenderit in voluptate velit esse - cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat - cupidatat non proident, sunt in culpa qui officia deserunt mollit - anim id est laborum. -

-
-
-
- - - -
-
- No longer need your account? No problem! Close it instantly. -
-

- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui - officia deserunt mollit anim id est laborum. Ut enim ad minim - veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex - ea commodo consequat. -

-
-
-
- -
-
-

Not sure yet?

-

- Millions of Bankists are already making their lifes simpler. -

-
- -
-
-
-
Best financial decision ever!
-
- Lorem ipsum dolor sit, amet consectetur adipisicing elit. - Accusantium quas quisquam non? Quas voluptate nulla minima - deleniti optio ullam nesciunt, numquam corporis et asperiores - laboriosam sunt, praesentium suscipit blanditiis. Necessitatibus - id alias reiciendis, perferendis facere pariatur dolore veniam - autem esse non voluptatem saepe provident nihil molestiae. -
-
- -
Aarav Lynn
-

San Francisco, USA

-
-
-
- -
-
-
- The last step to becoming a complete minimalist -
-
- Quisquam itaque deserunt ullam, quia ea repellendus provident, - ducimus neque ipsam modi voluptatibus doloremque, corrupti - laborum. Incidunt numquam perferendis veritatis neque repellendus. - Lorem, ipsum dolor sit amet consectetur adipisicing elit. Illo - deserunt exercitationem deleniti. -
-
- -
Miyah Miles
-

London, UK

-
-
-
- -
-
-
- Finally free from old-school banks -
-
- Debitis, nihil sit minus suscipit magni aperiam vel tenetur - incidunt commodi architecto numquam omnis nulla autem, - necessitatibus blanditiis modi similique quidem. Odio aliquam - culpa dicta beatae quod maiores ipsa minus consequatur error sunt, - deleniti saepe aliquid quos inventore sequi. Necessitatibus id - alias reiciendis, perferendis facere. -
-
- -
Francisco Gomes
-

Lisbon, Portugal

-
-
-
- - - -
-
-
- - - - - - - - - - - diff --git a/13-Advanced-DOM-Bankist/final/script.js b/13-Advanced-DOM-Bankist/final/script.js deleted file mode 100644 index 1516043fdb..0000000000 --- a/13-Advanced-DOM-Bankist/final/script.js +++ /dev/null @@ -1,512 +0,0 @@ -'use strict'; - -const modal = document.querySelector('.modal'); -const overlay = document.querySelector('.overlay'); -const btnCloseModal = document.querySelector('.btn--close-modal'); -const btnsOpenModal = document.querySelectorAll('.btn--show-modal'); -const btnScrollTo = document.querySelector('.btn--scroll-to'); -const section1 = document.querySelector('#section--1'); -const nav = document.querySelector('.nav'); -const tabs = document.querySelectorAll('.operations__tab'); -const tabsContainer = document.querySelector('.operations__tab-container'); -const tabsContent = document.querySelectorAll('.operations__content'); - -/////////////////////////////////////// -// Modal window - -const openModal = function (e) { - e.preventDefault(); - modal.classList.remove('hidden'); - overlay.classList.remove('hidden'); -}; - -const closeModal = function () { - modal.classList.add('hidden'); - overlay.classList.add('hidden'); -}; - -btnsOpenModal.forEach(btn => btn.addEventListener('click', openModal)); - -btnCloseModal.addEventListener('click', closeModal); -overlay.addEventListener('click', closeModal); - -document.addEventListener('keydown', function (e) { - if (e.key === 'Escape' && !modal.classList.contains('hidden')) { - closeModal(); - } -}); - -/////////////////////////////////////// -// Button scrolling -btnScrollTo.addEventListener('click', function (e) { - const s1coords = section1.getBoundingClientRect(); - console.log(s1coords); - - console.log(e.target.getBoundingClientRect()); - - console.log('Current scroll (X/Y)', window.pageXOffset, window.pageYOffset); - - console.log( - 'height/width viewport', - document.documentElement.clientHeight, - document.documentElement.clientWidth - ); - - // Scrolling - // window.scrollTo( - // s1coords.left + window.pageXOffset, - // s1coords.top + window.pageYOffset - // ); - - // window.scrollTo({ - // left: s1coords.left + window.pageXOffset, - // top: s1coords.top + window.pageYOffset, - // behavior: 'smooth', - // }); - - section1.scrollIntoView({ behavior: 'smooth' }); -}); - -/////////////////////////////////////// -// Page navigation - -// document.querySelectorAll('.nav__link').forEach(function (el) { -// el.addEventListener('click', function (e) { -// e.preventDefault(); -// const id = this.getAttribute('href'); -// console.log(id); -// document.querySelector(id).scrollIntoView({ behavior: 'smooth' }); -// }); -// }); - -// 1. Add event listener to common parent element -// 2. Determine what element originated the event - -document.querySelector('.nav__links').addEventListener('click', function (e) { - e.preventDefault(); - - // Matching strategy - if (e.target.classList.contains('nav__link')) { - const id = e.target.getAttribute('href'); - document.querySelector(id).scrollIntoView({ behavior: 'smooth' }); - } -}); - -/////////////////////////////////////// -// Tabbed component - -tabsContainer.addEventListener('click', function (e) { - const clicked = e.target.closest('.operations__tab'); - - // Guard clause - if (!clicked) return; - - // Remove active classes - tabs.forEach(t => t.classList.remove('operations__tab--active')); - tabsContent.forEach(c => c.classList.remove('operations__content--active')); - - // Activate tab - clicked.classList.add('operations__tab--active'); - - // Activate content area - document - .querySelector(`.operations__content--${clicked.dataset.tab}`) - .classList.add('operations__content--active'); -}); - -/////////////////////////////////////// -// Menu fade animation -const handleHover = function (e) { - if (e.target.classList.contains('nav__link')) { - const link = e.target; - const siblings = link.closest('.nav').querySelectorAll('.nav__link'); - const logo = link.closest('.nav').querySelector('img'); - - siblings.forEach(el => { - if (el !== link) el.style.opacity = this; - }); - logo.style.opacity = this; - } -}; - -// Passing "argument" into handler -nav.addEventListener('mouseover', handleHover.bind(0.5)); -nav.addEventListener('mouseout', handleHover.bind(1)); - -/////////////////////////////////////// -// Sticky navigation: Intersection Observer API - -const header = document.querySelector('.header'); -const navHeight = nav.getBoundingClientRect().height; - -const stickyNav = function (entries) { - const [entry] = entries; - // console.log(entry); - - if (!entry.isIntersecting) nav.classList.add('sticky'); - else nav.classList.remove('sticky'); -}; - -const headerObserver = new IntersectionObserver(stickyNav, { - root: null, - threshold: 0, - rootMargin: `-${navHeight}px`, -}); - -headerObserver.observe(header); - -/////////////////////////////////////// -// Reveal sections -const allSections = document.querySelectorAll('.section'); - -const revealSection = function (entries, observer) { - entries.forEach(entry => { - if (!entry.isIntersecting) return; - - entry.target.classList.remove('section--hidden'); - observer.unobserve(entry.target); - }); -}; - -const sectionObserver = new IntersectionObserver(revealSection, { - root: null, - threshold: 0.15, -}); - -allSections.forEach(function (section) { - sectionObserver.observe(section); - section.classList.add('section--hidden'); -}); - -// Lazy loading images -const imgTargets = document.querySelectorAll('img[data-src]'); - -const loadImg = function (entries, observer) { - const [entry] = entries; - - if (!entry.isIntersecting) return; - - // Replace src with data-src - entry.target.src = entry.target.dataset.src; - - entry.target.addEventListener('load', function () { - entry.target.classList.remove('lazy-img'); - }); - - observer.unobserve(entry.target); -}; - -const imgObserver = new IntersectionObserver(loadImg, { - root: null, - threshold: 0, - rootMargin: '200px', -}); - -imgTargets.forEach(img => imgObserver.observe(img)); - -/////////////////////////////////////// -// Slider -const slider = function () { - const slides = document.querySelectorAll('.slide'); - const btnLeft = document.querySelector('.slider__btn--left'); - const btnRight = document.querySelector('.slider__btn--right'); - const dotContainer = document.querySelector('.dots'); - - let curSlide = 0; - const maxSlide = slides.length; - - // Functions - const createDots = function () { - slides.forEach(function (_, i) { - dotContainer.insertAdjacentHTML( - 'beforeend', - `` - ); - }); - }; - - const activateDot = function (slide) { - document - .querySelectorAll('.dots__dot') - .forEach(dot => dot.classList.remove('dots__dot--active')); - - document - .querySelector(`.dots__dot[data-slide="${slide}"]`) - .classList.add('dots__dot--active'); - }; - - const goToSlide = function (slide) { - slides.forEach( - (s, i) => (s.style.transform = `translateX(${100 * (i - slide)}%)`) - ); - }; - - // Next slide - const nextSlide = function () { - if (curSlide === maxSlide - 1) { - curSlide = 0; - } else { - curSlide++; - } - - goToSlide(curSlide); - activateDot(curSlide); - }; - - const prevSlide = function () { - if (curSlide === 0) { - curSlide = maxSlide - 1; - } else { - curSlide--; - } - goToSlide(curSlide); - activateDot(curSlide); - }; - - const init = function () { - goToSlide(0); - createDots(); - - activateDot(0); - }; - init(); - - // Event handlers - btnRight.addEventListener('click', nextSlide); - btnLeft.addEventListener('click', prevSlide); - - document.addEventListener('keydown', function (e) { - if (e.key === 'ArrowLeft') prevSlide(); - e.key === 'ArrowRight' && nextSlide(); - }); - - dotContainer.addEventListener('click', function (e) { - if (e.target.classList.contains('dots__dot')) { - // BUG in v2: This way, we're not keeping track of the current slide when clicking on a slide - // const { slide } = e.target.dataset; - - curSlide = Number(e.target.dataset.slide); - goToSlide(curSlide); - activateDot(curSlide); - } - }); -}; -slider(); - -/////////////////////////////////////// -/////////////////////////////////////// -/////////////////////////////////////// - -/* -/////////////////////////////////////// -// Selecting, Creating, and Deleting Elements - -// Selecting elements -console.log(document.documentElement); -console.log(document.head); -console.log(document.body); - -const header = document.querySelector('.header'); -const allSections = document.querySelectorAll('.section'); -console.log(allSections); - -document.getElementById('section--1'); -const allButtons = document.getElementsByTagName('button'); -console.log(allButtons); - -console.log(document.getElementsByClassName('btn')); - -// Creating and inserting elements -const message = document.createElement('div'); -message.classList.add('cookie-message'); -// message.textContent = 'We use cookied for improved functionality and analytics.'; -message.innerHTML = - 'We use cookied for improved functionality and analytics. '; - -// header.prepend(message); -header.append(message); -// header.append(message.cloneNode(true)); - -// header.before(message); -// header.after(message); - -// Delete elements -document - .querySelector('.btn--close-cookie') - .addEventListener('click', function () { - // message.remove(); - message.parentElement.removeChild(message); - }); - - -/////////////////////////////////////// -// Styles, Attributes and Classes - -// Styles -message.style.backgroundColor = '#37383d'; -message.style.width = '120%'; - -console.log(message.style.color); -console.log(message.style.backgroundColor); - -console.log(getComputedStyle(message).color); -console.log(getComputedStyle(message).height); - -message.style.height = - Number.parseFloat(getComputedStyle(message).height, 10) + 30 + 'px'; - -document.documentElement.style.setProperty('--color-primary', 'orangered'); - -// Attributes -const logo = document.querySelector('.nav__logo'); -console.log(logo.alt); -console.log(logo.className); - -logo.alt = 'Beautiful minimalist logo'; - -// Non-standard -console.log(logo.designer); -console.log(logo.getAttribute('designer')); -logo.setAttribute('company', 'Bankist'); - -console.log(logo.src); -console.log(logo.getAttribute('src')); - -const link = document.querySelector('.nav__link--btn'); -console.log(link.href); -console.log(link.getAttribute('href')); - -// Data attributes -console.log(logo.dataset.versionNumber); - -// Classes -logo.classList.add('c', 'j'); -logo.classList.remove('c', 'j'); -logo.classList.toggle('c'); -logo.classList.contains('c'); // not includes - -// Don't use -logo.clasName = 'jonas'; - - -/////////////////////////////////////// -// Types of Events and Event Handlers -const h1 = document.querySelector('h1'); - -const alertH1 = function (e) { - alert('addEventListener: Great! You are reading the heading :D'); -}; - -h1.addEventListener('mouseenter', alertH1); - -setTimeout(() => h1.removeEventListener('mouseenter', alertH1), 3000); - -// h1.onmouseenter = function (e) { -// alert('onmouseenter: Great! You are reading the heading :D'); -// }; - - -/////////////////////////////////////// -// Event Propagation in Practice -const randomInt = (min, max) => - Math.floor(Math.random() * (max - min + 1) + min); -const randomColor = () => - `rgb(${randomInt(0, 255)},${randomInt(0, 255)},${randomInt(0, 255)})`; - -document.querySelector('.nav__link').addEventListener('click', function (e) { - this.style.backgroundColor = randomColor(); - console.log('LINK', e.target, e.currentTarget); - console.log(e.currentTarget === this); - - // Stop propagation - // e.stopPropagation(); -}); - -document.querySelector('.nav__links').addEventListener('click', function (e) { - this.style.backgroundColor = randomColor(); - console.log('CONTAINER', e.target, e.currentTarget); -}); - -document.querySelector('.nav').addEventListener('click', function (e) { - this.style.backgroundColor = randomColor(); - console.log('NAV', e.target, e.currentTarget); -}); - - -/////////////////////////////////////// -// DOM Traversing -const h1 = document.querySelector('h1'); - -// Going downwards: child -console.log(h1.querySelectorAll('.highlight')); -console.log(h1.childNodes); -console.log(h1.children); -h1.firstElementChild.style.color = 'white'; -h1.lastElementChild.style.color = 'orangered'; - -// Going upwards: parents -console.log(h1.parentNode); -console.log(h1.parentElement); - -h1.closest('.header').style.background = 'var(--gradient-secondary)'; - -h1.closest('h1').style.background = 'var(--gradient-primary)'; - -// Going sideways: siblings -console.log(h1.previousElementSibling); -console.log(h1.nextElementSibling); - -console.log(h1.previousSibling); -console.log(h1.nextSibling); - -console.log(h1.parentElement.children); -[...h1.parentElement.children].forEach(function (el) { - if (el !== h1) el.style.transform = 'scale(0.5)'; -}); - -/////////////////////////////////////// -// Sticky navigation -const initialCoords = section1.getBoundingClientRect(); -console.log(initialCoords); - -window.addEventListener('scroll', function () { - console.log(window.scrollY); - - if (window.scrollY > initialCoords.top) nav.classList.add('sticky'); - else nav.classList.remove('sticky'); -}); - -/////////////////////////////////////// -// Sticky navigation: Intersection Observer API - -const obsCallback = function (entries, observer) { - entries.forEach(entry => { - console.log(entry); - }); -}; - -const obsOptions = { - root: null, - threshold: [0, 0.2], -}; - -const observer = new IntersectionObserver(obsCallback, obsOptions); -observer.observe(section1); - - -/////////////////////////////////////// -// Lifecycle DOM Events -document.addEventListener('DOMContentLoaded', function (e) { - console.log('HTML parsed and DOM tree built!', e); -}); - -window.addEventListener('load', function (e) { - console.log('Page fully loaded', e); -}); - -window.addEventListener('beforeunload', function (e) { - e.preventDefault(); - console.log(e); - e.returnValue = ''; -}); -*/ diff --git a/13-Advanced-DOM-Bankist/final/style.css b/13-Advanced-DOM-Bankist/final/style.css deleted file mode 100644 index caf3a4a635..0000000000 --- a/13-Advanced-DOM-Bankist/final/style.css +++ /dev/null @@ -1,674 +0,0 @@ -/* The page is NOT responsive. You can implement responsiveness yourself if you wanna have some fun ๐Ÿ˜ƒ */ - -:root { - --color-primary: #5ec576; - --color-secondary: #ffcb03; - --color-tertiary: #ff585f; - --color-primary-darker: #4bbb7d; - --color-secondary-darker: #ffbb00; - --color-tertiary-darker: #fd424b; - --color-primary-opacity: #5ec5763a; - --color-secondary-opacity: #ffcd0331; - --color-tertiary-opacity: #ff58602d; - --gradient-primary: linear-gradient(to top left, #39b385, #9be15d); - --gradient-secondary: linear-gradient(to top left, #ffb003, #ffcb03); -} - -* { - margin: 0; - padding: 0; - box-sizing: inherit; -} - -html { - font-size: 62.5%; - box-sizing: border-box; -} - -body { - font-family: 'Poppins', sans-serif; - font-weight: 300; - color: #444; - line-height: 1.9; - background-color: #f3f3f3; -} - -/* GENERAL ELEMENTS */ -.section { - padding: 15rem 3rem; - border-top: 1px solid #ddd; - - transition: transform 1s, opacity 1s; -} - -.section--hidden { - opacity: 0; - transform: translateY(8rem); -} - -.section__title { - max-width: 80rem; - margin: 0 auto 8rem auto; -} - -.section__description { - font-size: 1.8rem; - font-weight: 600; - text-transform: uppercase; - color: var(--color-primary); - margin-bottom: 1rem; -} - -.section__header { - font-size: 4rem; - line-height: 1.3; - font-weight: 500; -} - -.btn { - display: inline-block; - background-color: var(--color-primary); - font-size: 1.6rem; - font-family: inherit; - font-weight: 500; - border: none; - padding: 1.25rem 4.5rem; - border-radius: 10rem; - cursor: pointer; - transition: all 0.3s; -} - -.btn:hover { - background-color: var(--color-primary-darker); -} - -.btn--text { - display: inline-block; - background: none; - font-size: 1.7rem; - font-family: inherit; - font-weight: 500; - color: var(--color-primary); - border: none; - border-bottom: 1px solid currentColor; - padding-bottom: 2px; - cursor: pointer; - transition: all 0.3s; -} - -p { - color: #666; -} - -/* This is BAD for accessibility! Don't do in the real world! */ -button:focus { - outline: none; -} - -img { - transition: filter 0.5s; -} - -.lazy-img { - filter: blur(20px); -} - -/* NAVIGATION */ -.nav { - display: flex; - justify-content: space-between; - align-items: center; - height: 9rem; - width: 100%; - padding: 0 6rem; - z-index: 100; -} - -/* nav and stickly class at the same time */ -.nav.sticky { - position: fixed; - background-color: rgba(255, 255, 255, 0.95); -} - -.nav__logo { - height: 4.5rem; - transition: all 0.3s; -} - -.nav__links { - display: flex; - align-items: center; - list-style: none; -} - -.nav__item { - margin-left: 4rem; -} - -.nav__link:link, -.nav__link:visited { - font-size: 1.7rem; - font-weight: 400; - color: inherit; - text-decoration: none; - display: block; - transition: all 0.3s; -} - -.nav__link--btn:link, -.nav__link--btn:visited { - padding: 0.8rem 2.5rem; - border-radius: 3rem; - background-color: var(--color-primary); - color: #222; -} - -.nav__link--btn:hover, -.nav__link--btn:active { - color: inherit; - background-color: var(--color-primary-darker); - color: #333; -} - -/* HEADER */ -.header { - padding: 0 3rem; - height: 100vh; - display: flex; - flex-direction: column; - align-items: center; -} - -.header__title { - flex: 1; - - max-width: 115rem; - display: grid; - grid-template-columns: 3fr 2fr; - row-gap: 3rem; - align-content: center; - justify-content: center; - - align-items: start; - justify-items: start; -} - -h1 { - font-size: 5.5rem; - line-height: 1.35; -} - -h4 { - font-size: 2.4rem; - font-weight: 500; -} - -.header__img { - width: 100%; - grid-column: 2 / 3; - grid-row: 1 / span 4; - transform: translateY(-6rem); -} - -.highlight { - position: relative; -} - -.highlight::after { - display: block; - content: ''; - position: absolute; - bottom: 0; - left: 0; - height: 100%; - width: 100%; - z-index: -1; - opacity: 0.7; - transform: scale(1.07, 1.05) skewX(-15deg); - background-image: var(--gradient-primary); -} - -/* FEATURES */ -.features { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 4rem; - margin: 0 12rem; -} - -.features__img { - width: 100%; -} - -.features__feature { - align-self: center; - justify-self: center; - width: 70%; - font-size: 1.5rem; -} - -.features__icon { - display: flex; - align-items: center; - justify-content: center; - background-color: var(--color-primary-opacity); - height: 5.5rem; - width: 5.5rem; - border-radius: 50%; - margin-bottom: 2rem; -} - -.features__icon svg { - height: 2.5rem; - width: 2.5rem; - fill: var(--color-primary); -} - -.features__header { - font-size: 2rem; - margin-bottom: 1rem; -} - -/* OPERATIONS */ -.operations { - max-width: 100rem; - margin: 12rem auto 0 auto; - - background-color: #fff; -} - -.operations__tab-container { - display: flex; - justify-content: center; -} - -.operations__tab { - margin-right: 2.5rem; - transform: translateY(-50%); -} - -.operations__tab span { - margin-right: 1rem; - font-weight: 600; - display: inline-block; -} - -.operations__tab--1 { - background-color: var(--color-secondary); -} - -.operations__tab--1:hover { - background-color: var(--color-secondary-darker); -} - -.operations__tab--3 { - background-color: var(--color-tertiary); - margin: 0; -} - -.operations__tab--3:hover { - background-color: var(--color-tertiary-darker); -} - -.operations__tab--active { - transform: translateY(-66%); -} - -.operations__content { - display: none; - - /* JUST PRESENTATIONAL */ - font-size: 1.7rem; - padding: 2.5rem 7rem 6.5rem 7rem; -} - -.operations__content--active { - display: grid; - grid-template-columns: 7rem 1fr; - column-gap: 3rem; - row-gap: 0.5rem; -} - -.operations__header { - font-size: 2.25rem; - font-weight: 500; - align-self: center; -} - -.operations__icon { - display: flex; - align-items: center; - justify-content: center; - height: 7rem; - width: 7rem; - border-radius: 50%; -} - -.operations__icon svg { - height: 2.75rem; - width: 2.75rem; -} - -.operations__content p { - grid-column: 2; -} - -.operations__icon--1 { - background-color: var(--color-secondary-opacity); -} -.operations__icon--2 { - background-color: var(--color-primary-opacity); -} -.operations__icon--3 { - background-color: var(--color-tertiary-opacity); -} -.operations__icon--1 svg { - fill: var(--color-secondary-darker); -} -.operations__icon--2 svg { - fill: var(--color-primary); -} -.operations__icon--3 svg { - fill: var(--color-tertiary); -} - -/* SLIDER */ -.slider { - max-width: 100rem; - height: 50rem; - margin: 0 auto; - position: relative; - - /* IN THE END */ - overflow: hidden; -} - -.slide { - position: absolute; - top: 0; - width: 100%; - height: 50rem; - - display: flex; - align-items: center; - justify-content: center; - - /* THIS creates the animation! */ - transition: transform 1s; -} - -.slide > img { - /* Only for images that have different size than slide */ - width: 100%; - height: 100%; - object-fit: cover; -} - -.slider__btn { - position: absolute; - top: 50%; - z-index: 10; - - border: none; - background: rgba(255, 255, 255, 0.7); - font-family: inherit; - color: #333; - border-radius: 50%; - height: 5.5rem; - width: 5.5rem; - font-size: 3.25rem; - cursor: pointer; -} - -.slider__btn--left { - left: 6%; - transform: translate(-50%, -50%); -} - -.slider__btn--right { - right: 6%; - transform: translate(50%, -50%); -} - -.dots { - position: absolute; - bottom: 5%; - left: 50%; - transform: translateX(-50%); - display: flex; -} - -.dots__dot { - border: none; - background-color: #b9b9b9; - opacity: 0.7; - height: 1rem; - width: 1rem; - border-radius: 50%; - margin-right: 1.75rem; - cursor: pointer; - transition: all 0.5s; - - /* Only necessary when overlying images */ - /* box-shadow: 0 0.6rem 1.5rem rgba(0, 0, 0, 0.7); */ -} - -.dots__dot:last-child { - margin: 0; -} - -.dots__dot--active { - /* background-color: #fff; */ - background-color: #888; - opacity: 1; -} - -/* TESTIMONIALS */ -.testimonial { - width: 65%; - position: relative; -} - -.testimonial::before { - content: '\201C'; - position: absolute; - top: -5.7rem; - left: -6.8rem; - line-height: 1; - font-size: 20rem; - font-family: inherit; - color: var(--color-primary); - z-index: -1; -} - -.testimonial__header { - font-size: 2.25rem; - font-weight: 500; - margin-bottom: 1.5rem; -} - -.testimonial__text { - font-size: 1.7rem; - margin-bottom: 3.5rem; - color: #666; -} - -.testimonial__author { - margin-left: 3rem; - font-style: normal; - - display: grid; - grid-template-columns: 6.5rem 1fr; - column-gap: 2rem; -} - -.testimonial__photo { - grid-row: 1 / span 2; - width: 6.5rem; - border-radius: 50%; -} - -.testimonial__name { - font-size: 1.7rem; - font-weight: 500; - align-self: end; - margin: 0; -} - -.testimonial__location { - font-size: 1.5rem; -} - -.section__title--testimonials { - margin-bottom: 4rem; -} - -/* SIGNUP */ -.section--sign-up { - background-color: #37383d; - border-top: none; - border-bottom: 1px solid #444; - text-align: center; - padding: 10rem 3rem; -} - -.section--sign-up .section__header { - color: #fff; - text-align: center; -} - -.section--sign-up .section__title { - margin-bottom: 6rem; -} - -.section--sign-up .btn { - font-size: 1.9rem; - padding: 2rem 5rem; -} - -/* FOOTER */ -.footer { - padding: 10rem 3rem; - background-color: #37383d; -} - -.footer__nav { - list-style: none; - display: flex; - justify-content: center; - margin-bottom: 5rem; -} - -.footer__item { - margin-right: 4rem; -} - -.footer__link { - font-size: 1.6rem; - color: #eee; - text-decoration: none; -} - -.footer__logo { - height: 5rem; - display: block; - margin: 0 auto; - margin-bottom: 5rem; -} - -.footer__copyright { - font-size: 1.4rem; - color: #aaa; - text-align: center; -} - -.footer__copyright .footer__link { - font-size: 1.4rem; -} - -/* MODAL WINDOW */ -.modal { - position: fixed; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - max-width: 60rem; - background-color: #f3f3f3; - padding: 5rem 6rem; - box-shadow: 0 4rem 6rem rgba(0, 0, 0, 0.3); - z-index: 1000; - transition: all 0.5s; -} - -.overlay { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: rgba(0, 0, 0, 0.5); - backdrop-filter: blur(4px); - z-index: 100; - transition: all 0.5s; -} - -.modal__header { - font-size: 3.25rem; - margin-bottom: 4.5rem; - line-height: 1.5; -} - -.modal__form { - margin: 0 3rem; - display: grid; - grid-template-columns: 1fr 2fr; - align-items: center; - gap: 2.5rem; -} - -.modal__form label { - font-size: 1.7rem; - font-weight: 500; -} - -.modal__form input { - font-size: 1.7rem; - padding: 1rem 1.5rem; - border: 1px solid #ddd; - border-radius: 0.5rem; -} - -.modal__form button { - grid-column: 1 / span 2; - justify-self: center; - margin-top: 1rem; -} - -.btn--close-modal { - font-family: inherit; - color: inherit; - position: absolute; - top: 0.5rem; - right: 2rem; - font-size: 4rem; - cursor: pointer; - border: none; - background: none; -} - -.hidden { - visibility: hidden; - opacity: 0; -} - -/* COOKIE MESSAGE */ -.cookie-message { - display: flex; - align-items: center; - justify-content: space-evenly; - width: 100%; - background-color: white; - color: #bbb; - font-size: 1.5rem; - font-weight: 400; -} diff --git a/13-Advanced-DOM-Bankist/starter/.prettierrc b/13-Advanced-DOM-Bankist/starter/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/13-Advanced-DOM-Bankist/starter/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/13-Advanced-DOM-Bankist/starter/img/card-lazy.jpg b/13-Advanced-DOM-Bankist/starter/img/card-lazy.jpg deleted file mode 100644 index 367e2f9256..0000000000 Binary files a/13-Advanced-DOM-Bankist/starter/img/card-lazy.jpg and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/starter/img/card.jpg b/13-Advanced-DOM-Bankist/starter/img/card.jpg deleted file mode 100644 index 5f8c606314..0000000000 Binary files a/13-Advanced-DOM-Bankist/starter/img/card.jpg and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/starter/img/digital-lazy.jpg b/13-Advanced-DOM-Bankist/starter/img/digital-lazy.jpg deleted file mode 100644 index fa78f86756..0000000000 Binary files a/13-Advanced-DOM-Bankist/starter/img/digital-lazy.jpg and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/starter/img/digital.jpg b/13-Advanced-DOM-Bankist/starter/img/digital.jpg deleted file mode 100644 index 87a319b6f3..0000000000 Binary files a/13-Advanced-DOM-Bankist/starter/img/digital.jpg and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/starter/img/grow-lazy.jpg b/13-Advanced-DOM-Bankist/starter/img/grow-lazy.jpg deleted file mode 100644 index 6055cdc1f7..0000000000 Binary files a/13-Advanced-DOM-Bankist/starter/img/grow-lazy.jpg and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/starter/img/grow.jpg b/13-Advanced-DOM-Bankist/starter/img/grow.jpg deleted file mode 100644 index 19e7f85dbf..0000000000 Binary files a/13-Advanced-DOM-Bankist/starter/img/grow.jpg and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/starter/img/hero.png b/13-Advanced-DOM-Bankist/starter/img/hero.png deleted file mode 100644 index 964f65ba62..0000000000 Binary files a/13-Advanced-DOM-Bankist/starter/img/hero.png and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/starter/img/icon.png b/13-Advanced-DOM-Bankist/starter/img/icon.png deleted file mode 100644 index d00606eab8..0000000000 Binary files a/13-Advanced-DOM-Bankist/starter/img/icon.png and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/starter/img/icons.svg b/13-Advanced-DOM-Bankist/starter/img/icons.svg deleted file mode 100644 index 9076bfd8b1..0000000000 --- a/13-Advanced-DOM-Bankist/starter/img/icons.svg +++ /dev/null @@ -1,1324 +0,0 @@ - diff --git a/13-Advanced-DOM-Bankist/starter/img/img-1.jpg b/13-Advanced-DOM-Bankist/starter/img/img-1.jpg deleted file mode 100644 index af42481ce0..0000000000 Binary files a/13-Advanced-DOM-Bankist/starter/img/img-1.jpg and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/starter/img/img-2.jpg b/13-Advanced-DOM-Bankist/starter/img/img-2.jpg deleted file mode 100644 index 56b1f167e8..0000000000 Binary files a/13-Advanced-DOM-Bankist/starter/img/img-2.jpg and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/starter/img/img-3.jpg b/13-Advanced-DOM-Bankist/starter/img/img-3.jpg deleted file mode 100644 index 475c40d05c..0000000000 Binary files a/13-Advanced-DOM-Bankist/starter/img/img-3.jpg and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/starter/img/img-4.jpg b/13-Advanced-DOM-Bankist/starter/img/img-4.jpg deleted file mode 100644 index beb70d6f77..0000000000 Binary files a/13-Advanced-DOM-Bankist/starter/img/img-4.jpg and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/starter/img/logo.png b/13-Advanced-DOM-Bankist/starter/img/logo.png deleted file mode 100644 index 39b5de76f4..0000000000 Binary files a/13-Advanced-DOM-Bankist/starter/img/logo.png and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/starter/img/user-1.jpg b/13-Advanced-DOM-Bankist/starter/img/user-1.jpg deleted file mode 100644 index 3fd68e3bdc..0000000000 Binary files a/13-Advanced-DOM-Bankist/starter/img/user-1.jpg and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/starter/img/user-2.jpg b/13-Advanced-DOM-Bankist/starter/img/user-2.jpg deleted file mode 100644 index a6b47fd123..0000000000 Binary files a/13-Advanced-DOM-Bankist/starter/img/user-2.jpg and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/starter/img/user-3.jpg b/13-Advanced-DOM-Bankist/starter/img/user-3.jpg deleted file mode 100644 index d0754c3640..0000000000 Binary files a/13-Advanced-DOM-Bankist/starter/img/user-3.jpg and /dev/null differ diff --git a/13-Advanced-DOM-Bankist/starter/index.html b/13-Advanced-DOM-Bankist/starter/index.html deleted file mode 100644 index 6999b1ccef..0000000000 --- a/13-Advanced-DOM-Bankist/starter/index.html +++ /dev/null @@ -1,355 +0,0 @@ - - - - - - - - - - - Bankist | When Banking meets Minimalist - - -
- - -
-

- When - - banking - meets
- minimalist -

-

A simpler banking experience for a simpler life.

- - Minimalist bank items -
-
- -
-
-

Features

-

- Everything you need in a modern bank and more. -

-
- -
- Computer -
-
- - - -
-
100% digital bank
-

- Lorem ipsum dolor sit amet consectetur adipisicing elit. Unde alias - sint quos? Accusantium a fugiat porro reiciendis saepe quibusdam - debitis ducimus. -

-
- -
-
- - - -
-
Watch your money grow
-

- Nesciunt quos autem dolorum voluptates cum dolores dicta fuga - inventore ab? Nulla incidunt eius numquam sequi iste pariatur - quibusdam! -

-
- Plant - - Credit card -
-
- - - -
-
Free debit card included
-

- Quasi, fugit in cumque cupiditate reprehenderit debitis animi enim - eveniet consequatur odit quam quos possimus assumenda dicta fuga - inventore ab. -

-
-
-
- -
-
-

Operations

-

- Everything as simple as possible, but no simpler. -

-
- -
-
- - - -
-
-
- - - -
-
- Tranfser money to anyone, instantly! No fees, no BS. -
-

- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do - eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim - ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut - aliquip ex ea commodo consequat. -

-
- -
-
- - - -
-
- Buy a home or make your dreams come true, with instant loans. -
-

- Duis aute irure dolor in reprehenderit in voluptate velit esse - cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat - cupidatat non proident, sunt in culpa qui officia deserunt mollit - anim id est laborum. -

-
-
-
- - - -
-
- No longer need your account? No problem! Close it instantly. -
-

- Excepteur sint occaecat cupidatat non proident, sunt in culpa qui - officia deserunt mollit anim id est laborum. Ut enim ad minim - veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex - ea commodo consequat. -

-
-
-
- -
-
-

Not sure yet?

-

- Millions of Bankists are already making their lifes simpler. -

-
- -
-
-
-
Best financial decision ever!
-
- Lorem ipsum dolor sit, amet consectetur adipisicing elit. - Accusantium quas quisquam non? Quas voluptate nulla minima - deleniti optio ullam nesciunt, numquam corporis et asperiores - laboriosam sunt, praesentium suscipit blanditiis. Necessitatibus - id alias reiciendis, perferendis facere pariatur dolore veniam - autem esse non voluptatem saepe provident nihil molestiae. -
-
- -
Aarav Lynn
-

San Francisco, USA

-
-
-
- -
-
-
- The last step to becoming a complete minimalist -
-
- Quisquam itaque deserunt ullam, quia ea repellendus provident, - ducimus neque ipsam modi voluptatibus doloremque, corrupti - laborum. Incidunt numquam perferendis veritatis neque repellendus. - Lorem, ipsum dolor sit amet consectetur adipisicing elit. Illo - deserunt exercitationem deleniti. -
-
- -
Miyah Miles
-

London, UK

-
-
-
- -
-
-
- Finally free from old-school banks -
-
- Debitis, nihil sit minus suscipit magni aperiam vel tenetur - incidunt commodi architecto numquam omnis nulla autem, - necessitatibus blanditiis modi similique quidem. Odio aliquam - culpa dicta beatae quod maiores ipsa minus consequatur error sunt, - deleniti saepe aliquid quos inventore sequi. Necessitatibus id - alias reiciendis, perferendis facere. -
-
- -
Francisco Gomes
-

Lisbon, Portugal

-
-
-
- - - - -
-
-
- - - - - - - - - - - diff --git a/13-Advanced-DOM-Bankist/starter/script.js b/13-Advanced-DOM-Bankist/starter/script.js deleted file mode 100644 index c51ec0afbe..0000000000 --- a/13-Advanced-DOM-Bankist/starter/script.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; - -/////////////////////////////////////// -// Modal window - -const modal = document.querySelector('.modal'); -const overlay = document.querySelector('.overlay'); -const btnCloseModal = document.querySelector('.btn--close-modal'); -const btnsOpenModal = document.querySelectorAll('.btn--show-modal'); - -const openModal = function () { - modal.classList.remove('hidden'); - overlay.classList.remove('hidden'); -}; - -const closeModal = function () { - modal.classList.add('hidden'); - overlay.classList.add('hidden'); -}; - -for (let i = 0; i < btnsOpenModal.length; i++) - btnsOpenModal[i].addEventListener('click', openModal); - -btnCloseModal.addEventListener('click', closeModal); -overlay.addEventListener('click', closeModal); - -document.addEventListener('keydown', function (e) { - if (e.key === 'Escape' && !modal.classList.contains('hidden')) { - closeModal(); - } -}); diff --git a/13-Advanced-DOM-Bankist/starter/style.css b/13-Advanced-DOM-Bankist/starter/style.css deleted file mode 100644 index caf3a4a635..0000000000 --- a/13-Advanced-DOM-Bankist/starter/style.css +++ /dev/null @@ -1,674 +0,0 @@ -/* The page is NOT responsive. You can implement responsiveness yourself if you wanna have some fun ๐Ÿ˜ƒ */ - -:root { - --color-primary: #5ec576; - --color-secondary: #ffcb03; - --color-tertiary: #ff585f; - --color-primary-darker: #4bbb7d; - --color-secondary-darker: #ffbb00; - --color-tertiary-darker: #fd424b; - --color-primary-opacity: #5ec5763a; - --color-secondary-opacity: #ffcd0331; - --color-tertiary-opacity: #ff58602d; - --gradient-primary: linear-gradient(to top left, #39b385, #9be15d); - --gradient-secondary: linear-gradient(to top left, #ffb003, #ffcb03); -} - -* { - margin: 0; - padding: 0; - box-sizing: inherit; -} - -html { - font-size: 62.5%; - box-sizing: border-box; -} - -body { - font-family: 'Poppins', sans-serif; - font-weight: 300; - color: #444; - line-height: 1.9; - background-color: #f3f3f3; -} - -/* GENERAL ELEMENTS */ -.section { - padding: 15rem 3rem; - border-top: 1px solid #ddd; - - transition: transform 1s, opacity 1s; -} - -.section--hidden { - opacity: 0; - transform: translateY(8rem); -} - -.section__title { - max-width: 80rem; - margin: 0 auto 8rem auto; -} - -.section__description { - font-size: 1.8rem; - font-weight: 600; - text-transform: uppercase; - color: var(--color-primary); - margin-bottom: 1rem; -} - -.section__header { - font-size: 4rem; - line-height: 1.3; - font-weight: 500; -} - -.btn { - display: inline-block; - background-color: var(--color-primary); - font-size: 1.6rem; - font-family: inherit; - font-weight: 500; - border: none; - padding: 1.25rem 4.5rem; - border-radius: 10rem; - cursor: pointer; - transition: all 0.3s; -} - -.btn:hover { - background-color: var(--color-primary-darker); -} - -.btn--text { - display: inline-block; - background: none; - font-size: 1.7rem; - font-family: inherit; - font-weight: 500; - color: var(--color-primary); - border: none; - border-bottom: 1px solid currentColor; - padding-bottom: 2px; - cursor: pointer; - transition: all 0.3s; -} - -p { - color: #666; -} - -/* This is BAD for accessibility! Don't do in the real world! */ -button:focus { - outline: none; -} - -img { - transition: filter 0.5s; -} - -.lazy-img { - filter: blur(20px); -} - -/* NAVIGATION */ -.nav { - display: flex; - justify-content: space-between; - align-items: center; - height: 9rem; - width: 100%; - padding: 0 6rem; - z-index: 100; -} - -/* nav and stickly class at the same time */ -.nav.sticky { - position: fixed; - background-color: rgba(255, 255, 255, 0.95); -} - -.nav__logo { - height: 4.5rem; - transition: all 0.3s; -} - -.nav__links { - display: flex; - align-items: center; - list-style: none; -} - -.nav__item { - margin-left: 4rem; -} - -.nav__link:link, -.nav__link:visited { - font-size: 1.7rem; - font-weight: 400; - color: inherit; - text-decoration: none; - display: block; - transition: all 0.3s; -} - -.nav__link--btn:link, -.nav__link--btn:visited { - padding: 0.8rem 2.5rem; - border-radius: 3rem; - background-color: var(--color-primary); - color: #222; -} - -.nav__link--btn:hover, -.nav__link--btn:active { - color: inherit; - background-color: var(--color-primary-darker); - color: #333; -} - -/* HEADER */ -.header { - padding: 0 3rem; - height: 100vh; - display: flex; - flex-direction: column; - align-items: center; -} - -.header__title { - flex: 1; - - max-width: 115rem; - display: grid; - grid-template-columns: 3fr 2fr; - row-gap: 3rem; - align-content: center; - justify-content: center; - - align-items: start; - justify-items: start; -} - -h1 { - font-size: 5.5rem; - line-height: 1.35; -} - -h4 { - font-size: 2.4rem; - font-weight: 500; -} - -.header__img { - width: 100%; - grid-column: 2 / 3; - grid-row: 1 / span 4; - transform: translateY(-6rem); -} - -.highlight { - position: relative; -} - -.highlight::after { - display: block; - content: ''; - position: absolute; - bottom: 0; - left: 0; - height: 100%; - width: 100%; - z-index: -1; - opacity: 0.7; - transform: scale(1.07, 1.05) skewX(-15deg); - background-image: var(--gradient-primary); -} - -/* FEATURES */ -.features { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 4rem; - margin: 0 12rem; -} - -.features__img { - width: 100%; -} - -.features__feature { - align-self: center; - justify-self: center; - width: 70%; - font-size: 1.5rem; -} - -.features__icon { - display: flex; - align-items: center; - justify-content: center; - background-color: var(--color-primary-opacity); - height: 5.5rem; - width: 5.5rem; - border-radius: 50%; - margin-bottom: 2rem; -} - -.features__icon svg { - height: 2.5rem; - width: 2.5rem; - fill: var(--color-primary); -} - -.features__header { - font-size: 2rem; - margin-bottom: 1rem; -} - -/* OPERATIONS */ -.operations { - max-width: 100rem; - margin: 12rem auto 0 auto; - - background-color: #fff; -} - -.operations__tab-container { - display: flex; - justify-content: center; -} - -.operations__tab { - margin-right: 2.5rem; - transform: translateY(-50%); -} - -.operations__tab span { - margin-right: 1rem; - font-weight: 600; - display: inline-block; -} - -.operations__tab--1 { - background-color: var(--color-secondary); -} - -.operations__tab--1:hover { - background-color: var(--color-secondary-darker); -} - -.operations__tab--3 { - background-color: var(--color-tertiary); - margin: 0; -} - -.operations__tab--3:hover { - background-color: var(--color-tertiary-darker); -} - -.operations__tab--active { - transform: translateY(-66%); -} - -.operations__content { - display: none; - - /* JUST PRESENTATIONAL */ - font-size: 1.7rem; - padding: 2.5rem 7rem 6.5rem 7rem; -} - -.operations__content--active { - display: grid; - grid-template-columns: 7rem 1fr; - column-gap: 3rem; - row-gap: 0.5rem; -} - -.operations__header { - font-size: 2.25rem; - font-weight: 500; - align-self: center; -} - -.operations__icon { - display: flex; - align-items: center; - justify-content: center; - height: 7rem; - width: 7rem; - border-radius: 50%; -} - -.operations__icon svg { - height: 2.75rem; - width: 2.75rem; -} - -.operations__content p { - grid-column: 2; -} - -.operations__icon--1 { - background-color: var(--color-secondary-opacity); -} -.operations__icon--2 { - background-color: var(--color-primary-opacity); -} -.operations__icon--3 { - background-color: var(--color-tertiary-opacity); -} -.operations__icon--1 svg { - fill: var(--color-secondary-darker); -} -.operations__icon--2 svg { - fill: var(--color-primary); -} -.operations__icon--3 svg { - fill: var(--color-tertiary); -} - -/* SLIDER */ -.slider { - max-width: 100rem; - height: 50rem; - margin: 0 auto; - position: relative; - - /* IN THE END */ - overflow: hidden; -} - -.slide { - position: absolute; - top: 0; - width: 100%; - height: 50rem; - - display: flex; - align-items: center; - justify-content: center; - - /* THIS creates the animation! */ - transition: transform 1s; -} - -.slide > img { - /* Only for images that have different size than slide */ - width: 100%; - height: 100%; - object-fit: cover; -} - -.slider__btn { - position: absolute; - top: 50%; - z-index: 10; - - border: none; - background: rgba(255, 255, 255, 0.7); - font-family: inherit; - color: #333; - border-radius: 50%; - height: 5.5rem; - width: 5.5rem; - font-size: 3.25rem; - cursor: pointer; -} - -.slider__btn--left { - left: 6%; - transform: translate(-50%, -50%); -} - -.slider__btn--right { - right: 6%; - transform: translate(50%, -50%); -} - -.dots { - position: absolute; - bottom: 5%; - left: 50%; - transform: translateX(-50%); - display: flex; -} - -.dots__dot { - border: none; - background-color: #b9b9b9; - opacity: 0.7; - height: 1rem; - width: 1rem; - border-radius: 50%; - margin-right: 1.75rem; - cursor: pointer; - transition: all 0.5s; - - /* Only necessary when overlying images */ - /* box-shadow: 0 0.6rem 1.5rem rgba(0, 0, 0, 0.7); */ -} - -.dots__dot:last-child { - margin: 0; -} - -.dots__dot--active { - /* background-color: #fff; */ - background-color: #888; - opacity: 1; -} - -/* TESTIMONIALS */ -.testimonial { - width: 65%; - position: relative; -} - -.testimonial::before { - content: '\201C'; - position: absolute; - top: -5.7rem; - left: -6.8rem; - line-height: 1; - font-size: 20rem; - font-family: inherit; - color: var(--color-primary); - z-index: -1; -} - -.testimonial__header { - font-size: 2.25rem; - font-weight: 500; - margin-bottom: 1.5rem; -} - -.testimonial__text { - font-size: 1.7rem; - margin-bottom: 3.5rem; - color: #666; -} - -.testimonial__author { - margin-left: 3rem; - font-style: normal; - - display: grid; - grid-template-columns: 6.5rem 1fr; - column-gap: 2rem; -} - -.testimonial__photo { - grid-row: 1 / span 2; - width: 6.5rem; - border-radius: 50%; -} - -.testimonial__name { - font-size: 1.7rem; - font-weight: 500; - align-self: end; - margin: 0; -} - -.testimonial__location { - font-size: 1.5rem; -} - -.section__title--testimonials { - margin-bottom: 4rem; -} - -/* SIGNUP */ -.section--sign-up { - background-color: #37383d; - border-top: none; - border-bottom: 1px solid #444; - text-align: center; - padding: 10rem 3rem; -} - -.section--sign-up .section__header { - color: #fff; - text-align: center; -} - -.section--sign-up .section__title { - margin-bottom: 6rem; -} - -.section--sign-up .btn { - font-size: 1.9rem; - padding: 2rem 5rem; -} - -/* FOOTER */ -.footer { - padding: 10rem 3rem; - background-color: #37383d; -} - -.footer__nav { - list-style: none; - display: flex; - justify-content: center; - margin-bottom: 5rem; -} - -.footer__item { - margin-right: 4rem; -} - -.footer__link { - font-size: 1.6rem; - color: #eee; - text-decoration: none; -} - -.footer__logo { - height: 5rem; - display: block; - margin: 0 auto; - margin-bottom: 5rem; -} - -.footer__copyright { - font-size: 1.4rem; - color: #aaa; - text-align: center; -} - -.footer__copyright .footer__link { - font-size: 1.4rem; -} - -/* MODAL WINDOW */ -.modal { - position: fixed; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - max-width: 60rem; - background-color: #f3f3f3; - padding: 5rem 6rem; - box-shadow: 0 4rem 6rem rgba(0, 0, 0, 0.3); - z-index: 1000; - transition: all 0.5s; -} - -.overlay { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: rgba(0, 0, 0, 0.5); - backdrop-filter: blur(4px); - z-index: 100; - transition: all 0.5s; -} - -.modal__header { - font-size: 3.25rem; - margin-bottom: 4.5rem; - line-height: 1.5; -} - -.modal__form { - margin: 0 3rem; - display: grid; - grid-template-columns: 1fr 2fr; - align-items: center; - gap: 2.5rem; -} - -.modal__form label { - font-size: 1.7rem; - font-weight: 500; -} - -.modal__form input { - font-size: 1.7rem; - padding: 1rem 1.5rem; - border: 1px solid #ddd; - border-radius: 0.5rem; -} - -.modal__form button { - grid-column: 1 / span 2; - justify-self: center; - margin-top: 1rem; -} - -.btn--close-modal { - font-family: inherit; - color: inherit; - position: absolute; - top: 0.5rem; - right: 2rem; - font-size: 4rem; - cursor: pointer; - border: none; - background: none; -} - -.hidden { - visibility: hidden; - opacity: 0; -} - -/* COOKIE MESSAGE */ -.cookie-message { - display: flex; - align-items: center; - justify-content: space-evenly; - width: 100%; - background-color: white; - color: #bbb; - font-size: 1.5rem; - font-weight: 400; -} diff --git a/14-OOP/final/.prettierrc b/14-OOP/final/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/14-OOP/final/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/14-OOP/final/index.html b/14-OOP/final/index.html deleted file mode 100644 index 1d3f550d6d..0000000000 --- a/14-OOP/final/index.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - Object Oriented Programming (OOP) With JavaScript - - - - -

Object Oriented Programming (OOP) With JavaScript

- - diff --git a/14-OOP/final/script.js b/14-OOP/final/script.js deleted file mode 100644 index 62fa919309..0000000000 --- a/14-OOP/final/script.js +++ /dev/null @@ -1,682 +0,0 @@ -'use strict'; - -/* -/////////////////////////////////////// -// Constructor Functions and the new Operator -const Person = function (firstName, birthYear) { - // Instance properties - this.firstName = firstName; - this.birthYear = birthYear; - - // Never to this! - // this.calcAge = function () { - // console.log(2037 - this.birthYear); - // }; -}; - -const jonas = new Person('Jonas', 1991); -console.log(jonas); - -// 1. New {} is created -// 2. function is called, this = {} -// 3. {} linked to prototype -// 4. function automatically return {} - -const matilda = new Person('Matilda', 2017); -const jack = new Person('Jack', 1975); - -console.log(jonas instanceof Person); - -Person.hey = function () { - console.log('Hey there ๐Ÿ‘‹'); - console.log(this); -}; -Person.hey(); - -/////////////////////////////////////// -// Prototypes -console.log(Person.prototype); - -Person.prototype.calcAge = function () { - console.log(2037 - this.birthYear); -}; - -jonas.calcAge(); -matilda.calcAge(); - -console.log(jonas.__proto__); -console.log(jonas.__proto__ === Person.prototype); - -console.log(Person.prototype.isPrototypeOf(jonas)); -console.log(Person.prototype.isPrototypeOf(matilda)); -console.log(Person.prototype.isPrototypeOf(Person)); - -// .prototyeOfLinkedObjects - -Person.prototype.species = 'Homo Sapiens'; -console.log(jonas.species, matilda.species); - -console.log(jonas.hasOwnProperty('firstName')); -console.log(jonas.hasOwnProperty('species')); - - -/////////////////////////////////////// -// Prototypal Inheritance on Built-In Objects -console.log(jonas.__proto__); -// Object.prototype (top of prototype chain) -console.log(jonas.__proto__.__proto__); -console.log(jonas.__proto__.__proto__.__proto__); - -console.dir(Person.prototype.constructor); - -const arr = [3, 6, 6, 5, 6, 9, 9]; // new Array === [] -console.log(arr.__proto__); -console.log(arr.__proto__ === Array.prototype); - -console.log(arr.__proto__.__proto__); - -Array.prototype.unique = function () { - return [...new Set(this)]; -}; - -console.log(arr.unique()); - -const h1 = document.querySelector('h1'); -console.dir(x => x + 1); -*/ - -/////////////////////////////////////// -// Coding Challenge #1 - -/* -1. Use a constructor function to implement a Car. A car has a make and a speed property. The speed property is the current speed of the car in km/h; -2. Implement an 'accelerate' method that will increase the car's speed by 10, and log the new speed to the console; -3. Implement a 'brake' method that will decrease the car's speed by 5, and log the new speed to the console; -4. Create 2 car objects and experiment with calling 'accelerate' and 'brake' multiple times on each of them. - -DATA CAR 1: 'BMW' going at 120 km/h -DATA CAR 2: 'Mercedes' going at 95 km/h - -GOOD LUCK ๐Ÿ˜€ -*/ - -/* -const Car = function (make, speed) { - this.make = make; - this.speed = speed; -}; - -Car.prototype.accelerate = function () { - this.speed += 10; - console.log(`${this.make} is going at ${this.speed} km/h`); -}; - -Car.prototype.brake = function () { - this.speed -= 5; - console.log(`${this.make} is going at ${this.speed} km/h`); -}; - -const bmw = new Car('BMW', 120); -const mercedes = new Car('Mercedes', 95); - -bmw.accelerate(); -bmw.accelerate(); -bmw.brake(); -bmw.accelerate(); - - -/////////////////////////////////////// -// ES6 Classes - -// Class expression -// const PersonCl = class {} - -// Class declaration -class PersonCl { - constructor(fullName, birthYear) { - this.fullName = fullName; - this.birthYear = birthYear; - } - - // Instance methods - // Methods will be added to .prototype property - calcAge() { - console.log(2037 - this.birthYear); - } - - greet() { - console.log(`Hey ${this.fullName}`); - } - - get age() { - return 2037 - this.birthYear; - } - - // Set a property that already exists - set fullName(name) { - if (name.includes(' ')) this._fullName = name; - else alert(`${name} is not a full name!`); - } - - get fullName() { - return this._fullName; - } - - // Static method - static hey() { - console.log('Hey there ๐Ÿ‘‹'); - console.log(this); - } -} - -const jessica = new PersonCl('Jessica Davis', 1996); -console.log(jessica); -jessica.calcAge(); -console.log(jessica.age); - -console.log(jessica.__proto__ === PersonCl.prototype); - -// PersonCl.prototype.greet = function () { -// console.log(`Hey ${this.firstName}`); -// }; -jessica.greet(); - -// 1. Classes are NOT hoisted -// 2. Classes are first-class citizens -// 3. Classes are executed in strict mode - -const walter = new PersonCl('Walter White', 1965); -// PersonCl.hey(); - - -/////////////////////////////////////// -// Setters and Getters -const account = { - owner: 'Jonas', - movements: [200, 530, 120, 300], - - get latest() { - return this.movements.slice(-1).pop(); - }, - - set latest(mov) { - this.movements.push(mov); - }, -}; - -console.log(account.latest); - -account.latest = 50; -console.log(account.movements); - - -/////////////////////////////////////// -// Object.create -const PersonProto = { - calcAge() { - console.log(2037 - this.birthYear); - }, - - init(firstName, birthYear) { - this.firstName = firstName; - this.birthYear = birthYear; - }, -}; - -const steven = Object.create(PersonProto); -console.log(steven); -steven.name = 'Steven'; -steven.birthYear = 2002; -steven.calcAge(); - -console.log(steven.__proto__ === PersonProto); - -const sarah = Object.create(PersonProto); -sarah.init('Sarah', 1979); -sarah.calcAge(); -*/ - -/////////////////////////////////////// -// Coding Challenge #2 - -/* -1. Re-create challenge 1, but this time using an ES6 class; -2. Add a getter called 'speedUS' which returns the current speed in mi/h (divide by 1.6); -3. Add a setter called 'speedUS' which sets the current speed in mi/h (but converts it to km/h before storing the value, by multiplying the input by 1.6); -4. Create a new car and experiment with the accelerate and brake methods, and with the getter and setter. - -DATA CAR 1: 'Ford' going at 120 km/h - -GOOD LUCK ๐Ÿ˜€ -*/ - -/* -class CarCl { - constructor(make, speed) { - this.make = make; - this.speed = speed; - } - - accelerate() { - this.speed += 10; - console.log(`${this.make} is going at ${this.speed} km/h`); - } - - brake() { - this.speed -= 5; - console.log(`${this.make} is going at ${this.speed} km/h`); - } - - get speedUS() { - return this.speed / 1.6; - } - - set speedUS(speed) { - this.speed = speed * 1.6; - } -} - -const ford = new CarCl('Ford', 120); -console.log(ford.speedUS); -ford.accelerate(); -ford.accelerate(); -ford.brake(); -ford.speedUS = 50; -console.log(ford); - - -/////////////////////////////////////// -// Inheritance Between "Classes": Constructor Functions - -const Person = function (firstName, birthYear) { - this.firstName = firstName; - this.birthYear = birthYear; -}; - -Person.prototype.calcAge = function () { - console.log(2037 - this.birthYear); -}; - -const Student = function (firstName, birthYear, course) { - Person.call(this, firstName, birthYear); - this.course = course; -}; - -// Linking prototypes -Student.prototype = Object.create(Person.prototype); - -Student.prototype.introduce = function () { - console.log(`My name is ${this.firstName} and I study ${this.course}`); -}; - -const mike = new Student('Mike', 2020, 'Computer Science'); -mike.introduce(); -mike.calcAge(); - -console.log(mike.__proto__); -console.log(mike.__proto__.__proto__); - -console.log(mike instanceof Student); -console.log(mike instanceof Person); -console.log(mike instanceof Object); - -Student.prototype.constructor = Student; -console.dir(Student.prototype.constructor); -*/ - -/////////////////////////////////////// -// Coding Challenge #3 - -/* -1. Use a constructor function to implement an Electric Car (called EV) as a CHILD "class" of Car. Besides a make and current speed, the EV also has the current battery charge in % ('charge' property); -2. Implement a 'chargeBattery' method which takes an argument 'chargeTo' and sets the battery charge to 'chargeTo'; -3. Implement an 'accelerate' method that will increase the car's speed by 20, and decrease the charge by 1%. Then log a message like this: 'Tesla going at 140 km/h, with a charge of 22%'; -4. Create an electric car object and experiment with calling 'accelerate', 'brake' and 'chargeBattery' (charge to 90%). Notice what happens when you 'accelerate'! HINT: Review the definiton of polymorphism ๐Ÿ˜‰ - -DATA CAR 1: 'Tesla' going at 120 km/h, with a charge of 23% - -GOOD LUCK ๐Ÿ˜€ -*/ - -/* -const Car = function (make, speed) { - this.make = make; - this.speed = speed; -}; - -Car.prototype.accelerate = function () { - this.speed += 10; - console.log(`${this.make} is going at ${this.speed} km/h`); -}; - -Car.prototype.brake = function () { - this.speed -= 5; - console.log(`${this.make} is going at ${this.speed} km/h`); -}; - -const EV = function (make, speed, charge) { - Car.call(this, make, speed); - this.charge = charge; -}; - -// Link the prototypes -EV.prototype = Object.create(Car.prototype); - -EV.prototype.chargeBattery = function (chargeTo) { - this.charge = chargeTo; -}; - -EV.prototype.accelerate = function () { - this.speed += 20; - this.charge--; - console.log( - `${this.make} is going at ${this.speed} km/h, with a charge of ${this.charge}` - ); -}; - -const tesla = new EV('Tesla', 120, 23); -tesla.chargeBattery(90); -console.log(tesla); -tesla.brake(); -tesla.accelerate(); - - -/////////////////////////////////////// -// Inheritance Between "Classes": ES6 Classes - -class PersonCl { - constructor(fullName, birthYear) { - this.fullName = fullName; - this.birthYear = birthYear; - } - - // Instance methods - calcAge() { - console.log(2037 - this.birthYear); - } - - greet() { - console.log(`Hey ${this.fullName}`); - } - - get age() { - return 2037 - this.birthYear; - } - - set fullName(name) { - if (name.includes(' ')) this._fullName = name; - else alert(`${name} is not a full name!`); - } - - get fullName() { - return this._fullName; - } - - // Static method - static hey() { - console.log('Hey there ๐Ÿ‘‹'); - } -} - -class StudentCl extends PersonCl { - constructor(fullName, birthYear, course) { - // Always needs to happen first! - super(fullName, birthYear); - this.course = course; - } - - introduce() { - console.log(`My name is ${this.fullName} and I study ${this.course}`); - } - - calcAge() { - console.log( - `I'm ${ - 2037 - this.birthYear - } years old, but as a student I feel more like ${ - 2037 - this.birthYear + 10 - }` - ); - } -} - -const martha = new StudentCl('Martha Jones', 2012, 'Computer Science'); -martha.introduce(); -martha.calcAge(); - - -/////////////////////////////////////// -// Inheritance Between "Classes": Object.create - -const PersonProto = { - calcAge() { - console.log(2037 - this.birthYear); - }, - - init(firstName, birthYear) { - this.firstName = firstName; - this.birthYear = birthYear; - }, -}; - -const steven = Object.create(PersonProto); - -const StudentProto = Object.create(PersonProto); -StudentProto.init = function (firstName, birthYear, course) { - PersonProto.init.call(this, firstName, birthYear); - this.course = course; -}; - -StudentProto.introduce = function () { - // BUG in video: - // console.log(`My name is ${this.fullName} and I study ${this.course}`); - - // FIX: - console.log(`My name is ${this.firstName} and I study ${this.course}`); -}; - -const jay = Object.create(StudentProto); -jay.init('Jay', 2010, 'Computer Science'); -jay.introduce(); -jay.calcAge(); - - -/////////////////////////////////////// -// Another Class Example - -class Account { - constructor(owner, currency, pin) { - this.owner = owner; - this.currency = currency; - this.pin = pin; - this.movements = []; - this.locale = navigator.language; - - console.log(`Thanks for opening an account, ${owner}`); - } - - // Public interface - deposit(val) { - this.movements.push(val); - } - - withdraw(val) { - this.deposit(-val); - } - - approveLoan(val) { - return true; - } - - requestLoan(val) { - if (this.approveLoan(val)) { - this.deposit(val); - console.log(`Loan approved`); - } - } -} - -const acc1 = new Account('Jonas', 'EUR', 1111); - -// acc1.movements.push(250); -// acc1.movements.push(-140); -acc1.deposit(250); -acc1.withdraw(140); -acc1.approveLoan(1000); -acc1.requestLoan(1000); - -console.log(acc1); -console.log(acc1.pin); - - -/////////////////////////////////////// -// Encapsulation: Private Class Fields and Methods - -// 1) Public fields -// 2) Private fields -// 3) Public methods -// 4) Private methods -// STATIC version of these 4 - -class Account { - locale = navigator.language; - bank = 'Bankist'; - #movements = []; - #pin; - - constructor(owner, currency, pin) { - this.owner = owner; - this.currency = currency; - this.#pin = pin; - - // this.movements = []; - // this.locale = navigator.language; - - console.log(`Thanks for opening an account, ${owner}`); - } - - // Public interface (API) - getMovements() { - return this.#movements; - // Not chaninable - } - - deposit(val) { - this.#movements.push(val); - return this; - } - - withdraw(val) { - this.deposit(-val); - return this; - } - - #approveLoan(val) { - // Fake method - return true; - } - - requestLoan(val) { - if (this.#approveLoan(val)) { - this.deposit(val); - console.log(`Loan approved`); - } - return this; - } -} - -const acc1 = new Account('Jonas', 'EUR', 1111); -// acc1.deposit(300); -// acc1.withdraw(100); -const movements = acc1 - .deposit(300) - .withdraw(100) - .withdraw(50) - .requestLoan(25000) - .withdraw(4000) - .getMovements(); - -console.log(acc1); -// console.log(acc1.#movements); -// Account.#test(); -console.log(movements); - - -/////////////////////////////////////// -// Coding Challenge #4 - -/* -1. Re-create challenge #3, but this time using ES6 classes: create an 'EVCl' child class of the 'CarCl' class -2. Make the 'charge' property private; -3. Implement the ability to chain the 'accelerate' and 'chargeBattery' methods of this class, and also update the 'brake' method in the 'CarCl' class. They experiment with chining! - -DATA CAR 1: 'Rivian' going at 120 km/h, with a charge of 23% - -GOOD LUCK ๐Ÿ˜€ -*/ - -/* -class CarCl { - constructor(make, speed) { - this.make = make; - this.speed = speed; - } - - accelerate() { - this.speed += 10; - console.log(`${this.make} is going at ${this.speed} km/h`); - } - - brake() { - this.speed -= 5; - console.log(`${this.make} is going at ${this.speed} km/h`); - return this; - } - - get speedUS() { - return this.speed / 1.6; - } - - set speedUS(speed) { - this.speed = speed * 1.6; - } -} - -class EVCl extends CarCl { - #charge; - - constructor(make, speed, charge) { - super(make, speed); - this.#charge = charge; - } - - chargeBattery(chargeTo) { - this.#charge = chargeTo; - return this; - } - - accelerate() { - this.speed += 20; - this.#charge--; - console.log( - `${this.make} is going at ${this.speed} km/h, with a charge of ${ - this.#charge - }` - ); - return this; - } -} - -const rivian = new EVCl('Rivian', 120, 23); -console.log(rivian); -// console.log(rivian.#charge); -rivian - .accelerate() - .accelerate() - .accelerate() - .brake() - .chargeBattery(50) - .accelerate(); - -console.log(rivian.speedUS); -*/ diff --git a/14-OOP/starter/.prettierrc b/14-OOP/starter/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/14-OOP/starter/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/14-OOP/starter/index.html b/14-OOP/starter/index.html deleted file mode 100644 index 1d3f550d6d..0000000000 --- a/14-OOP/starter/index.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - Object Oriented Programming (OOP) With JavaScript - - - - -

Object Oriented Programming (OOP) With JavaScript

- - diff --git a/14-OOP/starter/script.js b/14-OOP/starter/script.js deleted file mode 100644 index ad9a93a7c1..0000000000 --- a/14-OOP/starter/script.js +++ /dev/null @@ -1 +0,0 @@ -'use strict'; diff --git a/15-Mapty/final/.prettierrc b/15-Mapty/final/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/15-Mapty/final/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/15-Mapty/final/Mapty-architecture-final.png b/15-Mapty/final/Mapty-architecture-final.png deleted file mode 100644 index 56ad00c113..0000000000 Binary files a/15-Mapty/final/Mapty-architecture-final.png and /dev/null differ diff --git a/15-Mapty/final/Mapty-architecture-part-1.png b/15-Mapty/final/Mapty-architecture-part-1.png deleted file mode 100644 index 9e2159e83c..0000000000 Binary files a/15-Mapty/final/Mapty-architecture-part-1.png and /dev/null differ diff --git a/15-Mapty/final/Mapty-flowchart.png b/15-Mapty/final/Mapty-flowchart.png deleted file mode 100644 index c0f24c002e..0000000000 Binary files a/15-Mapty/final/Mapty-flowchart.png and /dev/null differ diff --git a/15-Mapty/final/icon.png b/15-Mapty/final/icon.png deleted file mode 100644 index d2f503119a..0000000000 Binary files a/15-Mapty/final/icon.png and /dev/null differ diff --git a/15-Mapty/final/index.html b/15-Mapty/final/index.html deleted file mode 100644 index 134a9dd712..0000000000 --- a/15-Mapty/final/index.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - - - - - - - - - - - - mapty // Map your workouts - - - - -
- - diff --git a/15-Mapty/final/logo.png b/15-Mapty/final/logo.png deleted file mode 100644 index 50a9cba8ee..0000000000 Binary files a/15-Mapty/final/logo.png and /dev/null differ diff --git a/15-Mapty/final/other.js b/15-Mapty/final/other.js deleted file mode 100644 index ae83f31a4d..0000000000 --- a/15-Mapty/final/other.js +++ /dev/null @@ -1,2 +0,0 @@ -const firstName = 'Jonas'; -console.log(months); diff --git a/15-Mapty/final/script.js b/15-Mapty/final/script.js deleted file mode 100644 index 1a9bbd1147..0000000000 --- a/15-Mapty/final/script.js +++ /dev/null @@ -1,325 +0,0 @@ -'use strict'; - -class Workout { - date = new Date(); - id = (Date.now() + '').slice(-10); - clicks = 0; - - constructor(coords, distance, duration) { - // this.date = ... - // this.id = ... - this.coords = coords; // [lat, lng] - this.distance = distance; // in km - this.duration = duration; // in min - } - - _setDescription() { - // prettier-ignore - const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; - - this.description = `${this.type[0].toUpperCase()}${this.type.slice(1)} on ${ - months[this.date.getMonth()] - } ${this.date.getDate()}`; - } - - click() { - this.clicks++; - } -} - -class Running extends Workout { - type = 'running'; - - constructor(coords, distance, duration, cadence) { - super(coords, distance, duration); - this.cadence = cadence; - this.calcPace(); - this._setDescription(); - } - - calcPace() { - // min/km - this.pace = this.duration / this.distance; - return this.pace; - } -} - -class Cycling extends Workout { - type = 'cycling'; - - constructor(coords, distance, duration, elevationGain) { - super(coords, distance, duration); - this.elevationGain = elevationGain; - // this.type = 'cycling'; - this.calcSpeed(); - this._setDescription(); - } - - calcSpeed() { - // km/h - this.speed = this.distance / (this.duration / 60); - return this.speed; - } -} - -// const run1 = new Running([39, -12], 5.2, 24, 178); -// const cycling1 = new Cycling([39, -12], 27, 95, 523); -// console.log(run1, cycling1); - -/////////////////////////////////////// -// APPLICATION ARCHITECTURE -const form = document.querySelector('.form'); -const containerWorkouts = document.querySelector('.workouts'); -const inputType = document.querySelector('.form__input--type'); -const inputDistance = document.querySelector('.form__input--distance'); -const inputDuration = document.querySelector('.form__input--duration'); -const inputCadence = document.querySelector('.form__input--cadence'); -const inputElevation = document.querySelector('.form__input--elevation'); - -class App { - #map; - #mapZoomLevel = 13; - #mapEvent; - #workouts = []; - - constructor() { - // Get user's position - this._getPosition(); - - // Get data from local storage - this._getLocalStorage(); - - // Attach event handlers - form.addEventListener('submit', this._newWorkout.bind(this)); - inputType.addEventListener('change', this._toggleElevationField); - containerWorkouts.addEventListener('click', this._moveToPopup.bind(this)); - } - - _getPosition() { - if (navigator.geolocation) - navigator.geolocation.getCurrentPosition( - this._loadMap.bind(this), - function () { - alert('Could not get your position'); - } - ); - } - - _loadMap(position) { - const { latitude } = position.coords; - const { longitude } = position.coords; - // console.log(`https://www.google.pt/maps/@${latitude},${longitude}`); - - const coords = [latitude, longitude]; - - this.#map = L.map('map').setView(coords, this.#mapZoomLevel); - - L.tileLayer('https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png', { - attribution: - '© OpenStreetMap contributors', - }).addTo(this.#map); - - // Handling clicks on map - this.#map.on('click', this._showForm.bind(this)); - - this.#workouts.forEach(work => { - this._renderWorkoutMarker(work); - }); - } - - _showForm(mapE) { - this.#mapEvent = mapE; - form.classList.remove('hidden'); - inputDistance.focus(); - } - - _hideForm() { - // Empty inputs - inputDistance.value = inputDuration.value = inputCadence.value = inputElevation.value = - ''; - - form.style.display = 'none'; - form.classList.add('hidden'); - setTimeout(() => (form.style.display = 'grid'), 1000); - } - - _toggleElevationField() { - inputElevation.closest('.form__row').classList.toggle('form__row--hidden'); - inputCadence.closest('.form__row').classList.toggle('form__row--hidden'); - } - - _newWorkout(e) { - const validInputs = (...inputs) => - inputs.every(inp => Number.isFinite(inp)); - const allPositive = (...inputs) => inputs.every(inp => inp > 0); - - e.preventDefault(); - - // Get data from form - const type = inputType.value; - const distance = +inputDistance.value; - const duration = +inputDuration.value; - const { lat, lng } = this.#mapEvent.latlng; - let workout; - - // If workout running, create running object - if (type === 'running') { - const cadence = +inputCadence.value; - - // Check if data is valid - if ( - // !Number.isFinite(distance) || - // !Number.isFinite(duration) || - // !Number.isFinite(cadence) - !validInputs(distance, duration, cadence) || - !allPositive(distance, duration, cadence) - ) - return alert('Inputs have to be positive numbers!'); - - workout = new Running([lat, lng], distance, duration, cadence); - } - - // If workout cycling, create cycling object - if (type === 'cycling') { - const elevation = +inputElevation.value; - - if ( - !validInputs(distance, duration, elevation) || - !allPositive(distance, duration) - ) - return alert('Inputs have to be positive numbers!'); - - workout = new Cycling([lat, lng], distance, duration, elevation); - } - - // Add new object to workout array - this.#workouts.push(workout); - - // Render workout on map as marker - this._renderWorkoutMarker(workout); - - // Render workout on list - this._renderWorkout(workout); - - // Hide form + clear input fields - this._hideForm(); - - // Set local storage to all workouts - this._setLocalStorage(); - } - - _renderWorkoutMarker(workout) { - L.marker(workout.coords) - .addTo(this.#map) - .bindPopup( - L.popup({ - maxWidth: 250, - minWidth: 100, - autoClose: false, - closeOnClick: false, - className: `${workout.type}-popup`, - }) - ) - .setPopupContent( - `${workout.type === 'running' ? '๐Ÿƒโ€โ™‚๏ธ' : '๐Ÿšดโ€โ™€๏ธ'} ${workout.description}` - ) - .openPopup(); - } - - _renderWorkout(workout) { - let html = ` -
  • -

    ${workout.description}

    -
    - ${ - workout.type === 'running' ? '๐Ÿƒโ€โ™‚๏ธ' : '๐Ÿšดโ€โ™€๏ธ' - } - ${workout.distance} - km -
    -
    - โฑ - ${workout.duration} - min -
    - `; - - if (workout.type === 'running') - html += ` -
    - โšก๏ธ - ${workout.pace.toFixed(1)} - min/km -
    -
    - ๐Ÿฆถ๐Ÿผ - ${workout.cadence} - spm -
    -
  • - `; - - if (workout.type === 'cycling') - html += ` -
    - โšก๏ธ - ${workout.speed.toFixed(1)} - km/h -
    -
    - โ›ฐ - ${workout.elevationGain} - m -
    - - `; - - form.insertAdjacentHTML('afterend', html); - } - - _moveToPopup(e) { - // BUGFIX: When we click on a workout before the map has loaded, we get an error. But there is an easy fix: - if (!this.#map) return; - - const workoutEl = e.target.closest('.workout'); - - if (!workoutEl) return; - - const workout = this.#workouts.find( - work => work.id === workoutEl.dataset.id - ); - - this.#map.setView(workout.coords, this.#mapZoomLevel, { - animate: true, - pan: { - duration: 1, - }, - }); - - // using the public interface - // workout.click(); - } - - _setLocalStorage() { - localStorage.setItem('workouts', JSON.stringify(this.#workouts)); - } - - _getLocalStorage() { - const data = JSON.parse(localStorage.getItem('workouts')); - - if (!data) return; - - this.#workouts = data; - - this.#workouts.forEach(work => { - this._renderWorkout(work); - }); - } - - reset() { - localStorage.removeItem('workouts'); - location.reload(); - } -} - -const app = new App(); diff --git a/15-Mapty/final/style.css b/15-Mapty/final/style.css deleted file mode 100644 index 5388f646f4..0000000000 --- a/15-Mapty/final/style.css +++ /dev/null @@ -1,220 +0,0 @@ -:root { - --color-brand--1: #ffb545; - --color-brand--2: #00c46a; - - --color-dark--1: #2d3439; - --color-dark--2: #42484d; - --color-light--1: #aaa; - --color-light--2: #ececec; - --color-light--3: rgb(214, 222, 224); -} - -* { - margin: 0; - padding: 0; - box-sizing: inherit; -} - -html { - font-size: 62.5%; - box-sizing: border-box; -} - -body { - font-family: 'Manrope', sans-serif; - color: var(--color-light--2); - font-weight: 400; - line-height: 1.6; - height: 100vh; - overscroll-behavior-y: none; - - background-color: #fff; - padding: 2.5rem; - - display: flex; -} - -/* GENERAL */ -a:link, -a:visited { - color: var(--color-brand--1); -} - -/* SIDEBAR */ -.sidebar { - flex-basis: 50rem; - background-color: var(--color-dark--1); - padding: 3rem 5rem 4rem 5rem; - display: flex; - flex-direction: column; -} - -.logo { - height: 5.2rem; - align-self: center; - margin-bottom: 4rem; -} - -.workouts { - list-style: none; - height: 77vh; - overflow-y: scroll; - overflow-x: hidden; -} - -.workouts::-webkit-scrollbar { - width: 0; -} - -.workout { - background-color: var(--color-dark--2); - border-radius: 5px; - padding: 1.5rem 2.25rem; - margin-bottom: 1.75rem; - cursor: pointer; - - display: grid; - grid-template-columns: 1fr 1fr 1fr 1fr; - gap: 0.75rem 1.5rem; -} -.workout--running { - border-left: 5px solid var(--color-brand--2); -} -.workout--cycling { - border-left: 5px solid var(--color-brand--1); -} - -.workout__title { - font-size: 1.7rem; - font-weight: 600; - grid-column: 1 / -1; -} - -.workout__details { - display: flex; - align-items: baseline; -} - -.workout__icon { - font-size: 1.8rem; - margin-right: 0.2rem; - height: 0.28rem; -} - -.workout__value { - font-size: 1.5rem; - margin-right: 0.5rem; -} - -.workout__unit { - font-size: 1.1rem; - color: var(--color-light--1); - text-transform: uppercase; - font-weight: 800; -} - -.form { - background-color: var(--color-dark--2); - border-radius: 5px; - padding: 1.5rem 2.75rem; - margin-bottom: 1.75rem; - - display: grid; - grid-template-columns: 1fr 1fr; - gap: 0.5rem 2.5rem; - - /* Match height and activity boxes */ - height: 9.25rem; - transition: all 0.5s, transform 1ms; -} - -.form.hidden { - transform: translateY(-30rem); - height: 0; - padding: 0 2.25rem; - margin-bottom: 0; - opacity: 0; -} - -.form__row { - display: flex; - align-items: center; -} - -.form__row--hidden { - display: none; -} - -.form__label { - flex: 0 0 50%; - font-size: 1.5rem; - font-weight: 600; -} - -.form__input { - width: 100%; - padding: 0.3rem 1.1rem; - font-family: inherit; - font-size: 1.4rem; - border: none; - border-radius: 3px; - background-color: var(--color-light--3); - transition: all 0.2s; -} - -.form__input:focus { - outline: none; - background-color: #fff; -} - -.form__btn { - display: none; -} - -.copyright { - margin-top: auto; - font-size: 1.3rem; - text-align: center; - color: var(--color-light--1); -} - -.twitter-link:link, -.twitter-link:visited { - color: var(--color-light--1); - transition: all 0.2s; -} - -.twitter-link:hover, -.twitter-link:active { - color: var(--color-light--2); -} - -/* MAP */ -#map { - flex: 1; - height: 100%; - background-color: var(--color-light--1); -} - -/* Popup width is defined in JS using options */ -.leaflet-popup .leaflet-popup-content-wrapper { - background-color: var(--color-dark--1); - color: var(--color-light--2); - border-radius: 5px; - padding-right: 0.6rem; -} - -.leaflet-popup .leaflet-popup-content { - font-size: 1.5rem; -} - -.leaflet-popup .leaflet-popup-tip { - background-color: var(--color-dark--1); -} - -.running-popup .leaflet-popup-content-wrapper { - border-left: 5px solid var(--color-brand--2); -} -.cycling-popup .leaflet-popup-content-wrapper { - border-left: 5px solid var(--color-brand--1); -} diff --git a/15-Mapty/starter/.prettierrc b/15-Mapty/starter/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/15-Mapty/starter/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/15-Mapty/starter/Mapty-architecture-final.png b/15-Mapty/starter/Mapty-architecture-final.png deleted file mode 100644 index 56ad00c113..0000000000 Binary files a/15-Mapty/starter/Mapty-architecture-final.png and /dev/null differ diff --git a/15-Mapty/starter/Mapty-architecture-part-1.png b/15-Mapty/starter/Mapty-architecture-part-1.png deleted file mode 100644 index 9e2159e83c..0000000000 Binary files a/15-Mapty/starter/Mapty-architecture-part-1.png and /dev/null differ diff --git a/15-Mapty/starter/Mapty-flowchart.png b/15-Mapty/starter/Mapty-flowchart.png deleted file mode 100644 index c0f24c002e..0000000000 Binary files a/15-Mapty/starter/Mapty-flowchart.png and /dev/null differ diff --git a/15-Mapty/starter/icon.png b/15-Mapty/starter/icon.png deleted file mode 100644 index d2f503119a..0000000000 Binary files a/15-Mapty/starter/icon.png and /dev/null differ diff --git a/15-Mapty/starter/index.html b/15-Mapty/starter/index.html deleted file mode 100644 index 234c87fb55..0000000000 --- a/15-Mapty/starter/index.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - - - - - mapty // Map your workouts - - - - -
    - - diff --git a/15-Mapty/starter/logo.png b/15-Mapty/starter/logo.png deleted file mode 100644 index 50a9cba8ee..0000000000 Binary files a/15-Mapty/starter/logo.png and /dev/null differ diff --git a/15-Mapty/starter/script.js b/15-Mapty/starter/script.js deleted file mode 100644 index 9ba12287f8..0000000000 --- a/15-Mapty/starter/script.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -// prettier-ignore -const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; - -const form = document.querySelector('.form'); -const containerWorkouts = document.querySelector('.workouts'); -const inputType = document.querySelector('.form__input--type'); -const inputDistance = document.querySelector('.form__input--distance'); -const inputDuration = document.querySelector('.form__input--duration'); -const inputCadence = document.querySelector('.form__input--cadence'); -const inputElevation = document.querySelector('.form__input--elevation'); diff --git a/15-Mapty/starter/style.css b/15-Mapty/starter/style.css deleted file mode 100644 index 5388f646f4..0000000000 --- a/15-Mapty/starter/style.css +++ /dev/null @@ -1,220 +0,0 @@ -:root { - --color-brand--1: #ffb545; - --color-brand--2: #00c46a; - - --color-dark--1: #2d3439; - --color-dark--2: #42484d; - --color-light--1: #aaa; - --color-light--2: #ececec; - --color-light--3: rgb(214, 222, 224); -} - -* { - margin: 0; - padding: 0; - box-sizing: inherit; -} - -html { - font-size: 62.5%; - box-sizing: border-box; -} - -body { - font-family: 'Manrope', sans-serif; - color: var(--color-light--2); - font-weight: 400; - line-height: 1.6; - height: 100vh; - overscroll-behavior-y: none; - - background-color: #fff; - padding: 2.5rem; - - display: flex; -} - -/* GENERAL */ -a:link, -a:visited { - color: var(--color-brand--1); -} - -/* SIDEBAR */ -.sidebar { - flex-basis: 50rem; - background-color: var(--color-dark--1); - padding: 3rem 5rem 4rem 5rem; - display: flex; - flex-direction: column; -} - -.logo { - height: 5.2rem; - align-self: center; - margin-bottom: 4rem; -} - -.workouts { - list-style: none; - height: 77vh; - overflow-y: scroll; - overflow-x: hidden; -} - -.workouts::-webkit-scrollbar { - width: 0; -} - -.workout { - background-color: var(--color-dark--2); - border-radius: 5px; - padding: 1.5rem 2.25rem; - margin-bottom: 1.75rem; - cursor: pointer; - - display: grid; - grid-template-columns: 1fr 1fr 1fr 1fr; - gap: 0.75rem 1.5rem; -} -.workout--running { - border-left: 5px solid var(--color-brand--2); -} -.workout--cycling { - border-left: 5px solid var(--color-brand--1); -} - -.workout__title { - font-size: 1.7rem; - font-weight: 600; - grid-column: 1 / -1; -} - -.workout__details { - display: flex; - align-items: baseline; -} - -.workout__icon { - font-size: 1.8rem; - margin-right: 0.2rem; - height: 0.28rem; -} - -.workout__value { - font-size: 1.5rem; - margin-right: 0.5rem; -} - -.workout__unit { - font-size: 1.1rem; - color: var(--color-light--1); - text-transform: uppercase; - font-weight: 800; -} - -.form { - background-color: var(--color-dark--2); - border-radius: 5px; - padding: 1.5rem 2.75rem; - margin-bottom: 1.75rem; - - display: grid; - grid-template-columns: 1fr 1fr; - gap: 0.5rem 2.5rem; - - /* Match height and activity boxes */ - height: 9.25rem; - transition: all 0.5s, transform 1ms; -} - -.form.hidden { - transform: translateY(-30rem); - height: 0; - padding: 0 2.25rem; - margin-bottom: 0; - opacity: 0; -} - -.form__row { - display: flex; - align-items: center; -} - -.form__row--hidden { - display: none; -} - -.form__label { - flex: 0 0 50%; - font-size: 1.5rem; - font-weight: 600; -} - -.form__input { - width: 100%; - padding: 0.3rem 1.1rem; - font-family: inherit; - font-size: 1.4rem; - border: none; - border-radius: 3px; - background-color: var(--color-light--3); - transition: all 0.2s; -} - -.form__input:focus { - outline: none; - background-color: #fff; -} - -.form__btn { - display: none; -} - -.copyright { - margin-top: auto; - font-size: 1.3rem; - text-align: center; - color: var(--color-light--1); -} - -.twitter-link:link, -.twitter-link:visited { - color: var(--color-light--1); - transition: all 0.2s; -} - -.twitter-link:hover, -.twitter-link:active { - color: var(--color-light--2); -} - -/* MAP */ -#map { - flex: 1; - height: 100%; - background-color: var(--color-light--1); -} - -/* Popup width is defined in JS using options */ -.leaflet-popup .leaflet-popup-content-wrapper { - background-color: var(--color-dark--1); - color: var(--color-light--2); - border-radius: 5px; - padding-right: 0.6rem; -} - -.leaflet-popup .leaflet-popup-content { - font-size: 1.5rem; -} - -.leaflet-popup .leaflet-popup-tip { - background-color: var(--color-dark--1); -} - -.running-popup .leaflet-popup-content-wrapper { - border-left: 5px solid var(--color-brand--2); -} -.cycling-popup .leaflet-popup-content-wrapper { - border-left: 5px solid var(--color-brand--1); -} diff --git a/16-Asynchronous/final/.prettierrc b/16-Asynchronous/final/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/16-Asynchronous/final/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/16-Asynchronous/final/img/img-1.jpg b/16-Asynchronous/final/img/img-1.jpg deleted file mode 100644 index 9627ba5572..0000000000 Binary files a/16-Asynchronous/final/img/img-1.jpg and /dev/null differ diff --git a/16-Asynchronous/final/img/img-2.jpg b/16-Asynchronous/final/img/img-2.jpg deleted file mode 100644 index 70cb723446..0000000000 Binary files a/16-Asynchronous/final/img/img-2.jpg and /dev/null differ diff --git a/16-Asynchronous/final/img/img-3.jpg b/16-Asynchronous/final/img/img-3.jpg deleted file mode 100644 index 45d23a3081..0000000000 Binary files a/16-Asynchronous/final/img/img-3.jpg and /dev/null differ diff --git a/16-Asynchronous/final/index.html b/16-Asynchronous/final/index.html deleted file mode 100644 index 2b0e434dd3..0000000000 --- a/16-Asynchronous/final/index.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - Asynchronous JavaScript - - -
    -
    - -
    - -
    -
    - - diff --git a/16-Asynchronous/final/script.js b/16-Asynchronous/final/script.js deleted file mode 100644 index 1177a90464..0000000000 --- a/16-Asynchronous/final/script.js +++ /dev/null @@ -1,749 +0,0 @@ -'use strict'; - -const btn = document.querySelector('.btn-country'); -const countriesContainer = document.querySelector('.countries'); - -const renderCountry = function (data, className = '') { - const html = ` -
    - -
    -

    ${data.name}

    -

    ${data.region}

    -

    ๐Ÿ‘ซ${( - +data.population / 1000000 - ).toFixed(1)} people

    -

    ๐Ÿ—ฃ๏ธ${data.languages[0].name}

    -

    ๐Ÿ’ฐ${data.currencies[0].name}

    -
    -
    - `; - countriesContainer.insertAdjacentHTML('beforeend', html); - countriesContainer.style.opacity = 1; -}; - -const renderError = function (msg) { - countriesContainer.insertAdjacentText('beforeend', msg); - countriesContainer.style.opacity = 1; -}; - -const getJSON = function (url, errorMsg = 'Something went wrong') { - return fetch(url).then(response => { - if (!response.ok) throw new Error(`${errorMsg} (${response.status})`); - - return response.json(); - }); -}; - -/* -/////////////////////////////////////// -// Our First AJAX Call: XMLHttpRequest - -const getCountryData = function (country) { - const request = new XMLHttpRequest(); - request.open('GET', `https://restcountries.com/v2/name/${country}`); - request.send(); - - request.addEventListener('load', function () { - const [data] = JSON.parse(this.responseText); - console.log(data); - - const html = ` -
    - -
    -

    ${data.name}

    -

    ${data.region}

    -

    ๐Ÿ‘ซ${( - +data.population / 1000000 - ).toFixed(1)} people

    -

    ๐Ÿ—ฃ๏ธ${data.languages[0].name}

    -

    ๐Ÿ’ฐ${data.currencies[0].name}

    -
    -
    - `; - countriesContainer.insertAdjacentHTML('beforeend', html); - countriesContainer.style.opacity = 1; - }); -}; - -getCountryData('portugal'); -getCountryData('usa'); -getCountryData('germany'); -*/ - -/////////////////////////////////////// -// Welcome to Callback Hell - -/* -const getCountryAndNeighbour = function (country) { - // AJAX call country 1 - const request = new XMLHttpRequest(); - request.open('GET', `https://restcountries.com/v2/name/${country}`); - request.send(); - - request.addEventListener('load', function () { - const [data] = JSON.parse(this.responseText); - console.log(data); - - // Render country 1 - renderCountry(data); - - // Get neighbour country (2) - const [neighbour] = data.borders; - - if (!neighbour) return; - - // AJAX call country 2 - const request2 = new XMLHttpRequest(); - request2.open('GET', `https://restcountries.eu/rest/v2/alpha/${neighbour}`); - request2.send(); - - request2.addEventListener('load', function () { - const data2 = JSON.parse(this.responseText); - console.log(data2); - - renderCountry(data2, 'neighbour'); - }); - }); -}; - -// getCountryAndNeighbour('portugal'); -getCountryAndNeighbour('usa'); - -setTimeout(() => { - console.log('1 second passed'); - setTimeout(() => { - console.log('2 seconds passed'); - setTimeout(() => { - console.log('3 second passed'); - setTimeout(() => { - console.log('4 second passed'); - }, 1000); - }, 1000); - }, 1000); -}, 1000); - - -/////////////////////////////////////// -// Consuming Promises -// Chaining Promises -// Handling Rejected Promises -// Throwing Errors Manually - -// const getCountryData = function (country) { -// fetch(`https://restcountries.com/v2/name/${country}`) -// .then(function (response) { -// console.log(response); -// return response.json(); -// }) -// .then(function (data) { -// console.log(data); -// renderCountry(data[0]); -// }); -// }; - -// const getCountryData = function (country) { -// // Country 1 -// fetch(`https://restcountries.com/v2/name/${country}`) -// .then(response => { -// console.log(response); - -// if (!response.ok) -// throw new Error(`Country not found (${response.status})`); - -// return response.json(); -// }) -// .then(data => { -// renderCountry(data[0]); -// // const neighbour = data[0].borders[0]; -// const neighbour = 'dfsdfdef'; - -// if (!neighbour) return; - -// // Country 2 -// return fetch(`https://restcountries.eu/rest/v2/alpha/${neighbour}`); -// }) -// .then(response => { -// if (!response.ok) -// throw new Error(`Country not found (${response.status})`); - -// return response.json(); -// }) -// .then(data => renderCountry(data, 'neighbour')) -// .catch(err => { -// console.error(`${err} ๐Ÿ’ฅ๐Ÿ’ฅ๐Ÿ’ฅ`); -// renderError(`Something went wrong ๐Ÿ’ฅ๐Ÿ’ฅ ${err.message}. Try again!`); -// }) -// .finally(() => { -// countriesContainer.style.opacity = 1; -// }); -// }; - -const getCountryData = function (country) { - // Country 1 - getJSON( - `https://restcountries.com/v2/name/${country}`, - 'Country not found' - ) - .then(data => { - renderCountry(data[0]); - const neighbour = data[0].borders[0]; - - if (!neighbour) throw new Error('No neighbour found!'); - - // Country 2 - return getJSON( - `https://restcountries.eu/rest/v2/alpha/${neighbour}`, - 'Country not found' - ); - }) - - .then(data => renderCountry(data, 'neighbour')) - .catch(err => { - console.error(`${err} ๐Ÿ’ฅ๐Ÿ’ฅ๐Ÿ’ฅ`); - renderError(`Something went wrong ๐Ÿ’ฅ๐Ÿ’ฅ ${err.message}. Try again!`); - }) - .finally(() => { - countriesContainer.style.opacity = 1; - }); -}; - -btn.addEventListener('click', function () { - getCountryData('portugal'); -}); - -// getCountryData('australia'); -*/ - -/////////////////////////////////////// -// Coding Challenge #1 - -/* -In this challenge you will build a function 'whereAmI' which renders a country ONLY based on GPS coordinates. For that, you will use a second API to geocode coordinates. - -Here are your tasks: - -PART 1 -1. Create a function 'whereAmI' which takes as inputs a latitude value (lat) and a longitude value (lng) (these are GPS coordinates, examples are below). -2. Do 'reverse geocoding' of the provided coordinates. Reverse geocoding means to convert coordinates to a meaningful location, like a city and country name. Use this API to do reverse geocoding: https://api.bigdatacloud.net/data/reverse-geocode-client?latitude=${lat}&longitude=${lng}. -The AJAX call will be done to a URL with this format: https://api.bigdatacloud.net/data/reverse-geocode-client?latitude=52.508&longitude=13.381. Use the fetch API and promises to get the data. Do NOT use the getJSON function we created, that is cheating ๐Ÿ˜‰ -3. Once you have the data, take a look at it in the console to see all the attributes that you recieved about the provided location. Then, using this data, log a messsage like this to the console: 'You are in Berlin, Germany' -4. Chain a .catch method to the end of the promise chain and log errors to the console -5. This API allows you to make only 3 requests per second. If you reload fast, you will get this error with code 403. This is an error with the request. Remember, fetch() does NOT reject the promise in this case. So create an error to reject the promise yourself, with a meaningful error message. - -PART 2 -6. Now it's time to use the received data to render a country. So take the relevant attribute from the geocoding API result, and plug it into the countries API that we have been using. -7. Render the country and catch any errors, just like we have done in the last lecture (you can even copy this code, no need to type the same code) - -TEST COORDINATES 1: 52.508, 13.381 (Latitude, Longitude) -TEST COORDINATES 2: 19.037, 72.873 -TEST COORDINATES 2: -33.933, 18.474 - -GOOD LUCK ๐Ÿ˜€ -*/ - -/* -const whereAmI = function (lat, lng) { - fetch(`https://api.bigdatacloud.net/data/reverse-geocode-client?latitude=${lat}&longitude=${lng}`) - .then(res => { - if (!res.ok) throw new Error(`Problem with geocoding ${res.status}`); - return res.json(); - }) - .then(data => { - console.log(data); - console.log(`You are in ${data.city}, ${data.countryCode}`); - - return fetch(`https://restcountries.com/v2/name/${data.country}`); - }) - .then(res => { - if (!res.ok) throw new Error(`Country not found (${res.status})`); - - return res.json(); - }) - .then(data => renderCountry(data[0])) - .catch(err => console.error(`${err.message} ๐Ÿ’ฅ`)); -}; -whereAmI(52.508, 13.381); -whereAmI(19.037, 72.873); -whereAmI(-33.933, 18.474); - - -/////////////////////////////////////// -// The Event Loop in Practice -console.log('Test start'); -setTimeout(() => console.log('0 sec timer'), 0); -Promise.resolve('Resolved promise 1').then(res => console.log(res)); - -Promise.resolve('Resolved promise 2').then(res => { - for (let i = 0; i < 1000000000; i++) {} - console.log(res); -}); - -console.log('Test end'); - - -/////////////////////////////////////// -// Building a Simple Promise -const lotteryPromise = new Promise(function (resolve, reject) { - console.log('Lotter draw is happening ๐Ÿ”ฎ'); - setTimeout(function () { - if (Math.random() >= 0.5) { - resolve('You WIN ๐Ÿ’ฐ'); - } else { - reject(new Error('You lost your money ๐Ÿ’ฉ')); - } - }, 2000); -}); - -lotteryPromise.then(res => console.log(res)).catch(err => console.error(err)); - -// Promisifying setTimeout -const wait = function (seconds) { - return new Promise(function (resolve) { - setTimeout(resolve, seconds * 1000); - }); -}; - -wait(1) - .then(() => { - console.log('1 second passed'); - return wait(1); - }) - .then(() => { - console.log('2 second passed'); - return wait(1); - }) - .then(() => { - console.log('3 second passed'); - return wait(1); - }) - .then(() => console.log('4 second passed')); - -// setTimeout(() => { -// console.log('1 second passed'); -// setTimeout(() => { -// console.log('2 seconds passed'); -// setTimeout(() => { -// console.log('3 second passed'); -// setTimeout(() => { -// console.log('4 second passed'); -// }, 1000); -// }, 1000); -// }, 1000); -// }, 1000); - -Promise.resolve('abc').then(x => console.log(x)); -Promise.reject(new Error('Problem!')).catch(x => console.error(x)); - - -/////////////////////////////////////// -// Promisifying the Geolocation API -const getPosition = function () { - return new Promise(function (resolve, reject) { - // navigator.geolocation.getCurrentPosition( - // position => resolve(position), - // err => reject(err) - // ); - navigator.geolocation.getCurrentPosition(resolve, reject); - }); -}; -// getPosition().then(pos => console.log(pos)); - -const whereAmI = function () { - getPosition() - .then(pos => { - const { latitude: lat, longitude: lng } = pos.coords; - - return fetch(`https://api.bigdatacloud.net/data/reverse-geocode-client?latitude=${lat}&longitude=${lng}`); - }) - .then(res => { - if (!res.ok) throw new Error(`Problem with geocoding ${res.status}`); - return res.json(); - }) - .then(data => { - console.log(data); - console.log(`You are in ${data.city}, ${data.countryCode}`); - - return fetch(`https://restcountries.com/v2/name/${data.countryCode}`); - }) - .then(res => { - if (!res.ok) throw new Error(`Country not found (${res.status})`); - - return res.json(); - }) - .then(data => renderCountry(data[0])) - .catch(err => console.error(`${err.message} ๐Ÿ’ฅ`)); -}; - -btn.addEventListener('click', whereAmI); -*/ - -/////////////////////////////////////// -// Coding Challenge #2 - -/* -Build the image loading functionality that I just showed you on the screen. - -Tasks are not super-descriptive this time, so that you can figure out some stuff on your own. Pretend you're working on your own ๐Ÿ˜‰ - -PART 1 -1. Create a function 'createImage' which receives imgPath as an input. This function returns a promise which creates a new image (use document.createElement('img')) and sets the .src attribute to the provided image path. When the image is done loading, append it to the DOM element with the 'images' class, and resolve the promise. The fulfilled value should be the image element itself. In case there is an error loading the image ('error' event), reject the promise. - -If this part is too tricky for you, just watch the first part of the solution. - -PART 2 -2. Comsume the promise using .then and also add an error handler; -3. After the image has loaded, pause execution for 2 seconds using the wait function we created earlier; -4. After the 2 seconds have passed, hide the current image (set display to 'none'), and load a second image (HINT: Use the image element returned by the createImage promise to hide the current image. You will need a global variable for that ๐Ÿ˜‰); -5. After the second image has loaded, pause execution for 2 seconds again; -6. After the 2 seconds have passed, hide the current image. - -TEST DATA: Images in the img folder. Test the error handler by passing a wrong image path. Set the network speed to 'Fast 3G' in the dev tools Network tab, otherwise images load too fast. - -GOOD LUCK ๐Ÿ˜€ -*/ - -/* -const wait = function (seconds) { - return new Promise(function (resolve) { - setTimeout(resolve, seconds * 1000); - }); -}; - -const imgContainer = document.querySelector('.images'); - -const createImage = function (imgPath) { - return new Promise(function (resolve, reject) { - const img = document.createElement('img'); - img.src = imgPath; - - img.addEventListener('load', function () { - imgContainer.append(img); - resolve(img); - }); - - img.addEventListener('error', function () { - reject(new Error('Image not found')); - }); - }); -}; - -let currentImg; - -createImage('img/img-1.jpg') - .then(img => { - currentImg = img; - console.log('Image 1 loaded'); - return wait(2); - }) - .then(() => { - currentImg.style.display = 'none'; - return createImage('img/img-2.jpg'); - }) - .then(img => { - currentImg = img; - console.log('Image 2 loaded'); - return wait(2); - }) - .then(() => { - currentImg.style.display = 'none'; - }) - .catch(err => console.error(err)); - - -/////////////////////////////////////// -// Consuming Promises with Async/Await -// Error Handling With try...catch - -const getPosition = function () { - return new Promise(function (resolve, reject) { - navigator.geolocation.getCurrentPosition(resolve, reject); - }); -}; - -// fetch(`https://restcountries.com/v2/name/${country}`).then(res => console.log(res)) - -const whereAmI = async function () { - try { - // Geolocation - const pos = await getPosition(); - const { latitude: lat, longitude: lng } = pos.coords; - - // Reverse geocoding - const resGeo = await fetch(`https://api.bigdatacloud.net/data/reverse-geocode-client?latitude=${lat}&longitude=${lng}`); - if (!resGeo.ok) throw new Error('Problem getting location data'); - - const dataGeo = await resGeo.json(); - console.log(dataGeo); - - // Country data - const res = await fetch( - `https://restcountries.com/v2/name/${dataGeo.countryCode}` - ); - - // BUG in video: - // if (!resGeo.ok) throw new Error('Problem getting country'); - - // FIX: - if (!res.ok) throw new Error('Problem getting country'); - - const data = await res.json(); - console.log(data); - renderCountry(data[0]); - } catch (err) { - console.error(`${err} ๐Ÿ’ฅ`); - renderError(`๐Ÿ’ฅ ${err.message}`); - } -}; -whereAmI(); -whereAmI(); -whereAmI(); -console.log('FIRST'); - -// try { -// let y = 1; -// const x = 2; -// y = 3; -// } catch (err) { -// alert(err.message); -// } - - -/////////////////////////////////////// -// Returning Values from Async Functions -const getPosition = function () { - return new Promise(function (resolve, reject) { - navigator.geolocation.getCurrentPosition(resolve, reject); - }); -}; - -const whereAmI = async function () { - try { - // Geolocation - const pos = await getPosition(); - const { latitude: lat, longitude: lng } = pos.coords; - - // Reverse geocoding - const resGeo = await fetch(`https://api.bigdatacloud.net/data/reverse-geocode-client?latitude=${lat}&longitude=${lng}`); - if (!resGeo.ok) throw new Error('Problem getting location data'); - const dataGeo = await resGeo.json(); - - // Country data - const res = await fetch( - `https://restcountries.com/v2/name/${dataGeo.country}` - ); - if (!resGeo.ok) throw new Error('Problem getting country'); - const data = await res.json(); - renderCountry(data[0]); - - return `You are in ${dataGeo.city}, ${dataGeo.country}`; - } catch (err) { - console.error(`${err} ๐Ÿ’ฅ`); - renderError(`๐Ÿ’ฅ ${err.message}`); - - // Reject promise returned from async function - throw err; - } -}; - -console.log('1: Will get location'); -// const city = whereAmI(); -// console.log(city); - -// whereAmI() -// .then(city => console.log(`2: ${city}`)) -// .catch(err => console.error(`2: ${err.message} ๐Ÿ’ฅ`)) -// .finally(() => console.log('3: Finished getting location')); - -(async function () { - try { - const city = await whereAmI(); - console.log(`2: ${city}`); - } catch (err) { - console.error(`2: ${err.message} ๐Ÿ’ฅ`); - } - console.log('3: Finished getting location'); -})(); - - -/////////////////////////////////////// -// Running Promises in Parallel -const get3Countries = async function (c1, c2, c3) { - try { - // const [data1] = await getJSON( - // `https://restcountries.com/v2/name/${c1}` - // ); - // const [data2] = await getJSON( - // `https://restcountries.com/v2/name/${c2}` - // ); - // const [data3] = await getJSON( - // `https://restcountries.com/v2/name/${c3}` - // ); - // console.log([data1.capital, data2.capital, data3.capital]); - - const data = await Promise.all([ - getJSON(`https://restcountries.com/v2/name/${c1}`), - getJSON(`https://restcountries.com/v2/name/${c2}`), - getJSON(`https://restcountries.com/v2/name/${c3}`), - ]); - console.log(data.map(d => d[0].capital)); - } catch (err) { - console.error(err); - } -}; -get3Countries('portugal', 'canada', 'tanzania'); - - -/////////////////////////////////////// -// Other Promise Combinators: race, allSettled and any -// Promise.race -(async function () { - const res = await Promise.race([ - getJSON(`https://restcountries.com/v2/name/italy`), - getJSON(`https://restcountries.com/v2/name/egypt`), - getJSON(`https://restcountries.com/v2/name/mexico`), - ]); - console.log(res[0]); -})(); - -const timeout = function (sec) { - return new Promise(function (_, reject) { - setTimeout(function () { - reject(new Error('Request took too long!')); - }, sec * 1000); - }); -}; - -Promise.race([ - getJSON(`https://restcountries.com/v2/name/tanzania`), - timeout(5), -]) - .then(res => console.log(res[0])) - .catch(err => console.error(err)); - -// Promise.allSettled -Promise.allSettled([ - Promise.resolve('Success'), - Promise.reject('ERROR'), - Promise.resolve('Another success'), -]).then(res => console.log(res)); - -Promise.all([ - Promise.resolve('Success'), - Promise.reject('ERROR'), - Promise.resolve('Another success'), -]) - .then(res => console.log(res)) - .catch(err => console.error(err)); - -// Promise.any [ES2021] -Promise.any([ - Promise.resolve('Success'), - Promise.reject('ERROR'), - Promise.resolve('Another success'), -]) - .then(res => console.log(res)) - .catch(err => console.error(err)); -*/ - -/////////////////////////////////////// -// Coding Challenge #3 - -/* -PART 1 -Write an async function 'loadNPause' that recreates Coding Challenge #2, this time using async/await (only the part where the promise is consumed). Compare the two versions, think about the big differences, and see which one you like more. -Don't forget to test the error handler, and to set the network speed to 'Fast 3G' in the dev tools Network tab. - -PART 2 -1. Create an async function 'loadAll' that receives an array of image paths 'imgArr'; -2. Use .map to loop over the array, to load all the images with the 'createImage' function (call the resulting array 'imgs') -3. Check out the 'imgs' array in the console! Is it like you expected? -4. Use a promise combinator function to actually get the images from the array ๐Ÿ˜‰ -5. Add the 'paralell' class to all the images (it has some CSS styles). - -TEST DATA: ['img/img-1.jpg', 'img/img-2.jpg', 'img/img-3.jpg']. To test, turn off the 'loadNPause' function. - -GOOD LUCK ๐Ÿ˜€ -*/ - -/* -const wait = function (seconds) { - return new Promise(function (resolve) { - setTimeout(resolve, seconds * 1000); - }); -}; - -const imgContainer = document.querySelector('.images'); - -const createImage = function (imgPath) { - return new Promise(function (resolve, reject) { - const img = document.createElement('img'); - img.src = imgPath; - - img.addEventListener('load', function () { - imgContainer.append(img); - resolve(img); - }); - - img.addEventListener('error', function () { - reject(new Error('Image not found')); - }); - }); -}; - -let currentImg; - -// createImage('img/img-1.jpg') -// .then(img => { -// currentImg = img; -// console.log('Image 1 loaded'); -// return wait(2); -// }) -// .then(() => { -// currentImg.style.display = 'none'; -// return createImage('img/img-2.jpg'); -// }) -// .then(img => { -// currentImg = img; -// console.log('Image 2 loaded'); -// return wait(2); -// }) -// .then(() => { -// currentImg.style.display = 'none'; -// }) -// .catch(err => console.error(err)); - -// PART 1 -const loadNPause = async function () { - try { - // Load image 1 - let img = await createImage('img/img-1.jpg'); - console.log('Image 1 loaded'); - await wait(2); - img.style.display = 'none'; - - // Load image 1 - img = await createImage('img/img-2.jpg'); - console.log('Image 2 loaded'); - await wait(2); - img.style.display = 'none'; - } catch (err) { - console.error(err); - } -}; -// loadNPause(); - -// PART 2 -const loadAll = async function (imgArr) { - try { - const imgs = imgArr.map(async img => await createImage(img)); - const imgsEl = await Promise.all(imgs); - console.log(imgsEl); - imgsEl.forEach(img => img.classList.add('parallel')); - } catch (err) { - console.error(err); - } -}; -loadAll(['img/img-1.jpg', 'img/img-2.jpg', 'img/img-3.jpg']); -*/ diff --git a/16-Asynchronous/final/style.css b/16-Asynchronous/final/style.css deleted file mode 100644 index 6a10dac8b6..0000000000 --- a/16-Asynchronous/final/style.css +++ /dev/null @@ -1,126 +0,0 @@ -* { - margin: 0; - padding: 0; - box-sizing: inherit; -} - -html { - font-size: 62.5%; - box-sizing: border-box; -} - -body { - font-family: system-ui; - color: #555; - background-color: #f7f7f7; - min-height: 100vh; - - display: flex; - align-items: center; - justify-content: center; -} - -.container { - display: flex; - flex-flow: column; - align-items: center; -} - -.countries { - /* margin-bottom: 8rem; */ - display: flex; - - font-size: 2rem; - opacity: 0; - transition: opacity 1s; -} - -.country { - background-color: #fff; - box-shadow: 0 2rem 5rem 1rem rgba(0, 0, 0, 0.1); - font-size: 1.8rem; - width: 30rem; - border-radius: 0.7rem; - margin: 0 3rem; - /* overflow: hidden; */ -} - -.neighbour::before { - content: 'Neighbour country'; - width: 100%; - position: absolute; - top: -4rem; - - text-align: center; - font-size: 1.8rem; - font-weight: 600; - text-transform: uppercase; - color: #888; -} - -.neighbour { - transform: scale(0.8) translateY(1rem); - margin-left: 0; -} - -.country__img { - width: 30rem; - height: 17rem; - object-fit: cover; - background-color: #eee; - border-top-left-radius: 0.7rem; - border-top-right-radius: 0.7rem; -} - -.country__data { - padding: 2.5rem 3.75rem 3rem 3.75rem; -} - -.country__name { - font-size: 2.7rem; - margin-bottom: 0.7rem; -} - -.country__region { - font-size: 1.4rem; - margin-bottom: 2.5rem; - text-transform: uppercase; - color: #888; -} - -.country__row:not(:last-child) { - margin-bottom: 1rem; -} - -.country__row span { - display: inline-block; - margin-right: 2rem; - font-size: 2.4rem; -} - -.btn-country { - border: none; - font-size: 2rem; - padding: 2rem 5rem; - border-radius: 0.7rem; - color: white; - background-color: orangered; - cursor: pointer; -} - -.images { - display: flex; -} - -.images img { - display: block; - width: 80rem; - margin: 4rem; -} - -.images img.parallel { - width: 40rem; - margin: 2rem; - border: 3rem solid white; - box-shadow: 0 2rem 5rem 1rem rgba(0, 0, 0, 0.1); -} diff --git a/16-Asynchronous/starter/.prettierrc b/16-Asynchronous/starter/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/16-Asynchronous/starter/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/16-Asynchronous/starter/img/img-1.jpg b/16-Asynchronous/starter/img/img-1.jpg deleted file mode 100644 index 9627ba5572..0000000000 Binary files a/16-Asynchronous/starter/img/img-1.jpg and /dev/null differ diff --git a/16-Asynchronous/starter/img/img-2.jpg b/16-Asynchronous/starter/img/img-2.jpg deleted file mode 100644 index 70cb723446..0000000000 Binary files a/16-Asynchronous/starter/img/img-2.jpg and /dev/null differ diff --git a/16-Asynchronous/starter/img/img-3.jpg b/16-Asynchronous/starter/img/img-3.jpg deleted file mode 100644 index 45d23a3081..0000000000 Binary files a/16-Asynchronous/starter/img/img-3.jpg and /dev/null differ diff --git a/16-Asynchronous/starter/index.html b/16-Asynchronous/starter/index.html deleted file mode 100644 index 2b0e434dd3..0000000000 --- a/16-Asynchronous/starter/index.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - Asynchronous JavaScript - - -
    -
    - -
    - -
    -
    - - diff --git a/16-Asynchronous/starter/script.js b/16-Asynchronous/starter/script.js deleted file mode 100644 index 6a1be63658..0000000000 --- a/16-Asynchronous/starter/script.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -const btn = document.querySelector('.btn-country'); -const countriesContainer = document.querySelector('.countries'); - -// NEW COUNTRIES API URL (use instead of the URL shown in videos): -// https://restcountries.com/v2/name/portugal - -// NEW REVERSE GEOCODING API URL (use instead of the URL shown in videos): -// https://api.bigdatacloud.net/data/reverse-geocode-client?latitude=${lat}&longitude=${lng} - -/////////////////////////////////////// diff --git a/16-Asynchronous/starter/style.css b/16-Asynchronous/starter/style.css deleted file mode 100644 index 6a10dac8b6..0000000000 --- a/16-Asynchronous/starter/style.css +++ /dev/null @@ -1,126 +0,0 @@ -* { - margin: 0; - padding: 0; - box-sizing: inherit; -} - -html { - font-size: 62.5%; - box-sizing: border-box; -} - -body { - font-family: system-ui; - color: #555; - background-color: #f7f7f7; - min-height: 100vh; - - display: flex; - align-items: center; - justify-content: center; -} - -.container { - display: flex; - flex-flow: column; - align-items: center; -} - -.countries { - /* margin-bottom: 8rem; */ - display: flex; - - font-size: 2rem; - opacity: 0; - transition: opacity 1s; -} - -.country { - background-color: #fff; - box-shadow: 0 2rem 5rem 1rem rgba(0, 0, 0, 0.1); - font-size: 1.8rem; - width: 30rem; - border-radius: 0.7rem; - margin: 0 3rem; - /* overflow: hidden; */ -} - -.neighbour::before { - content: 'Neighbour country'; - width: 100%; - position: absolute; - top: -4rem; - - text-align: center; - font-size: 1.8rem; - font-weight: 600; - text-transform: uppercase; - color: #888; -} - -.neighbour { - transform: scale(0.8) translateY(1rem); - margin-left: 0; -} - -.country__img { - width: 30rem; - height: 17rem; - object-fit: cover; - background-color: #eee; - border-top-left-radius: 0.7rem; - border-top-right-radius: 0.7rem; -} - -.country__data { - padding: 2.5rem 3.75rem 3rem 3.75rem; -} - -.country__name { - font-size: 2.7rem; - margin-bottom: 0.7rem; -} - -.country__region { - font-size: 1.4rem; - margin-bottom: 2.5rem; - text-transform: uppercase; - color: #888; -} - -.country__row:not(:last-child) { - margin-bottom: 1rem; -} - -.country__row span { - display: inline-block; - margin-right: 2rem; - font-size: 2.4rem; -} - -.btn-country { - border: none; - font-size: 2rem; - padding: 2rem 5rem; - border-radius: 0.7rem; - color: white; - background-color: orangered; - cursor: pointer; -} - -.images { - display: flex; -} - -.images img { - display: block; - width: 80rem; - margin: 4rem; -} - -.images img.parallel { - width: 40rem; - margin: 2rem; - border: 3rem solid white; - box-shadow: 0 2rem 5rem 1rem rgba(0, 0, 0, 0.1); -} diff --git a/17-Modern-JS-Modules-Tooling/final/.prettierrc b/17-Modern-JS-Modules-Tooling/final/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/17-Modern-JS-Modules-Tooling/final/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/17-Modern-JS-Modules-Tooling/final/clean.js b/17-Modern-JS-Modules-Tooling/final/clean.js deleted file mode 100644 index dd60395373..0000000000 --- a/17-Modern-JS-Modules-Tooling/final/clean.js +++ /dev/null @@ -1,86 +0,0 @@ -'use strict'; - -const budget = Object.freeze([ - { value: 250, description: 'Sold old TV ๐Ÿ“บ', user: 'jonas' }, - { value: -45, description: 'Groceries ๐Ÿฅ‘', user: 'jonas' }, - { value: 3500, description: 'Monthly salary ๐Ÿ‘ฉโ€๐Ÿ’ป', user: 'jonas' }, - { value: 300, description: 'Freelancing ๐Ÿ‘ฉโ€๐Ÿ’ป', user: 'jonas' }, - { value: -1100, description: 'New iPhone ๐Ÿ“ฑ', user: 'jonas' }, - { value: -20, description: 'Candy ๐Ÿญ', user: 'matilda' }, - { value: -125, description: 'Toys ๐Ÿš‚', user: 'matilda' }, - { value: -1800, description: 'New Laptop ๐Ÿ’ป', user: 'jonas' }, -]); - -const spendingLimits = Object.freeze({ - jonas: 1500, - matilda: 100, -}); -// spendingLimits.jay = 200; - -// const limit = spendingLimits[user] ? spendingLimits[user] : 0; -const getLimit = (limits, user) => limits?.[user] ?? 0; - -// Pure function :D -const addExpense = function ( - state, - limits, - value, - description, - user = 'jonas' -) { - const cleanUser = user.toLowerCase(); - - return value <= getLimit(limits, cleanUser) - ? [...state, { value: -value, description, user: cleanUser }] - : state; -}; - -const newBudget1 = addExpense(budget, spendingLimits, 10, 'Pizza ๐Ÿ•'); -const newBudget2 = addExpense( - newBudget1, - spendingLimits, - 100, - 'Going to movies ๐Ÿฟ', - 'Matilda' -); -const newBudget3 = addExpense(newBudget2, spendingLimits, 200, 'Stuff', 'Jay'); - -// const checkExpenses2 = function (state, limits) { -// return state.map(entry => { -// return entry.value < -getLimit(limits, entry.user) -// ? { ...entry, flag: 'limit' } -// : entry; -// }); -// // for (const entry of newBudget3) -// // if (entry.value < -getLimit(limits, entry.user)) entry.flag = 'limit'; -// }; - -const checkExpenses = (state, limits) => - state.map(entry => - entry.value < -getLimit(limits, entry.user) - ? { ...entry, flag: 'limit' } - : entry - ); - -const finalBudget = checkExpenses(newBudget3, spendingLimits); -console.log(finalBudget); - -// Impure -const logBigExpenses = function (state, bigLimit) { - const bigExpenses = state - .filter(entry => entry.value <= -bigLimit) - .map(entry => entry.description.slice(-2)) - .join(' / '); - // .reduce((str, cur) => `${str} / ${cur.description.slice(-2)}`, ''); - - console.log(bigExpenses); - - // let output = ''; - // for (const entry of budget) - // output += - // entry.value <= -bigLimit ? `${entry.description.slice(-2)} / ` : ''; - // output = output.slice(0, -2); // Remove last '/ ' - // console.log(output); -}; - -logBigExpenses(finalBudget, 500); diff --git a/17-Modern-JS-Modules-Tooling/final/dist/index.html b/17-Modern-JS-Modules-Tooling/final/dist/index.html deleted file mode 100644 index a58cbb6307..0000000000 --- a/17-Modern-JS-Modules-Tooling/final/dist/index.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - Modern JavaScript Development: Modules and Tooling - - - -

    Modern JavaScript Development: Modules and Tooling

    - - diff --git a/17-Modern-JS-Modules-Tooling/final/dist/index.js b/17-Modern-JS-Modules-Tooling/final/dist/index.js deleted file mode 100644 index bb62101ac5..0000000000 --- a/17-Modern-JS-Modules-Tooling/final/dist/index.js +++ /dev/null @@ -1,392 +0,0 @@ -// modules are defined as an array -// [ module function, map of requires ] -// -// map of requires is short require name -> numeric require -// -// anything defined in a previous bundle is accessed via the -// orig method which is the require for previous bundles -parcelRequire = (function (modules, cache, entry, globalName) { - // Save the require from previous bundle to this closure if any - var previousRequire = typeof parcelRequire === 'function' && parcelRequire; - var nodeRequire = typeof require === 'function' && require; - - function newRequire(name, jumped) { - if (!cache[name]) { - if (!modules[name]) { - // if we cannot find the module within our internal map or - // cache jump to the current global require ie. the last bundle - // that was added to the page. - var currentRequire = typeof parcelRequire === 'function' && parcelRequire; - if (!jumped && currentRequire) { - return currentRequire(name, true); - } - - // If there are other bundles on this page the require from the - // previous one is saved to 'previousRequire'. Repeat this as - // many times as there are bundles until the module is found or - // we exhaust the require chain. - if (previousRequire) { - return previousRequire(name, true); - } - - // Try the node require function if it exists. - if (nodeRequire && typeof name === 'string') { - return nodeRequire(name); - } - - var err = new Error('Cannot find module \'' + name + '\''); - err.code = 'MODULE_NOT_FOUND'; - throw err; - } - - localRequire.resolve = resolve; - localRequire.cache = {}; - - var module = cache[name] = new newRequire.Module(name); - - modules[name][0].call(module.exports, localRequire, module, module.exports, this); - } - - return cache[name].exports; - - function localRequire(x){ - return newRequire(localRequire.resolve(x)); - } - - function resolve(x){ - return modules[name][1][x] || x; - } - } - - function Module(moduleName) { - this.id = moduleName; - this.bundle = newRequire; - this.exports = {}; - } - - newRequire.isParcelRequire = true; - newRequire.Module = Module; - newRequire.modules = modules; - newRequire.cache = cache; - newRequire.parent = previousRequire; - newRequire.register = function (id, exports) { - modules[id] = [function (require, module) { - module.exports = exports; - }, {}]; - }; - - var error; - for (var i = 0; i < entry.length; i++) { - try { - newRequire(entry[i]); - } catch (e) { - // Save first error but execute all entries - if (!error) { - error = e; - } - } - } - - if (entry.length) { - // Expose entry point to Node, AMD or browser globals - // Based on https://github.com/ForbesLindesay/umd/blob/master/template.js - var mainExports = newRequire(entry[entry.length - 1]); - - // CommonJS - if (typeof exports === "object" && typeof module !== "undefined") { - module.exports = mainExports; - - // RequireJS - } else if (typeof define === "function" && define.amd) { - define(function () { - return mainExports; - }); - - // - - Modern JavaScript Development: Modules and Tooling - - - -

    Modern JavaScript Development: Modules and Tooling

    - - diff --git a/17-Modern-JS-Modules-Tooling/final/package-lock.json b/17-Modern-JS-Modules-Tooling/final/package-lock.json deleted file mode 100644 index 51a11382aa..0000000000 --- a/17-Modern-JS-Modules-Tooling/final/package-lock.json +++ /dev/null @@ -1,6831 +0,0 @@ -{ - "name": "17-modern-js-modules-tooling", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/compat-data": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.11.0.tgz", - "integrity": "sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ==", - "dev": true, - "requires": { - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "semver": "^5.5.0" - } - }, - "@babel/core": { - "version": "7.11.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.4.tgz", - "integrity": "sha512-5deljj5HlqRXN+5oJTY7Zs37iH3z3b++KjiKtIsJy1NrjOOVSEaJHEetLBhyu0aQOSNNZ/0IuEAan9GzRuDXHg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.4", - "@babel/helper-module-transforms": "^7.11.0", - "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.11.0", - "@babel/types": "^7.11.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.11.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.4.tgz", - "integrity": "sha512-Rn26vueFx0eOoz7iifCN2UHT6rGtnkSGWSoDRIy8jZN3B91PzeSULbswfLoOWuTuAcNwpG/mxy+uCTDnZ9Mp1g==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-builder-react-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz", - "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-builder-react-jsx-experimental": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.10.5.tgz", - "integrity": "sha512-Buewnx6M4ttG+NLkKyt7baQn7ScC/Td+e99G914fRU8fGIUivDDgVIQeDHFa5e4CRSJQt58WpNHhsAZgtzVhsg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-module-imports": "^7.10.4", - "@babel/types": "^7.10.5" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz", - "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", - "dev": true, - "requires": { - "@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": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz", - "integrity": "sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==", - "dev": true, - "requires": { - "@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": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", - "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-regex": "^7.10.4", - "regexpu-core": "^4.7.0" - } - }, - "@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.11.4", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz", - "integrity": "sha512-ux9hm3zR4WV1Y3xXxXkdG/0gxF9nvI0YVmKVhvK9AfMoaQkemL3sJpXw+Xbz65azo8qJiEz2XVDUpK3KYhH3ZQ==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz", - "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-module-transforms": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", - "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", - "dev": true, - "requires": { - "@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": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", - "dev": true - }, - "@babel/helper-regex": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", - "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", - "dev": true, - "requires": { - "lodash": "^4.17.19" - } - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.11.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.11.4.tgz", - "integrity": "sha512-tR5vJ/vBa9wFy3m5LLv2faapJLnDFxNWff2SAYkSE4rLUdbp7CdObYFgI7wK4T/Mj4UzpjPwzR8Pzmr5m7MHGA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", - "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", - "dev": true, - "requires": { - "@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": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", - "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", - "dev": true, - "requires": { - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz", - "integrity": "sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", - "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helpers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", - "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", - "dev": true, - "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.11.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.4.tgz", - "integrity": "sha512-MggwidiH+E9j5Sh8pbrX5sJvMcsqS5o+7iB42M9/k0CD63MjYbdP4nhSh7uB5wnv2/RVzTZFTxzF/kIa5mrCqA==", - "dev": true - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz", - "integrity": "sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==", - "dev": true, - "requires": { - "@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": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz", - "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz", - "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz", - "integrity": "sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", - "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz", - "integrity": "sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", - "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz", - "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz", - "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==", - "dev": true, - "requires": { - "@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": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz", - "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz", - "integrity": "sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA==", - "dev": true, - "requires": { - "@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": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz", - "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz", - "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz", - "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-flow": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.10.4.tgz", - "integrity": "sha512-yxQsX1dJixF4qEEdzVbst3SZQ58Nrooz8NV9Z9GL4byTE25BvJgl5lf0RECUf0fh28rZBb/RYTWn/eeKwCMrZQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", - "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz", - "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz", - "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz", - "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", - "dev": true, - "requires": { - "@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": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz", - "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz", - "integrity": "sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz", - "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", - "dev": true, - "requires": { - "@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": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz", - "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz", - "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz", - "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz", - "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz", - "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.10.4.tgz", - "integrity": "sha512-XTadyuqNst88UWBTdLjM+wEY7BFnY2sYtPyAidfC7M/QaZnSuIZpMvLxqGT7phAcnGyWh/XQFLKcGf04CnvxSQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-flow": "^7.10.4" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz", - "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz", - "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz", - "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz", - "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz", - "integrity": "sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==", - "dev": true, - "requires": { - "@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": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz", - "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==", - "dev": true, - "requires": { - "@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": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz", - "integrity": "sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==", - "dev": true, - "requires": { - "@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": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz", - "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", - "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz", - "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz", - "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz", - "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz", - "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.4.tgz", - "integrity": "sha512-L+MfRhWjX0eI7Js093MM6MacKU4M6dnCRa/QPDwYMxjljzSCzzlzKzj9Pk4P3OtrPcxr2N3znR419nr3Xw+65A==", - "dev": true, - "requires": { - "@babel/helper-builder-react-jsx": "^7.10.4", - "@babel/helper-builder-react-jsx-experimental": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.10.4" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz", - "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", - "dev": true, - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz", - "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz", - "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz", - "integrity": "sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz", - "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-regex": "^7.10.4" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz", - "integrity": "sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz", - "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz", - "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz", - "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/preset-env": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.0.tgz", - "integrity": "sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg==", - "dev": true, - "requires": { - "@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": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", - "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", - "dev": true, - "requires": { - "@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": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", - "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz", - "integrity": "sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==", - "dev": true, - "requires": { - "@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": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", - "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "@iarna/toml": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", - "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", - "dev": true - }, - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", - "dev": true, - "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" - } - }, - "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", - "dev": true - }, - "@parcel/fs": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-1.11.0.tgz", - "integrity": "sha512-86RyEqULbbVoeo8OLcv+LQ1Vq2PKBAvWTU9fCgALxuCTbbs5Ppcvll4Vr+Ko1AnmMzja/k++SzNAwJfeQXVlpA==", - "dev": true, - "requires": { - "@parcel/utils": "^1.11.0", - "mkdirp": "^0.5.1", - "rimraf": "^2.6.2" - } - }, - "@parcel/logger": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-1.11.1.tgz", - "integrity": "sha512-9NF3M6UVeP2udOBDILuoEHd8VrF4vQqoWHEafymO1pfSoOMfxrSJZw1MfyAAIUN/IFp9qjcpDCUbDZB+ioVevA==", - "dev": true, - "requires": { - "@parcel/workers": "^1.11.0", - "chalk": "^2.1.0", - "grapheme-breaker": "^0.3.2", - "ora": "^2.1.0", - "strip-ansi": "^4.0.0" - } - }, - "@parcel/utils": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-1.11.0.tgz", - "integrity": "sha512-cA3p4jTlaMeOtAKR/6AadanOPvKeg8VwgnHhOyfi0yClD0TZS/hi9xu12w4EzA/8NtHu0g6o4RDfcNjqN8l1AQ==", - "dev": true - }, - "@parcel/watcher": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-1.12.1.tgz", - "integrity": "sha512-od+uCtCxC/KoNQAIE1vWx1YTyKYY+7CTrxBJPRh3cDWw/C0tCtlBMVlrbplscGoEpt6B27KhJDCv82PBxOERNA==", - "dev": true, - "requires": { - "@parcel/utils": "^1.11.0", - "chokidar": "^2.1.5" - } - }, - "@parcel/workers": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-1.11.0.tgz", - "integrity": "sha512-USSjRAAQYsZFlv43FUPdD+jEGML5/8oLF0rUzPQTtK4q9kvaXr49F5ZplyLz5lox78cLZ0TxN2bIDQ1xhOkulQ==", - "dev": true, - "requires": { - "@parcel/utils": "^1.11.0", - "physical-cpu-count": "^2.0.0" - } - }, - "@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", - "dev": true - }, - "abab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.4.tgz", - "integrity": "sha512-Eu9ELJWCz/c1e9gTiCY+FceWxcqzjYEbqMgtndnuSqZSUCOL73TWNK2mHfIj4Cw2E/ongOp+JISVNCmovt2KYQ==", - "dev": true - }, - "acorn": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", - "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", - "dev": true - }, - "acorn-globals": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", - "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", - "dev": true, - "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", - "dev": true - } - } - }, - "acorn-walk": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", - "dev": true - }, - "ajv": { - "version": "6.12.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", - "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "ansi-to-html": { - "version": "0.6.14", - "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.14.tgz", - "integrity": "sha512-7ZslfB1+EnFSDO5Ju+ue5Y6It19DRnZXWv8jrGHgIlPna5Mh4jz7BV5jCbQneXNFurQcKoolaaAjHtgSBfOIuA==", - "dev": true, - "requires": { - "entities": "^1.1.2" - } - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz", - "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==", - "dev": true - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "core-js": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", - "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - } - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - }, - "dependencies": { - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - } - } - }, - "babylon-walk": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/babylon-walk/-/babylon-walk-1.0.2.tgz", - "integrity": "sha1-OxWl3btIKni0zpwByLoYFwLZ1s4=", - "dev": true, - "requires": { - "babel-runtime": "^6.11.6", - "babel-types": "^6.15.0", - "lodash.clone": "^4.5.0" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bn.js": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", - "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", - "dev": true - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "brfs": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz", - "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==", - "dev": true, - "requires": { - "quote-stream": "^1.0.1", - "resolve": "^1.1.5", - "static-module": "^2.2.0", - "through2": "^2.0.0" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - }, - "dependencies": { - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - } - } - }, - "browserslist": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.0.tgz", - "integrity": "sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001111", - "electron-to-chromium": "^1.3.523", - "escalade": "^3.0.2", - "node-releases": "^1.1.60" - } - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "requires": { - "callsites": "^2.0.0" - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001118", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001118.tgz", - "integrity": "sha512-RNKPLojZo74a0cP7jFMidQI7nvLER40HgNfgKQEJ2PFm225L0ectUungNQoK3Xk3StQcFbpBPNEvoWD59436Hg==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "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" - } - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-spinners": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", - "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", - "dev": true - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dev": true, - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - } - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", - "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", - "dev": true, - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - }, - "core-js-compat": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", - "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", - "dev": true, - "requires": { - "browserslist": "^4.8.5", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - } - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "dev": true - }, - "css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", - "dev": true, - "requires": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" - } - }, - "css-modules-loader-core": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz", - "integrity": "sha1-WQhmgpShvs0mGuCkziGwtVHyHRY=", - "dev": true, - "requires": { - "icss-replace-symbols": "1.1.0", - "postcss": "6.0.1", - "postcss-modules-extract-imports": "1.1.0", - "postcss-modules-local-by-default": "1.2.0", - "postcss-modules-scope": "1.1.0", - "postcss-modules-values": "1.3.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", - "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true - }, - "css-selector-tokenizer": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", - "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "fastparse": "^1.1.2" - } - }, - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dev": true, - "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.3.0.tgz", - "integrity": "sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", - "dev": true, - "requires": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" - } - }, - "cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", - "dev": true, - "requires": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.2", - "postcss-unique-selectors": "^4.0.1" - } - }, - "cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", - "dev": true - }, - "cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", - "dev": true - }, - "cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", - "dev": true - }, - "csso": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", - "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", - "dev": true, - "requires": { - "css-tree": "1.0.0-alpha.39" - }, - "dependencies": { - "css-tree": { - "version": "1.0.0-alpha.39", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", - "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", - "dev": true, - "requires": { - "mdn-data": "2.0.6", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", - "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==", - "dev": true - } - } - }, - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "cssstyle": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", - "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", - "dev": true, - "requires": { - "cssom": "0.3.x" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" - } - }, - "deasync": { - "version": "0.1.20", - "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.20.tgz", - "integrity": "sha512-E1GI7jMI57hL30OX6Ht/hfQU8DO4AuB9m72WFm4c38GNbUD4Q03//XZaOIHZiY+H1xUaomcot5yk2q/qIZQkGQ==", - "dev": true, - "requires": { - "bindings": "^1.5.0", - "node-addon-api": "^1.7.1" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "^1.0.2" - }, - "dependencies": { - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - } - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", - "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", - "dev": true - }, - "entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", - "dev": true - } - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "dev": true, - "requires": { - "webidl-conversions": "^4.0.2" - } - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "dot-prop": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", - "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "dotenv": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz", - "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==", - "dev": true - }, - "dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.551", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.551.tgz", - "integrity": "sha512-11qcm2xvf2kqeFO5EIejaBx5cKXsW1quAyv3VctCMYwofnyVZLs97y6LCekss3/ghQpr7PYkSO3uId5FmxZsdw==", - "dev": true - }, - "elliptic": { - "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", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, - "envinfo": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.3.tgz", - "integrity": "sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", - "dev": true - } - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.2.tgz", - "integrity": "sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escodegen": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", - "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", - "dev": true, - "requires": { - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "falafel": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.4.tgz", - "integrity": "sha512-0HXjo8XASWRmsS0X1EkhwEMZaD3Qvp7FfURwjLKjG1ghfRm/MGZl2r4cWUTv41KdNghTw4OUMmVtdGQp3+H+uQ==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "foreach": "^2.0.5", - "isarray": "^2.0.1", - "object-keys": "^1.0.6" - }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", - "dev": true, - "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", - "dev": true - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true - }, - "filesize": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", - "dev": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", - "dev": true - }, - "get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "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-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", - "dev": true - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "grapheme-breaker": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/grapheme-breaker/-/grapheme-breaker-0.3.2.tgz", - "integrity": "sha1-W55reMODJFLSuiuxy4MPlidkEKw=", - "dev": true, - "requires": { - "brfs": "^1.2.0", - "unicode-trie": "^0.3.1" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", - "dev": true - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", - "dev": true - }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.1" - } - }, - "html-tags": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-1.2.0.tgz", - "integrity": "sha1-x43mW1Zjqll5id0rerSSANfk25g=", - "dev": true - }, - "htmlnano": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-0.2.6.tgz", - "integrity": "sha512-HUY/99maFsWX2LRoGJpZ/8QRLCkyY0UU1El3wgLLFAHQlD3mCxCJJNcWJk5SBqaU49MLhIWVDW6cGBeuemvaPQ==", - "dev": true, - "requires": { - "cssnano": "^4.1.10", - "normalize-html-whitespace": "^1.0.0", - "posthtml": "^0.13.1", - "posthtml-render": "^1.2.2", - "purgecss": "^2.3.0", - "svgo": "^1.3.2", - "terser": "^4.8.0", - "uncss": "^0.17.3" - }, - "dependencies": { - "posthtml": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.13.3.tgz", - "integrity": "sha512-5NL2bBc4ihAyoYnY0EAQrFQbJNE1UdvgC1wjYts0hph7jYeU2fa5ki3/9U45ce9V6M1vLMEgUX2NXe/bYL+bCQ==", - "dev": true, - "requires": { - "posthtml-parser": "^0.5.0", - "posthtml-render": "^1.2.3" - } - }, - "posthtml-parser": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.5.0.tgz", - "integrity": "sha512-BsZFAqOeX9lkJJPKG2JmGgtm6t++WibU7FeS40FNNGZ1KS2szRSRQ8Wr2JLvikDgAecrQ/9V4sjugTAin2+KVw==", - "dev": true, - "requires": { - "htmlparser2": "^3.9.2" - } - }, - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - } - } - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", - "dev": true - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", - "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", - "dev": true - }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "dev": true, - "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-html": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-html/-/is-html-1.1.0.tgz", - "integrity": "sha1-4E8cGNOUhRETlvmgJz6rUa8hhGQ=", - "dev": true, - "requires": { - "html-tags": "^1.0.0" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", - "dev": true, - "requires": { - "html-comment-regex": "^1.1.0" - } - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - } - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsdom": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz", - "integrity": "sha512-O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "acorn": "^6.0.4", - "acorn-globals": "^4.3.0", - "array-equal": "^1.0.0", - "cssom": "^0.3.4", - "cssstyle": "^1.1.1", - "data-urls": "^1.1.0", - "domexception": "^1.0.1", - "escodegen": "^1.11.0", - "html-encoding-sniffer": "^1.0.2", - "nwsapi": "^2.1.3", - "parse5": "5.1.0", - "pn": "^1.1.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.5", - "saxes": "^3.1.9", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.5.0", - "w3c-hr-time": "^1.0.1", - "w3c-xmlserializer": "^1.1.2", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^7.0.0", - "ws": "^6.1.2", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", - "dev": true - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "leaflet": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.6.0.tgz", - "integrity": "sha512-CPkhyqWUKZKFJ6K8umN5/D2wrJ2+/8UIpXppY7QDnUZW5bZL5+SEI2J7GBpwh4LIupOKqbNSQXgqmrEJopHVNQ==" - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levenary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", - "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", - "dev": true, - "requires": { - "leven": "^3.1.0" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, - "lodash-es": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz", - "integrity": "sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==" - }, - "lodash.clone": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", - "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "requires": { - "chalk": "^2.0.1" - } - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "magic-string": { - "version": "0.22.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", - "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", - "dev": true, - "requires": { - "vlq": "^0.2.2" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "dev": true - }, - "merge-source-map": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", - "integrity": "sha1-pd5GU42uhNQRTMXqArR3KmNGcB8=", - "dev": true, - "requires": { - "source-map": "^0.5.6" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", - "dev": true - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "dev": true, - "requires": { - "mime-db": "1.44.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "nan": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", - "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-addon-api": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", - "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", - "dev": true - }, - "node-forge": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz", - "integrity": "sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw==", - "dev": true - }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, - "node-releases": { - "version": "1.1.60", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", - "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==", - "dev": true - }, - "normalize-html-whitespace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/normalize-html-whitespace/-/normalize-html-whitespace-1.0.0.tgz", - "integrity": "sha512-9ui7CGtOOlehQu0t/OhhlmDyc71mKVlv+4vF+me4iZLPrNtRL2xoquEdfZxasC/bdQi/Hr3iTrpyRKIG+ocabA==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", - "dev": true - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "requires": { - "boolbase": "~1.0.0" - } - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz", - "integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "ora": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz", - "integrity": "sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==", - "dev": true, - "requires": { - "chalk": "^2.3.1", - "cli-cursor": "^2.1.0", - "cli-spinners": "^1.1.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^4.0.0", - "wcwidth": "^1.0.1" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", - "dev": true - }, - "parcel": { - "version": "1.12.4", - "resolved": "https://registry.npmjs.org/parcel/-/parcel-1.12.4.tgz", - "integrity": "sha512-qfc74e2/R4pCoU6L/ZZnK9k3iDS6ir4uHea0e9th9w52eehcAGf2ido/iABq9PBXdsIOe4NSY3oUm7Khe7+S3w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/core": "^7.4.4", - "@babel/generator": "^7.4.4", - "@babel/parser": "^7.4.4", - "@babel/plugin-transform-flow-strip-types": "^7.4.4", - "@babel/plugin-transform-modules-commonjs": "^7.4.4", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/preset-env": "^7.4.4", - "@babel/runtime": "^7.4.4", - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4", - "@iarna/toml": "^2.2.0", - "@parcel/fs": "^1.11.0", - "@parcel/logger": "^1.11.1", - "@parcel/utils": "^1.11.0", - "@parcel/watcher": "^1.12.1", - "@parcel/workers": "^1.11.0", - "ansi-to-html": "^0.6.4", - "babylon-walk": "^1.0.2", - "browserslist": "^4.1.0", - "chalk": "^2.1.0", - "clone": "^2.1.1", - "command-exists": "^1.2.6", - "commander": "^2.11.0", - "core-js": "^2.6.5", - "cross-spawn": "^6.0.4", - "css-modules-loader-core": "^1.1.0", - "cssnano": "^4.0.0", - "deasync": "^0.1.14", - "dotenv": "^5.0.0", - "dotenv-expand": "^5.1.0", - "envinfo": "^7.3.1", - "fast-glob": "^2.2.2", - "filesize": "^3.6.0", - "get-port": "^3.2.0", - "htmlnano": "^0.2.2", - "is-glob": "^4.0.0", - "is-url": "^1.2.2", - "js-yaml": "^3.10.0", - "json5": "^1.0.1", - "micromatch": "^3.0.4", - "mkdirp": "^0.5.1", - "node-forge": "^0.7.1", - "node-libs-browser": "^2.0.0", - "opn": "^5.1.0", - "postcss": "^7.0.11", - "postcss-value-parser": "^3.3.1", - "posthtml": "^0.11.2", - "posthtml-parser": "^0.4.0", - "posthtml-render": "^1.1.3", - "resolve": "^1.4.0", - "semver": "^5.4.1", - "serialize-to-js": "^3.0.0", - "serve-static": "^1.12.4", - "source-map": "0.6.1", - "terser": "^3.7.3", - "v8-compile-cache": "^2.0.0", - "ws": "^5.1.1" - }, - "dependencies": { - "core-js": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", - "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", - "dev": true - } - } - }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parse5": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", - "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "physical-cpu-count": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz", - "integrity": "sha1-GN4vl+S/epVRrXURlCtUlverpmA=", - "dev": true - }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-calc": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.3.tgz", - "integrity": "sha512-IB/EAEmZhIMEIhG7Ov4x+l47UaXOS1n2f4FBUk/aKllQhtSCxWhTzn0nJgkqN7fo/jcWySvWTSB6Syk9L+31bA==", - "dev": true, - "requires": { - "postcss": "^7.0.27", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" - }, - "dependencies": { - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", - "dev": true - } - } - }, - "postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", - "dev": true, - "requires": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" - } - }, - "postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "uniqs": "^2.0.0" - } - }, - "postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-modules-extract-imports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", - "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", - "dev": true, - "requires": { - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } - } - }, - "postcss-modules-local-by-default": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", - "dev": true, - "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } - } - }, - "postcss-modules-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", - "dev": true, - "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } - } - }, - "postcss-modules-values": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", - "dev": true, - "requires": { - "icss-replace-symbols": "^1.1.0", - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } - } - }, - "postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", - "dev": true, - "requires": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", - "dev": true, - "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - } - }, - "postcss-selector-parser": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", - "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", - "dev": true, - "requires": { - "is-svg": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" - } - }, - "postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", - "uniqs": "^2.0.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "posthtml": { - "version": "0.11.6", - "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.11.6.tgz", - "integrity": "sha512-C2hrAPzmRdpuL3iH0TDdQ6XCc9M7Dcc3zEW5BLerY65G4tWWszwv6nG/ksi6ul5i2mx22ubdljgktXCtNkydkw==", - "dev": true, - "requires": { - "posthtml-parser": "^0.4.1", - "posthtml-render": "^1.1.5" - } - }, - "posthtml-parser": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.4.2.tgz", - "integrity": "sha512-BUIorsYJTvS9UhXxPTzupIztOMVNPa/HtAm9KHni9z6qEfiJ1bpOBL5DfUOL9XAc3XkLIEzBzpph+Zbm4AdRAg==", - "dev": true, - "requires": { - "htmlparser2": "^3.9.2" - } - }, - "posthtml-render": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.2.3.tgz", - "integrity": "sha512-rGGayND//VwTlsYKNqdILsA7U/XP0WJa6SMcdAEoqc2WRM5QExplGg/h9qbTuHz7mc2PvaXU+6iNxItvr5aHMg==", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "purgecss": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-2.3.0.tgz", - "integrity": "sha512-BE5CROfVGsx2XIhxGuZAT7rTH9lLeQx/6M0P7DTXQH4IUc3BBzs9JUzt4yzGf3JrH9enkeq6YJBe9CTtkm1WmQ==", - "dev": true, - "requires": { - "commander": "^5.0.0", - "glob": "^7.0.0", - "postcss": "7.0.32", - "postcss-selector-parser": "^6.0.2" - }, - "dependencies": { - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true - } - } - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "quote-stream": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", - "integrity": "sha1-hJY/jJwmuULhU/7rU6rnRlK34LI=", - "dev": true, - "requires": { - "buffer-equal": "0.0.1", - "minimist": "^1.1.3", - "through2": "^2.0.0" - } - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "regenerate": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", - "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "dev": true, - "requires": { - "regenerate": "^1.4.0" - } - }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - }, - "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexpu-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", - "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", - "dev": true, - "requires": { - "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": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true - }, - "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "requires": { - "lodash": "^4.17.19" - } - }, - "request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "dev": true, - "requires": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", - "dev": true - }, - "rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "saxes": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", - "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", - "dev": true, - "requires": { - "xmlchars": "^2.1.1" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "serialize-to-js": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/serialize-to-js/-/serialize-to-js-3.1.1.tgz", - "integrity": "sha512-F+NGU0UHMBO4Q965tjw7rvieNVjlH6Lqi2emq/Lc9LUURYJbiCzmpi4Cy1OOjjVPtxu0c+NE85LU6968Wko5ZA==", - "dev": true - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shallow-copy": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", - "integrity": "sha1-QV9CcC1z2BAzApLMXuhurhoRoXA=", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dev": true, - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - } - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true - }, - "static-eval": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", - "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", - "dev": true, - "requires": { - "escodegen": "^1.11.1" - }, - "dependencies": { - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - } - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "static-module": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz", - "integrity": "sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==", - "dev": true, - "requires": { - "concat-stream": "~1.6.0", - "convert-source-map": "^1.5.1", - "duplexer2": "~0.1.4", - "escodegen": "~1.9.0", - "falafel": "^2.1.0", - "has": "^1.0.1", - "magic-string": "^0.22.4", - "merge-source-map": "1.0.4", - "object-inspect": "~1.4.0", - "quote-stream": "~1.0.2", - "readable-stream": "~2.3.3", - "shallow-copy": "~0.0.1", - "static-eval": "^2.0.0", - "through2": "~2.0.3" - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - } - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "terser": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", - "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", - "dev": true, - "requires": { - "commander": "^2.19.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.10" - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, - "timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", - "dev": true - }, - "tiny-inflate": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", - "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", - "dev": true - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "uncss": { - "version": "0.17.3", - "resolved": "https://registry.npmjs.org/uncss/-/uncss-0.17.3.tgz", - "integrity": "sha512-ksdDWl81YWvF/X14fOSw4iu8tESDHFIeyKIeDrK6GEVTQvqJc1WlOEXqostNwOCi3qAj++4EaLsdAgPmUbEyog==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "glob": "^7.1.4", - "is-absolute-url": "^3.0.1", - "is-html": "^1.1.0", - "jsdom": "^14.1.0", - "lodash": "^4.17.15", - "postcss": "^7.0.17", - "postcss-selector-parser": "6.0.2", - "request": "^2.88.0" - }, - "dependencies": { - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true - } - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "dev": true - }, - "unicode-trie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz", - "integrity": "sha1-1nHd3YkQGgi6w3tqUWEBBgIFIIU=", - "dev": true, - "requires": { - "pako": "^0.2.5", - "tiny-inflate": "^1.0.0" - } - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", - "dev": true - }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", - "dev": true - }, - "vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "vlq": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", - "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", - "dev": true - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", - "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", - "dev": true, - "requires": { - "domexception": "^1.0.1", - "webidl-conversions": "^4.0.2", - "xml-name-validator": "^3.0.0" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - } - } -} diff --git a/17-Modern-JS-Modules-Tooling/final/package.json b/17-Modern-JS-Modules-Tooling/final/package.json deleted file mode 100644 index dc3f5b51da..0000000000 --- a/17-Modern-JS-Modules-Tooling/final/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "17-modern-js-modules-tooling", - "version": "1.0.0", - "description": "", - "main": "script.js", - "scripts": { - "start": "parcel index.html", - "build": "parcel build index.html" - }, - "author": "Jonas", - "license": "ISC", - "dependencies": { - "core-js": "^3.6.5", - "leaflet": "^1.6.0", - "lodash-es": "^4.17.15", - "regenerator-runtime": "^0.13.7" - }, - "devDependencies": { - "parcel": "^1.12.4" - } -} diff --git a/17-Modern-JS-Modules-Tooling/final/script.js b/17-Modern-JS-Modules-Tooling/final/script.js deleted file mode 100644 index 19bac447ee..0000000000 --- a/17-Modern-JS-Modules-Tooling/final/script.js +++ /dev/null @@ -1,145 +0,0 @@ -/////////////////////////////////////// -// Exporting and Importing in ES6 Modules - -// Importing module -// import { addToCart, totalPrice as price, tq } from './shoppingCart.js'; -// addToCart('bread', 5); -// console.log(price, tq); - -console.log('Importing module'); -// console.log(shippingCost); - -// import * as ShoppingCart from './shoppingCart.js'; -// ShoppingCart.addToCart('bread', 5); -// console.log(ShoppingCart.totalPrice); - -// import add, { addToCart, totalPrice as price, tq } from './shoppingCart.js'; -// console.log(price); - -import add, { cart } from './shoppingCart.js'; -add('pizza', 2); -add('bread', 5); -add('apples', 4); - -console.log(cart); -/* - - -/////////////////////////////////////// -// Top-Level Await (ES2022) - -// console.log('Start fetching'); -// const res = await fetch('https://jsonplaceholder.typicode.com/posts'); -// const data = await res.json(); -// console.log(data); -// console.log('Something'); - -const getLastPost = async function () { - const res = await fetch('https://jsonplaceholder.typicode.com/posts'); - const data = await res.json(); - - return { title: data.at(-1).title, text: data.at(-1).body }; -}; - -const lastPost = getLastPost(); -console.log(lastPost); - -// Not very clean -// lastPost.then(last => console.log(last)); - -const lastPost2 = await getLastPost(); -console.log(lastPost2); - - -/////////////////////////////////////// -// The Module Pattern - -const ShoppingCart2 = (function () { - const cart = []; - const shippingCost = 10; - const totalPrice = 237; - const totalQuantity = 23; - - const addToCart = function (product, quantity) { - cart.push({ product, quantity }); - console.log( - `${quantity} ${product} added to cart (sipping cost is ${shippingCost})` - ); - }; - - const orderStock = function (product, quantity) { - console.log(`${quantity} ${product} ordered from supplier`); - }; - - return { - addToCart, - cart, - totalPrice, - totalQuantity, - }; -})(); - -ShoppingCart2.addToCart('apple', 4); -ShoppingCart2.addToCart('pizza', 2); -console.log(ShoppingCart2); -console.log(ShoppingCart2.shippingCost); - - -/////////////////////////////////////// -// CommonJS Modules -// Export -export.addTocart = function (product, quantity) { - cart.push({ product, quantity }); - console.log( - `${quantity} ${product} added to cart (sipping cost is ${shippingCost})` - ); -}; - -// Import -const { addTocart } = require('./shoppingCart.js'); -*/ - -/////////////////////////////////////// -// Introduction to NPM -// import cloneDeep from './node_modules/lodash-es/cloneDeep.js'; -import cloneDeep from 'lodash-es'; - -const state = { - cart: [ - { product: 'bread', quantity: 5 }, - { product: 'pizza', quantity: 5 }, - ], - user: { loggedIn: true }, -}; -const stateClone = Object.assign({}, state); -const stateDeepClone = cloneDeep(state); - -state.user.loggedIn = false; -console.log(stateClone); - -console.log(stateDeepClone); - -if (module.hot) { - module.hot.accept(); -} - -class Person { - #greeting = 'Hey'; - constructor(name) { - this.name = name; - console.log(`${this.#greeting}, ${this.name}`); - } -} -const jonas = new Person('Jonas'); - -console.log('Jonas' ?? null); - -console.log(cart.find(el => el.quantity >= 2)); -Promise.resolve('TEST').then(x => console.log(x)); - -import 'core-js/stable'; -// import 'core-js/stable/array/find'; -// import 'core-js/stable/promise'; - -// Polifilling async functions -import 'regenerator-runtime/runtime'; diff --git a/17-Modern-JS-Modules-Tooling/final/shoppingCart.js b/17-Modern-JS-Modules-Tooling/final/shoppingCart.js deleted file mode 100644 index ac2358f978..0000000000 --- a/17-Modern-JS-Modules-Tooling/final/shoppingCart.js +++ /dev/null @@ -1,25 +0,0 @@ -// Exporting module -console.log('Exporting module'); - -// Blocking code -// console.log('Start fetching users'); -// await fetch('https://jsonplaceholder.typicode.com/users'); -// console.log('Finish fetching users'); - -const shippingCost = 10; -export const cart = []; - -export const addToCart = function (product, quantity) { - cart.push({ product, quantity }); - console.log(`${quantity} ${product} added to cart`); -}; - -const totalPrice = 237; -const totalQuantity = 23; - -export { totalPrice, totalQuantity as tq }; - -export default function (product, quantity) { - cart.push({ product, quantity }); - console.log(`${quantity} ${product} added to cart`); -} diff --git a/17-Modern-JS-Modules-Tooling/starter/.prettierrc b/17-Modern-JS-Modules-Tooling/starter/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/17-Modern-JS-Modules-Tooling/starter/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/17-Modern-JS-Modules-Tooling/starter/clean.js b/17-Modern-JS-Modules-Tooling/starter/clean.js deleted file mode 100644 index 2cdba90c3b..0000000000 --- a/17-Modern-JS-Modules-Tooling/starter/clean.js +++ /dev/null @@ -1,64 +0,0 @@ -var budget = [ - { value: 250, description: 'Sold old TV ๐Ÿ“บ', user: 'jonas' }, - { value: -45, description: 'Groceries ๐Ÿฅ‘', user: 'jonas' }, - { value: 3500, description: 'Monthly salary ๐Ÿ‘ฉโ€๐Ÿ’ป', user: 'jonas' }, - { value: 300, description: 'Freelancing ๐Ÿ‘ฉโ€๐Ÿ’ป', user: 'jonas' }, - { value: -1100, description: 'New iPhone ๐Ÿ“ฑ', user: 'jonas' }, - { value: -20, description: 'Candy ๐Ÿญ', user: 'matilda' }, - { value: -125, description: 'Toys ๐Ÿš‚', user: 'matilda' }, - { value: -1800, description: 'New Laptop ๐Ÿ’ป', user: 'jonas' }, -]; - -var limits = { - jonas: 1500, - matilda: 100, -}; - -var add = function (value, description, user) { - if (!user) user = 'jonas'; - user = user.toLowerCase(); - - var lim; - if (limits[user]) { - lim = limits[user]; - } else { - lim = 0; - } - - if (value <= lim) { - budget.push({ value: -value, description: description, user: user }); - } -}; -add(10, 'Pizza ๐Ÿ•'); -add(100, 'Going to movies ๐Ÿฟ', 'Matilda'); -add(200, 'Stuff', 'Jay'); -console.log(budget); - -var check = function () { - for (var el of budget) { - var lim; - if (limits[el.user]) { - lim = limits[el.user]; - } else { - lim = 0; - } - - if (el.value < -lim) { - el.flag = 'limit'; - } - } -}; -check(); - -console.log(budget); - -var bigExpenses = function (limit) { - var output = ''; - for (var el of budget) { - if (el.value <= -limit) { - output += el.description.slice(-2) + ' / '; // Emojis are 2 chars - } - } - output = output.slice(0, -2); // Remove last '/ ' - console.log(output); -}; diff --git a/17-Modern-JS-Modules-Tooling/starter/index.html b/17-Modern-JS-Modules-Tooling/starter/index.html deleted file mode 100644 index d2853cb5ee..0000000000 --- a/17-Modern-JS-Modules-Tooling/starter/index.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - Modern JavaScript Development: Modules and Tooling - - - -

    Modern JavaScript Development: Modules and Tooling

    - - diff --git a/18-forkify/final/.gitignore b/18-forkify/final/.gitignore deleted file mode 100644 index 51738c4f8d..0000000000 --- a/18-forkify/final/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -dist -.parcel-cache -.DS_Store diff --git a/18-forkify/final/.prettierrc b/18-forkify/final/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/18-forkify/final/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/18-forkify/final/README.md b/18-forkify/final/README.md deleted file mode 100644 index eca172f89f..0000000000 --- a/18-forkify/final/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# forkify Project - -Recipe application with custom recipe uploads. diff --git a/18-forkify/final/index.html b/18-forkify/final/index.html deleted file mode 100644 index 184f85ad1d..0000000000 --- a/18-forkify/final/index.html +++ /dev/null @@ -1,332 +0,0 @@ - - - - - - - - - - - - - forkify // Search over 1,000,000 recipes - - - -
    -
    - - - - -
    - -
    -
      - -
    - - - - -
    - -
    -
    -
    - - - -
    -

    Start by searching for a recipe or an ingredient. Have fun!

    -
    - - - - - - -
    -
    - - - - - diff --git a/18-forkify/final/package-lock.json b/18-forkify/final/package-lock.json deleted file mode 100644 index a0594f2062..0000000000 --- a/18-forkify/final/package-lock.json +++ /dev/null @@ -1,8639 +0,0 @@ -{ - "name": "forkify", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/compat-data": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.11.0.tgz", - "integrity": "sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ==", - "dev": true, - "requires": { - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "semver": "^5.5.0" - } - }, - "@babel/core": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.5.tgz", - "integrity": "sha512-fsEANVOcZHzrsV6dMVWqpSeXClq3lNbYrfFGme6DE25FQWe7pyeYpXyx9guqUnpy466JLzZ8z4uwSr2iv60V5Q==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.5", - "@babel/helper-module-transforms": "^7.11.0", - "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.5", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.11.5", - "@babel/types": "^7.11.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.6.1" - }, - "dependencies": { - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - } - } - }, - "@babel/generator": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.5.tgz", - "integrity": "sha512-9UqHWJ4IwRTy4l0o8gq2ef8ws8UPzvtMkVKjTLAiRmza9p9V6Z+OfuNd9fB1j5Q67F+dVJtPC2sZXI8NM9br4g==", - "dev": true, - "requires": { - "@babel/types": "^7.11.5", - "jsesc": "^2.5.1", - "source-map": "^0.6.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-builder-react-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz", - "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-builder-react-jsx-experimental": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.11.5.tgz", - "integrity": "sha512-Vc4aPJnRZKWfzeCBsqTBnzulVNjABVdahSPhtdMD3Vs80ykx4a87jTHtF/VR+alSrDmNvat7l13yrRHauGcHVw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-module-imports": "^7.10.4", - "@babel/types": "^7.11.5" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz", - "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", - "dev": true, - "requires": { - "@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": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz", - "integrity": "sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==", - "dev": true, - "requires": { - "@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": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", - "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-regex": "^7.10.4", - "regexpu-core": "^4.7.0" - } - }, - "@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.11.4", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz", - "integrity": "sha512-ux9hm3zR4WV1Y3xXxXkdG/0gxF9nvI0YVmKVhvK9AfMoaQkemL3sJpXw+Xbz65azo8qJiEz2XVDUpK3KYhH3ZQ==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz", - "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-module-transforms": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", - "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", - "dev": true, - "requires": { - "@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": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", - "dev": true - }, - "@babel/helper-regex": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", - "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", - "dev": true, - "requires": { - "lodash": "^4.17.19" - } - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.11.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.11.4.tgz", - "integrity": "sha512-tR5vJ/vBa9wFy3m5LLv2faapJLnDFxNWff2SAYkSE4rLUdbp7CdObYFgI7wK4T/Mj4UzpjPwzR8Pzmr5m7MHGA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", - "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", - "dev": true, - "requires": { - "@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": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", - "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", - "dev": true, - "requires": { - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz", - "integrity": "sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", - "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helpers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", - "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", - "dev": true, - "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz", - "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==", - "dev": true - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz", - "integrity": "sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==", - "dev": true, - "requires": { - "@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": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz", - "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz", - "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz", - "integrity": "sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", - "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz", - "integrity": "sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", - "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz", - "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz", - "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==", - "dev": true, - "requires": { - "@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": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz", - "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz", - "integrity": "sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA==", - "dev": true, - "requires": { - "@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": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz", - "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz", - "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz", - "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-flow": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.10.4.tgz", - "integrity": "sha512-yxQsX1dJixF4qEEdzVbst3SZQ58Nrooz8NV9Z9GL4byTE25BvJgl5lf0RECUf0fh28rZBb/RYTWn/eeKwCMrZQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", - "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz", - "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.10.4.tgz", - "integrity": "sha512-oSAEz1YkBCAKr5Yiq8/BNtvSAPwkp/IyUnwZogd8p+F0RuYQQrLeRUzIQhueQTTBy/F+a40uS7OFKxnkRvmvFQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz", - "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz", - "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", - "dev": true, - "requires": { - "@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": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz", - "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz", - "integrity": "sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz", - "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", - "dev": true, - "requires": { - "@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": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz", - "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz", - "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz", - "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz", - "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz", - "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.10.4.tgz", - "integrity": "sha512-XTadyuqNst88UWBTdLjM+wEY7BFnY2sYtPyAidfC7M/QaZnSuIZpMvLxqGT7phAcnGyWh/XQFLKcGf04CnvxSQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-flow": "^7.10.4" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz", - "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz", - "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz", - "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz", - "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz", - "integrity": "sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==", - "dev": true, - "requires": { - "@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": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz", - "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==", - "dev": true, - "requires": { - "@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": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz", - "integrity": "sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==", - "dev": true, - "requires": { - "@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": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz", - "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", - "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz", - "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz", - "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz", - "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz", - "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.4.tgz", - "integrity": "sha512-Zd4X54Mu9SBfPGnEcaGcOrVAYOtjT2on8QZkLKEq1S/tHexG39d9XXGZv19VfRrDjPJzFmPfTAqOQS1pfFOujw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.4.tgz", - "integrity": "sha512-L+MfRhWjX0eI7Js093MM6MacKU4M6dnCRa/QPDwYMxjljzSCzzlzKzj9Pk4P3OtrPcxr2N3znR419nr3Xw+65A==", - "dev": true, - "requires": { - "@babel/helper-builder-react-jsx": "^7.10.4", - "@babel/helper-builder-react-jsx-experimental": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.10.4" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.11.5.tgz", - "integrity": "sha512-cImAmIlKJ84sDmpQzm4/0q/2xrXlDezQoixy3qoz1NJeZL/8PRon6xZtluvr4H4FzwlDGI5tCcFupMnXGtr+qw==", - "dev": true, - "requires": { - "@babel/helper-builder-react-jsx-experimental": "^7.11.5", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.10.4" - } - }, - "@babel/plugin-transform-react-jsx-self": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.4.tgz", - "integrity": "sha512-yOvxY2pDiVJi0axdTWHSMi5T0DILN+H+SaeJeACHKjQLezEzhLx9nEF9xgpBLPtkZsks9cnb5P9iBEi21En3gg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.10.4" - } - }, - "@babel/plugin-transform-react-jsx-source": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.5.tgz", - "integrity": "sha512-wTeqHVkN1lfPLubRiZH3o73f4rfon42HpgxUSs86Nc+8QIcm/B9s8NNVXu/gwGcOyd7yDib9ikxoDLxJP0UiDA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.10.4" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.10.4.tgz", - "integrity": "sha512-+njZkqcOuS8RaPakrnR9KvxjoG1ASJWpoIv/doyWngId88JoFlPlISenGXjrVacZUIALGUr6eodRs1vmPnF23A==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz", - "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", - "dev": true, - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz", - "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz", - "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz", - "integrity": "sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz", - "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-regex": "^7.10.4" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz", - "integrity": "sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz", - "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.11.0.tgz", - "integrity": "sha512-edJsNzTtvb3MaXQwj8403B7mZoGu9ElDJQZOKjGUnvilquxBA3IQoEIOvkX/1O8xfAsnHS/oQhe2w/IXrr+w0w==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.5", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-typescript": "^7.10.4" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz", - "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz", - "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/preset-env": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.5.tgz", - "integrity": "sha512-kXqmW1jVcnB2cdueV+fyBM8estd5mlNfaQi6lwLgRwCby4edpavgbFhiBNjmWA3JpB/yZGSISa7Srf+TwxDQoA==", - "dev": true, - "requires": { - "@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.5", - "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": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", - "dev": true, - "requires": { - "@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/preset-react": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.10.4.tgz", - "integrity": "sha512-BrHp4TgOIy4M19JAfO1LhycVXOPWdDbTRep7eVyatf174Hff+6Uk53sDyajqZPu8W1qXRBiYOfIamek6jA7YVw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-transform-react-display-name": "^7.10.4", - "@babel/plugin-transform-react-jsx": "^7.10.4", - "@babel/plugin-transform-react-jsx-development": "^7.10.4", - "@babel/plugin-transform-react-jsx-self": "^7.10.4", - "@babel/plugin-transform-react-jsx-source": "^7.10.4", - "@babel/plugin-transform-react-pure-annotations": "^7.10.4" - } - }, - "@babel/runtime": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", - "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.5.tgz", - "integrity": "sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.11.5", - "@babel/types": "^7.11.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", - "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "@iarna/toml": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", - "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", - "dev": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.3", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.3", - "fastq": "^1.6.0" - } - }, - "@parcel/babel-ast-utils": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/babel-ast-utils/-/babel-ast-utils-2.0.0-beta.1.tgz", - "integrity": "sha512-0Jod0KZ2gCghymjP7ThI/2DfZQt9S2yq1wTvBwyJ46Ij3lIZVmXBVWs4x8O0uvKMUjS5zrnSFgurimFORLmDbQ==", - "dev": true, - "requires": { - "@babel/generator": "^7.0.0", - "@babel/parser": "^7.0.0", - "@parcel/source-map": "2.0.0-alpha.4.13", - "@parcel/utils": "2.0.0-beta.1" - } - }, - "@parcel/babel-preset-env": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/babel-preset-env/-/babel-preset-env-2.0.0-beta.1.tgz", - "integrity": "sha512-/TK/xE9Rfy6weu0eWifnGCntCt4i7DoFCKgigdSsHbuRA4w7BfnwS0GIOAQ6gORRXIf4lM8cGsnp5jRP2PhwLw==", - "dev": true, - "requires": { - "@babel/preset-env": "^7.4.0", - "semver": "^5.4.1" - } - }, - "@parcel/babylon-walk": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/babylon-walk/-/babylon-walk-2.0.0-beta.1.tgz", - "integrity": "sha512-FWZErHc2Q62lrWxfMoRl1mej8HCr3tXvzeVgMfv2cbiOjaZIrN+8khD0AcRyesnm5JipgT8KQoJvl8ZdU9DFAw==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0", - "lodash.clone": "^4.5.0" - } - }, - "@parcel/bundler-default": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.0.0-beta.1.tgz", - "integrity": "sha512-ksRBQcZ4OQwZ+pWl28V/G5z6JR/fZUSdXSJwyVJKCUQhKLp0qVZ0emYnZFLg+24ITemRosPH9tNMyQwzNWugsw==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1", - "@parcel/utils": "2.0.0-beta.1", - "nullthrows": "^1.1.1" - } - }, - "@parcel/cache": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.0.0-beta.1.tgz", - "integrity": "sha512-o8GMPcrVH31uctXQGGX6O28T7Bm4dqM0DbJRCDtxixGQosKyN9OlAA84390XOti2Fjr1Av/U1ALmbdavQsdcYA==", - "dev": true, - "requires": { - "@parcel/logger": "2.0.0-beta.1", - "@parcel/utils": "2.0.0-beta.1" - } - }, - "@parcel/codeframe": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.0.0-beta.1.tgz", - "integrity": "sha512-HyFjYSPysYumT/T3JdZN8y0DXhXLMpmlg94rADR+Wf5Wp1YMTuIHlE1gkfbjIj1m2PxJWe4UMbniGwy3KQh9zQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "emphasize": "^2.1.0", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0" - } - }, - "@parcel/config-default": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.0.0-beta.1.tgz", - "integrity": "sha512-VEJYkiF+RNaB28OPmk1sCsOapWPisu5MXV+8N7T5ERa7xOOaD2SbD5/JnOjuUGAYKALk8UBsTCG+3ukMQ7Fiuw==", - "dev": true, - "requires": { - "@parcel/bundler-default": "2.0.0-beta.1", - "@parcel/namer-default": "2.0.0-beta.1", - "@parcel/optimizer-cssnano": "2.0.0-beta.1", - "@parcel/optimizer-data-url": "2.0.0-beta.1", - "@parcel/optimizer-htmlnano": "2.0.0-beta.1", - "@parcel/optimizer-terser": "2.0.0-beta.1", - "@parcel/packager-css": "2.0.0-beta.1", - "@parcel/packager-html": "2.0.0-beta.1", - "@parcel/packager-js": "2.0.0-beta.1", - "@parcel/packager-raw": "2.0.0-beta.1", - "@parcel/packager-raw-url": "2.0.0-beta.1", - "@parcel/packager-ts": "2.0.0-beta.1", - "@parcel/reporter-bundle-analyzer": "2.0.0-beta.1", - "@parcel/reporter-bundle-buddy": "2.0.0-beta.1", - "@parcel/reporter-cli": "2.0.0-beta.1", - "@parcel/reporter-dev-server": "2.0.0-beta.1", - "@parcel/resolver-default": "2.0.0-beta.1", - "@parcel/runtime-browser-hmr": "2.0.0-beta.1", - "@parcel/runtime-js": "2.0.0-beta.1", - "@parcel/runtime-react-refresh": "2.0.0-beta.1", - "@parcel/transformer-babel": "2.0.0-beta.1", - "@parcel/transformer-coffeescript": "2.0.0-beta.1", - "@parcel/transformer-css": "2.0.0-beta.1", - "@parcel/transformer-graphql": "2.0.0-beta.1", - "@parcel/transformer-html": "2.0.0-beta.1", - "@parcel/transformer-inline-string": "2.0.0-beta.1", - "@parcel/transformer-js": "2.0.0-beta.1", - "@parcel/transformer-json": "2.0.0-beta.1", - "@parcel/transformer-jsonld": "2.0.0-beta.1", - "@parcel/transformer-less": "2.0.0-beta.1", - "@parcel/transformer-mdx": "2.0.0-beta.1", - "@parcel/transformer-postcss": "2.0.0-beta.1", - "@parcel/transformer-posthtml": "2.0.0-beta.1", - "@parcel/transformer-pug": "2.0.0-beta.1", - "@parcel/transformer-raw": "2.0.0-beta.1", - "@parcel/transformer-react-refresh-babel": "2.0.0-beta.1", - "@parcel/transformer-react-refresh-wrap": "2.0.0-beta.1", - "@parcel/transformer-sass": "2.0.0-beta.1", - "@parcel/transformer-stylus": "2.0.0-beta.1", - "@parcel/transformer-sugarss": "2.0.0-beta.1", - "@parcel/transformer-toml": "2.0.0-beta.1", - "@parcel/transformer-typescript-types": "2.0.0-beta.1", - "@parcel/transformer-yaml": "2.0.0-beta.1" - } - }, - "@parcel/core": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.0.0-beta.1.tgz", - "integrity": "sha512-1KKjhL2H7z8qJNgY2M3CreYqbKopJT6ImlJk54ynIrLuJsnqKuA80FHYBiAtnSZEA65mvAJ3YLReFhg9slzbFw==", - "dev": true, - "requires": { - "@parcel/cache": "2.0.0-beta.1", - "@parcel/diagnostic": "2.0.0-beta.1", - "@parcel/events": "2.0.0-beta.1", - "@parcel/fs": "2.0.0-beta.1", - "@parcel/logger": "2.0.0-beta.1", - "@parcel/package-manager": "2.0.0-beta.1", - "@parcel/plugin": "2.0.0-beta.1", - "@parcel/source-map": "2.0.0-alpha.4.13", - "@parcel/types": "2.0.0-beta.1", - "@parcel/utils": "2.0.0-beta.1", - "@parcel/workers": "2.0.0-beta.1", - "abortcontroller-polyfill": "^1.1.9", - "browserslist": "^4.6.6", - "clone": "^2.1.1", - "dotenv": "^7.0.0", - "dotenv-expand": "^5.1.0", - "json-source-map": "^0.6.1", - "json5": "^1.0.1", - "micromatch": "^4.0.2", - "nullthrows": "^1.1.1", - "semver": "^5.4.1" - } - }, - "@parcel/diagnostic": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.0.0-beta.1.tgz", - "integrity": "sha512-LNfe2MgbKiqXnEws1QT9tANeg6iw+u6hNnuO2ZjRdnAIF/LqslD/6RKryE1yD1lh71ezACwLscji0CLuys6mbg==", - "dev": true, - "requires": { - "json-source-map": "^0.6.1", - "nullthrows": "^1.1.1" - } - }, - "@parcel/events": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.0.0-beta.1.tgz", - "integrity": "sha512-m//K2aHYnr4tSONlUmS0HhNQtmhYjCUJ+dv85mfLEqLlQVmsLBwxlcqBS5M1ONlaGPlI87xUKY8uBTg8kY1q4g==", - "dev": true - }, - "@parcel/fs": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.0.0-beta.1.tgz", - "integrity": "sha512-THLgnN+eaxfa4s0T3KIuOB1N4Lg5lwlz2Y1Y69vWujZh3B3PHbNDlJ4n0O0m+vgYZoJZ43X+qxId0yeHUh6p0w==", - "dev": true, - "requires": { - "@parcel/fs-write-stream-atomic": "2.0.0-beta.1", - "@parcel/utils": "2.0.0-beta.1", - "@parcel/watcher": "^2.0.0-alpha.5", - "@parcel/workers": "2.0.0-beta.1", - "mkdirp": "^0.5.1", - "ncp": "^2.0.0", - "nullthrows": "^1.1.1", - "rimraf": "^2.6.2" - } - }, - "@parcel/fs-write-stream-atomic": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/fs-write-stream-atomic/-/fs-write-stream-atomic-2.0.0-beta.1.tgz", - "integrity": "sha512-ZL3da/3jhMvu6ZwZBmxEiGXOLq+qvVvvx6DVv+4JQV0EMAFp7gvD4CH0QKLCgKBbjd1wqEBPyW3CCEo5tGtAHA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^1.0.2", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "@parcel/logger": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.0.0-beta.1.tgz", - "integrity": "sha512-PMhAs1vCPSDKt977w0cMNCEHjBTy94Khc1Pr07/YXwiijxzDBxPS9JmV8dBbryTheRy/EyUhJDXES3brQwiiqw==", - "dev": true, - "requires": { - "@parcel/diagnostic": "2.0.0-beta.1", - "@parcel/events": "2.0.0-beta.1" - } - }, - "@parcel/markdown-ansi": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.0.0-beta.1.tgz", - "integrity": "sha512-J1r4m7LczK+X26p/tjA+9VP0g4vzYNUlUyFvIHt7dcdSVEjLM2ICUQZSIzlRHXlVQ+ciMxOFUYtDBCzAzXiLfQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2" - } - }, - "@parcel/namer-default": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.0.0-beta.1.tgz", - "integrity": "sha512-b3In/s++ykB/EL2CLAFWEx0/GUaQ0TMXAfpLfd9wCmqsJq1MQxW437aujF5bIDNHjEE7+rnGk4XP+IO9uViWpQ==", - "dev": true, - "requires": { - "@parcel/diagnostic": "2.0.0-beta.1", - "@parcel/plugin": "2.0.0-beta.1", - "nullthrows": "^1.1.1" - } - }, - "@parcel/node-libs-browser": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/node-libs-browser/-/node-libs-browser-2.0.0-beta.1.tgz", - "integrity": "sha512-U9pS9KwhTluA9atSzU4X5173BXRER7BRqPSSAEBrfAbCeIfzAG1d1+bhyMZs3SBSt6afWU5HBy//wB8OWBqcKw==", - "dev": true, - "requires": { - "assert": "^2.0.0", - "browserify-zlib": "^0.2.0", - "buffer": "^5.5.0", - "console-browserify": "^1.2.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.12.0", - "domain-browser": "^3.5.0", - "events": "^3.1.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "^1.0.0", - "process": "^0.11.10", - "punycode": "^1.4.1", - "querystring-es3": "^0.2.1", - "readable-stream": "^3.6.0", - "stream-http": "^3.1.0", - "string_decoder": "^1.3.0", - "timers-browserify": "^2.0.11", - "tty-browserify": "^0.0.1", - "url": "^0.11.0", - "util": "^0.12.3", - "vm-browserify": "^1.1.2" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, - "@parcel/node-resolver-core": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-2.0.0-beta.1.tgz", - "integrity": "sha512-A2Eu+TEnh90Q+iisNfKmaHTPbIR/eshRUqze8PFvSTKv+n9ejNOJ0GCb+x/PFqeqavJRXUBFc60F2pAp88+Bjw==", - "dev": true, - "requires": { - "@parcel/diagnostic": "2.0.0-beta.1", - "@parcel/node-libs-browser": "2.0.0-beta.1", - "@parcel/utils": "2.0.0-beta.1", - "micromatch": "^3.0.4", - "nullthrows": "^1.1.1" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "@parcel/optimizer-cssnano": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-cssnano/-/optimizer-cssnano-2.0.0-beta.1.tgz", - "integrity": "sha512-f7Yz7kWAVvhRmT/QXNFrlR//pE7D1+G4iWYKstUFWJP0SsoquQBUsb3NI6vltUvydN6htcCRHGX9GhAnHRpaFw==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1", - "@parcel/source-map": "2.0.0-alpha.4.13", - "cssnano": "^4.1.10", - "postcss": "^7.0.5" - } - }, - "@parcel/optimizer-data-url": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-data-url/-/optimizer-data-url-2.0.0-beta.1.tgz", - "integrity": "sha512-H+oMRbBsYXm0GEpzwkaNO3VMxmt50yIg9IE3dyAkXDIZ4kOpaDxYJkGuuR51L5BzQSbEeXwipzoqd2LoLJ8O6w==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1", - "@parcel/utils": "2.0.0-beta.1", - "isbinaryfile": "^4.0.2", - "mime": "^2.4.4" - } - }, - "@parcel/optimizer-htmlnano": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.0.0-beta.1.tgz", - "integrity": "sha512-Mz8gkvOd6pyazQFmOjGugz6Q8ydxqjeA6PyrE21/cTj8CtmLCs4TCfEzLcU79qHyr8a+KVx4roTCUwTGv+J/7Q==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1", - "@parcel/utils": "2.0.0-beta.1", - "htmlnano": "^0.2.2", - "nullthrows": "^1.1.1", - "posthtml": "^0.11.3" - } - }, - "@parcel/optimizer-terser": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-terser/-/optimizer-terser-2.0.0-beta.1.tgz", - "integrity": "sha512-S6uu4Q4L8NV+TQes35dQmHqcA6NaRmQSI0vl75IGSaTJnvnq/M3fvrTUd6Xp4dOt/eLh4UJEH7F01TbO1KFZwg==", - "dev": true, - "requires": { - "@parcel/diagnostic": "2.0.0-beta.1", - "@parcel/plugin": "2.0.0-beta.1", - "@parcel/source-map": "2.0.0-alpha.4.13", - "@parcel/utils": "2.0.0-beta.1", - "nullthrows": "^1.1.1", - "terser": "^4.3.0" - }, - "dependencies": { - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - } - } - }, - "@parcel/package-manager": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.0.0-beta.1.tgz", - "integrity": "sha512-3i7YXkR0TjJ7RcDpLV5ki5PLsBcdux9BILctC3LLQbNrW5kZjwztEOCnaHJbcQ3VaHaLu6znU8y24EPoyBOPMA==", - "dev": true, - "requires": { - "@parcel/diagnostic": "2.0.0-beta.1", - "@parcel/fs": "2.0.0-beta.1", - "@parcel/logger": "2.0.0-beta.1", - "@parcel/utils": "2.0.0-beta.1", - "@parcel/workers": "2.0.0-beta.1", - "command-exists": "^1.2.6", - "cross-spawn": "^6.0.4", - "nullthrows": "^1.1.1", - "resolve": "^1.12.0", - "semver": "^5.4.1", - "split2": "^3.1.1" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "@parcel/packager-css": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.0.0-beta.1.tgz", - "integrity": "sha512-oi69yNnSZTuQ8y8GuHOFgZ9qQ5oBktNuOEhOoHd7Y15Srior/SwPjx0/UypBweEiKRGApipJtrgo0XQvr5x9aQ==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1", - "@parcel/source-map": "2.0.0-alpha.4.13", - "@parcel/utils": "2.0.0-beta.1" - } - }, - "@parcel/packager-html": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.0.0-beta.1.tgz", - "integrity": "sha512-ixuLWNpFGNYCKHbrhx2mY/aal1ORJyjaOozCLx2jL5888JeCw34jCWZcXSej+hc50KICr/RVd/WrA5v6YvkBMA==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1", - "@parcel/types": "2.0.0-beta.1", - "@parcel/utils": "2.0.0-beta.1", - "nullthrows": "^1.1.1", - "posthtml": "^0.11.3" - } - }, - "@parcel/packager-js": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.0.0-beta.1.tgz", - "integrity": "sha512-4sWVYv/uPDokftaMquZa1f70wE5O85bcRklcs0kUGPjWNf3uaCG/tS6h9USD2GDbcdjY1xDNoClu6EUTM1AvhA==", - "dev": true, - "requires": { - "@babel/traverse": "^7.2.3", - "@parcel/plugin": "2.0.0-beta.1", - "@parcel/scope-hoisting": "2.0.0-beta.1", - "@parcel/source-map": "2.0.0-alpha.4.13", - "@parcel/utils": "2.0.0-beta.1", - "nullthrows": "^1.1.1" - } - }, - "@parcel/packager-raw": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.0.0-beta.1.tgz", - "integrity": "sha512-Os8m1DuPfGqjcR4avbZbJ79Rz2bvGsHx49BJ8HtJj0YnpZbnox7z5njn4PlpWhr2XAJmNnctrQ8ES0Qvrop/AQ==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1" - } - }, - "@parcel/packager-raw-url": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/packager-raw-url/-/packager-raw-url-2.0.0-beta.1.tgz", - "integrity": "sha512-elXRSp0ig1Q4y2xMpp3AGPVPFHOB0dW/qT3FbXJwBQhUtjOJrfOtQUlT59l0xP57pADS2aihgnQx0Vl13lL7FQ==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1", - "@parcel/utils": "2.0.0-beta.1" - } - }, - "@parcel/packager-ts": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/packager-ts/-/packager-ts-2.0.0-beta.1.tgz", - "integrity": "sha512-x/sOSvIVV6z7ltG1XFuJ/Da72HAHkRxNLCzE2ggEnuB9kzOWXAlIHKeeGB2Ql3lV2OOMtoQoFg4BM1nBLJzFCg==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1" - } - }, - "@parcel/plugin": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.0.0-beta.1.tgz", - "integrity": "sha512-ik8kwNTJ7wfPRWHQK5NrUat3WGOZazIv8v1Lbgew6XuVTc333FitvBn6mxpPWp2N3+GWWrVGmBG8m7MI6kB8zw==", - "dev": true, - "requires": { - "@parcel/types": "2.0.0-beta.1" - } - }, - "@parcel/reporter-bundle-analyzer": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/reporter-bundle-analyzer/-/reporter-bundle-analyzer-2.0.0-beta.1.tgz", - "integrity": "sha512-igUEsMSgyIiAEvmjdIydcmYpTFUKQB5EAtbMEYvRWlCSEGR08EZqaY58SIiTaTUv4maQuAi0k7E3QQSDeBtQ/w==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1", - "@parcel/utils": "2.0.0-beta.1", - "nullthrows": "^1.1.1" - } - }, - "@parcel/reporter-bundle-buddy": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/reporter-bundle-buddy/-/reporter-bundle-buddy-2.0.0-beta.1.tgz", - "integrity": "sha512-pW7SJFKGkkjOOYYcE20BgleC1DRswM04fZ82S9NS0idnEsJ1Z+z/QCww24J1Vfx5FGEQDVOl4siHNILm04kvdg==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1" - } - }, - "@parcel/reporter-cli": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.0.0-beta.1.tgz", - "integrity": "sha512-KmyfFhClXghMxZXbS8tkoXZZqVfuLzlUDwedMAN+Jr9h8vSZYaiqjq88mNdrLIubqLepbNG7jUcXPu/Y3ynz6Q==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1", - "@parcel/types": "2.0.0-beta.1", - "@parcel/utils": "2.0.0-beta.1", - "chalk": "^3.0.0", - "filesize": "^3.6.0", - "nullthrows": "^1.1.1", - "ora": "^4.0.3", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "term-size": "^2.1.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@parcel/reporter-dev-server": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.0.0-beta.1.tgz", - "integrity": "sha512-84u4lfwAqGrIrbuyTYq88PckSe1mKP+f+D5aQDObWBqDy1gSokM+yKnQQHoddQAhviyTY3tJU/SEvKSp0Dog9Q==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1", - "@parcel/utils": "2.0.0-beta.1", - "connect": "^3.7.0", - "ejs": "^2.6.1", - "http-proxy-middleware": "^0.19.1", - "mime": "^2.4.4", - "nullthrows": "^1.1.1", - "ws": "^6.2.0" - } - }, - "@parcel/resolver-default": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.0.0-beta.1.tgz", - "integrity": "sha512-BnnHY83oqOIk3oK7QsJbB2QdtSIWVy948JI7bhfFC0+8zWMLifE28KTZQD1JGxICOre75DK1JRN26l8F1gtuiw==", - "dev": true, - "requires": { - "@parcel/node-resolver-core": "2.0.0-beta.1", - "@parcel/plugin": "2.0.0-beta.1" - } - }, - "@parcel/runtime-browser-hmr": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.0.0-beta.1.tgz", - "integrity": "sha512-5JQGDLwqAGk0kNqlgKPA99mPN8srpabu/2drpxSBKWXDA71v47JRYcGx8gQsvdZGgj3+rrkI2nyC8UlYAM+m+w==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1", - "@parcel/utils": "2.0.0-beta.1" - } - }, - "@parcel/runtime-js": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.0.0-beta.1.tgz", - "integrity": "sha512-1EHrOoNzCdksj4QfLuIr5rC8rO8FsVpQdl4ZLggMsxQV67wFiG9j1KwM/+Jmpd6dsmdkSW+b/NAC5kPXnE1EfQ==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1", - "@parcel/utils": "2.0.0-beta.1", - "nullthrows": "^1.1.1" - } - }, - "@parcel/runtime-react-refresh": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.0.0-beta.1.tgz", - "integrity": "sha512-d7lShNcgyKAdrDwAqNzVeOeQ7MuqtElw4YPxHAmTrJnsr8k+scPmK7IiUSPqItuvLIngpS1IoLY1SuEAQAY/QA==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1", - "react-refresh": "^0.6.0" - } - }, - "@parcel/scope-hoisting": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/scope-hoisting/-/scope-hoisting-2.0.0-beta.1.tgz", - "integrity": "sha512-U0ZcejwG6vMj+cLHScQ7lhPWaaXgNk+xGPu6adWNQVbRB3PqJMv6jIhBwgR2afWzNwu1a3vg1aRO9DH/jpxGdg==", - "dev": true, - "requires": { - "@babel/generator": "^7.3.3", - "@babel/parser": "^7.0.0", - "@babel/template": "^7.2.2", - "@babel/traverse": "^7.2.3", - "@babel/types": "^7.3.3", - "@parcel/babylon-walk": "2.0.0-beta.1", - "@parcel/diagnostic": "2.0.0-beta.1", - "@parcel/source-map": "2.0.0-alpha.4.13", - "@parcel/utils": "2.0.0-beta.1", - "nullthrows": "^1.1.1" - } - }, - "@parcel/source-map": { - "version": "2.0.0-alpha.4.13", - "resolved": "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.0.0-alpha.4.13.tgz", - "integrity": "sha512-MnIfYmaRqnwK8kRRG9Osu1DkJGl2bVSfJs9SqauJ9N4dOdAXAFGeeDtzXnHvx02DO+HwK7YjsbhBpSvvgZcWHg==", - "dev": true, - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.2" - } - }, - "@parcel/transformer-babel": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.0.0-beta.1.tgz", - "integrity": "sha512-nP8TsjhYYvL5NjRX6WNZFXjcY66fwrPthslnycNldoHpmRDoRO1PFjqx1zzJJEUc1S0r6M2kTQhDuh4dXhANCA==", - "dev": true, - "requires": { - "@babel/core": "^7.0.0", - "@babel/generator": "^7.0.0", - "@babel/helper-compilation-targets": "^7.8.4", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.4.5", - "@babel/preset-env": "^7.0.0", - "@babel/preset-react": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@parcel/babel-ast-utils": "2.0.0-beta.1", - "@parcel/babel-preset-env": "2.0.0-beta.1", - "@parcel/plugin": "2.0.0-beta.1", - "@parcel/utils": "2.0.0-beta.1", - "browserslist": "^4.6.6", - "core-js": "^3.2.1", - "nullthrows": "^1.1.1", - "semver": "^5.7.0" - } - }, - "@parcel/transformer-coffeescript": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-coffeescript/-/transformer-coffeescript-2.0.0-beta.1.tgz", - "integrity": "sha512-EP0+RAGrMIGoIG3g3VdjAIkMCfFj8gnVp8e8n61nzrnqE7pmF8KuGtGAYz6U8yQb39a1OF41sEg1huvOUT3nKw==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1", - "@parcel/source-map": "2.0.0-alpha.4.13", - "@parcel/utils": "2.0.0-beta.1", - "coffeescript": "^2.0.3", - "nullthrows": "^1.1.1", - "semver": "^5.4.1" - } - }, - "@parcel/transformer-css": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.0.0-beta.1.tgz", - "integrity": "sha512-+vRvTWeQNxzRfsv9A9gGXYt6p6NU6LcyLvByIMzwDhqsMq1wsIEmw+YPM/2TzqsKI/f+B0jkTNCMI2dQobFX0g==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1", - "@parcel/source-map": "2.0.0-alpha.4.13", - "@parcel/utils": "2.0.0-beta.1", - "postcss": "^7.0.5", - "postcss-value-parser": "^3.3.1", - "semver": "^5.4.1" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "@parcel/transformer-graphql": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-graphql/-/transformer-graphql-2.0.0-beta.1.tgz", - "integrity": "sha512-IYuSUHadoEn5plZx78fZr8ViGdU2GqbY0opkGP21i1Z0TiB4h0ON9VMbEgnABAGeR1b+9rly/8e9/isOC7jcow==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1" - } - }, - "@parcel/transformer-html": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.0.0-beta.1.tgz", - "integrity": "sha512-YkwNLKsMrNzyA4u1I8OvTxhYAfkAayP+rDGxcIuTOmv4IVZGoRCWMtYqUl40xdIVE0QmJpbkAuQtG7Vn3xOlHw==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1", - "@parcel/utils": "2.0.0-beta.1", - "nullthrows": "^1.1.1", - "posthtml": "^0.11.3", - "posthtml-parser": "^0.4.1", - "posthtml-render": "^1.1.5", - "semver": "^5.4.1" - }, - "dependencies": { - "posthtml-parser": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.4.2.tgz", - "integrity": "sha512-BUIorsYJTvS9UhXxPTzupIztOMVNPa/HtAm9KHni9z6qEfiJ1bpOBL5DfUOL9XAc3XkLIEzBzpph+Zbm4AdRAg==", - "dev": true, - "requires": { - "htmlparser2": "^3.9.2" - } - } - } - }, - "@parcel/transformer-inline-string": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-inline-string/-/transformer-inline-string-2.0.0-beta.1.tgz", - "integrity": "sha512-XfhPAXWvrWQSOwHGQU3koP6vs85mcjyKllVGcC24/Io2nZhzACw6br0fzZL2gSVZeEt+/TtfxVu7uA44S8tA8g==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1" - } - }, - "@parcel/transformer-js": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.0.0-beta.1.tgz", - "integrity": "sha512-60rrUF+ApahxKc1eQizyo7umvOhIRe3sxRIYub61qRPan2S7aU7PbScZ4bboh3alQYLztTNQh2VazM85oyiQSw==", - "dev": true, - "requires": { - "@babel/core": "^7.0.0", - "@babel/generator": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "@parcel/babel-ast-utils": "2.0.0-beta.1", - "@parcel/babylon-walk": "2.0.0-beta.1", - "@parcel/diagnostic": "2.0.0-beta.1", - "@parcel/plugin": "2.0.0-beta.1", - "@parcel/scope-hoisting": "2.0.0-beta.1", - "@parcel/utils": "2.0.0-beta.1", - "nullthrows": "^1.1.1", - "semver": "^5.4.1" - } - }, - "@parcel/transformer-json": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.0.0-beta.1.tgz", - "integrity": "sha512-v39TaEWgJnoOqOQGtZgZBAq3dihufqeSm9+szIxzm4FiwzOzzlyo9QiLSlCfjDbuWHFvQkU5AJKSlhdS2qbN3Q==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1", - "json5": "^2.1.0" - }, - "dependencies": { - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - } - } - }, - "@parcel/transformer-jsonld": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-jsonld/-/transformer-jsonld-2.0.0-beta.1.tgz", - "integrity": "sha512-rf1n90XjrYDCD4jZ3+z+acQm4hznOe2l2Os3aVLCs1jvf6TAXMOtkHN1ABh63GAON5LJsary3YdFNrullDRTFw==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1", - "@parcel/types": "2.0.0-beta.1", - "json5": "^2.1.2" - }, - "dependencies": { - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - } - } - }, - "@parcel/transformer-less": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-less/-/transformer-less-2.0.0-beta.1.tgz", - "integrity": "sha512-jKi29fKEJW4R1e0Rwo2nTfEeIA11vdMs3tHOhkq1O3lfkmK9UF98uFlweLyfF8Mm7XznEqKL7aP58drJ8UqVuQ==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1", - "@parcel/source-map": "2.0.0-alpha.4.13" - } - }, - "@parcel/transformer-mdx": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-mdx/-/transformer-mdx-2.0.0-beta.1.tgz", - "integrity": "sha512-M4Jjws7n5at/AVMiITz6KIMZMzlF7WHuhfQ+YzAqXS2Z+f0mJ/c2/XNOSVrKbcjn+9aKoSYqwq6vmJ6wUSaBXQ==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1" - } - }, - "@parcel/transformer-postcss": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.0.0-beta.1.tgz", - "integrity": "sha512-RLJcK5rsNv7wzehZfqR9w4lBXF+OKeza57HJ7KGph6bBtwTsLedlioQakU7uXFWprbZE6NUa2ZDIxUhWmP9kQA==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1", - "@parcel/utils": "2.0.0-beta.1", - "css-modules-loader-core": "^1.1.0", - "nullthrows": "^1.1.1", - "postcss": "^7.0.5", - "postcss-value-parser": "^3.3.1", - "semver": "^5.4.1" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "@parcel/transformer-posthtml": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.0.0-beta.1.tgz", - "integrity": "sha512-dUbB3dB57qtjqmf00VeZIQRNnbEVOLCGchTIQXOoa1Ys0YqcEHNOAP7yU/njykQtxIBNp41CRXkvLl+4M6egyQ==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1", - "nullthrows": "^1.1.1", - "posthtml": "^0.11.3", - "posthtml-parser": "^0.4.1", - "posthtml-render": "^1.1.5", - "semver": "^5.4.1" - }, - "dependencies": { - "posthtml-parser": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.4.2.tgz", - "integrity": "sha512-BUIorsYJTvS9UhXxPTzupIztOMVNPa/HtAm9KHni9z6qEfiJ1bpOBL5DfUOL9XAc3XkLIEzBzpph+Zbm4AdRAg==", - "dev": true, - "requires": { - "htmlparser2": "^3.9.2" - } - } - } - }, - "@parcel/transformer-pug": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-pug/-/transformer-pug-2.0.0-beta.1.tgz", - "integrity": "sha512-o6jXARg1HuEetLdKRn6EuJ5YGFbql3mAtK+D/Tj5/DDg1RIlBK4Cih3Gi/lyCjHF7a7Woc0mKP09cA95va5ZUA==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1" - } - }, - "@parcel/transformer-raw": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.0.0-beta.1.tgz", - "integrity": "sha512-SLqd5KBH7k8Gh25MMUTdR6tdWWWTVKuQNF76uOzysIpdbQX/ix7v12wmyeSOxivrc1eDUtILkLUH0e9HIxWVvw==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1" - } - }, - "@parcel/transformer-react-refresh-babel": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-babel/-/transformer-react-refresh-babel-2.0.0-beta.1.tgz", - "integrity": "sha512-DlsjjujHGgmSEsazN9Ng/0Q7dMSATB7kxAe7CADE+Y8cf8kBmSeeuFokbnxTGg3TBeGMjeeHcOhXwXwNeHkEQQ==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1", - "react-refresh": "^0.6.0" - } - }, - "@parcel/transformer-react-refresh-wrap": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.0.0-beta.1.tgz", - "integrity": "sha512-PJiCdXGQgd3Z2zVs1KLie9sU5kagtMMWNVHomJ9QeG4tnvoG/J4P4klJRLO218GqBnB/s4u8vNH0QbGuQO98HQ==", - "dev": true, - "requires": { - "@babel/generator": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/template": "^7.0.0", - "@babel/types": "^7.0.0", - "@parcel/babel-ast-utils": "2.0.0-beta.1", - "@parcel/plugin": "2.0.0-beta.1", - "@parcel/utils": "2.0.0-beta.1", - "react-refresh": "^0.6.0", - "semver": "^5.4.1" - } - }, - "@parcel/transformer-sass": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-sass/-/transformer-sass-2.0.0-beta.1.tgz", - "integrity": "sha512-E5sPsmtmvqsB90YEbDD7VFQ5o6+t97YQD35aIZnsZHkuI9MhFEaVHROtzeq3n3nuZ6tjyr6rv2SseZj1yculzg==", - "dev": true, - "requires": { - "@parcel/fs": "2.0.0-beta.1", - "@parcel/plugin": "2.0.0-beta.1", - "@parcel/source-map": "2.0.0-alpha.4.13", - "@parcel/utils": "2.0.0-beta.1" - } - }, - "@parcel/transformer-stylus": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-stylus/-/transformer-stylus-2.0.0-beta.1.tgz", - "integrity": "sha512-mTh4f59XVxM7vHRP183Cp+0bVOZ0/eyOWQrFBKBt27ZbJvLy2ynxFed/goYpjz8QT+ZJsjmPYViKLxrSdHaQTQ==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1", - "@parcel/utils": "2.0.0-beta.1" - } - }, - "@parcel/transformer-sugarss": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-sugarss/-/transformer-sugarss-2.0.0-beta.1.tgz", - "integrity": "sha512-73B7XDAZg0qymhlOEYhI4o8vdUbrm0ZUl/mqzXn13WsgstTtkwJPS8bX/QbyEnFq4xg/ktyezhmhNYLd+GAzjA==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1", - "postcss": "^7.0.5" - } - }, - "@parcel/transformer-toml": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-toml/-/transformer-toml-2.0.0-beta.1.tgz", - "integrity": "sha512-EHVS83evOcLJB2wvxQkZCWNjOAYaKg9qfnkbtvEztzx228KcQWg4IPiJgB6+dcBC5fuMBYIw0xZ24y3/3ZkPfg==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1" - } - }, - "@parcel/transformer-typescript-types": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-typescript-types/-/transformer-typescript-types-2.0.0-beta.1.tgz", - "integrity": "sha512-QVCe66C14zAsss71wso32OHo74aquVDyYfqO0a/+E62bTA2O8tLaeJ9dwMHgVRgw0tBobh/j6AKaOTeQFLqobA==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1", - "@parcel/source-map": "2.0.0-alpha.4.13", - "@parcel/ts-utils": "2.0.0-beta.1", - "nullthrows": "^1.1.1" - } - }, - "@parcel/transformer-yaml": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/transformer-yaml/-/transformer-yaml-2.0.0-beta.1.tgz", - "integrity": "sha512-/pe59NOi6rtbE+YQEnOdxgNf5zMd5SXHnawICGa1Gn9rXDFswiKzD16O2meCy0VGF6dPsQdzL+k0PJlQd9/TDA==", - "dev": true, - "requires": { - "@parcel/plugin": "2.0.0-beta.1" - } - }, - "@parcel/ts-utils": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/ts-utils/-/ts-utils-2.0.0-beta.1.tgz", - "integrity": "sha512-lSw4fWL/PLsJruTmScQRVvtw2g75jsd55W08GuMdkr9iGIOXxTRZ4m4rdDBVsiS6Cgq2/l2M3zPnTiPX2do2kw==", - "dev": true, - "requires": { - "nullthrows": "^1.1.1" - } - }, - "@parcel/types": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.0.0-beta.1.tgz", - "integrity": "sha512-2aB5MoEyNUXb34IG1YVRiC5HTHgqWAX8/mM+JGAUit/kTb7eRVtnQtOhQHWyGyLqkEwbLrLo3s272sp5LNK90A==", - "dev": true - }, - "@parcel/utils": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.0.0-beta.1.tgz", - "integrity": "sha512-o+qTRMqe6QjdseYKZBGTOjnxRt4bIOEfH5ey9Ohl5fRGIfuWH7Tsq3fUkf/McvoAQyR6eo1vp7OrPBUQeQ6wxw==", - "dev": true, - "requires": { - "@iarna/toml": "^2.2.0", - "@parcel/codeframe": "2.0.0-beta.1", - "@parcel/diagnostic": "2.0.0-beta.1", - "@parcel/logger": "2.0.0-beta.1", - "@parcel/markdown-ansi": "2.0.0-beta.1", - "@parcel/source-map": "2.0.0-alpha.4.13", - "ansi-html": "^0.0.7", - "chalk": "^2.4.2", - "clone": "^2.1.1", - "fast-glob": "3.1.1", - "is-glob": "^4.0.0", - "is-url": "^1.2.2", - "js-levenshtein": "^1.1.6", - "json5": "^1.0.1", - "micromatch": "^4.0.2", - "node-forge": "^0.8.1", - "nullthrows": "^1.1.1", - "open": "^7.0.3", - "resolve": "^1.12.0", - "serialize-to-js": "^3.0.1", - "terser": "^3.7.3" - } - }, - "@parcel/watcher": { - "version": "2.0.0-alpha.8", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.0-alpha.8.tgz", - "integrity": "sha512-9aQu1SFkR6t1UYo3Mj1Vg39/Scaa9i4xGZnZ5Ug/qLyVzHmdjyKDyAbsbUDAd1O2e+MUhr5GI1w1FzBI6J31Jw==", - "dev": true, - "requires": { - "lint-staged": "^10.0.8", - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.1" - }, - "dependencies": { - "node-addon-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.0.0.tgz", - "integrity": "sha512-sSHCgWfJ+Lui/u+0msF3oyCgvdkhxDbkCS6Q8uiJquzOimkJBvX6hl5aSSA7DR1XbMpdM8r7phjcF63sF4rkKg==", - "dev": true - } - } - }, - "@parcel/workers": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.0.0-beta.1.tgz", - "integrity": "sha512-8ycDNpBM9WoRVsHB+QXA/Y4I3z18vOQVFY+/vIcLNDIr61zKETwPjOmr5+6wSa6cMWaZBXYUjm2heJ6bPi1QXg==", - "dev": true, - "requires": { - "@parcel/diagnostic": "2.0.0-beta.1", - "@parcel/logger": "2.0.0-beta.1", - "@parcel/utils": "2.0.0-beta.1", - "chrome-trace-event": "^1.0.2", - "nullthrows": "^1.1.1" - } - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", - "dev": true - }, - "abab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.4.tgz", - "integrity": "sha512-Eu9ELJWCz/c1e9gTiCY+FceWxcqzjYEbqMgtndnuSqZSUCOL73TWNK2mHfIj4Cw2E/ongOp+JISVNCmovt2KYQ==", - "dev": true - }, - "abortcontroller-polyfill": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.5.0.tgz", - "integrity": "sha512-O6Xk757Jb4o0LMzMOMdWvxpHWrQzruYBaUruFaIOfAQRnWFxfdXYobw12jrVHGtoXk6WiiyYzc0QWN9aL62HQA==", - "dev": true - }, - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", - "dev": true - }, - "acorn-globals": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", - "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", - "dev": true, - "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - } - }, - "acorn-walk": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", - "dev": true - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", - "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "dev": true, - "requires": { - "type-fest": "^0.11.0" - } - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", - "dev": true - }, - "array-filter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", - "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "assert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", - "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", - "dev": true, - "requires": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", - "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==", - "dev": true, - "requires": { - "array-filter": "^1.0.0" - } - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz", - "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==", - "dev": true - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true - }, - "bn.js": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", - "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", - "dev": true - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.0.tgz", - "integrity": "sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001111", - "electron-to-chromium": "^1.3.523", - "escalade": "^3.0.2", - "node-releases": "^1.1.60" - } - }, - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "requires": { - "callsites": "^2.0.0" - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001122", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001122.tgz", - "integrity": "sha512-pxjw28CThdrqfz06nJkpAc5SXM404TXB/h5f4UJX+rrXJKE/1bu/KAILc2AY+O6cQIFtRjV9qOR2vaEp9LDGUA==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chokidar": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", - "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.4.0" - } - }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.4.0.tgz", - "integrity": "sha512-sJAofoarcm76ZGpuooaO0eDy8saEy+YoZBLjC4h8srt4jeBnkYeOgqxgsJQTpyt2LjI5PTfLJHSL+41Yu4fEJA==", - "dev": true - }, - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - } - } - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dev": true, - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - } - }, - "coffeescript": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-2.5.1.tgz", - "integrity": "sha512-J2jRPX0eeFh5VKyVnoLrfVFgLZtnnmp96WQSLAS8OrLm2wtQLcnikYKe1gViJKDH7vucjuhHvBKKBP3rKcD1tQ==", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", - "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", - "dev": true, - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - }, - "core-js-compat": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", - "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", - "dev": true, - "requires": { - "browserslist": "^4.8.5", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - } - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "dev": true - }, - "css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", - "dev": true, - "requires": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" - } - }, - "css-modules-loader-core": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz", - "integrity": "sha1-WQhmgpShvs0mGuCkziGwtVHyHRY=", - "dev": true, - "requires": { - "icss-replace-symbols": "1.1.0", - "postcss": "6.0.1", - "postcss-modules-extract-imports": "1.1.0", - "postcss-modules-local-by-default": "1.2.0", - "postcss-modules-scope": "1.1.0", - "postcss-modules-values": "1.3.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", - "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true - }, - "css-selector-tokenizer": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", - "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "fastparse": "^1.1.2" - } - }, - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dev": true, - "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.3.0.tgz", - "integrity": "sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", - "dev": true, - "requires": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" - } - }, - "cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", - "dev": true, - "requires": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.2", - "postcss-unique-selectors": "^4.0.1" - } - }, - "cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", - "dev": true - }, - "cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", - "dev": true - }, - "cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", - "dev": true - }, - "csso": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", - "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", - "dev": true, - "requires": { - "css-tree": "1.0.0-alpha.39" - }, - "dependencies": { - "css-tree": { - "version": "1.0.0-alpha.39", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", - "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", - "dev": true, - "requires": { - "mdn-data": "2.0.6", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", - "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==", - "dev": true - } - } - }, - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "cssstyle": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", - "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", - "dev": true, - "requires": { - "cssom": "0.3.x" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "^1.0.2" - }, - "dependencies": { - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - } - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", - "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", - "dev": true - } - } - }, - "domain-browser": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-3.5.0.tgz", - "integrity": "sha512-zrzUu6auyZWRexjCEPJnfWc30Hupxh2lJZOJAF3qa2bCuD4O/55t0FvQt3ZMhEw++gjNkwdkOVZh8yA32w/Vfw==", - "dev": true - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "dev": true, - "requires": { - "webidl-conversions": "^4.0.2" - } - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "dot-prop": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", - "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "dotenv": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", - "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", - "dev": true - }, - "dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "ejs": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", - "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.558", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.558.tgz", - "integrity": "sha512-r6th6b/TU2udqVoUDGWHF/z2ACJVnEei0wvWZf/nt+Qql1Vxh60ZYPhQP46j4D73T/Jou7hl4TqQfxben+qJTg==", - "dev": true - }, - "elliptic": { - "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", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "emphasize": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emphasize/-/emphasize-2.1.0.tgz", - "integrity": "sha512-wRlO0Qulw2jieQynsS3STzTabIhHCyjTjZraSkchOiT8rdvWZlahJAJ69HRxwGkv2NThmci2MSnDfJ60jB39tw==", - "dev": true, - "requires": { - "chalk": "^2.4.0", - "highlight.js": "~9.12.0", - "lowlight": "~1.9.0" - } - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", - "dev": true, - "requires": { - "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": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=", - "dev": true - }, - "escalade": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.2.tgz", - "integrity": "sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.0.3.tgz", - "integrity": "sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.1.1.tgz", - "integrity": "sha512-nTCREpBY8w8r+boyFYAx21iL6faSsQynliPHM4Uf56SbkyohCNxpVPEH9xrF5TXKy+IsjkPUHDKiUkzBVRXn9g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", - "dev": true - }, - "fastq": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", - "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fault": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", - "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", - "dev": true, - "requires": { - "format": "^0.2.0" - } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "filesize": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "follow-redirects": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", - "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", - "dev": true - }, - "fractional": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fractional/-/fractional-1.0.0.tgz", - "integrity": "sha1-2rFnovn4BM+QOL3fR6qbp/IH6rw=" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", - "dev": true - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "dev": true - }, - "get-port": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz", - "integrity": "sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==", - "dev": true - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "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-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", - "dev": true - }, - "highlight.js": { - "version": "9.12.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.12.0.tgz", - "integrity": "sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4=", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", - "dev": true - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", - "dev": true - }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.1" - } - }, - "html-tags": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-1.2.0.tgz", - "integrity": "sha1-x43mW1Zjqll5id0rerSSANfk25g=", - "dev": true - }, - "htmlnano": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-0.2.6.tgz", - "integrity": "sha512-HUY/99maFsWX2LRoGJpZ/8QRLCkyY0UU1El3wgLLFAHQlD3mCxCJJNcWJk5SBqaU49MLhIWVDW6cGBeuemvaPQ==", - "dev": true, - "requires": { - "cssnano": "^4.1.10", - "normalize-html-whitespace": "^1.0.0", - "posthtml": "^0.13.1", - "posthtml-render": "^1.2.2", - "purgecss": "^2.3.0", - "svgo": "^1.3.2", - "terser": "^4.8.0", - "uncss": "^0.17.3" - }, - "dependencies": { - "posthtml": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.13.3.tgz", - "integrity": "sha512-5NL2bBc4ihAyoYnY0EAQrFQbJNE1UdvgC1wjYts0hph7jYeU2fa5ki3/9U45ce9V6M1vLMEgUX2NXe/bYL+bCQ==", - "dev": true, - "requires": { - "posthtml-parser": "^0.5.0", - "posthtml-render": "^1.2.3" - } - }, - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - } - } - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - } - } - }, - "http-proxy": { - "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": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-middleware": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.2.tgz", - "integrity": "sha512-aYk1rTKqLTus23X3L96LGNCGNgWpG4cG0XoZIT1GUPhhulEHX/QalnO6Vbo+WmKWi4AL2IidjuC0wZtbpg0yhQ==", - "dev": true, - "requires": { - "http-proxy": "^1.18.1", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", - "dev": true - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, - "iferr": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-1.0.2.tgz", - "integrity": "sha512-9AfeLfji44r5TKInjhz3W9DyZI1zR1JAf2hVBMGhddAKPqBsupb89jGfbCTHIGZd6fGZl9WlHdn4AObygyMKwg==", - "dev": true - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", - "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", - "dev": true - }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "dev": true, - "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-generator-function": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.7.tgz", - "integrity": "sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw==", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-html": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-html/-/is-html-1.1.0.tgz", - "integrity": "sha1-4E8cGNOUhRETlvmgJz6rUa8hhGQ=", - "dev": true, - "requires": { - "html-tags": "^1.0.0" - } - }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true - }, - "is-nan": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.0.tgz", - "integrity": "sha512-z7bbREymOqt2CCaZVly8aC4ML3Xhfi0ekuOnjO2L8vKdl+CttdVoGZQhd4adMFAsxQ5VeRVwORs4tU8RH+HFtQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "dev": true - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", - "dev": true, - "requires": { - "html-comment-regex": "^1.1.0" - } - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-typed-array": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.3.tgz", - "integrity": "sha512-BSYUBOK/HJibQ30wWkWold5txYwMUXQct9YHAQJr8fSwvZoiglcqB0pd7vEN23+Tsi9IUEjztdOSzl4qLVYGTQ==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.0", - "es-abstract": "^1.17.4", - "foreach": "^2.0.5", - "has-symbols": "^1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isbinaryfile": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.6.tgz", - "integrity": "sha512-ORrEy+SNVqUhrCaal4hA4fBzhggQQ+BaLntyPOdoEiwlKZW9BZiJXjg3RMiruE4tPEI3pyVPpySHQF/dKWperg==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsdom": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz", - "integrity": "sha512-O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "acorn": "^6.0.4", - "acorn-globals": "^4.3.0", - "array-equal": "^1.0.0", - "cssom": "^0.3.4", - "cssstyle": "^1.1.1", - "data-urls": "^1.1.0", - "domexception": "^1.0.1", - "escodegen": "^1.11.0", - "html-encoding-sniffer": "^1.0.2", - "nwsapi": "^2.1.3", - "parse5": "5.1.0", - "pn": "^1.1.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.5", - "saxes": "^3.1.9", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.5.0", - "w3c-hr-time": "^1.0.1", - "w3c-xmlserializer": "^1.1.2", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^7.0.0", - "ws": "^6.1.2", - "xml-name-validator": "^3.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.0.tgz", - "integrity": "sha512-o3aP+RsWDJZayj1SbHNQAI8x0v3T3SKiGoZlNYfbUP1S3omJQ6i9CnqADqkSPaOAxwua4/1YWx5CM7oiChJt2Q==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/json-source-map/-/json-source-map-0.6.1.tgz", - "integrity": "sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levenary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", - "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", - "dev": true, - "requires": { - "leven": "^3.1.0" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "lint-staged": { - "version": "10.2.13", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.2.13.tgz", - "integrity": "sha512-conwlukNV6aL9SiMWjFtDp5exeDnTMekdNPDZsKGnpfQuHcO0E3L3Bbf58lcR+M7vk6LpCilxDAVks/DDVBYlA==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "cli-truncate": "^2.1.0", - "commander": "^6.0.0", - "cosmiconfig": "^7.0.0", - "debug": "^4.1.1", - "dedent": "^0.7.0", - "enquirer": "^2.3.6", - "execa": "^4.0.3", - "listr2": "^2.6.0", - "log-symbols": "^4.0.0", - "micromatch": "^4.0.2", - "normalize-path": "^3.0.0", - "please-upgrade-node": "^3.2.0", - "string-argv": "0.3.1", - "stringify-object": "^3.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "commander": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.1.0.tgz", - "integrity": "sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA==", - "dev": true - }, - "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", - "dev": true, - "requires": { - "chalk": "^4.0.0" - } - }, - "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "listr2": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-2.6.2.tgz", - "integrity": "sha512-6x6pKEMs8DSIpA/tixiYY2m/GcbgMplMVmhQAaLFxEtNSKLeWTGjtmU57xvv6QCm2XcqzyNXL/cTSVf4IChCRA==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "cli-truncate": "^2.1.0", - "figures": "^3.2.0", - "indent-string": "^4.0.0", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rxjs": "^6.6.2", - "through": "^2.3.8" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, - "lodash.clone": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", - "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2" - } - }, - "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lowlight": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.9.2.tgz", - "integrity": "sha512-Ek18ElVCf/wF/jEm1b92gTnigh94CtBNWiZ2ad+vTgW7cTmQxUY3I98BjHK68gZAJEWmybGBZgx9qv3QxLQB/Q==", - "dev": true, - "requires": { - "fault": "^1.0.2", - "highlight.js": "~9.12.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", - "dev": true - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", - "dev": true - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "dev": true, - "requires": { - "mime-db": "1.44.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "dev": true - }, - "node-forge": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.8.5.tgz", - "integrity": "sha512-vFMQIWt+J/7FLNyKouZ9TazT74PRV3wgv9UT4cRjC8BffxFbKXkgIWR42URCPSnHm/QDz6BOlb2Q0U4+VQT67Q==", - "dev": true - }, - "node-gyp-build": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz", - "integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==", - "dev": true - }, - "node-releases": { - "version": "1.1.60", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", - "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==", - "dev": true - }, - "normalize-html-whitespace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/normalize-html-whitespace/-/normalize-html-whitespace-1.0.0.tgz", - "integrity": "sha512-9ui7CGtOOlehQu0t/OhhlmDyc71mKVlv+4vF+me4iZLPrNtRL2xoquEdfZxasC/bdQi/Hr3iTrpyRKIG+ocabA==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "requires": { - "boolbase": "~1.0.0" - } - }, - "nullthrows": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", - "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", - "dev": true - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", - "dev": true - }, - "object-is": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", - "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/open/-/open-7.2.1.tgz", - "integrity": "sha512-xbYCJib4spUdmcs0g/2mK1nKo/jO2T7INClWd/beL7PFkXRWgr8B23ssDHX/USPn2M2IjDR5UdpYs6I67SnTSA==", - "dev": true, - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "ora": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", - "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", - "dev": true, - "requires": { - "chalk": "^3.0.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.2.0", - "is-interactive": "^1.0.0", - "log-symbols": "^3.0.0", - "mute-stream": "0.0.8", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "parcel": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.0.0-beta.1.tgz", - "integrity": "sha512-Z2tzZoDws7q+99ihjpd3WX09BTao2miTk+S9URJXRJkVxxgoZSQJ+uwtxcosoDWwS6zv4RAXxtEMmiyMeaCuMQ==", - "dev": true, - "requires": { - "@parcel/config-default": "2.0.0-beta.1", - "@parcel/core": "2.0.0-beta.1", - "@parcel/diagnostic": "2.0.0-beta.1", - "@parcel/fs": "2.0.0-beta.1", - "@parcel/logger": "2.0.0-beta.1", - "@parcel/package-manager": "2.0.0-beta.1", - "@parcel/utils": "2.0.0-beta.1", - "chalk": "^2.1.0", - "commander": "^2.19.0", - "get-port": "^4.2.0", - "react": "^16.7.0", - "v8-compile-cache": "^2.0.0" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - }, - "dependencies": { - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - } - } - }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parse5": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", - "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true - }, - "please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "requires": { - "semver-compare": "^1.0.0" - } - }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-calc": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.4.tgz", - "integrity": "sha512-0I79VRAd1UTkaHzY9w83P39YGO/M3bG7/tNLrHGEunBolfoGM0hSjrGvjoeaj0JE/zIw5GsI2KZ0UwDJqv5hjw==", - "dev": true, - "requires": { - "postcss": "^7.0.27", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" - } - }, - "postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", - "dev": true, - "requires": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "uniqs": "^2.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-modules-extract-imports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", - "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", - "dev": true, - "requires": { - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } - } - }, - "postcss-modules-local-by-default": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", - "dev": true, - "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } - } - }, - "postcss-modules-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", - "dev": true, - "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } - } - }, - "postcss-modules-values": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", - "dev": true, - "requires": { - "icss-replace-symbols": "^1.1.0", - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } - } - }, - "postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", - "dev": true, - "requires": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", - "dev": true, - "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-selector-parser": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", - "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", - "dev": true, - "requires": { - "is-svg": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", - "uniqs": "^2.0.0" - } - }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", - "dev": true - }, - "posthtml": { - "version": "0.11.6", - "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.11.6.tgz", - "integrity": "sha512-C2hrAPzmRdpuL3iH0TDdQ6XCc9M7Dcc3zEW5BLerY65G4tWWszwv6nG/ksi6ul5i2mx22ubdljgktXCtNkydkw==", - "dev": true, - "requires": { - "posthtml-parser": "^0.4.1", - "posthtml-render": "^1.1.5" - }, - "dependencies": { - "posthtml-parser": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.4.2.tgz", - "integrity": "sha512-BUIorsYJTvS9UhXxPTzupIztOMVNPa/HtAm9KHni9z6qEfiJ1bpOBL5DfUOL9XAc3XkLIEzBzpph+Zbm4AdRAg==", - "dev": true, - "requires": { - "htmlparser2": "^3.9.2" - } - } - } - }, - "posthtml-parser": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.5.0.tgz", - "integrity": "sha512-BsZFAqOeX9lkJJPKG2JmGgtm6t++WibU7FeS40FNNGZ1KS2szRSRQ8Wr2JLvikDgAecrQ/9V4sjugTAin2+KVw==", - "dev": true, - "requires": { - "htmlparser2": "^3.9.2" - } - }, - "posthtml-render": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.2.3.tgz", - "integrity": "sha512-rGGayND//VwTlsYKNqdILsA7U/XP0WJa6SMcdAEoqc2WRM5QExplGg/h9qbTuHz7mc2PvaXU+6iNxItvr5aHMg==", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "purgecss": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-2.3.0.tgz", - "integrity": "sha512-BE5CROfVGsx2XIhxGuZAT7rTH9lLeQx/6M0P7DTXQH4IUc3BBzs9JUzt4yzGf3JrH9enkeq6YJBe9CTtkm1WmQ==", - "dev": true, - "requires": { - "commander": "^5.0.0", - "glob": "^7.0.0", - "postcss": "7.0.32", - "postcss-selector-parser": "^6.0.2" - }, - "dependencies": { - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true - } - } - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "react": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", - "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "react-refresh": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.6.0.tgz", - "integrity": "sha512-Wv48N+GFt6Azvtl/LMvzNW9hvEyJdRQ48oVKIBAN7hjtvXXfxfVJXbPl/11SM1C/NIquIFXzzWCo6ZNH0I8I4g==", - "dev": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", - "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "regenerate": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", - "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "dev": true, - "requires": { - "regenerate": "^1.4.0" - } - }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - }, - "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexpu-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", - "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", - "dev": true, - "requires": { - "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": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true - }, - "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "requires": { - "lodash": "^4.17.19" - } - }, - "request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "dev": true, - "requires": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", - "dev": true - }, - "rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", - "dev": true - }, - "rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sass": { - "version": "1.26.10", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.10.tgz", - "integrity": "sha512-bzN0uvmzfsTvjz0qwccN1sPm2HxxpNI/Xa+7PlUEMS+nQvbyuEK7Y0qFqxlPHhiNHb1Ze8WQJtU31olMObkAMw==", - "dev": true, - "requires": { - "chokidar": ">=2.0.0 <4.0.0" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "saxes": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", - "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", - "dev": true, - "requires": { - "xmlchars": "^2.1.1" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true - }, - "serialize-to-js": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/serialize-to-js/-/serialize-to-js-3.1.1.tgz", - "integrity": "sha512-F+NGU0UHMBO4Q965tjw7rvieNVjlH6Lqi2emq/Lc9LUURYJbiCzmpi4Cy1OOjjVPtxu0c+NE85LU6968Wko5ZA==", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dev": true, - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - } - } - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "requires": { - "readable-stream": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, - "stream-http": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.1.tgz", - "integrity": "sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "xtend": "^4.0.2" - } - }, - "string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dev": true, - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "dependencies": { - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - } - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - } - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "term-size": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz", - "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==", - "dev": true - }, - "terser": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", - "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", - "dev": true, - "requires": { - "commander": "^2.19.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.10" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, - "timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", - "dev": true - }, - "tty-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true - }, - "uncss": { - "version": "0.17.3", - "resolved": "https://registry.npmjs.org/uncss/-/uncss-0.17.3.tgz", - "integrity": "sha512-ksdDWl81YWvF/X14fOSw4iu8tESDHFIeyKIeDrK6GEVTQvqJc1WlOEXqostNwOCi3qAj++4EaLsdAgPmUbEyog==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "glob": "^7.1.4", - "is-absolute-url": "^3.0.1", - "is-html": "^1.1.0", - "jsdom": "^14.1.0", - "lodash": "^4.17.15", - "postcss": "^7.0.17", - "postcss-selector-parser": "6.0.2", - "request": "^2.88.0" - }, - "dependencies": { - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true - } - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.3.tgz", - "integrity": "sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - } - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", - "dev": true - }, - "vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", - "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", - "dev": true, - "requires": { - "domexception": "^1.0.1", - "webidl-conversions": "^4.0.2", - "xml-name-validator": "^3.0.0" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-typed-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.2.tgz", - "integrity": "sha512-KT6okrd1tE6JdZAy3o2VhMoYPh3+J6EMZLyrxBQsZflI1QCZIxMrIYLkosd8Twf+YfknVIHmYQPgJt238p8dnQ==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.2", - "es-abstract": "^1.17.5", - "foreach": "^2.0.5", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.1", - "is-typed-array": "^1.1.3" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "yaml": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", - "dev": true - } - } -} diff --git a/18-forkify/final/package.json b/18-forkify/final/package.json deleted file mode 100644 index f7a15e152a..0000000000 --- a/18-forkify/final/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "forkify", - "version": "1.0.0", - "description": "Recipe application", - "default": "index.html", - "scripts": { - "start": "parcel index.html", - "build": "parcel build index.html --dist-dir ./dist" - }, - "author": "Jonas Schedtmann", - "license": "ISC", - "devDependencies": { - "parcel": "^2.0.0-beta.1", - "sass": "^1.26.10" - }, - "dependencies": { - "core-js": "^3.6.5", - "fractional": "^1.0.0", - "regenerator-runtime": "^0.13.7" - } -} diff --git a/18-forkify/final/src/img/icons.svg b/18-forkify/final/src/img/icons.svg deleted file mode 100644 index 20e918a168..0000000000 --- a/18-forkify/final/src/img/icons.svg +++ /dev/null @@ -1,60 +0,0 @@ - diff --git a/18-forkify/final/src/js/config.js b/18-forkify/final/src/js/config.js deleted file mode 100644 index fb344669b9..0000000000 --- a/18-forkify/final/src/js/config.js +++ /dev/null @@ -1,5 +0,0 @@ -export const API_URL = 'https://forkify-api.jonas.io/api/v2/recipes/'; -export const TIMEOUT_SEC = 10; -export const RES_PER_PAGE = 10; -export const KEY = ''; -export const MODAL_CLOSE_SEC = 2.5; diff --git a/18-forkify/final/src/js/controller.js b/18-forkify/final/src/js/controller.js deleted file mode 100644 index 9e10cececd..0000000000 --- a/18-forkify/final/src/js/controller.js +++ /dev/null @@ -1,131 +0,0 @@ -import * as model from './model.js'; -import { MODAL_CLOSE_SEC } from './config.js'; -import recipeView from './views/recipeView.js'; -import searchView from './views/searchView.js'; -import resultsView from './views/resultsView.js'; -import paginationView from './views/paginationView.js'; -import bookmarksView from './views/bookmarksView.js'; -import addRecipeView from './views/addRecipeView.js'; - -import 'core-js/stable'; -import 'regenerator-runtime/runtime'; -import { async } from 'regenerator-runtime'; - -const controlRecipes = async function () { - try { - const id = window.location.hash.slice(1); - - if (!id) return; - recipeView.renderSpinner(); - - // 0) Update results view to mark selected search result - resultsView.update(model.getSearchResultsPage()); - - // 1) Updating bookmarks view - bookmarksView.update(model.state.bookmarks); - - // 2) Loading recipe - await model.loadRecipe(id); - - // 3) Rendering recipe - recipeView.render(model.state.recipe); - } catch (err) { - recipeView.renderError(); - console.error(err); - } -}; - -const controlSearchResults = async function () { - try { - resultsView.renderSpinner(); - - // 1) Get search query - const query = searchView.getQuery(); - if (!query) return; - - // 2) Load search results - await model.loadSearchResults(query); - - // 3) Render results - resultsView.render(model.getSearchResultsPage()); - - // 4) Render initial pagination buttons - paginationView.render(model.state.search); - } catch (err) { - console.log(err); - } -}; - -const controlPagination = function (goToPage) { - // 1) Render NEW results - resultsView.render(model.getSearchResultsPage(goToPage)); - - // 2) Render NEW pagination buttons - paginationView.render(model.state.search); -}; - -const controlServings = function (newServings) { - // Update the recipe servings (in state) - model.updateServings(newServings); - - // Update the recipe view - recipeView.update(model.state.recipe); -}; - -const controlAddBookmark = function () { - // 1) Add/remove bookmark - if (!model.state.recipe.bookmarked) model.addBookmark(model.state.recipe); - else model.deleteBookmark(model.state.recipe.id); - - // 2) Update recipe view - recipeView.update(model.state.recipe); - - // 3) Render bookmarks - bookmarksView.render(model.state.bookmarks); -}; - -const controlBookmarks = function () { - bookmarksView.render(model.state.bookmarks); -}; - -const controlAddRecipe = async function (newRecipe) { - try { - // Show loading spinner - addRecipeView.renderSpinner(); - - // Upload the new recipe data - await model.uploadRecipe(newRecipe); - console.log(model.state.recipe); - - // Render recipe - recipeView.render(model.state.recipe); - - // Success message - addRecipeView.renderMessage(); - - // Render bookmark view - bookmarksView.render(model.state.bookmarks); - - // Change ID in URL - window.history.pushState(null, '', `#${model.state.recipe.id}`); - - // Close form window - setTimeout(function () { - addRecipeView.toggleWindow(); - }, MODAL_CLOSE_SEC * 1000); - } catch (err) { - console.error('๐Ÿ’ฅ', err); - addRecipeView.renderError(err.message); - } -}; - -const init = function () { - bookmarksView.addHandlerRender(controlBookmarks); - recipeView.addHandlerRender(controlRecipes); - recipeView.addHandlerUpdateServings(controlServings); - recipeView.addHandlerAddBookmark(controlAddBookmark); - searchView.addHandlerSearch(controlSearchResults); - paginationView.addHandlerClick(controlPagination); - addRecipeView.addHandlerUpload(controlAddRecipe); -}; -init(); diff --git a/18-forkify/final/src/js/helpers.js b/18-forkify/final/src/js/helpers.js deleted file mode 100644 index 62e0987135..0000000000 --- a/18-forkify/final/src/js/helpers.js +++ /dev/null @@ -1,67 +0,0 @@ -import { async } from 'regenerator-runtime'; -import { TIMEOUT_SEC } from './config.js'; - -const timeout = function (s) { - return new Promise(function (_, reject) { - setTimeout(function () { - reject(new Error(`Request took too long! Timeout after ${s} second`)); - }, s * 1000); - }); -}; - -export const AJAX = async function (url, uploadData = undefined) { - try { - const fetchPro = uploadData - ? fetch(url, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify(uploadData), - }) - : fetch(url); - - const res = await Promise.race([fetchPro, timeout(TIMEOUT_SEC)]); - const data = await res.json(); - - if (!res.ok) throw new Error(`${data.message} (${res.status})`); - return data; - } catch (err) { - throw err; - } -}; - -/* -export const getJSON = async function (url) { - try { - const fetchPro = fetch(url); - const res = await Promise.race([fetchPro, timeout(TIMEOUT_SEC)]); - const data = await res.json(); - - if (!res.ok) throw new Error(`${data.message} (${res.status})`); - return data; - } catch (err) { - throw err; - } -}; - -export const sendJSON = async function (url, uploadData) { - try { - const fetchPro = fetch(url, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify(uploadData), - }); - - const res = await Promise.race([fetchPro, timeout(TIMEOUT_SEC)]); - const data = await res.json(); - - if (!res.ok) throw new Error(`${data.message} (${res.status})`); - return data; - } catch (err) { - throw err; - } -}; -*/ diff --git a/18-forkify/final/src/js/model.js b/18-forkify/final/src/js/model.js deleted file mode 100644 index ea4de7e835..0000000000 --- a/18-forkify/final/src/js/model.js +++ /dev/null @@ -1,159 +0,0 @@ -import { async } from 'regenerator-runtime'; -import { API_URL, RES_PER_PAGE, KEY } from './config.js'; -// import { getJSON, sendJSON } from './helpers.js'; -import { AJAX } from './helpers.js'; - -export const state = { - recipe: {}, - search: { - query: '', - results: [], - page: 1, - resultsPerPage: RES_PER_PAGE, - }, - bookmarks: [], -}; - -const createRecipeObject = function (data) { - const { recipe } = data.data; - return { - id: recipe.id, - title: recipe.title, - publisher: recipe.publisher, - sourceUrl: recipe.source_url, - image: recipe.image_url, - servings: recipe.servings, - cookingTime: recipe.cooking_time, - ingredients: recipe.ingredients, - ...(recipe.key && { key: recipe.key }), - }; -}; - -export const loadRecipe = async function (id) { - try { - const data = await AJAX(`${API_URL}${id}?key=${KEY}`); - state.recipe = createRecipeObject(data); - - if (state.bookmarks.some(bookmark => bookmark.id === id)) - state.recipe.bookmarked = true; - else state.recipe.bookmarked = false; - - console.log(state.recipe); - } catch (err) { - // Temp error handling - console.error(`${err} ๐Ÿ’ฅ๐Ÿ’ฅ๐Ÿ’ฅ๐Ÿ’ฅ`); - throw err; - } -}; - -export const loadSearchResults = async function (query) { - try { - state.search.query = query; - - const data = await AJAX(`${API_URL}?search=${query}&key=${KEY}`); - console.log(data); - - state.search.results = data.data.recipes.map(rec => { - return { - id: rec.id, - title: rec.title, - publisher: rec.publisher, - image: rec.image_url, - ...(rec.key && { key: rec.key }), - }; - }); - state.search.page = 1; - } catch (err) { - console.error(`${err} ๐Ÿ’ฅ๐Ÿ’ฅ๐Ÿ’ฅ๐Ÿ’ฅ`); - throw err; - } -}; - -export const getSearchResultsPage = function (page = state.search.page) { - state.search.page = page; - - const start = (page - 1) * state.search.resultsPerPage; // 0 - const end = page * state.search.resultsPerPage; // 9 - - return state.search.results.slice(start, end); -}; - -export const updateServings = function (newServings) { - state.recipe.ingredients.forEach(ing => { - ing.quantity = (ing.quantity * newServings) / state.recipe.servings; - // newQt = oldQt * newServings / oldServings // 2 * 8 / 4 = 4 - }); - - state.recipe.servings = newServings; -}; - -const persistBookmarks = function () { - localStorage.setItem('bookmarks', JSON.stringify(state.bookmarks)); -}; - -export const addBookmark = function (recipe) { - // Add bookmark - state.bookmarks.push(recipe); - - // Mark current recipe as bookmarked - if (recipe.id === state.recipe.id) state.recipe.bookmarked = true; - - persistBookmarks(); -}; - -export const deleteBookmark = function (id) { - // Delete bookmark - const index = state.bookmarks.findIndex(el => el.id === id); - state.bookmarks.splice(index, 1); - - // Mark current recipe as NOT bookmarked - if (id === state.recipe.id) state.recipe.bookmarked = false; - - persistBookmarks(); -}; - -const init = function () { - const storage = localStorage.getItem('bookmarks'); - if (storage) state.bookmarks = JSON.parse(storage); -}; -init(); - -const clearBookmarks = function () { - localStorage.clear('bookmarks'); -}; -// clearBookmarks(); - -export const uploadRecipe = async function (newRecipe) { - try { - const ingredients = Object.entries(newRecipe) - .filter(entry => entry[0].startsWith('ingredient') && entry[1] !== '') - .map(ing => { - const ingArr = ing[1].split(',').map(el => el.trim()); - // const ingArr = ing[1].replaceAll(' ', '').split(','); - if (ingArr.length !== 3) - throw new Error( - 'Wrong ingredient fromat! Please use the correct format :)' - ); - - const [quantity, unit, description] = ingArr; - - return { quantity: quantity ? +quantity : null, unit, description }; - }); - - const recipe = { - title: newRecipe.title, - source_url: newRecipe.sourceUrl, - image_url: newRecipe.image, - publisher: newRecipe.publisher, - cooking_time: +newRecipe.cookingTime, - servings: +newRecipe.servings, - ingredients, - }; - - const data = await AJAX(`${API_URL}?key=${KEY}`, recipe); - state.recipe = createRecipeObject(data); - addBookmark(state.recipe); - } catch (err) { - throw err; - } -}; diff --git a/18-forkify/final/src/js/views/View.js b/18-forkify/final/src/js/views/View.js deleted file mode 100644 index 847f6db070..0000000000 --- a/18-forkify/final/src/js/views/View.js +++ /dev/null @@ -1,102 +0,0 @@ -import icons from 'url:../../img/icons.svg'; // Parcel 2 - -export default class View { - _data; - - /** - * Render the received object to the DOM - * @param {Object | Object[]} data The data to be rendered (e.g. recipe) - * @param {boolean} [render=true] If false, create markup string instead of rendering to the DOM - * @returns {undefined | string} A markup string is returned if render=false - * @this {Object} View instance - * @author Jonas Schmedtmann - * @todo Finish implementation - */ - render(data, render = true) { - if (!data || (Array.isArray(data) && data.length === 0)) - return this.renderError(); - - this._data = data; - const markup = this._generateMarkup(); - - if (!render) return markup; - - this._clear(); - this._parentElement.insertAdjacentHTML('afterbegin', markup); - } - - update(data) { - this._data = data; - const newMarkup = this._generateMarkup(); - - const newDOM = document.createRange().createContextualFragment(newMarkup); - const newElements = Array.from(newDOM.querySelectorAll('*')); - const curElements = Array.from(this._parentElement.querySelectorAll('*')); - - newElements.forEach((newEl, i) => { - const curEl = curElements[i]; - // console.log(curEl, newEl.isEqualNode(curEl)); - - // Updates changed TEXT - if ( - !newEl.isEqualNode(curEl) && - newEl.firstChild?.nodeValue.trim() !== '' - ) { - // console.log('๐Ÿ’ฅ', newEl.firstChild.nodeValue.trim()); - curEl.textContent = newEl.textContent; - } - - // Updates changed ATTRIBUES - if (!newEl.isEqualNode(curEl)) - Array.from(newEl.attributes).forEach(attr => - curEl.setAttribute(attr.name, attr.value) - ); - }); - } - - _clear() { - this._parentElement.innerHTML = ''; - } - - renderSpinner() { - const markup = ` -
    - - - -
    - `; - this._clear(); - this._parentElement.insertAdjacentHTML('afterbegin', markup); - } - - renderError(message = this._errorMessage) { - const markup = ` -
    -
    - - - -
    -

    ${message}

    -
    - `; - this._clear(); - this._parentElement.insertAdjacentHTML('afterbegin', markup); - } - - renderMessage(message = this._message) { - const markup = ` -
    -
    - - - -
    -

    ${message}

    -
    - `; - this._clear(); - this._parentElement.insertAdjacentHTML('afterbegin', markup); - } -} diff --git a/18-forkify/final/src/js/views/addRecipeView.js b/18-forkify/final/src/js/views/addRecipeView.js deleted file mode 100644 index 3609c38572..0000000000 --- a/18-forkify/final/src/js/views/addRecipeView.js +++ /dev/null @@ -1,45 +0,0 @@ -import View from './View.js'; -import icons from 'url:../../img/icons.svg'; // Parcel 2 - -class AddRecipeView extends View { - _parentElement = document.querySelector('.upload'); - _message = 'Recipe was successfully uploaded :)'; - - _window = document.querySelector('.add-recipe-window'); - _overlay = document.querySelector('.overlay'); - _btnOpen = document.querySelector('.nav__btn--add-recipe'); - _btnClose = document.querySelector('.btn--close-modal'); - - constructor() { - super(); - this._addHandlerShowWindow(); - this._addHandlerHideWindow(); - } - - toggleWindow() { - this._overlay.classList.toggle('hidden'); - this._window.classList.toggle('hidden'); - } - - _addHandlerShowWindow() { - this._btnOpen.addEventListener('click', this.toggleWindow.bind(this)); - } - - _addHandlerHideWindow() { - this._btnClose.addEventListener('click', this.toggleWindow.bind(this)); - this._overlay.addEventListener('click', this.toggleWindow.bind(this)); - } - - addHandlerUpload(handler) { - this._parentElement.addEventListener('submit', function (e) { - e.preventDefault(); - const dataArr = [...new FormData(this)]; - const data = Object.fromEntries(dataArr); - handler(data); - }); - } - - _generateMarkup() {} -} - -export default new AddRecipeView(); diff --git a/18-forkify/final/src/js/views/bookmarksView.js b/18-forkify/final/src/js/views/bookmarksView.js deleted file mode 100644 index be66b7a509..0000000000 --- a/18-forkify/final/src/js/views/bookmarksView.js +++ /dev/null @@ -1,21 +0,0 @@ -import View from './View.js'; -import previewView from './previewView.js'; -import icons from 'url:../../img/icons.svg'; // Parcel 2 - -class BookmarksView extends View { - _parentElement = document.querySelector('.bookmarks__list'); - _errorMessage = 'No bookmarks yet. Find a nice recipe and bookmark it ;)'; - _message = ''; - - addHandlerRender(handler) { - window.addEventListener('load', handler); - } - - _generateMarkup() { - return this._data - .map(bookmark => previewView.render(bookmark, false)) - .join(''); - } -} - -export default new BookmarksView(); diff --git a/18-forkify/final/src/js/views/paginationView.js b/18-forkify/final/src/js/views/paginationView.js deleted file mode 100644 index 7518b31bb6..0000000000 --- a/18-forkify/final/src/js/views/paginationView.js +++ /dev/null @@ -1,78 +0,0 @@ -import View from './View.js'; -import icons from 'url:../../img/icons.svg'; // Parcel 2 - -class PaginationView extends View { - _parentElement = document.querySelector('.pagination'); - - addHandlerClick(handler) { - this._parentElement.addEventListener('click', function (e) { - const btn = e.target.closest('.btn--inline'); - if (!btn) return; - - const goToPage = +btn.dataset.goto; - handler(goToPage); - }); - } - - _generateMarkup() { - const curPage = this._data.page; - const numPages = Math.ceil( - this._data.results.length / this._data.resultsPerPage - ); - - // Page 1, and there are other pages - if (curPage === 1 && numPages > 1) { - return ` - - `; - } - - // Last page - if (curPage === numPages && numPages > 1) { - return ` - - `; - } - - // Other page - if (curPage < numPages) { - return ` - - - `; - } - - // Page 1, and there are NO other pages - return ''; - } -} - -export default new PaginationView(); diff --git a/18-forkify/final/src/js/views/previewView.js b/18-forkify/final/src/js/views/previewView.js deleted file mode 100644 index 3acf57bf2e..0000000000 --- a/18-forkify/final/src/js/views/previewView.js +++ /dev/null @@ -1,35 +0,0 @@ -import View from './View.js'; -import icons from 'url:../../img/icons.svg'; // Parcel 2 - -class PreviewView extends View { - _parentElement = ''; - - _generateMarkup() { - const id = window.location.hash.slice(1); - - return ` -
  • - -
    - ${this._data.title} -
    -
    -

    ${this._data.title}

    -

    ${this._data.publisher}

    -
    - - - -
    -
    -
    -
  • - `; - } -} - -export default new PreviewView(); diff --git a/18-forkify/final/src/js/views/recipeView.js b/18-forkify/final/src/js/views/recipeView.js deleted file mode 100644 index 0d6f637cb7..0000000000 --- a/18-forkify/final/src/js/views/recipeView.js +++ /dev/null @@ -1,142 +0,0 @@ -import View from './View.js'; - -// import icons from '../img/icons.svg'; // Parcel 1 -import icons from 'url:../../img/icons.svg'; // Parcel 2 -import { Fraction } from 'fractional'; - -class RecipeView extends View { - _parentElement = document.querySelector('.recipe'); - _errorMessage = 'We could not find that recipe. Please try another one!'; - _message = ''; - - addHandlerRender(handler) { - ['hashchange', 'load'].forEach(ev => window.addEventListener(ev, handler)); - } - - addHandlerUpdateServings(handler) { - this._parentElement.addEventListener('click', function (e) { - const btn = e.target.closest('.btn--update-servings'); - if (!btn) return; - const { updateTo } = btn.dataset; - if (+updateTo > 0) handler(+updateTo); - }); - } - - addHandlerAddBookmark(handler) { - this._parentElement.addEventListener('click', function (e) { - const btn = e.target.closest('.btn--bookmark'); - if (!btn) return; - handler(); - }); - } - - _generateMarkup() { - return ` -
    - ${
-      this._data.title
-    } -

    - ${this._data.title} -

    -
    - -
    -
    - - - - ${ - this._data.cookingTime - } - minutes -
    -
    - - - - ${ - this._data.servings - } - servings - -
    - - -
    -
    - -
    - - - -
    - -
    - -
    -

    Recipe ingredients

    -
      - ${this._data.ingredients.map(this._generateMarkupIngredient).join('')} -
    - -
    -

    How to cook it

    -

    - This recipe was carefully designed and tested by - ${ - this._data.publisher - }. Please check out - directions at their website. -

    - - Directions - - - - -
    - `; - } - - _generateMarkupIngredient(ing) { - return ` -
  • - - - -
    ${ - ing.quantity ? new Fraction(ing.quantity).toString() : '' - }
    -
    - ${ing.unit} - ${ing.description} -
    -
  • - `; - } -} - -export default new RecipeView(); diff --git a/18-forkify/final/src/js/views/resultsView.js b/18-forkify/final/src/js/views/resultsView.js deleted file mode 100644 index b28716ba7e..0000000000 --- a/18-forkify/final/src/js/views/resultsView.js +++ /dev/null @@ -1,15 +0,0 @@ -import View from './View.js'; -import previewView from './previewView.js'; -import icons from 'url:../../img/icons.svg'; // Parcel 2 - -class ResultsView extends View { - _parentElement = document.querySelector('.results'); - _errorMessage = 'No recipes found for your query! Please try again ;)'; - _message = ''; - - _generateMarkup() { - return this._data.map(result => previewView.render(result, false)).join(''); - } -} - -export default new ResultsView(); diff --git a/18-forkify/final/src/js/views/searchView.js b/18-forkify/final/src/js/views/searchView.js deleted file mode 100644 index f4763efd91..0000000000 --- a/18-forkify/final/src/js/views/searchView.js +++ /dev/null @@ -1,22 +0,0 @@ -class SearchView { - _parentEl = document.querySelector('.search'); - - getQuery() { - const query = this._parentEl.querySelector('.search__field').value; - this._clearInput(); - return query; - } - - _clearInput() { - this._parentEl.querySelector('.search__field').value = ''; - } - - addHandlerSearch(handler) { - this._parentEl.addEventListener('submit', function (e) { - e.preventDefault(); - handler(); - }); - } -} - -export default new SearchView(); diff --git a/18-forkify/final/src/sass/_base.scss b/18-forkify/final/src/sass/_base.scss deleted file mode 100644 index 16dec6b1f2..0000000000 --- a/18-forkify/final/src/sass/_base.scss +++ /dev/null @@ -1,71 +0,0 @@ -// $color-primary: #f59a83; -$color-primary: #f38e82; -$color-grad-1: #fbdb89; -$color-grad-2: #f48982; - -$color-grey-light-1: #f9f5f3; // Light background -$color-grey-light-2: #f2efee; // Light lines -$color-grey-light-3: #d3c7c3; // Light text (placeholder) -$color-grey-dark-1: #615551; // Normal text -$color-grey-dark-2: #918581; // Lighter text - -$gradient: linear-gradient(to right bottom, $color-grad-1, $color-grad-2); - -$bp-large: 78.15em; // 1250px -$bp-medium: 61.25em; // 980px -$bp-small: 37.5em; // 600px -$bp-smallest: 31.25em; // 500px - -* { - margin: 0; - padding: 0; -} - -*, -*::before, -*::after { - box-sizing: inherit; -} - -html { - box-sizing: border-box; - font-size: 62.5%; - - @media only screen and (max-width: $bp-medium) { - font-size: 50%; - } -} - -body { - font-family: 'Nunito Sans', sans-serif; - font-weight: 400; - line-height: 1.6; - color: $color-grey-dark-1; - background-image: $gradient; - background-size: cover; - background-repeat: no-repeat; - min-height: calc(100vh - 2 * 4vw); -} - -.container { - max-width: 120rem; - min-height: 117rem; - margin: 4vw auto; - background-color: #fff; - border-radius: 9px; - overflow: hidden; - box-shadow: 0 2rem 6rem 0.5rem rgba($color-grey-dark-1, 0.2); - - display: grid; - grid-template-rows: 10rem minmax(100rem, auto); - grid-template-columns: 1fr 2fr; - grid-template-areas: - 'head head' - 'list recipe'; - - @media only screen and (max-width: $bp-large) { - max-width: 100%; - margin: 0; - border-radius: 0; - } -} diff --git a/18-forkify/final/src/sass/_components.scss b/18-forkify/final/src/sass/_components.scss deleted file mode 100644 index f8612eb9bc..0000000000 --- a/18-forkify/final/src/sass/_components.scss +++ /dev/null @@ -1,213 +0,0 @@ -%btn { - background-image: $gradient; - border-radius: 10rem; - border: none; - text-transform: uppercase; - color: #fff; - cursor: pointer; - display: flex; - align-items: center; - transition: all 0.2s; - - &:hover { - transform: scale(1.05); - } - - &:focus { - outline: none; - } - - & > *:first-child { - margin-right: 1rem; - } -} - -.btn { - @extend %btn; - - padding: 1.5rem 4rem; - font-size: 1.5rem; - font-weight: 600; - - svg { - height: 2.25rem; - width: 2.25rem; - fill: currentColor; - } -} - -.btn--small { - &, - &:link, - &:visited { - @extend %btn; - - font-size: 1.4rem; - font-weight: 600; - padding: 1.25rem 2.25rem; - text-decoration: none; - - svg { - height: 1.75rem; - width: 1.75rem; - fill: currentColor; - } - } -} - -.btn--inline { - color: $color-primary; - font-size: 1.3rem; - font-weight: 600; - border: none; - background-color: $color-grey-light-1; - padding: 0.8rem 1.2rem; - border-radius: 10rem; - cursor: pointer; - - display: flex; - align-items: center; - transition: all 0.2s; - - svg { - height: 1.6rem; - width: 1.6rem; - fill: currentColor; - margin: 0 0.2rem; - } - - span { - margin: 0 0.4rem; - } - - &:hover { - color: $color-grad-2; - background-color: $color-grey-light-2; - } - - &:focus { - outline: none; - } -} - -.btn--round { - background-image: $gradient; - border-radius: 50%; - border: none; - cursor: pointer; - height: 4.5rem; - width: 4.5rem; - // margin-left: auto; - transition: all 0.2s; - - display: flex; - align-items: center; - justify-content: center; - - &:hover { - transform: scale(1.07); - } - - &:focus { - outline: none; - } - - svg { - height: 2.5rem; - width: 2.5rem; - fill: #fff; - } -} - -.btn--tiny { - height: 2rem; - width: 2rem; - border: none; - background: none; - cursor: pointer; - - svg { - height: 100%; - width: 100%; - fill: $color-primary; - transition: all 0.3s; - } - - &:focus { - outline: none; - } - - &:hover svg { - fill: $color-grad-2; - transform: translateY(-1px); - } - - &:active svg { - fill: $color-grad-2; - transform: translateY(0); - } - - &:not(:last-child) { - margin-right: 0.3rem; - } -} - -.heading--2 { - font-size: 2rem; - font-weight: 700; - color: $color-primary; - text-transform: uppercase; - margin-bottom: 2.5rem; - text-align: center; - // transform: skewY(-3deg); -} - -.link:link, -.link:visited { - color: $color-grey-dark-2; -} - -.spinner { - margin: 5rem auto; - text-align: center; - - svg { - height: 6rem; - width: 6rem; - fill: $color-primary; - animation: rotate 2s infinite linear; - } -} - -@keyframes rotate { - 0% { - transform: rotate(0); - } - - 100% { - transform: rotate(360deg); - } -} - -.message, -.error { - max-width: 40rem; - margin: 0 auto; - padding: 5rem 4rem; - - display: flex; - - svg { - height: 3rem; - width: 3rem; - fill: $color-primary; - transform: translateY(-0.3rem); - } - - p { - margin-left: 1.5rem; - font-size: 1.8rem; - line-height: 1.5; - font-weight: 600; - } -} diff --git a/18-forkify/final/src/sass/_header.scss b/18-forkify/final/src/sass/_header.scss deleted file mode 100644 index 0054c62993..0000000000 --- a/18-forkify/final/src/sass/_header.scss +++ /dev/null @@ -1,144 +0,0 @@ -.header { - grid-area: head; - background-color: $color-grey-light-1; - display: flex; - align-items: center; - justify-content: space-between; - - &__logo { - margin-left: 4rem; - height: 4.6rem; - display: block; - } -} - -.search { - background-color: #fff; - border-radius: 10rem; - display: flex; - align-items: center; - padding-left: 3rem; - transition: all 0.3s; - - &:focus-within { - transform: translateY(-2px); - box-shadow: 0 0.7rem 3rem rgba($color-grey-dark-1, 0.08); - } - - &__field { - border: none; - background: none; - font-family: inherit; - color: inherit; - font-size: 1.7rem; - width: 30rem; - - &:focus { - outline: none; - } - - &::placeholder { - color: $color-grey-light-3; - } - - @media only screen and (max-width: $bp-medium) { - width: auto; - - &::placeholder { - color: white; - } - } - } - - &__btn { - font-weight: 600; - font-family: inherit; - } -} - -.nav { - align-self: stretch; - margin-right: 2.5rem; - - &__list { - list-style: none; - display: flex; - height: 100%; - } - - &__item { - position: relative; - } - - &__btn { - height: 100%; - font-family: inherit; - color: inherit; - font-size: 1.4rem; - font-weight: 700; - text-transform: uppercase; - background: none; - border: none; - cursor: pointer; - padding: 0 1.5rem; - transition: all 0.3s; - - display: flex; - align-items: center; - - svg { - height: 2.4rem; - width: 2.4rem; - fill: $color-primary; - margin-right: 0.7rem; - transform: translateY(-1px); - } - - &:focus { - outline: none; - } - - &:hover { - background-color: $color-grey-light-2; - } - } -} - -.bookmarks { - padding: 1rem 0; - position: absolute; - // right: 0; - right: -2.5rem; - z-index: 10; - width: 40rem; - background-color: #fff; - box-shadow: 0 0.8rem 5rem 2rem rgba($color-grey-dark-1, 0.1); - - visibility: hidden; - opacity: 0; - transition: all 0.5s 0.2s; - - &__list { - list-style: none; - } - - &__field { - cursor: pointer; - padding: 0 4rem; - - display: flex; - align-items: center; - height: 100%; - transition: all 0.3s; - - &:hover { - background-color: $color-grey-light-2; - } - } - - &:hover, - .nav__btn--bookmarks:hover + & { - visibility: visible; - opacity: 1; - } -} diff --git a/18-forkify/final/src/sass/_preview.scss b/18-forkify/final/src/sass/_preview.scss deleted file mode 100644 index f10c0086d9..0000000000 --- a/18-forkify/final/src/sass/_preview.scss +++ /dev/null @@ -1,105 +0,0 @@ -.preview { - &__link { - &:link, - &:visited { - display: flex; - align-items: center; - padding: 1.5rem 3.25rem; - transition: all 0.3s; - border-right: 1px solid #fff; - text-decoration: none; - } - - &:hover { - background-color: $color-grey-light-1; - transform: translateY(-2px); - } - - &--active { - background-color: $color-grey-light-1; - } - } - - &__fig { - flex: 0 0 5.8rem; - border-radius: 50%; - overflow: hidden; - height: 5.8rem; - margin-right: 2rem; - position: relative; - backface-visibility: hidden; - - &::before { - content: ''; - display: block; - height: 100%; - width: 100%; - position: absolute; - top: 0; - left: 0; - background-image: linear-gradient( - to right bottom, - $color-grad-1, - $color-grad-2 - ); - opacity: 0.4; - } - - img { - display: block; - width: 100%; - height: 100%; - object-fit: cover; - transition: all 0.3s; - } - } - - &__data { - display: grid; - width: 100%; - grid-template-columns: 1fr 2rem; - row-gap: 0.1rem; - align-items: center; - } - - &__title { - grid-column: 1/-1; - font-size: 1.45rem; - color: $color-primary; - text-transform: uppercase; - font-weight: 600; - - // This is how text is truncated! - text-overflow: ellipsis; - max-width: 25rem; - white-space: nowrap; - overflow: hidden; - } - - &__publisher { - font-size: 1.15rem; - color: $color-grey-dark-2; - text-transform: uppercase; - font-weight: 600; - } - - &__user-generated { - background-color: darken($color-grey-light-2, 2%); - - display: flex; - align-items: center; - justify-content: center; - height: 2rem; - width: 2rem; - border-radius: 10rem; - - margin-left: auto; - margin-right: 1.75rem; - - svg { - height: 1.2rem; - width: 1.2rem; - fill: $color-primary; - } - } -} diff --git a/18-forkify/final/src/sass/_recipe.scss b/18-forkify/final/src/sass/_recipe.scss deleted file mode 100644 index b6e72fe6f8..0000000000 --- a/18-forkify/final/src/sass/_recipe.scss +++ /dev/null @@ -1,179 +0,0 @@ -.recipe { - background-color: $color-grey-light-1; - - /////////// - // FIGURE - &__fig { - height: 32rem; - position: relative; - // transform: scale(1.04) translateY(-1px); - transform-origin: top; - - &::before { - content: ''; - display: block; - height: 100%; - width: 100%; - position: absolute; - top: 0; - left: 0; - background-image: linear-gradient( - to right bottom, - $color-grad-1, - $color-grad-2 - ); - opacity: 0.6; - } - } - - &__img { - width: 100%; - display: block; - height: 100%; - object-fit: cover; - } - - &__title { - position: absolute; - bottom: 0; - left: 50%; - transform: translate(-50%, 20%) skewY(-6deg); - color: #fff; - font-weight: 700; - font-size: 3.25rem; - text-transform: uppercase; - width: 50%; - line-height: 1.95; - text-align: center; - - span { - -webkit-box-decoration-break: clone; - box-decoration-break: clone; - padding: 1.3rem 2rem; - background-image: linear-gradient( - to right bottom, - $color-grad-1, - $color-grad-2 - ); - } - - @media only screen and (max-width: $bp-medium) { - width: 70%; - } - } - - /////////// - // DETAILS - &__details { - display: flex; - align-items: center; - padding: 7.5rem 8rem 3.5rem 8rem; - } - - &__info { - font-size: 1.65rem; - text-transform: uppercase; - display: flex; - align-items: center; - - &:not(:last-child) { - margin-right: 4.5rem; - } - } - - &__info-icon { - height: 2.35rem; - width: 2.35rem; - fill: $color-primary; - margin-right: 1.15rem; - } - - &__info-data { - margin-right: 0.5rem; - font-weight: 700; - } - - &__info-buttons { - display: flex; - margin-left: 1.6rem; - transform: translateY(-1px); - } - - &__user-generated { - background-color: darken($color-grey-light-2, 2%); - - display: flex; - align-items: center; - justify-content: center; - height: 4rem; - width: 4rem; - border-radius: 10rem; - - margin-left: auto; - margin-right: 1.75rem; - - svg { - height: 2.25rem; - width: 2.25rem; - fill: $color-primary; - } - } - - /////////// - // INGREDIENTS - &__ingredients { - padding: 5rem 8rem; - font-size: 1.6rem; - line-height: 1.4; - background-color: $color-grey-light-2; - display: flex; - flex-direction: column; - align-items: center; - } - - &__ingredient-list { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 2.5rem 3rem; - list-style: none; - } - - &__ingredient { - display: flex; - } - - &__icon { - height: 2rem; - width: 2rem; - fill: $color-primary; - margin-right: 1.1rem; - flex: 0 0 auto; - margin-top: 0.1rem; - } - - &__quantity { - margin-right: 0.5rem; - flex: 0 0 auto; - } - - /////////// - // DIRECTIONS - &__directions { - padding: 5rem 10rem; - padding-bottom: 5rem; - display: flex; - flex-direction: column; - align-items: center; - } - - &__directions-text { - font-size: 1.7rem; - text-align: center; - margin-bottom: 3.5rem; - color: $color-grey-dark-2; - } - - &__publisher { - font-weight: 700; - } -} diff --git a/18-forkify/final/src/sass/_searchResults.scss b/18-forkify/final/src/sass/_searchResults.scss deleted file mode 100644 index e8f2105a81..0000000000 --- a/18-forkify/final/src/sass/_searchResults.scss +++ /dev/null @@ -1,42 +0,0 @@ -.search-results { - padding: 3rem 0; - display: flex; - flex-direction: column; -} - -.results { - list-style: none; - margin-bottom: 2rem; -} - -.pagination { - margin-top: auto; - padding: 0 3.5rem; - - &::after { - content: ''; - display: table; - clear: both; - } - - &__btn { - &--prev { - float: left; - } - &--next { - float: right; - } - } -} - -.copyright { - color: $color-grey-dark-2; - font-size: 1.2rem; - padding: 0 3.5rem; - margin-top: 4rem; - - .twitter-link:link, - .twitter-link:visited { - color: $color-grey-dark-2; - } -} diff --git a/18-forkify/final/src/sass/_upload.scss b/18-forkify/final/src/sass/_upload.scss deleted file mode 100644 index d724828532..0000000000 --- a/18-forkify/final/src/sass/_upload.scss +++ /dev/null @@ -1,99 +0,0 @@ -.add-recipe-window { - position: fixed; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - width: 100rem; - background-color: white; - border-radius: 9px; - - padding: 5rem 6rem; - box-shadow: 0 4rem 6rem rgba(0, 0, 0, 0.25); - z-index: 1000; - transition: all 0.5s; - - .btn--close-modal { - font-family: inherit; - color: inherit; - position: absolute; - top: 0.5rem; - right: 1.6rem; - font-size: 3.5rem; - cursor: pointer; - border: none; - background: none; - } -} - -.overlay { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: rgba(0, 0, 0, 0.4); - backdrop-filter: blur(4px); - z-index: 100; - transition: all 0.5s; -} - -.hidden { - visibility: hidden; - opacity: 0; -} - -.upload { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 4rem 6rem; - - &__column { - display: grid; - grid-template-columns: 1fr 2.8fr; - align-items: center; - gap: 1.5rem; - - & label { - font-size: 1.5rem; - font-weight: 600; - color: inherit; - } - - & input { - font-size: 1.5rem; - padding: 0.8rem 1rem; - border: 1px solid #ddd; - border-radius: 0.5rem; - transition: all 0.2s; - - &::placeholder { - color: $color-grey-light-3; - } - - &:focus { - outline: none; - border: 1px solid $color-primary; - background-color: $color-grey-light-1; - } - } - - & button { - grid-column: 1 / span 2; - justify-self: center; - margin-top: 1rem; - } - } - - &__heading { - font-size: 2.25rem; - font-weight: 700; - text-transform: uppercase; - margin-bottom: 1rem; - grid-column: 1/-1; - } - - &__btn { - grid-column: 1 / -1; - justify-self: center; - } -} diff --git a/18-forkify/final/src/sass/main.scss b/18-forkify/final/src/sass/main.scss deleted file mode 100644 index aa5be961d0..0000000000 --- a/18-forkify/final/src/sass/main.scss +++ /dev/null @@ -1,7 +0,0 @@ -@import 'base'; -@import 'components'; -@import 'header'; -@import 'preview'; -@import 'searchResults'; -@import 'recipe'; -@import 'upload'; diff --git a/18-forkify/starter/.prettierrc b/18-forkify/starter/.prettierrc deleted file mode 100644 index b4f8e6a6a1..0000000000 --- a/18-forkify/starter/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/18-forkify/starter/forkify-architecture-recipe-loading.png b/18-forkify/starter/forkify-architecture-recipe-loading.png deleted file mode 100644 index 7d042b3e6f..0000000000 Binary files a/18-forkify/starter/forkify-architecture-recipe-loading.png and /dev/null differ diff --git a/18-forkify/starter/forkify-flowchart-part-1.png b/18-forkify/starter/forkify-flowchart-part-1.png deleted file mode 100644 index ac5d1a428e..0000000000 Binary files a/18-forkify/starter/forkify-flowchart-part-1.png and /dev/null differ diff --git a/18-forkify/starter/forkify-flowchart-part-2.png b/18-forkify/starter/forkify-flowchart-part-2.png deleted file mode 100644 index 9336bc82ce..0000000000 Binary files a/18-forkify/starter/forkify-flowchart-part-2.png and /dev/null differ diff --git a/18-forkify/starter/forkify-flowchart-part-3.png b/18-forkify/starter/forkify-flowchart-part-3.png deleted file mode 100644 index d9a2c5963f..0000000000 Binary files a/18-forkify/starter/forkify-flowchart-part-3.png and /dev/null differ diff --git a/18-forkify/starter/index.html b/18-forkify/starter/index.html deleted file mode 100755 index 0f977f51f7..0000000000 --- a/18-forkify/starter/index.html +++ /dev/null @@ -1,332 +0,0 @@ - - - - - - - - - - - - - forkify // Search over 1,000,000 recipes - - - -
    -
    - - - - -
    - -
    -
      - -
    - - - - -
    - -
    -
    -
    - - - -
    -

    Start by searching for a recipe or an ingredient. Have fun!

    -
    - - - - - - -
    -
    - - - - - diff --git a/18-forkify/starter/src/img/icons.svg b/18-forkify/starter/src/img/icons.svg deleted file mode 100644 index 20e918a168..0000000000 --- a/18-forkify/starter/src/img/icons.svg +++ /dev/null @@ -1,60 +0,0 @@ - diff --git a/18-forkify/starter/src/js/controller.js b/18-forkify/starter/src/js/controller.js deleted file mode 100644 index 8a04467716..0000000000 --- a/18-forkify/starter/src/js/controller.js +++ /dev/null @@ -1,14 +0,0 @@ -const recipeContainer = document.querySelector('.recipe'); - -const timeout = function (s) { - return new Promise(function (_, reject) { - setTimeout(function () { - reject(new Error(`Request took too long! Timeout after ${s} second`)); - }, s * 1000); - }); -}; - -// NEW API URL (instead of the one shown in the video) -// https://forkify-api.jonas.io - -/////////////////////////////////////// diff --git a/18-forkify/starter/src/sass/_base.scss b/18-forkify/starter/src/sass/_base.scss deleted file mode 100644 index 16dec6b1f2..0000000000 --- a/18-forkify/starter/src/sass/_base.scss +++ /dev/null @@ -1,71 +0,0 @@ -// $color-primary: #f59a83; -$color-primary: #f38e82; -$color-grad-1: #fbdb89; -$color-grad-2: #f48982; - -$color-grey-light-1: #f9f5f3; // Light background -$color-grey-light-2: #f2efee; // Light lines -$color-grey-light-3: #d3c7c3; // Light text (placeholder) -$color-grey-dark-1: #615551; // Normal text -$color-grey-dark-2: #918581; // Lighter text - -$gradient: linear-gradient(to right bottom, $color-grad-1, $color-grad-2); - -$bp-large: 78.15em; // 1250px -$bp-medium: 61.25em; // 980px -$bp-small: 37.5em; // 600px -$bp-smallest: 31.25em; // 500px - -* { - margin: 0; - padding: 0; -} - -*, -*::before, -*::after { - box-sizing: inherit; -} - -html { - box-sizing: border-box; - font-size: 62.5%; - - @media only screen and (max-width: $bp-medium) { - font-size: 50%; - } -} - -body { - font-family: 'Nunito Sans', sans-serif; - font-weight: 400; - line-height: 1.6; - color: $color-grey-dark-1; - background-image: $gradient; - background-size: cover; - background-repeat: no-repeat; - min-height: calc(100vh - 2 * 4vw); -} - -.container { - max-width: 120rem; - min-height: 117rem; - margin: 4vw auto; - background-color: #fff; - border-radius: 9px; - overflow: hidden; - box-shadow: 0 2rem 6rem 0.5rem rgba($color-grey-dark-1, 0.2); - - display: grid; - grid-template-rows: 10rem minmax(100rem, auto); - grid-template-columns: 1fr 2fr; - grid-template-areas: - 'head head' - 'list recipe'; - - @media only screen and (max-width: $bp-large) { - max-width: 100%; - margin: 0; - border-radius: 0; - } -} diff --git a/18-forkify/starter/src/sass/_components.scss b/18-forkify/starter/src/sass/_components.scss deleted file mode 100644 index f8612eb9bc..0000000000 --- a/18-forkify/starter/src/sass/_components.scss +++ /dev/null @@ -1,213 +0,0 @@ -%btn { - background-image: $gradient; - border-radius: 10rem; - border: none; - text-transform: uppercase; - color: #fff; - cursor: pointer; - display: flex; - align-items: center; - transition: all 0.2s; - - &:hover { - transform: scale(1.05); - } - - &:focus { - outline: none; - } - - & > *:first-child { - margin-right: 1rem; - } -} - -.btn { - @extend %btn; - - padding: 1.5rem 4rem; - font-size: 1.5rem; - font-weight: 600; - - svg { - height: 2.25rem; - width: 2.25rem; - fill: currentColor; - } -} - -.btn--small { - &, - &:link, - &:visited { - @extend %btn; - - font-size: 1.4rem; - font-weight: 600; - padding: 1.25rem 2.25rem; - text-decoration: none; - - svg { - height: 1.75rem; - width: 1.75rem; - fill: currentColor; - } - } -} - -.btn--inline { - color: $color-primary; - font-size: 1.3rem; - font-weight: 600; - border: none; - background-color: $color-grey-light-1; - padding: 0.8rem 1.2rem; - border-radius: 10rem; - cursor: pointer; - - display: flex; - align-items: center; - transition: all 0.2s; - - svg { - height: 1.6rem; - width: 1.6rem; - fill: currentColor; - margin: 0 0.2rem; - } - - span { - margin: 0 0.4rem; - } - - &:hover { - color: $color-grad-2; - background-color: $color-grey-light-2; - } - - &:focus { - outline: none; - } -} - -.btn--round { - background-image: $gradient; - border-radius: 50%; - border: none; - cursor: pointer; - height: 4.5rem; - width: 4.5rem; - // margin-left: auto; - transition: all 0.2s; - - display: flex; - align-items: center; - justify-content: center; - - &:hover { - transform: scale(1.07); - } - - &:focus { - outline: none; - } - - svg { - height: 2.5rem; - width: 2.5rem; - fill: #fff; - } -} - -.btn--tiny { - height: 2rem; - width: 2rem; - border: none; - background: none; - cursor: pointer; - - svg { - height: 100%; - width: 100%; - fill: $color-primary; - transition: all 0.3s; - } - - &:focus { - outline: none; - } - - &:hover svg { - fill: $color-grad-2; - transform: translateY(-1px); - } - - &:active svg { - fill: $color-grad-2; - transform: translateY(0); - } - - &:not(:last-child) { - margin-right: 0.3rem; - } -} - -.heading--2 { - font-size: 2rem; - font-weight: 700; - color: $color-primary; - text-transform: uppercase; - margin-bottom: 2.5rem; - text-align: center; - // transform: skewY(-3deg); -} - -.link:link, -.link:visited { - color: $color-grey-dark-2; -} - -.spinner { - margin: 5rem auto; - text-align: center; - - svg { - height: 6rem; - width: 6rem; - fill: $color-primary; - animation: rotate 2s infinite linear; - } -} - -@keyframes rotate { - 0% { - transform: rotate(0); - } - - 100% { - transform: rotate(360deg); - } -} - -.message, -.error { - max-width: 40rem; - margin: 0 auto; - padding: 5rem 4rem; - - display: flex; - - svg { - height: 3rem; - width: 3rem; - fill: $color-primary; - transform: translateY(-0.3rem); - } - - p { - margin-left: 1.5rem; - font-size: 1.8rem; - line-height: 1.5; - font-weight: 600; - } -} diff --git a/18-forkify/starter/src/sass/_header.scss b/18-forkify/starter/src/sass/_header.scss deleted file mode 100644 index 0054c62993..0000000000 --- a/18-forkify/starter/src/sass/_header.scss +++ /dev/null @@ -1,144 +0,0 @@ -.header { - grid-area: head; - background-color: $color-grey-light-1; - display: flex; - align-items: center; - justify-content: space-between; - - &__logo { - margin-left: 4rem; - height: 4.6rem; - display: block; - } -} - -.search { - background-color: #fff; - border-radius: 10rem; - display: flex; - align-items: center; - padding-left: 3rem; - transition: all 0.3s; - - &:focus-within { - transform: translateY(-2px); - box-shadow: 0 0.7rem 3rem rgba($color-grey-dark-1, 0.08); - } - - &__field { - border: none; - background: none; - font-family: inherit; - color: inherit; - font-size: 1.7rem; - width: 30rem; - - &:focus { - outline: none; - } - - &::placeholder { - color: $color-grey-light-3; - } - - @media only screen and (max-width: $bp-medium) { - width: auto; - - &::placeholder { - color: white; - } - } - } - - &__btn { - font-weight: 600; - font-family: inherit; - } -} - -.nav { - align-self: stretch; - margin-right: 2.5rem; - - &__list { - list-style: none; - display: flex; - height: 100%; - } - - &__item { - position: relative; - } - - &__btn { - height: 100%; - font-family: inherit; - color: inherit; - font-size: 1.4rem; - font-weight: 700; - text-transform: uppercase; - background: none; - border: none; - cursor: pointer; - padding: 0 1.5rem; - transition: all 0.3s; - - display: flex; - align-items: center; - - svg { - height: 2.4rem; - width: 2.4rem; - fill: $color-primary; - margin-right: 0.7rem; - transform: translateY(-1px); - } - - &:focus { - outline: none; - } - - &:hover { - background-color: $color-grey-light-2; - } - } -} - -.bookmarks { - padding: 1rem 0; - position: absolute; - // right: 0; - right: -2.5rem; - z-index: 10; - width: 40rem; - background-color: #fff; - box-shadow: 0 0.8rem 5rem 2rem rgba($color-grey-dark-1, 0.1); - - visibility: hidden; - opacity: 0; - transition: all 0.5s 0.2s; - - &__list { - list-style: none; - } - - &__field { - cursor: pointer; - padding: 0 4rem; - - display: flex; - align-items: center; - height: 100%; - transition: all 0.3s; - - &:hover { - background-color: $color-grey-light-2; - } - } - - &:hover, - .nav__btn--bookmarks:hover + & { - visibility: visible; - opacity: 1; - } -} diff --git a/18-forkify/starter/src/sass/_preview.scss b/18-forkify/starter/src/sass/_preview.scss deleted file mode 100644 index f10c0086d9..0000000000 --- a/18-forkify/starter/src/sass/_preview.scss +++ /dev/null @@ -1,105 +0,0 @@ -.preview { - &__link { - &:link, - &:visited { - display: flex; - align-items: center; - padding: 1.5rem 3.25rem; - transition: all 0.3s; - border-right: 1px solid #fff; - text-decoration: none; - } - - &:hover { - background-color: $color-grey-light-1; - transform: translateY(-2px); - } - - &--active { - background-color: $color-grey-light-1; - } - } - - &__fig { - flex: 0 0 5.8rem; - border-radius: 50%; - overflow: hidden; - height: 5.8rem; - margin-right: 2rem; - position: relative; - backface-visibility: hidden; - - &::before { - content: ''; - display: block; - height: 100%; - width: 100%; - position: absolute; - top: 0; - left: 0; - background-image: linear-gradient( - to right bottom, - $color-grad-1, - $color-grad-2 - ); - opacity: 0.4; - } - - img { - display: block; - width: 100%; - height: 100%; - object-fit: cover; - transition: all 0.3s; - } - } - - &__data { - display: grid; - width: 100%; - grid-template-columns: 1fr 2rem; - row-gap: 0.1rem; - align-items: center; - } - - &__title { - grid-column: 1/-1; - font-size: 1.45rem; - color: $color-primary; - text-transform: uppercase; - font-weight: 600; - - // This is how text is truncated! - text-overflow: ellipsis; - max-width: 25rem; - white-space: nowrap; - overflow: hidden; - } - - &__publisher { - font-size: 1.15rem; - color: $color-grey-dark-2; - text-transform: uppercase; - font-weight: 600; - } - - &__user-generated { - background-color: darken($color-grey-light-2, 2%); - - display: flex; - align-items: center; - justify-content: center; - height: 2rem; - width: 2rem; - border-radius: 10rem; - - margin-left: auto; - margin-right: 1.75rem; - - svg { - height: 1.2rem; - width: 1.2rem; - fill: $color-primary; - } - } -} diff --git a/18-forkify/starter/src/sass/_recipe.scss b/18-forkify/starter/src/sass/_recipe.scss deleted file mode 100644 index b6e72fe6f8..0000000000 --- a/18-forkify/starter/src/sass/_recipe.scss +++ /dev/null @@ -1,179 +0,0 @@ -.recipe { - background-color: $color-grey-light-1; - - /////////// - // FIGURE - &__fig { - height: 32rem; - position: relative; - // transform: scale(1.04) translateY(-1px); - transform-origin: top; - - &::before { - content: ''; - display: block; - height: 100%; - width: 100%; - position: absolute; - top: 0; - left: 0; - background-image: linear-gradient( - to right bottom, - $color-grad-1, - $color-grad-2 - ); - opacity: 0.6; - } - } - - &__img { - width: 100%; - display: block; - height: 100%; - object-fit: cover; - } - - &__title { - position: absolute; - bottom: 0; - left: 50%; - transform: translate(-50%, 20%) skewY(-6deg); - color: #fff; - font-weight: 700; - font-size: 3.25rem; - text-transform: uppercase; - width: 50%; - line-height: 1.95; - text-align: center; - - span { - -webkit-box-decoration-break: clone; - box-decoration-break: clone; - padding: 1.3rem 2rem; - background-image: linear-gradient( - to right bottom, - $color-grad-1, - $color-grad-2 - ); - } - - @media only screen and (max-width: $bp-medium) { - width: 70%; - } - } - - /////////// - // DETAILS - &__details { - display: flex; - align-items: center; - padding: 7.5rem 8rem 3.5rem 8rem; - } - - &__info { - font-size: 1.65rem; - text-transform: uppercase; - display: flex; - align-items: center; - - &:not(:last-child) { - margin-right: 4.5rem; - } - } - - &__info-icon { - height: 2.35rem; - width: 2.35rem; - fill: $color-primary; - margin-right: 1.15rem; - } - - &__info-data { - margin-right: 0.5rem; - font-weight: 700; - } - - &__info-buttons { - display: flex; - margin-left: 1.6rem; - transform: translateY(-1px); - } - - &__user-generated { - background-color: darken($color-grey-light-2, 2%); - - display: flex; - align-items: center; - justify-content: center; - height: 4rem; - width: 4rem; - border-radius: 10rem; - - margin-left: auto; - margin-right: 1.75rem; - - svg { - height: 2.25rem; - width: 2.25rem; - fill: $color-primary; - } - } - - /////////// - // INGREDIENTS - &__ingredients { - padding: 5rem 8rem; - font-size: 1.6rem; - line-height: 1.4; - background-color: $color-grey-light-2; - display: flex; - flex-direction: column; - align-items: center; - } - - &__ingredient-list { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 2.5rem 3rem; - list-style: none; - } - - &__ingredient { - display: flex; - } - - &__icon { - height: 2rem; - width: 2rem; - fill: $color-primary; - margin-right: 1.1rem; - flex: 0 0 auto; - margin-top: 0.1rem; - } - - &__quantity { - margin-right: 0.5rem; - flex: 0 0 auto; - } - - /////////// - // DIRECTIONS - &__directions { - padding: 5rem 10rem; - padding-bottom: 5rem; - display: flex; - flex-direction: column; - align-items: center; - } - - &__directions-text { - font-size: 1.7rem; - text-align: center; - margin-bottom: 3.5rem; - color: $color-grey-dark-2; - } - - &__publisher { - font-weight: 700; - } -} diff --git a/18-forkify/starter/src/sass/_searchResults.scss b/18-forkify/starter/src/sass/_searchResults.scss deleted file mode 100644 index e8f2105a81..0000000000 --- a/18-forkify/starter/src/sass/_searchResults.scss +++ /dev/null @@ -1,42 +0,0 @@ -.search-results { - padding: 3rem 0; - display: flex; - flex-direction: column; -} - -.results { - list-style: none; - margin-bottom: 2rem; -} - -.pagination { - margin-top: auto; - padding: 0 3.5rem; - - &::after { - content: ''; - display: table; - clear: both; - } - - &__btn { - &--prev { - float: left; - } - &--next { - float: right; - } - } -} - -.copyright { - color: $color-grey-dark-2; - font-size: 1.2rem; - padding: 0 3.5rem; - margin-top: 4rem; - - .twitter-link:link, - .twitter-link:visited { - color: $color-grey-dark-2; - } -} diff --git a/18-forkify/starter/src/sass/_upload.scss b/18-forkify/starter/src/sass/_upload.scss deleted file mode 100644 index d724828532..0000000000 --- a/18-forkify/starter/src/sass/_upload.scss +++ /dev/null @@ -1,99 +0,0 @@ -.add-recipe-window { - position: fixed; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - width: 100rem; - background-color: white; - border-radius: 9px; - - padding: 5rem 6rem; - box-shadow: 0 4rem 6rem rgba(0, 0, 0, 0.25); - z-index: 1000; - transition: all 0.5s; - - .btn--close-modal { - font-family: inherit; - color: inherit; - position: absolute; - top: 0.5rem; - right: 1.6rem; - font-size: 3.5rem; - cursor: pointer; - border: none; - background: none; - } -} - -.overlay { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: rgba(0, 0, 0, 0.4); - backdrop-filter: blur(4px); - z-index: 100; - transition: all 0.5s; -} - -.hidden { - visibility: hidden; - opacity: 0; -} - -.upload { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 4rem 6rem; - - &__column { - display: grid; - grid-template-columns: 1fr 2.8fr; - align-items: center; - gap: 1.5rem; - - & label { - font-size: 1.5rem; - font-weight: 600; - color: inherit; - } - - & input { - font-size: 1.5rem; - padding: 0.8rem 1rem; - border: 1px solid #ddd; - border-radius: 0.5rem; - transition: all 0.2s; - - &::placeholder { - color: $color-grey-light-3; - } - - &:focus { - outline: none; - border: 1px solid $color-primary; - background-color: $color-grey-light-1; - } - } - - & button { - grid-column: 1 / span 2; - justify-self: center; - margin-top: 1rem; - } - } - - &__heading { - font-size: 2.25rem; - font-weight: 700; - text-transform: uppercase; - margin-bottom: 1rem; - grid-column: 1/-1; - } - - &__btn { - grid-column: 1 / -1; - justify-self: center; - } -} diff --git a/18-forkify/starter/src/sass/main.scss b/18-forkify/starter/src/sass/main.scss deleted file mode 100644 index aa5be961d0..0000000000 --- a/18-forkify/starter/src/sass/main.scss +++ /dev/null @@ -1,7 +0,0 @@ -@import 'base'; -@import 'components'; -@import 'header'; -@import 'preview'; -@import 'searchResults'; -@import 'recipe'; -@import 'upload'; diff --git a/2-JS-basics/.DS_Store b/2-JS-basics/.DS_Store new file mode 100755 index 0000000000..e238e9d425 Binary files /dev/null and b/2-JS-basics/.DS_Store differ diff --git a/2-JS-basics/final/.DS_Store b/2-JS-basics/final/.DS_Store new file mode 100755 index 0000000000..5008ddfcf5 Binary files /dev/null and b/2-JS-basics/final/.DS_Store differ diff --git a/2-JS-basics/final/index.html b/2-JS-basics/final/index.html new file mode 100755 index 0000000000..5d0dd91513 --- /dev/null +++ b/2-JS-basics/final/index.html @@ -0,0 +1,13 @@ + + + + + Section 2: JavaScript Language Basics + + + +

    Section 2: JavaScript Language Basics

    + + + + \ No newline at end of file diff --git a/2-JS-basics/final/script.js b/2-JS-basics/final/script.js new file mode 100644 index 0000000000..c7ea7da6ad --- /dev/null +++ b/2-JS-basics/final/script.js @@ -0,0 +1,736 @@ +/***************************** +* Variables and data types +*/ +/* +var firstName = 'John'; +console.log(firstName); + +var lastName = 'Smith'; +var age = 28; + +var fullAge = true; +console.log(fullAge); + +var job; +console.log(job); + +job = 'Teacher'; +console.log(job); + +// Variable naming rules +var _3years = 3; +var johnMark = 'John and MArk'; +var if = 23; +*/ + + + +/***************************** +* Variable mutation and type coercion +*/ +/* +var firstName = 'John'; +var age = 28; + +// Type coercion +console.log(firstName + ' ' + age); + +var job, isMarried; +job = 'teacher'; +isMarried = false; + +console.log(firstName + ' is a ' + age + ' year old ' + job + '. Is he married? ' + isMarried); + +// Variable mutation +age = 'twenty eight'; +job = 'driver'; + +alert(firstName + ' is a ' + age + ' year old ' + job + '. Is he married? ' + isMarried); + +var lastName = prompt('What is his last Name?'); +console.log(firstName + ' ' + lastName); +*/ + + + +/***************************** +* Basic operators +*/ +/* +var year, yearJohn, yearMark; +now = 2018; +ageJohn = 28; +ageMark = 33; + +// Math operators +yearJohn = now - ageJohn; +yeahMark = now - ageMark; + +console.log(yearJohn); + +console.log(now + 2); +console.log(now * 2); +console.log(now / 10); + + +// Logical operators +var johnOlder = ageJohn < ageMark; +console.log(johnOlder); + + +// typeof operator +console.log(typeof johnOlder); +console.log(typeof ageJohn); +console.log(typeof 'Mark is older tha John'); +var x; +console.log(typeof x); +*/ + + + +/***************************** +* Operator precedence +*/ +/* +var now = 2018; +var yearJohn = 1989; +var fullAge = 18; + +// Multiple operators +var isFullAge = now - yearJohn >= fullAge; // true +console.log(isFullAge); + +// Grouping +var ageJohn = now - yearJohn; +var ageMark = 35; +var average = (ageJohn + ageMark) / 2; +console.log(average); + +// Multiple assignments +var x, y; +x = y = (3 + 5) * 4 - 6; // 8 * 4 - 6 // 32 - 6 // 26 +console.log(x, y); + + +// More operators +x *= 2; +console.log(x); +x += 10; +console.log(x); +x--; +console.log(x); +*/ + + + +/***************************** +* CODING CHALLENGE 1 +*/ + +/* +Mark and John are trying to compare their BMI (Body Mass Index), which is calculated using the formula: BMI = mass / height^2 = mass / (height * height). (mass in kg and height in meter). + +1. Store Mark's and John's mass and height in variables +2. Calculate both their BMIs +3. Create a boolean variable containing information about whether Mark has a higher BMI than John. +4. Print a string to the console containing the variable from step 3. (Something like "Is Mark's BMI higher than John's? true"). + +GOOD LUCK ๐Ÿ˜€ +*/ +/* +var massMark = 78; // kg +var heightMark = 1.69; // meters + +var massJohn = 92; +var heightJohn = 1.95; + +var BMIMark = massMark / (heightMark * heightMark); +var BMIJohn = massJohn / (heightJohn * heightJohn); +console.log(BMIMark, BMIJohn); + +var markHigherBMI = BMIMark > BMIJohn; +console.log('Is Mark\'s BMI higher than John\'s? ' + markHigherBMI); +*/ + + + +/***************************** +* If / else statements +*/ +/* +var firstName = 'John'; +var civilStatus = 'single'; + +if (civilStatus === 'married') { + console.log(firstName + ' is married!'); +} else { + console.log(firstName + ' will hopefully marry soon :)'); +} + + +var isMarried = true; +if (isMarried) { + console.log(firstName + ' is married!'); +} else { + console.log(firstName + ' will hopefully marry soon :)'); +} + +var massMark = 78; // kg +var heightMark = 1.69; // meters + +var massJohn = 92; +var heightJohn = 1.95; + +var BMIMark = massMark / (heightMark * heightMark); +var BMIJohn = massJohn / (heightJohn * heightJohn); + +if (BMIMark > BMIJohn) { + console.log('Mark\'s BMI is higher than John\'s.'); +} else { + console.log('John\'s BMI is higher than Marks\'s.'); +} +*/ + + + +/***************************** +* Boolean logic +*/ +/* +var firstName = 'John'; +var age = 20; + +if (age < 13) { + console.log(firstName + ' is a boy.'); +} else if (age >= 13 && age < 20) { + console.log(firstName + ' is a teenager.'); +} else if (age >= 20 && age < 30) { + console.log(firstName + ' is a young man.'); +} else { + console.log(firstName + ' is a man.'); +} +*/ + + + +/***************************** +* The Ternary Operator and Switch Statements +*/ +/* +var firstName = 'John'; +var age = 14; + +// Ternary operator +age >= 18 ? console.log(firstName + ' drinks beer.') : console.log(firstName + ' drinks juice.'); + +var drink = age >= 18 ? 'beer' : 'juice'; +console.log(drink); + +(if (age >= 18) { + var drink = 'beer'; +} else { + var drink = 'juice'; +} + +// Switch statement +var job = 'instructor'; +switch (job) { + case 'teacher': + case 'instructor': + console.log(firstName + ' teaches kids how to code.'); + break; + case 'driver': + console.log(firstName + ' drives an uber in Lisbon.'); + break; + case 'designer': + console.log(firstName + ' designs beautiful websites.'); + break; + default: + console.log(firstName + ' does something else.'); +} + +age = 56; +switch (true) { + case age < 13: + console.log(firstName + ' is a boy.'); + break; + case age >= 13 && age < 20: + console.log(firstName + ' is a teenager.'); + break; + case age >= 20 && age < 30: + console.log(firstName + ' is a young man.'); + break; + default: + console.log(firstName + ' is a man.'); +} +*/ + + + +/***************************** +* Truthy and Falsy values and equality operators +*/ +/* +// falsy values: undefined, null, 0, '', NaN +// truthy values: NOT falsy values + +var height; + +height = 23; + +if (height || height === 0) { + console.log('Variable is defined'); +} else { + console.log('Variable has NOT been defined'); +} + +// Equality operators +if (height === '23') { + console.log('The == operator does type coercion!'); +} +*/ + + + +/***************************** +* CODING CHALLENGE 2 +*/ + +/* +John and Mike both play basketball in different teams. In the latest 3 games, John's team scored 89, 120 and 103 points, while Mike's team scored 116, 94 and 123 points. + +1. Calculate the average score for each team +2. Decide which teams wins in average (highest average score), and print the winner to the console. Also include the average score in the output. +3. Then change the scores to show different winners. Don't forget to take into account there might be a draw (the same average score) + +4. EXTRA: Mary also plays basketball, and her team scored 97, 134 and 105 points. Like before, log the average winner to the console. HINT: you will need the && operator to take the decision. If you can't solve this one, just watch the solution, it's no problem :) +5. Like before, change the scores to generate different winners, keeping in mind there might be draws. + +GOOD LUCK ๐Ÿ˜€ +*/ +/* +var scoreJohn = (189 + 120 + 103) / 3; +var scoreMike = (129 + 94 + 123) / 3; +var scoreMary = (97 + 134 + 105) / 3; +console.log(scoreJohn, scoreMike, scoreMary); + +if (scoreJohn > scoreMike && scoreJohn > scoreMary) { + console.log('John\'s team wins with ' + scoreJohn + ' points'); +} else if (scoreMike > scoreJohn && scoreMike > scoreMary) { + console.log('Mike\'s team wins with ' + scoreMike + ' points'); +} else if (scoreMary > scoreJohn && scoreMary > scoreMike) { + console.log('Mary\'s team wins with ' + scoreMary + ' points'); +} else { + console.log('There is a draw'); +} + + +if (scoreJohn > scoreMike) { + console.log('John\'s team wins with ' + scoreJohn + ' points'); +} else if (scoreMike > scoreJohn) { + console.log('Mike\'s team wins with ' + scoreMike + ' points'); +} else { + console.log('There is a draw'); +} +*/ + + + +/***************************** +* Functions +*/ +/* +function calculateAge(birthYear) { + return 2018 - birthYear; +} + +var ageJohn = calculateAge(1990); +var ageMike = calculateAge(1948); +var ageJane = calculateAge(1969); +console.log(ageJohn, ageMike, ageJane); + + +function yearsUntilRetirement(year, firstName) { + var age = calculateAge(year); + var retirement = 65 - age; + + if (retirement > 0) { + console.log(firstName + ' retires in ' + retirement + ' years.'); + } else { + console.log(firstName + ' is already retired.') + } + +} + +yearsUntilRetirement(1990, 'John'); +yearsUntilRetirement(1948, 'Mike'); +yearsUntilRetirement(1969, 'Jane'); +*/ + + + +/***************************** +* Function Statements and Expressions +*/ +/* +// Function declaration +// function whatDoYouDo(job, firstName) {} + +// Function expression +var whatDoYouDo = function(job, firstName) { + switch(job) { + case 'teacher': + return firstName + ' teaches kids how to code'; + case 'driver': + return firstName + ' drives a cab in Lisbon.' + case 'designer': + return firstName + ' designs beautiful websites'; + default: + return firstName + ' does something else'; + } +} + +console.log(whatDoYouDo('teacher', 'John')); +console.log(whatDoYouDo('designer', 'Jane')); +console.log(whatDoYouDo('retired', 'Mark')); +*/ + + + +/***************************** +* Arrays +*/ +/* +// Initialize new array +var names = ['John', 'Mark', 'Jane']; +var years = new Array(1990, 1969, 1948); + +console.log(names[2]); +console.log(names.length); + +// Mutate array data +names[1] = 'Ben'; +names[names.length] = 'Mary'; +console.log(names); + +// Different data types +var john = ['John', 'Smith', 1990, 'designer', false]; + +john.push('blue'); +john.unshift('Mr.'); +console.log(john); + +john.pop(); +john.pop(); +john.shift(); +console.log(john); + +console.log(john.indexOf(23)); + +var isDesigner = john.indexOf('designer') === -1 ? 'John is NOT a designer' : 'John IS a designer'; +console.log(isDesigner); +*/ + + + +/***************************** +* CODING CHALLENGE 3 +*/ + +/* +John and his family went on a holiday and went to 3 different restaurants. The bills were $124, $48 and $268. + +To tip the waiter a fair amount, John created a simple tip calculator (as a function). He likes to tip 20% of the bill when the bill is less than $50, 15% when the bill is between $50 and $200, and 10% if the bill is more than $200. + +In the end, John would like to have 2 arrays: +1) Containing all three tips (one for each bill) +2) Containing all three final paid amounts (bill + tip). + +(NOTE: To calculate 20% of a value, simply multiply it with 20/100 = 0.2) + +GOOD LUCK ๐Ÿ˜€ +*/ +/* +function tipCalculator(bill) { + var percentage; + if (bill < 50) { + percentage = .2; + } else if (bill >= 50 && bill < 200) { + percentage = .15; + } else { + percentage = .1; + } + return percentage * bill; +} + +var bills = [124, 48, 268]; +var tips = [tipCalculator(bills[0]), + tipCalculator(bills[1]), + tipCalculator(bills[2])]; + +var finalValues = [bills[0] + tips[0], + bills[1] + tips[1], + bills[2] + tips[2]]; + +console.log(tips, finalValues); +*/ + + + +/***************************** +* Objects and properties +*/ +/* +// Object literal +var john = { + firstName: 'John', + lastName: 'Smith', + birthYear: 1990, + family: ['Jane', 'Mark', 'Bob', 'Emily'], + job: 'teacher', + isMarried: false +}; + +console.log(john.firstName); +console.log(john['lastName']); +var x = 'birthYear'; +console.log(john[x]); + +john.job = 'designer'; +john['isMarried'] = true; +console.log(john); + +// new Object syntax +var jane = new Object(); +jane.firstName = 'Jane'; +jane.birthYear = 1969; +jane['lastName'] = 'Smith'; +console.log(jane); +*/ + + + +/***************************** +* Objects and methods +*/ +/* +var john = { + firstName: 'John', + lastName: 'Smith', + birthYear: 1992, + family: ['Jane', 'Mark', 'Bob', 'Emily'], + job: 'teacher', + isMarried: false, + calcAge: function() { + this.age = 2018 - this.birthYear; + } +}; + +john.calcAge(); +console.log(john); +*/ + + + +/***************************** +* CODING CHALLENGE 4 +*/ + +/* +Let's remember the first coding challenge where Mark and John compared their BMIs. Let's now implement the same functionality with objects and methods. +1. For each of them, create an object with properties for their full name, mass, and height +2. Then, add a method to each object to calculate the BMI. Save the BMI to the object and also return it from the method. +3. In the end, log to the console who has the highest BMI, together with the full name and the respective BMI. Don't forget they might have the same BMI. + +Remember: BMI = mass / height^2 = mass / (height * height). (mass in kg and height in meter). + +GOOD LUCK ๐Ÿ˜€ +*/ +/* +var john = { + fullName: 'John Smith', + mass: 110, + height: 1.95, + calcBMI: function() { + this.bmi = this.mass / (this.height * this.height); + return this.bmi; + } +} + +var mark = { + fullName: 'Mark Miller', + mass: 78, + height: 1.69, + calcBMI: function() { + this.bmi = this.mass / (this.height * this.height); + return this.bmi; + } +} + +if (john.calcBMI() > mark.calcBMI()) { + console.log(john.fullName + ' has a higher BMI of ' + john.bmi); +} else if (mark.bmi > john.bmi) { + console.log(mark.fullName + ' has a higher BMI of ' + mark.bmi); +} else { + console.log('They have the same BMI'); +} +*/ + + + +/***************************** +* Loops and iteration +*/ + +/* +// for loop +for (var i = 1; i <= 20; i += 2) { + console.log(i); +} + +// i = 0, 0 < 10 true, log i to console, i++ +// i = 1, 1 < 10 true, log i to the console, i++ +//... +// i = 9, 9 < 10 true, log i to the console, i++ +// i = 10, 10 < 10 FALSE, exit the loop! + + +var john = ['John', 'Smith', 1990, 'designer', false, 'blue']; +for (var i = 0; i < john.length; i++) { + console.log(john[i]); +} + +// While loop +var i = 0; +while(i < john.length) { + console.log(john[i]); + i++; +} + + +// continue and break statements +var john = ['John', 'Smith', 1990, 'designer', false, 'blue']; + +for (var i = 0; i < john.length; i++) { + if (typeof john[i] !== 'string') continue; + console.log(john[i]); +} + +for (var i = 0; i < john.length; i++) { + if (typeof john[i] !== 'string') break; + console.log(john[i]); +} + +// Looping backwards +for (var i = john.length - 1; i >= 0; i--) { + console.log(john[i]); +} +*/ + + + +/***************************** +* CODING CHALLENGE 5 +*/ + +/* +Remember the tip calculator challenge? Let's create a more advanced version using everything we learned! + +This time, John and his family went to 5 different restaurants. The bills were $124, $48, $268, $180 and $42. +John likes to tip 20% of the bill when the bill is less than $50, 15% when the bill is between $50 and $200, and 10% if the bill is more than $200. + +Implement a tip calculator using objects and loops: +1. Create an object with an array for the bill values +2. Add a method to calculate the tip +3. This method should include a loop to iterate over all the paid bills and do the tip calculations +4. As an output, create 1) a new array containing all tips, and 2) an array containing final paid amounts (bill + tip). HINT: Start with two empty arrays [] as properties and then fill them up in the loop. + + +EXTRA AFTER FINISHING: Mark's family also went on a holiday, going to 4 different restaurants. The bills were $77, $375, $110, and $45. +Mark likes to tip 20% of the bill when the bill is less than $100, 10% when the bill is between $100 and $300, and 25% if the bill is more than $300 (different than John). + +5. Implement the same functionality as before, this time using Mark's tipping rules +6. Create a function (not a method) to calculate the average of a given array of tips. HINT: Loop over the array, and in each iteration store the current sum in a variable (starting from 0). After you have the sum of the array, divide it by the number of elements in it (that's how you calculate the average) +7. Calculate the average tip for each family +8. Log to the console which family paid the highest tips on average + +GOOD LUCK ๐Ÿ˜€ +*/ + +/* +var john = { + fullName: 'John Smith', + bills: [124, 48, 268, 180, 42], + calcTips: function() { + this.tips = []; + this.finalValues = []; + + for (var i = 0; i < this.bills.length; i++) { + // Determine percentage based on tipping rules + var percentage; + var bill = this.bills[i]; + + if (bill < 50) { + percentage = .2; + } else if (bill >= 50 && bill < 200) { + percentage = .15; + } else { + percentage = .1; + } + + // Add results to the corresponing arrays + this.tips[i] = bill * percentage; + this.finalValues[i] = bill + bill * percentage; + } + } +} + +var mark = { + fullName: 'Mark Miller', + bills: [77, 475, 110, 45], + calcTips: function() { + this.tips = []; + this.finalValues = []; + + for (var i = 0; i < this.bills.length; i++) { + // Determine percentage based on tipping rules + var percentage; + var bill = this.bills[i]; + + if (bill < 100) { + percentage = .2; + } else if (bill >= 100 && bill < 300) { + percentage = .1; + } else { + percentage = .25; + } + + // Add results to the corresponing arrays + this.tips[i] = bill * percentage; + this.finalValues[i] = bill + bill * percentage; + } + } +} + +function calcAverage(tips) { + var sum = 0; + for (var i = 0; i < tips.length; i++) { + sum = sum + tips[i]; + } + return sum / tips.length; +} + +// Do the calculations +john.calcTips(); +mark.calcTips(); + +john.average = calcAverage(john.tips); +mark.average = calcAverage(mark.tips); +console.log(john, mark); + +if (john.average > mark.average) { + console.log(john.fullName + '\'s family pays higher tips, with an average of $' + john.average); +} else if (mark.average > john.average) { + console.log(mark.fullName + '\'s family pays higher tips, with an average of $' + mark.average); +} +*/ diff --git a/2-JS-basics/starter/index.html b/2-JS-basics/starter/index.html new file mode 100755 index 0000000000..975ef26c3b --- /dev/null +++ b/2-JS-basics/starter/index.html @@ -0,0 +1,11 @@ + + + + + Section 2: JavaScript Language Basics + + + +

    Section 2: JavaScript Language Basics

    + + \ No newline at end of file diff --git a/3-how-JS-works/.DS_Store b/3-how-JS-works/.DS_Store new file mode 100644 index 0000000000..79e453d908 Binary files /dev/null and b/3-how-JS-works/.DS_Store differ diff --git a/3-how-JS-works/final/index.html b/3-how-JS-works/final/index.html new file mode 100755 index 0000000000..404bc891e2 --- /dev/null +++ b/3-how-JS-works/final/index.html @@ -0,0 +1,12 @@ + + + + + Section 3: How JavaScript Works Behind the Scenes + + + +

    Section 3: How JavaScript Works Behind the Scenes

    + + + \ No newline at end of file diff --git a/3-how-JS-works/final/script.js b/3-how-JS-works/final/script.js new file mode 100755 index 0000000000..dbc890dfff --- /dev/null +++ b/3-how-JS-works/final/script.js @@ -0,0 +1,113 @@ +///////////////////////////////////// +// Lecture: Hoisting + +/* +// functions +calculateAge(1965); + +function calculateAge(year) { + console.log(2016 - year); +} + +// retirement(1956); +var retirement = function(year) { + console.log(65 - (2016 - year)); +} + + +// variables + +console.log(age); +var age = 23; + +function foo() { + console.log(age); + var age = 65; + console.log(age); +} +foo(); +console.log(age); +*/ + + + +///////////////////////////////////// +// Lecture: Scoping + +/* +// First scoping example +var a = 'Hello!'; +first(); + +function first() { + var b = 'Hi!'; + second(); + + function second() { + var c = 'Hey!'; + console.log(a + b + c); + } +} + + +// Example to show the differece between execution stack and scope chain +var a = 'Hello!'; +first(); + +function first() { + var b = 'Hi!'; + second(); + + function second() { + var c = 'Hey!'; + third() + } +} + +function third() { + var d = 'John'; + //console.log(c); + console.log(a+d); +} +*/ + + + +///////////////////////////////////// +// Lecture: The this keyword + +/* +//console.log(this); + +calculateAge(1985); + +function calculateAge(year) { + console.log(2016 - year); + console.log(this); +} + +var john = { + name: 'John', + yearOfBirth: 1990, + calculateAge: function() { + console.log(this); + console.log(2016 - this.yearOfBirth); + + function innerFunction() { + console.log(this); + } + innerFunction(); + } +} + +john.calculateAge(); + +var mike = { + name: 'Mike', + yearOfBirth: 1984 +}; + + +mike.calculateAge = john.calculateAge; +mike.calculateAge(); +*/ diff --git a/3-how-JS-works/starter/index.html b/3-how-JS-works/starter/index.html new file mode 100755 index 0000000000..404bc891e2 --- /dev/null +++ b/3-how-JS-works/starter/index.html @@ -0,0 +1,12 @@ + + + + + Section 3: How JavaScript Works Behind the Scenes + + + +

    Section 3: How JavaScript Works Behind the Scenes

    + + + \ No newline at end of file diff --git a/3-how-JS-works/starter/script.js b/3-how-JS-works/starter/script.js new file mode 100755 index 0000000000..fc38e6f4f6 --- /dev/null +++ b/3-how-JS-works/starter/script.js @@ -0,0 +1,77 @@ +/////////////////////////////////////// +// Lecture: Hoisting + + + + + + + + + + + + + + + + + +/////////////////////////////////////// +// Lecture: Scoping + + +// First scoping example + +/* +var a = 'Hello!'; +first(); + +function first() { + var b = 'Hi!'; + second(); + + function second() { + var c = 'Hey!'; + console.log(a + b + c); + } +} +*/ + + + +// Example to show the differece between execution stack and scope chain + +/* +var a = 'Hello!'; +first(); + +function first() { + var b = 'Hi!'; + second(); + + function second() { + var c = 'Hey!'; + third() + } +} + +function third() { + var d = 'John'; + console.log(a + b + c + d); +} +*/ + + + +/////////////////////////////////////// +// Lecture: The this keyword + + + + + + + + + diff --git a/4-DOM-pig-game/.DS_Store b/4-DOM-pig-game/.DS_Store new file mode 100644 index 0000000000..3a207eabf2 Binary files /dev/null and b/4-DOM-pig-game/.DS_Store differ diff --git a/4-DOM-pig-game/final/.DS_Store b/4-DOM-pig-game/final/.DS_Store new file mode 100644 index 0000000000..5008ddfcf5 Binary files /dev/null and b/4-DOM-pig-game/final/.DS_Store differ diff --git a/4-DOM-pig-game/final/app.js b/4-DOM-pig-game/final/app.js new file mode 100755 index 0000000000..14e6806814 --- /dev/null +++ b/4-DOM-pig-game/final/app.js @@ -0,0 +1,122 @@ +/* +GAME RULES: + +- The game has 2 players, playing in rounds +- In each turn, a player rolls a dice as many times as he whishes. Each result get added to his ROUND score +- BUT, if the player rolls a 1, all his ROUND score gets lost. After that, it's the next player's turn +- The player can choose to 'Hold', which means that his ROUND score gets added to his GLBAL score. After that, it's the next player's turn +- The first player to reach 100 points on GLOBAL score wins the game + +*/ + +var scores, roundScore, activePlayer, gamePlaying; + +init(); + + +document.querySelector('.btn-roll').addEventListener('click', function() { + if(gamePlaying) { + // 1. Random number + var dice = Math.floor(Math.random() * 6) + 1; + + //2. Display the result + var diceDOM = document.querySelector('.dice'); + diceDOM.style.display = 'block'; + diceDOM.src = 'dice-' + dice + '.png'; + + + //3. Update the round score IF the rolled number was NOT a 1 + if (dice !== 1) { + //Add score + roundScore += dice; + document.querySelector('#current-' + activePlayer).textContent = roundScore; + } else { + //Next player + nextPlayer(); + } + } +}); + + +document.querySelector('.btn-hold').addEventListener('click', function() { + if (gamePlaying) { + // Add CURRENT score to GLOBAL score + scores[activePlayer] += roundScore; + + // Update the UI + document.querySelector('#score-' + activePlayer).textContent = scores[activePlayer]; + + // Check if player won the game + if (scores[activePlayer] >= 100) { + document.querySelector('#name-' + activePlayer).textContent = 'Winner!'; + document.querySelector('.dice').style.display = 'none'; + document.querySelector('.player-' + activePlayer + '-panel').classList.add('winner'); + document.querySelector('.player-' + activePlayer + '-panel').classList.remove('active'); + gamePlaying = false; + } else { + //Next player + nextPlayer(); + } + } +}); + + +function nextPlayer() { + //Next player + activePlayer === 0 ? activePlayer = 1 : activePlayer = 0; + roundScore = 0; + + document.getElementById('current-0').textContent = '0'; + document.getElementById('current-1').textContent = '0'; + + document.querySelector('.player-0-panel').classList.toggle('active'); + document.querySelector('.player-1-panel').classList.toggle('active'); + + //document.querySelector('.player-0-panel').classList.remove('active'); + //document.querySelector('.player-1-panel').classList.add('active'); + + document.querySelector('.dice').style.display = 'none'; +} + +document.querySelector('.btn-new').addEventListener('click', init); + +function init() { + scores = [0, 0]; + activePlayer = 0; + roundScore = 0; + gamePlaying = true; + + document.querySelector('.dice').style.display = 'none'; + + document.getElementById('score-0').textContent = '0'; + document.getElementById('score-1').textContent = '0'; + document.getElementById('current-0').textContent = '0'; + document.getElementById('current-1').textContent = '0'; + document.getElementById('name-0').textContent = 'Player 1'; + document.getElementById('name-1').textContent = 'Player 2'; + document.querySelector('.player-0-panel').classList.remove('winner'); + document.querySelector('.player-1-panel').classList.remove('winner'); + document.querySelector('.player-0-panel').classList.remove('active'); + document.querySelector('.player-1-panel').classList.remove('active'); + document.querySelector('.player-0-panel').classList.add('active'); +} + +//document.querySelector('#current-' + activePlayer).textContent = dice; +//document.querySelector('#current-' + activePlayer).innerHTML = '' + dice + ''; +//var x = document.querySelector('#score-0').textContent; + + + + + + + + +/* +YOUR 3 CHALLENGES +Change the game to follow these rules: + +1. A player looses his ENTIRE score when he rolls two 6 in a row. After that, it's the next player's turn. (Hint: Always save the previous dice roll in a separate variable) +2. Add an input field to the HTML where players can set the winning score, so that they can change the predefined score of 100. (Hint: you can read that value with the .value property in JavaScript. This is a good oportunity to use google to figure this out :) +3. Add another dice to the game, so that there are two dices now. The player looses his current score when one of them is a 1. (Hint: you will need CSS to position the second dice, so take a look at the CSS code for the first one.) +*/ diff --git a/4-DOM-pig-game/final/back.jpg b/4-DOM-pig-game/final/back.jpg new file mode 100755 index 0000000000..dcd9a7dab6 Binary files /dev/null and b/4-DOM-pig-game/final/back.jpg differ diff --git a/4-DOM-pig-game/final/challenges.js b/4-DOM-pig-game/final/challenges.js new file mode 100644 index 0000000000..2f4a85b81e --- /dev/null +++ b/4-DOM-pig-game/final/challenges.js @@ -0,0 +1,133 @@ +/* +YOUR 3 CHALLENGES +Change the game to follow these rules: + +1. A player looses his ENTIRE score when he rolls two 6 in a row. After that, it's the next player's turn. (Hint: Always save the previous dice roll in a separate variable) +2. Add an input field to the HTML where players can set the winning score, so that they can change the predefined score of 100. (Hint: you can read that value with the .value property in JavaScript. This is a good oportunity to use google to figure this out :) +3. Add another dice to the game, so that there are two dices now. The player looses his current score when one of them is a 1. (Hint: you will need CSS to position the second dice, so take a look at the CSS code for the first one.) +*/ + +var scores, roundScore, activePlayer, gamePlaying; + +init(); + +var lastDice; + +document.querySelector('.btn-roll').addEventListener('click', function() { + if(gamePlaying) { + // 1. Random number + var dice1 = Math.floor(Math.random() * 6) + 1; + var dice2 = Math.floor(Math.random() * 6) + 1; + + //2. Display the result + document.getElementById('dice-1').style.display = 'block'; + document.getElementById('dice-2').style.display = 'block'; + document.getElementById('dice-1').src = 'dice-' + dice1 + '.png'; + document.getElementById('dice-2').src = 'dice-' + dice2 + '.png'; + + //3. Update the round score IF the rolled number was NOT a 1 + if (dice1 !== 1 && dice2 !== 1) { + //Add score + roundScore += dice1 + dice2; + document.querySelector('#current-' + activePlayer).textContent = roundScore; + } else { + //Next player + nextPlayer(); + } + + /* + if (dice === 6 && lastDice === 6) { + //Player looses score + scores[activePlayer] = 0; + document.querySelector('#score-' + activePlayer).textContent = '0'; + nextPlayer(); + } else if (dice !== 1) { + //Add score + roundScore += dice; + document.querySelector('#current-' + activePlayer).textContent = roundScore; + } else { + //Next player + nextPlayer(); + } + lastDice = dice; + */ + } +}); + + +document.querySelector('.btn-hold').addEventListener('click', function() { + if (gamePlaying) { + // Add CURRENT score to GLOBAL score + scores[activePlayer] += roundScore; + + // Update the UI + document.querySelector('#score-' + activePlayer).textContent = scores[activePlayer]; + + var input = document.querySelector('.final-score').value; + var winningScore; + + // Undefined, 0, null or "" are COERCED to false + // Anything else is COERCED to true + if(input) { + winningScore = input; + } else { + winningScore = 100; + } + + // Check if player won the game + if (scores[activePlayer] >= winningScore) { + document.querySelector('#name-' + activePlayer).textContent = 'Winner!'; + document.getElementById('dice-1').style.display = 'none'; + document.getElementById('dice-2').style.display = 'none'; + document.querySelector('.player-' + activePlayer + '-panel').classList.add('winner'); + document.querySelector('.player-' + activePlayer + '-panel').classList.remove('active'); + gamePlaying = false; + } else { + //Next player + nextPlayer(); + } + } +}); + + +function nextPlayer() { + //Next player + activePlayer === 0 ? activePlayer = 1 : activePlayer = 0; + roundScore = 0; + + document.getElementById('current-0').textContent = '0'; + document.getElementById('current-1').textContent = '0'; + + document.querySelector('.player-0-panel').classList.toggle('active'); + document.querySelector('.player-1-panel').classList.toggle('active'); + + //document.querySelector('.player-0-panel').classList.remove('active'); + //document.querySelector('.player-1-panel').classList.add('active'); + + document.getElementById('dice-1').style.display = 'none'; + document.getElementById('dice-2').style.display = 'none'; +} + +document.querySelector('.btn-new').addEventListener('click', init); + +function init() { + scores = [0, 0]; + activePlayer = 0; + roundScore = 0; + gamePlaying = true; + + document.getElementById('dice-1').style.display = 'none'; + document.getElementById('dice-2').style.display = 'none'; + + document.getElementById('score-0').textContent = '0'; + document.getElementById('score-1').textContent = '0'; + document.getElementById('current-0').textContent = '0'; + document.getElementById('current-1').textContent = '0'; + document.getElementById('name-0').textContent = 'Player 1'; + document.getElementById('name-1').textContent = 'Player 2'; + document.querySelector('.player-0-panel').classList.remove('winner'); + document.querySelector('.player-1-panel').classList.remove('winner'); + document.querySelector('.player-0-panel').classList.remove('active'); + document.querySelector('.player-1-panel').classList.remove('active'); + document.querySelector('.player-0-panel').classList.add('active'); +} \ No newline at end of file diff --git a/07-Pig-Game/final/dice-1.png b/4-DOM-pig-game/final/dice-1.png similarity index 100% rename from 07-Pig-Game/final/dice-1.png rename to 4-DOM-pig-game/final/dice-1.png diff --git a/07-Pig-Game/final/dice-2.png b/4-DOM-pig-game/final/dice-2.png similarity index 100% rename from 07-Pig-Game/final/dice-2.png rename to 4-DOM-pig-game/final/dice-2.png diff --git a/07-Pig-Game/final/dice-3.png b/4-DOM-pig-game/final/dice-3.png similarity index 100% rename from 07-Pig-Game/final/dice-3.png rename to 4-DOM-pig-game/final/dice-3.png diff --git a/07-Pig-Game/final/dice-4.png b/4-DOM-pig-game/final/dice-4.png similarity index 100% rename from 07-Pig-Game/final/dice-4.png rename to 4-DOM-pig-game/final/dice-4.png diff --git a/07-Pig-Game/final/dice-5.png b/4-DOM-pig-game/final/dice-5.png similarity index 100% rename from 07-Pig-Game/final/dice-5.png rename to 4-DOM-pig-game/final/dice-5.png diff --git a/07-Pig-Game/final/dice-6.png b/4-DOM-pig-game/final/dice-6.png similarity index 100% rename from 07-Pig-Game/final/dice-6.png rename to 4-DOM-pig-game/final/dice-6.png diff --git a/4-DOM-pig-game/final/index.html b/4-DOM-pig-game/final/index.html new file mode 100755 index 0000000000..38f75e821c --- /dev/null +++ b/4-DOM-pig-game/final/index.html @@ -0,0 +1,45 @@ + + + + + + + + + Pig Game + + + +
    +
    +
    Player 1
    +
    43
    +
    +
    Current
    +
    11
    +
    +
    + +
    +
    Player 2
    +
    72
    +
    +
    Current
    +
    0
    +
    +
    + + + + + + + + Dice + Dice +
    + + + + + \ No newline at end of file diff --git a/4-DOM-pig-game/final/style.css b/4-DOM-pig-game/final/style.css new file mode 100755 index 0000000000..2e67a216c1 --- /dev/null +++ b/4-DOM-pig-game/final/style.css @@ -0,0 +1,174 @@ +/********************************************** +*** GENERAL +**********************************************/ + +.final-score { + position: absolute; + left: 50%; + transform: translateX(-50%); + top: 520px; + color: #555; + font-size: 18px; + font-family: 'Lato'; + text-align: center; + padding: 10px; + width: 160px; + text-transform: uppercase; +} + +.final-score:focus { outline: none; } + +#dice-1 { top: 120px; } +#dice-2 { top: 250px; } + + +* { + margin: 0; + padding: 0; + box-sizing: border-box; + +} + +.clearfix::after { + content: ""; + display: table; + clear: both; +} + +body { + background-image: linear-gradient(rgba(62, 20, 20, 0.4), rgba(62, 20, 20, 0.4)), url(back.jpg); + background-size: cover; + background-position: center; + font-family: Lato; + font-weight: 300; + position: relative; + height: 100vh; + color: #555; +} + +.wrapper { + width: 1000px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background-color: #fff; + box-shadow: 0px 10px 50px rgba(0, 0, 0, 0.3); + overflow: hidden; +} + +.player-0-panel, +.player-1-panel { + width: 50%; + float: left; + height: 600px; + padding: 100px; +} + + + +/********************************************** +*** PLAYERS +**********************************************/ + +.player-name { + font-size: 40px; + text-align: center; + text-transform: uppercase; + letter-spacing: 2px; + font-weight: 100; + margin-top: 20px; + margin-bottom: 10px; + position: relative; +} + +.player-score { + text-align: center; + font-size: 80px; + font-weight: 100; + color: #EB4D4D; + margin-bottom: 130px; +} + +.active { background-color: #f7f7f7; } +.active .player-name { font-weight: 300; } + +.active .player-name::after { + content: "\2022"; + font-size: 47px; + position: absolute; + color: #EB4D4D; + top: -7px; + right: 10px; + +} + +.player-current-box { + background-color: #EB4D4D; + color: #fff; + width: 40%; + margin: 0 auto; + padding: 12px; + text-align: center; +} + +.player-current-label { + text-transform: uppercase; + margin-bottom: 10px; + font-size: 12px; + color: #222; +} + +.player-current-score { + font-size: 30px; +} + +button { + position: absolute; + width: 200px; + left: 50%; + transform: translateX(-50%); + color: #555; + background: none; + border: none; + font-family: Lato; + font-size: 20px; + text-transform: uppercase; + cursor: pointer; + font-weight: 300; + transition: background-color 0.3s, color 0.3s; +} + +button:hover { font-weight: 600; } +button:hover i { margin-right: 20px; } + +button:focus { + outline: none; +} + +i { + color: #EB4D4D; + display: inline-block; + margin-right: 15px; + font-size: 32px; + line-height: 1; + vertical-align: text-top; + margin-top: -4px; + transition: margin 0.3s; +} + +.btn-new { top: 45px;} +.btn-roll { top: 403px;} +.btn-hold { top: 467px;} + +.dice { + position: absolute; + left: 50%; + top: 178px; + transform: translateX(-50%); + height: 100px; + box-shadow: 0px 10px 60px rgba(0, 0, 0, 0.10); +} + +.winner { background-color: #f7f7f7; } +.winner .player-name { font-weight: 300; color: #EB4D4D; } \ No newline at end of file diff --git a/4-DOM-pig-game/starter/app.js b/4-DOM-pig-game/starter/app.js new file mode 100755 index 0000000000..b6b383b04a --- /dev/null +++ b/4-DOM-pig-game/starter/app.js @@ -0,0 +1,10 @@ +/* +GAME RULES: + +- The game has 2 players, playing in rounds +- In each turn, a player rolls a dice as many times as he whishes. Each result get added to his ROUND score +- BUT, if the player rolls a 1, all his ROUND score gets lost. After that, it's the next player's turn +- The player can choose to 'Hold', which means that his ROUND score gets added to his GLBAL score. After that, it's the next player's turn +- The first player to reach 100 points on GLOBAL score wins the game + +*/ \ No newline at end of file diff --git a/4-DOM-pig-game/starter/back.jpg b/4-DOM-pig-game/starter/back.jpg new file mode 100755 index 0000000000..dcd9a7dab6 Binary files /dev/null and b/4-DOM-pig-game/starter/back.jpg differ diff --git a/07-Pig-Game/starter/dice-1.png b/4-DOM-pig-game/starter/dice-1.png similarity index 100% rename from 07-Pig-Game/starter/dice-1.png rename to 4-DOM-pig-game/starter/dice-1.png diff --git a/07-Pig-Game/starter/dice-2.png b/4-DOM-pig-game/starter/dice-2.png similarity index 100% rename from 07-Pig-Game/starter/dice-2.png rename to 4-DOM-pig-game/starter/dice-2.png diff --git a/07-Pig-Game/starter/dice-3.png b/4-DOM-pig-game/starter/dice-3.png similarity index 100% rename from 07-Pig-Game/starter/dice-3.png rename to 4-DOM-pig-game/starter/dice-3.png diff --git a/07-Pig-Game/starter/dice-4.png b/4-DOM-pig-game/starter/dice-4.png similarity index 100% rename from 07-Pig-Game/starter/dice-4.png rename to 4-DOM-pig-game/starter/dice-4.png diff --git a/07-Pig-Game/starter/dice-5.png b/4-DOM-pig-game/starter/dice-5.png similarity index 100% rename from 07-Pig-Game/starter/dice-5.png rename to 4-DOM-pig-game/starter/dice-5.png diff --git a/07-Pig-Game/starter/dice-6.png b/4-DOM-pig-game/starter/dice-6.png similarity index 100% rename from 07-Pig-Game/starter/dice-6.png rename to 4-DOM-pig-game/starter/dice-6.png diff --git a/4-DOM-pig-game/starter/index.html b/4-DOM-pig-game/starter/index.html new file mode 100755 index 0000000000..2dd4d3f3ba --- /dev/null +++ b/4-DOM-pig-game/starter/index.html @@ -0,0 +1,41 @@ + + + + + + + + + Pig Game + + + +
    +
    +
    Player 1
    +
    43
    +
    +
    Current
    +
    11
    +
    +
    + +
    +
    Player 2
    +
    72
    +
    +
    Current
    +
    0
    +
    +
    + + + + + + Dice +
    + + + + \ No newline at end of file diff --git a/4-DOM-pig-game/starter/style.css b/4-DOM-pig-game/starter/style.css new file mode 100755 index 0000000000..52cb8002cd --- /dev/null +++ b/4-DOM-pig-game/starter/style.css @@ -0,0 +1,154 @@ +/********************************************** +*** GENERAL +**********************************************/ + +* { + margin: 0; + padding: 0; + box-sizing: border-box; + +} + +.clearfix::after { + content: ""; + display: table; + clear: both; +} + +body { + background-image: linear-gradient(rgba(62, 20, 20, 0.4), rgba(62, 20, 20, 0.4)), url(back.jpg); + background-size: cover; + background-position: center; + font-family: Lato; + font-weight: 300; + position: relative; + height: 100vh; + color: #555; +} + +.wrapper { + width: 1000px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background-color: #fff; + box-shadow: 0px 10px 50px rgba(0, 0, 0, 0.3); + overflow: hidden; +} + +.player-0-panel, +.player-1-panel { + width: 50%; + float: left; + height: 600px; + padding: 100px; +} + + + +/********************************************** +*** PLAYERS +**********************************************/ + +.player-name { + font-size: 40px; + text-align: center; + text-transform: uppercase; + letter-spacing: 2px; + font-weight: 100; + margin-top: 20px; + margin-bottom: 10px; + position: relative; +} + +.player-score { + text-align: center; + font-size: 80px; + font-weight: 100; + color: #EB4D4D; + margin-bottom: 130px; +} + +.active { background-color: #f7f7f7; } +.active .player-name { font-weight: 300; } + +.active .player-name::after { + content: "\2022"; + font-size: 47px; + position: absolute; + color: #EB4D4D; + top: -7px; + right: 10px; + +} + +.player-current-box { + background-color: #EB4D4D; + color: #fff; + width: 40%; + margin: 0 auto; + padding: 12px; + text-align: center; +} + +.player-current-label { + text-transform: uppercase; + margin-bottom: 10px; + font-size: 12px; + color: #222; +} + +.player-current-score { + font-size: 30px; +} + +button { + position: absolute; + width: 200px; + left: 50%; + transform: translateX(-50%); + color: #555; + background: none; + border: none; + font-family: Lato; + font-size: 20px; + text-transform: uppercase; + cursor: pointer; + font-weight: 300; + transition: background-color 0.3s, color 0.3s; +} + +button:hover { font-weight: 600; } +button:hover i { margin-right: 20px; } + +button:focus { + outline: none; +} + +i { + color: #EB4D4D; + display: inline-block; + margin-right: 15px; + font-size: 32px; + line-height: 1; + vertical-align: text-top; + margin-top: -4px; + transition: margin 0.3s; +} + +.btn-new { top: 45px;} +.btn-roll { top: 403px;} +.btn-hold { top: 467px;} + +.dice { + position: absolute; + left: 50%; + top: 178px; + transform: translateX(-50%); + height: 100px; + box-shadow: 0px 10px 60px rgba(0, 0, 0, 0.10); +} + +.winner { background-color: #f7f7f7; } +.winner .player-name { font-weight: 300; color: #EB4D4D; } \ No newline at end of file diff --git a/5-advanced-JS/.DS_Store b/5-advanced-JS/.DS_Store new file mode 100644 index 0000000000..4fda094694 Binary files /dev/null and b/5-advanced-JS/.DS_Store differ diff --git a/5-advanced-JS/final/index.html b/5-advanced-JS/final/index.html new file mode 100755 index 0000000000..96127cff81 --- /dev/null +++ b/5-advanced-JS/final/index.html @@ -0,0 +1,12 @@ + + + + + Section 5: Advanced JavaScript: Objects and Functions + + + +

    Section 5: Advanced JavaScript: Objects and Functions

    + + + \ No newline at end of file diff --git a/5-advanced-JS/final/script.js b/5-advanced-JS/final/script.js new file mode 100755 index 0000000000..e299223fc3 --- /dev/null +++ b/5-advanced-JS/final/script.js @@ -0,0 +1,475 @@ +///////////////////////////// +// Lecture: Function constructor +/* +var john = { + name: 'John', + yearOfBirth: 1990, + job: 'teacher' +}; + +var Person = function(name, yearOfBirth, job) { + this.name = name; + this.yearOfBirth = yearOfBirth; + this.job = job; +} + +Person.prototype.calculateAge = function() { + console.log(2016 - this.yearOfBirth); +}; + +Person.prototype.lastName = 'Smith'; + +var john = new Person('John', 1990, 'teacher'); +var jane = new Person('Jane', 1969, 'designer'); +var mark = new Person('Mark', 1948, 'retired'); + +john.calculateAge(); +jane.calculateAge(); +mark.calculateAge(); + +console.log(john.lastName); +console.log(jane.lastName); +console.log(mark.lastName); +*/ + + + +///////////////////////////// +// Lecture: Object.create +/* +var personProto = { + calculateAge: function() { + console.log(2016 - this.yearOfBirth); + } +}; + +var john = Object.create(personProto); +john.name = 'John'; +john.yearOfBirth = 1990; +john.job = 'teacher'; + +var jane = Object.create(personProto, { + name: { value: 'Jane' }, + yearOfBirth: { value: 1969 }, + job: { value: 'designer' } +}); +*/ + + + +///////////////////////////// +// Lecture: Primitives vs objects +/* +// Primitives +var a = 23; +var b = a; +a = 46; +console.log(a); +console.log(b); + + + +// Objects +var obj1 = { + name: 'John', + age: 26 +}; +var obj2 = obj1; +obj1.age = 30; +console.log(obj1.age); +console.log(obj2.age); + +// Functions +var age = 27; +var obj = { + name: 'Jonas', + city: 'Lisbon' +}; + +function change(a, b) { + a = 30; + b.city = 'San Francisco'; +} + +change(age, obj); + +console.log(age); +console.log(obj.city); +*/ + + + +///////////////////////////// +// Lecture: Passing functions as arguments +/* +var years = [1990, 1965, 1937, 2005, 1998]; + +function arrayCalc(arr, fn) { + var arrRes = []; + for (var i = 0; i < arr.length; i++) { + arrRes.push(fn(arr[i])); + } + return arrRes; +} + +function calculateAge(el) { + return 2016 - el; +} + +function isFullAge(el) { + return el >= 18; +} + +function maxHeartRate(el) { + if (el >= 18 && el <= 81) { + return Math.round(206.9 - (0.67 * el)); + } else { + return -1; + } +} + + +var ages = arrayCalc(years, calculateAge); +var fullAges = arrayCalc(ages, isFullAge); +var rates = arrayCalc(ages, maxHeartRate); + +console.log(ages); +console.log(rates); +*/ + + + +///////////////////////////// +// Lecture: Functions returning functions +/* +function interviewQuestion(job) { + if (job === 'designer') { + return function(name) { + console.log(name + ', can you please explain what UX design is?'); + } + } else if (job === 'teacher') { + return function(name) { + console.log('What subject do you teach, ' + name + '?'); + } + } else { + return function(name) { + console.log('Hello ' + name + ', what do you do?'); + } + } +} + +var teacherQuestion = interviewQuestion('teacher'); +var designerQuestion = interviewQuestion('designer'); + + +teacherQuestion('John'); +designerQuestion('John'); +designerQuestion('jane'); +designerQuestion('Mark'); +designerQuestion('Mike'); + +interviewQuestion('teacher')('Mark'); +*/ + + + +///////////////////////////// +// Lecture: IIFE +/* +function game() { + var score = Math.random() * 10; + console.log(score >= 5); +} +game(); + + +(function () { + var score = Math.random() * 10; + console.log(score >= 5); +})(); + +//console.log(score); + + +(function (goodLuck) { + var score = Math.random() * 10; + console.log(score >= 5 - goodLuck); +})(5); +*/ + + + +///////////////////////////// +// Lecture: Closures +/* +function retirement(retirementAge) { + var a = ' years left until retirement.'; + return function(yearOfBirth) { + var age = 2016 - yearOfBirth; + console.log((retirementAge - age) + a); + } +} + +var retirementUS = retirement(66); +var retirementGermany = retirement(65); +var retirementIceland = retirement(67); + +retirementGermany(1990); +retirementUS(1990); +retirementIceland(1990); + +//retirement(66)(1990); + + +function interviewQuestion(job) { + return function(name) { + if (job === 'designer') { + console.log(name + ', can you please explain what UX design is?'); + } else if (job === 'teacher') { + console.log('What subject do you teach, ' + name + '?'); + } else { + console.log('Hello ' + name + ', what do you do?'); + } + } +} + +interviewQuestion('teacher')('John'); +*/ + + + +///////////////////////////// +// Lecture: Bind, call and apply +/* +var john = { + name: 'John', + age: 26, + job: 'teacher', + presentation: function(style, timeOfDay) { + if (style === 'formal') { + console.log('Good ' + timeOfDay + ', Ladies and gentlemen! I\'m ' + this.name + ', I\'m a ' + this.job + ' and I\'m ' + this.age + ' years old.'); + } else if (style === 'friendly') { + console.log('Hey! What\'s up? I\'m ' + this.name + ', I\'m a ' + this.job + ' and I\'m ' + this.age + ' years old. Have a nice ' + timeOfDay + '.'); + } + } +}; + +var emily = { + name: 'Emily', + age: 35, + job: 'designer' +}; + +john.presentation('formal', 'morning'); + +john.presentation.call(emily, 'friendly', 'afternoon'); + +//john.presentation.apply(emily, ['friendly', 'afternoon']); + +var johnFriendly = john.presentation.bind(john, 'friendly'); + +johnFriendly('morning'); +johnFriendly('night'); + +var emilyFormal = john.presentation.bind(emily, 'formal'); +emilyFormal('afternoon'); + + +// Another cool example +var years = [1990, 1965, 1937, 2005, 1998]; + +function arrayCalc(arr, fn) { + var arrRes = []; + for (var i = 0; i < arr.length; i++) { + arrRes.push(fn(arr[i])); + } + return arrRes; +} + +function calculateAge(el) { + return 2016 - el; +} + +function isFullAge(limit, el) { + return el >= limit; +} + +var ages = arrayCalc(years, calculateAge); +var fullJapan = arrayCalc(ages, isFullAge.bind(this, 20)); +console.log(ages); +console.log(fullJapan); +*/ + + + + +///////////////////////////// +// CODING CHALLENGE + + +/* +--- Let's build a fun quiz game in the console! --- + +1. Build a function constructor called Question to describe a question. A question should include: +a) question itself +b) the answers from which the player can choose the correct one (choose an adequate data structure here, array, object, etc.) +c) correct answer (I would use a number for this) + +2. Create a couple of questions using the constructor + +3. Store them all inside an array + +4. Select one random question and log it on the console, together with the possible answers (each question should have a number) (Hint: write a method for the Question objects for this task). + +5. Use the 'prompt' function to ask the user for the correct answer. The user should input the number of the correct answer such as you displayed it on Task 4. + +6. Check if the answer is correct and print to the console whether the answer is correct ot nor (Hint: write another method for this). + +7. Suppose this code would be a plugin for other programmers to use in their code. So make sure that all your code is private and doesn't interfere with the other programmers code (Hint: we learned a special technique to do exactly that). +*/ + + +/* +(function() { + function Question(question, answers, correct) { + this.question = question; + this.answers = answers; + this.correct = correct; + } + + Question.prototype.displayQuestion = function() { + console.log(this.question); + + for (var i = 0; i < this.answers.length; i++) { + console.log(i + ': ' + this.answers[i]); + } + } + + Question.prototype.checkAnswer = function(ans) { + if (ans === this.correct) { + console.log('Correct answer!'); + + } else { + console.log('Wrong answer. Try again :)') + } + } + + var q1 = new Question('Is JavaScript the coolest programming language in the world?', + ['Yes', 'No'], + 0); + + var q2 = new Question('What is the name of this course\'s teacher?', + ['John', 'Micheal', 'Jonas'], + 2); + + var q3 = new Question('What does best describe coding?', + ['Boring', 'Hard', 'Fun', 'Tediuos'], + 2); + + var questions = [q1, q2, q3]; + + var n = Math.floor(Math.random() * questions.length); + + questions[n].displayQuestion(); + + var answer = parseInt(prompt('Please select the correct answer.')); + + questions[n].checkAnswer(answer); +})(); +*/ + + + +/* +--- Expert level --- + +8. After you display the result, display the next random question, so that the game never ends (Hint: write a function for this and call it right after displaying the result) + +9. Be careful: after Task 8, the game literally never ends. So include the option to quit the game if the user writes 'exit' instead of the answer. In this case, DON'T call the function from task 8. + +10. Track the user's score to make the game more fun! So each time an answer is correct, add 1 point to the score (Hint: I'm going to use the power of closures for this, but you don't have to, just do this with the tools you feel more comfortable at this point). + +11. Display the score in the console. Use yet another method for this. +*/ + + +/* +(function() { + function Question(question, answers, correct) { + this.question = question; + this.answers = answers; + this.correct = correct; + } + + Question.prototype.displayQuestion = function() { + console.log(this.question); + + for (var i = 0; i < this.answers.length; i++) { + console.log(i + ': ' + this.answers[i]); + } + } + + Question.prototype.checkAnswer = function(ans, callback) { + var sc; + + if (ans === this.correct) { + console.log('Correct answer!'); + sc = callback(true); + } else { + console.log('Wrong answer. Try again :)'); + sc = callback(false); + } + + this.displayScore(sc); + } + + Question.prototype.displayScore = function(score) { + console.log('Your current score is: ' + score); + console.log('------------------------------'); + } + + + var q1 = new Question('Is JavaScript the coolest programming language in the world?', + ['Yes', 'No'], + 0); + + var q2 = new Question('What is the name of this course\'s teacher?', + ['John', 'Micheal', 'Jonas'], + 2); + + var q3 = new Question('What does best describe coding?', + ['Boring', 'Hard', 'Fun', 'Tediuos'], + 2); + + var questions = [q1, q2, q3]; + + function score() { + var sc = 0; + return function(correct) { + if (correct) { + sc++; + } + return sc; + } + } + var keepScore = score(); + + + function nextQuestion() { + + var n = Math.floor(Math.random() * questions.length); + questions[n].displayQuestion(); + + var answer = prompt('Please select the correct answer.'); + + if(answer !== 'exit') { + questions[n].checkAnswer(parseInt(answer), keepScore); + + nextQuestion(); + } + } + + nextQuestion(); + +})(); +*/ \ No newline at end of file diff --git a/5-advanced-JS/starter/index.html b/5-advanced-JS/starter/index.html new file mode 100755 index 0000000000..96127cff81 --- /dev/null +++ b/5-advanced-JS/starter/index.html @@ -0,0 +1,12 @@ + + + + + Section 5: Advanced JavaScript: Objects and Functions + + + +

    Section 5: Advanced JavaScript: Objects and Functions

    + + + \ No newline at end of file diff --git a/02-Fundamentals-Part-2/starter/script.js b/5-advanced-JS/starter/script.js similarity index 100% rename from 02-Fundamentals-Part-2/starter/script.js rename to 5-advanced-JS/starter/script.js diff --git a/6-budgety/.DS_Store b/6-budgety/.DS_Store new file mode 100755 index 0000000000..7bdeb23995 Binary files /dev/null and b/6-budgety/.DS_Store differ diff --git a/6-budgety/final/.DS_Store b/6-budgety/final/.DS_Store new file mode 100755 index 0000000000..5008ddfcf5 Binary files /dev/null and b/6-budgety/final/.DS_Store differ diff --git a/6-budgety/final/app.js b/6-budgety/final/app.js new file mode 100755 index 0000000000..3b7486eee0 --- /dev/null +++ b/6-budgety/final/app.js @@ -0,0 +1,471 @@ +// BUDGET CONTROLLER +var budgetController = (function() { + + var Expense = function(id, description, value) { + this.id = id; + this.description = description; + this.value = value; + this.percentage = -1; + }; + + + Expense.prototype.calcPercentage = function(totalIncome) { + if (totalIncome > 0) { + this.percentage = Math.round((this.value / totalIncome) * 100); + } else { + this.percentage = -1; + } + }; + + + Expense.prototype.getPercentage = function() { + return this.percentage; + }; + + + var Income = function(id, description, value) { + this.id = id; + this.description = description; + this.value = value; + }; + + + var calculateTotal = function(type) { + var sum = 0; + data.allItems[type].forEach(function(cur) { + sum += cur.value; + }); + data.totals[type] = sum; + }; + + + var data = { + allItems: { + exp: [], + inc: [] + }, + totals: { + exp: 0, + inc: 0 + }, + budget: 0, + percentage: -1 + }; + + + return { + addItem: function(type, des, val) { + var newItem, ID; + + //[1 2 3 4 5], next ID = 6 + //[1 2 4 6 8], next ID = 9 + // ID = last ID + 1 + + // Create new ID + if (data.allItems[type].length > 0) { + ID = data.allItems[type][data.allItems[type].length - 1].id + 1; + } else { + ID = 0; + } + + // Create new item based on 'inc' or 'exp' type + if (type === 'exp') { + newItem = new Expense(ID, des, val); + } else if (type === 'inc') { + newItem = new Income(ID, des, val); + } + + // Push it into our data structure + data.allItems[type].push(newItem); + + // Return the new element + return newItem; + }, + + + deleteItem: function(type, id) { + var ids, index; + + // id = 6 + //data.allItems[type][id]; + // ids = [1 2 4 8] + //index = 3 + + ids = data.allItems[type].map(function(current) { + return current.id; + }); + + index = ids.indexOf(id); + + if (index !== -1) { + data.allItems[type].splice(index, 1); + } + + }, + + + calculateBudget: function() { + + // calculate total income and expenses + calculateTotal('exp'); + calculateTotal('inc'); + + // Calculate the budget: income - expenses + data.budget = data.totals.inc - data.totals.exp; + + // calculate the percentage of income that we spent + if (data.totals.inc > 0) { + data.percentage = Math.round((data.totals.exp / data.totals.inc) * 100); + } else { + data.percentage = -1; + } + + // Expense = 100 and income 300, spent 33.333% = 100/300 = 0.3333 * 100 + }, + + calculatePercentages: function() { + + /* + a=20 + b=10 + c=40 + income = 100 + a=20/100=20% + b=10/100=10% + c=40/100=40% + */ + + data.allItems.exp.forEach(function(cur) { + cur.calcPercentage(data.totals.inc); + }); + }, + + + getPercentages: function() { + var allPerc = data.allItems.exp.map(function(cur) { + return cur.getPercentage(); + }); + return allPerc; + }, + + + getBudget: function() { + return { + budget: data.budget, + totalInc: data.totals.inc, + totalExp: data.totals.exp, + percentage: data.percentage + }; + }, + + testing: function() { + console.log(data); + } + }; + +})(); + + + + +// UI CONTROLLER +var UIController = (function() { + + var DOMstrings = { + inputType: '.add__type', + inputDescription: '.add__description', + inputValue: '.add__value', + inputBtn: '.add__btn', + incomeContainer: '.income__list', + expensesContainer: '.expenses__list', + budgetLabel: '.budget__value', + incomeLabel: '.budget__income--value', + expensesLabel: '.budget__expenses--value', + percentageLabel: '.budget__expenses--percentage', + container: '.container', + expensesPercLabel: '.item__percentage', + dateLabel: '.budget__title--month' + }; + + + var formatNumber = function(num, type) { + var numSplit, int, dec, type; + /* + + or - before number + exactly 2 decimal points + comma separating the thousands + + 2310.4567 -> + 2,310.46 + 2000 -> + 2,000.00 + */ + + num = Math.abs(num); + num = num.toFixed(2); + + numSplit = num.split('.'); + + int = numSplit[0]; + if (int.length > 3) { + int = int.substr(0, int.length - 3) + ',' + int.substr(int.length - 3, 3); //input 23510, output 23,510 + } + + dec = numSplit[1]; + + return (type === 'exp' ? '-' : '+') + ' ' + int + '.' + dec; + + }; + + + var nodeListForEach = function(list, callback) { + for (var i = 0; i < list.length; i++) { + callback(list[i], i); + } + }; + + + return { + getInput: function() { + return { + type: document.querySelector(DOMstrings.inputType).value, // Will be either inc or exp + description: document.querySelector(DOMstrings.inputDescription).value, + value: parseFloat(document.querySelector(DOMstrings.inputValue).value) + }; + }, + + + addListItem: function(obj, type) { + var html, newHtml, element; + // Create HTML string with placeholder text + + if (type === 'inc') { + element = DOMstrings.incomeContainer; + + html = '
    %description%
    %value%
    '; + } else if (type === 'exp') { + element = DOMstrings.expensesContainer; + + html = '
    %description%
    %value%
    21%
    '; + } + + // Replace the placeholder text with some actual data + newHtml = html.replace('%id%', obj.id); + newHtml = newHtml.replace('%description%', obj.description); + newHtml = newHtml.replace('%value%', formatNumber(obj.value, type)); + + // Insert the HTML into the DOM + document.querySelector(element).insertAdjacentHTML('beforeend', newHtml); + }, + + + deleteListItem: function(selectorID) { + + var el = document.getElementById(selectorID); + el.parentNode.removeChild(el); + + }, + + + clearFields: function() { + var fields, fieldsArr; + + fields = document.querySelectorAll(DOMstrings.inputDescription + ', ' + DOMstrings.inputValue); + + fieldsArr = Array.prototype.slice.call(fields); + + fieldsArr.forEach(function(current, index, array) { + current.value = ""; + }); + + fieldsArr[0].focus(); + }, + + + displayBudget: function(obj) { + var type; + obj.budget > 0 ? type = 'inc' : type = 'exp'; + + document.querySelector(DOMstrings.budgetLabel).textContent = formatNumber(obj.budget, type); + document.querySelector(DOMstrings.incomeLabel).textContent = formatNumber(obj.totalInc, 'inc'); + document.querySelector(DOMstrings.expensesLabel).textContent = formatNumber(obj.totalExp, 'exp'); + + if (obj.percentage > 0) { + document.querySelector(DOMstrings.percentageLabel).textContent = obj.percentage + '%'; + } else { + document.querySelector(DOMstrings.percentageLabel).textContent = '---'; + } + + }, + + + displayPercentages: function(percentages) { + + var fields = document.querySelectorAll(DOMstrings.expensesPercLabel); + + nodeListForEach(fields, function(current, index) { + + if (percentages[index] > 0) { + current.textContent = percentages[index] + '%'; + } else { + current.textContent = '---'; + } + }); + + }, + + + displayMonth: function() { + var now, months, month, year; + + now = new Date(); + //var christmas = new Date(2016, 11, 25); + + months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; + month = now.getMonth(); + + year = now.getFullYear(); + document.querySelector(DOMstrings.dateLabel).textContent = months[month] + ' ' + year; + }, + + + changedType: function() { + + var fields = document.querySelectorAll( + DOMstrings.inputType + ',' + + DOMstrings.inputDescription + ',' + + DOMstrings.inputValue); + + nodeListForEach(fields, function(cur) { + cur.classList.toggle('red-focus'); + }); + + document.querySelector(DOMstrings.inputBtn).classList.toggle('red'); + + }, + + + getDOMstrings: function() { + return DOMstrings; + } + }; + +})(); + + + + +// GLOBAL APP CONTROLLER +var controller = (function(budgetCtrl, UICtrl) { + + var setupEventListeners = function() { + var DOM = UICtrl.getDOMstrings(); + + document.querySelector(DOM.inputBtn).addEventListener('click', ctrlAddItem); + + document.addEventListener('keypress', function(event) { + if (event.keyCode === 13 || event.which === 13) { + ctrlAddItem(); + } + }); + + document.querySelector(DOM.container).addEventListener('click', ctrlDeleteItem); + + document.querySelector(DOM.inputType).addEventListener('change', UICtrl.changedType); + }; + + + var updateBudget = function() { + + // 1. Calculate the budget + budgetCtrl.calculateBudget(); + + // 2. Return the budget + var budget = budgetCtrl.getBudget(); + + // 3. Display the budget on the UI + UICtrl.displayBudget(budget); + }; + + + var updatePercentages = function() { + + // 1. Calculate percentages + budgetCtrl.calculatePercentages(); + + // 2. Read percentages from the budget controller + var percentages = budgetCtrl.getPercentages(); + + // 3. Update the UI with the new percentages + UICtrl.displayPercentages(percentages); + }; + + + var ctrlAddItem = function() { + var input, newItem; + + // 1. Get the field input data + input = UICtrl.getInput(); + + if (input.description !== "" && !isNaN(input.value) && input.value > 0) { + // 2. Add the item to the budget controller + newItem = budgetCtrl.addItem(input.type, input.description, input.value); + + // 3. Add the item to the UI + UICtrl.addListItem(newItem, input.type); + + // 4. Clear the fields + UICtrl.clearFields(); + + // 5. Calculate and update budget + updateBudget(); + + // 6. Calculate and update percentages + updatePercentages(); + } + }; + + + var ctrlDeleteItem = function(event) { + var itemID, splitID, type, ID; + + itemID = event.target.parentNode.parentNode.parentNode.parentNode.id; + + if (itemID) { + + //inc-1 + splitID = itemID.split('-'); + type = splitID[0]; + ID = parseInt(splitID[1]); + + // 1. delete the item from the data structure + budgetCtrl.deleteItem(type, ID); + + // 2. Delete the item from the UI + UICtrl.deleteListItem(itemID); + + // 3. Update and show the new budget + updateBudget(); + + // 4. Calculate and update percentages + updatePercentages(); + } + }; + + + return { + init: function() { + console.log('Application has started.'); + UICtrl.displayMonth(); + UICtrl.displayBudget({ + budget: 0, + totalInc: 0, + totalExp: 0, + percentage: -1 + }); + setupEventListeners(); + } + }; + +})(budgetController, UIController); + + +controller.init(); \ No newline at end of file diff --git a/6-budgety/final/back.png b/6-budgety/final/back.png new file mode 100755 index 0000000000..85272933a9 Binary files /dev/null and b/6-budgety/final/back.png differ diff --git a/6-budgety/final/index.html b/6-budgety/final/index.html new file mode 100755 index 0000000000..106c33da96 --- /dev/null +++ b/6-budgety/final/index.html @@ -0,0 +1,126 @@ + + + + + + + + Budgety + + + +
    +
    +
    + Available Budget in %Month%: +
    + +
    + 2,345.64
    + +
    +
    Income
    +
    +
    + 4,300.00
    +
     
    +
    +
    + +
    +
    Expenses
    +
    +
    - 1,954.36
    +
    45%
    +
    +
    +
    +
    + + + +
    +
    +
    + + + + +
    +
    + +
    +
    +

    Income

    + +
    + + + +
    +
    + + + +
    +

    Expenses

    + +
    + + + +
    +
    +
    + + +
    + + + + \ No newline at end of file diff --git a/6-budgety/final/style.css b/6-budgety/final/style.css new file mode 100755 index 0000000000..b3de591930 --- /dev/null +++ b/6-budgety/final/style.css @@ -0,0 +1,278 @@ +/********************************************** +*** GENERAL +**********************************************/ + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +.clearfix::after { + content: ""; + display: table; + clear: both; +} + +body { + color: #555; + font-family: Open Sans; + font-size: 16px; + position: relative; + height: 100vh; + font-weight: 400; +} + +.right { float: right; } +.red { color: #FF5049 !important; } +.red-focus:focus { border: 1px solid #FF5049 !important; } + +/********************************************** +*** TOP PART +**********************************************/ + +.top { + height: 40vh; + background-image: linear-gradient(rgba(0, 0, 0, 0.35), rgba(0, 0, 0, 0.35)), url(back.png); + background-size: cover; + background-position: center; + position: relative; +} + +.budget { + position: absolute; + width: 350px; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + color: #fff; +} + +.budget__title { + font-size: 18px; + text-align: center; + margin-bottom: 10px; + font-weight: 300; +} + +.budget__value { + font-weight: 300; + font-size: 46px; + text-align: center; + margin-bottom: 25px; + letter-spacing: 2px; +} + +.budget__income, +.budget__expenses { + padding: 12px; + text-transform: uppercase; +} + +.budget__income { + margin-bottom: 10px; + background-color: #28B9B5; +} + +.budget__expenses { + background-color: #FF5049; +} + +.budget__income--text, +.budget__expenses--text { + float: left; + font-size: 13px; + color: #444; + margin-top: 2px; +} + +.budget__income--value, +.budget__expenses--value { + letter-spacing: 1px; + float: left; +} + +.budget__income--percentage, +.budget__expenses--percentage { + float: left; + width: 34px; + font-size: 11px; + padding: 3px 0; + margin-left: 10px; +} + +.budget__expenses--percentage { + background-color: rgba(255, 255, 255, 0.2); + text-align: center; + border-radius: 3px; +} + + +/********************************************** +*** BOTTOM PART +**********************************************/ + +/***** FORM *****/ +.add { + padding: 14px; + border-bottom: 1px solid #e7e7e7; + background-color: #f7f7f7; +} + +.add__container { + margin: 0 auto; + text-align: center; +} + +.add__type { + width: 55px; + border: 1px solid #e7e7e7; + height: 44px; + font-size: 18px; + color: inherit; + background-color: #fff; + margin-right: 10px; + font-weight: 300; + transition: border 0.3s; +} + +.add__description, +.add__value { + border: 1px solid #e7e7e7; + background-color: #fff; + color: inherit; + font-family: inherit; + font-size: 14px; + padding: 12px 15px; + margin-right: 10px; + border-radius: 5px; + transition: border 0.3s; +} + +.add__description { width: 400px;} +.add__value { width: 100px;} + +.add__btn { + font-size: 35px; + background: none; + border: none; + color: #28B9B5; + cursor: pointer; + display: inline-block; + vertical-align: middle; + line-height: 1.1; + margin-left: 10px; +} + +.add__btn:active { transform: translateY(2px); } + +.add__type:focus, +.add__description:focus, +.add__value:focus { + outline: none; + border: 1px solid #28B9B5; +} + +.add__btn:focus { outline: none; } + +/***** LISTS *****/ +.container { + width: 1000px; + margin: 60px auto; +} + +.income { + float: left; + width: 475px; + margin-right: 50px; +} + +.expenses { + float: left; + width: 475px; +} + +h2 { + text-transform: uppercase; + font-size: 18px; + font-weight: 400; + margin-bottom: 15px; +} + +.icome__title { color: #28B9B5; } +.expenses__title { color: #FF5049; } + +.item { + padding: 13px; + border-bottom: 1px solid #e7e7e7; +} + +.item:first-child { border-top: 1px solid #e7e7e7; } +.item:nth-child(even) { background-color: #f7f7f7; } + +.item__description { + float: left; +} + +.item__value { + float: left; + transition: transform 0.3s; +} + +.item__percentage { + float: left; + margin-left: 20px; + transition: transform 0.3s; + font-size: 11px; + background-color: #FFDAD9; + padding: 3px; + border-radius: 3px; + width: 32px; + text-align: center; +} + +.income .item__value, +.income .item__delete--btn { + color: #28B9B5; +} + +.expenses .item__value, +.expenses .item__percentage, +.expenses .item__delete--btn { + color: #FF5049; +} + + +.item__delete { + float: left; +} + +.item__delete--btn { + font-size: 22px; + background: none; + border: none; + cursor: pointer; + display: inline-block; + vertical-align: middle; + line-height: 1; + display: none; +} + +.item__delete--btn:focus { outline: none; } +.item__delete--btn:active { transform: translateY(2px); } + +.item:hover .item__delete--btn { display: block; } +.item:hover .item__value { transform: translateX(-20px); } +.item:hover .item__percentage { transform: translateX(-20px); } + + +.unpaid { + background-color: #FFDAD9 !important; + cursor: pointer; + color: #FF5049; + +} + +.unpaid .item__percentage { box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.1); } +.unpaid:hover .item__description { font-weight: 900; } + diff --git a/17-Modern-JS-Modules-Tooling/starter/script.js b/6-budgety/starter/app.js old mode 100644 new mode 100755 similarity index 100% rename from 17-Modern-JS-Modules-Tooling/starter/script.js rename to 6-budgety/starter/app.js diff --git a/6-budgety/starter/back.png b/6-budgety/starter/back.png new file mode 100755 index 0000000000..85272933a9 Binary files /dev/null and b/6-budgety/starter/back.png differ diff --git a/6-budgety/starter/index.html b/6-budgety/starter/index.html new file mode 100755 index 0000000000..3ae018bced --- /dev/null +++ b/6-budgety/starter/index.html @@ -0,0 +1,124 @@ + + + + + + + + Budgety + + + +
    +
    +
    + Available Budget in %Month%: +
    + +
    + 2,345.64
    + +
    +
    Income
    +
    +
    + 4,300.00
    +
     
    +
    +
    + +
    +
    Expenses
    +
    +
    - 1,954.36
    +
    45%
    +
    +
    +
    +
    + + + +
    +
    +
    + + + + +
    +
    + +
    +
    +

    Income

    + +
    + + + +
    +
    + + + +
    +

    Expenses

    + +
    + + + +
    +
    +
    + + +
    + + + + \ No newline at end of file diff --git a/6-budgety/starter/style.css b/6-budgety/starter/style.css new file mode 100755 index 0000000000..b3de591930 --- /dev/null +++ b/6-budgety/starter/style.css @@ -0,0 +1,278 @@ +/********************************************** +*** GENERAL +**********************************************/ + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +.clearfix::after { + content: ""; + display: table; + clear: both; +} + +body { + color: #555; + font-family: Open Sans; + font-size: 16px; + position: relative; + height: 100vh; + font-weight: 400; +} + +.right { float: right; } +.red { color: #FF5049 !important; } +.red-focus:focus { border: 1px solid #FF5049 !important; } + +/********************************************** +*** TOP PART +**********************************************/ + +.top { + height: 40vh; + background-image: linear-gradient(rgba(0, 0, 0, 0.35), rgba(0, 0, 0, 0.35)), url(back.png); + background-size: cover; + background-position: center; + position: relative; +} + +.budget { + position: absolute; + width: 350px; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + color: #fff; +} + +.budget__title { + font-size: 18px; + text-align: center; + margin-bottom: 10px; + font-weight: 300; +} + +.budget__value { + font-weight: 300; + font-size: 46px; + text-align: center; + margin-bottom: 25px; + letter-spacing: 2px; +} + +.budget__income, +.budget__expenses { + padding: 12px; + text-transform: uppercase; +} + +.budget__income { + margin-bottom: 10px; + background-color: #28B9B5; +} + +.budget__expenses { + background-color: #FF5049; +} + +.budget__income--text, +.budget__expenses--text { + float: left; + font-size: 13px; + color: #444; + margin-top: 2px; +} + +.budget__income--value, +.budget__expenses--value { + letter-spacing: 1px; + float: left; +} + +.budget__income--percentage, +.budget__expenses--percentage { + float: left; + width: 34px; + font-size: 11px; + padding: 3px 0; + margin-left: 10px; +} + +.budget__expenses--percentage { + background-color: rgba(255, 255, 255, 0.2); + text-align: center; + border-radius: 3px; +} + + +/********************************************** +*** BOTTOM PART +**********************************************/ + +/***** FORM *****/ +.add { + padding: 14px; + border-bottom: 1px solid #e7e7e7; + background-color: #f7f7f7; +} + +.add__container { + margin: 0 auto; + text-align: center; +} + +.add__type { + width: 55px; + border: 1px solid #e7e7e7; + height: 44px; + font-size: 18px; + color: inherit; + background-color: #fff; + margin-right: 10px; + font-weight: 300; + transition: border 0.3s; +} + +.add__description, +.add__value { + border: 1px solid #e7e7e7; + background-color: #fff; + color: inherit; + font-family: inherit; + font-size: 14px; + padding: 12px 15px; + margin-right: 10px; + border-radius: 5px; + transition: border 0.3s; +} + +.add__description { width: 400px;} +.add__value { width: 100px;} + +.add__btn { + font-size: 35px; + background: none; + border: none; + color: #28B9B5; + cursor: pointer; + display: inline-block; + vertical-align: middle; + line-height: 1.1; + margin-left: 10px; +} + +.add__btn:active { transform: translateY(2px); } + +.add__type:focus, +.add__description:focus, +.add__value:focus { + outline: none; + border: 1px solid #28B9B5; +} + +.add__btn:focus { outline: none; } + +/***** LISTS *****/ +.container { + width: 1000px; + margin: 60px auto; +} + +.income { + float: left; + width: 475px; + margin-right: 50px; +} + +.expenses { + float: left; + width: 475px; +} + +h2 { + text-transform: uppercase; + font-size: 18px; + font-weight: 400; + margin-bottom: 15px; +} + +.icome__title { color: #28B9B5; } +.expenses__title { color: #FF5049; } + +.item { + padding: 13px; + border-bottom: 1px solid #e7e7e7; +} + +.item:first-child { border-top: 1px solid #e7e7e7; } +.item:nth-child(even) { background-color: #f7f7f7; } + +.item__description { + float: left; +} + +.item__value { + float: left; + transition: transform 0.3s; +} + +.item__percentage { + float: left; + margin-left: 20px; + transition: transform 0.3s; + font-size: 11px; + background-color: #FFDAD9; + padding: 3px; + border-radius: 3px; + width: 32px; + text-align: center; +} + +.income .item__value, +.income .item__delete--btn { + color: #28B9B5; +} + +.expenses .item__value, +.expenses .item__percentage, +.expenses .item__delete--btn { + color: #FF5049; +} + + +.item__delete { + float: left; +} + +.item__delete--btn { + font-size: 22px; + background: none; + border: none; + cursor: pointer; + display: inline-block; + vertical-align: middle; + line-height: 1; + display: none; +} + +.item__delete--btn:focus { outline: none; } +.item__delete--btn:active { transform: translateY(2px); } + +.item:hover .item__delete--btn { display: block; } +.item:hover .item__value { transform: translateX(-20px); } +.item:hover .item__percentage { transform: translateX(-20px); } + + +.unpaid { + background-color: #FFDAD9 !important; + cursor: pointer; + color: #FF5049; + +} + +.unpaid .item__percentage { box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.1); } +.unpaid:hover .item__description { font-weight: 900; } + diff --git a/7-ES6/.DS_Store b/7-ES6/.DS_Store new file mode 100644 index 0000000000..5118add513 Binary files /dev/null and b/7-ES6/.DS_Store differ diff --git a/7-ES6/final/.DS_Store b/7-ES6/final/.DS_Store new file mode 100644 index 0000000000..5008ddfcf5 Binary files /dev/null and b/7-ES6/final/.DS_Store differ diff --git a/7-ES6/final/index.html b/7-ES6/final/index.html new file mode 100755 index 0000000000..3bec820521 --- /dev/null +++ b/7-ES6/final/index.html @@ -0,0 +1,34 @@ + + + + + Section 7: Get Ready for the Future: ES6 / ES2015 + + + + + + +

    Section 7: Get Ready for the Future: ES6 / ES2015

    + +
    I'm green!
    +
    I'm blue!
    +
    I'm orange!
    + + + + + \ No newline at end of file diff --git a/7-ES6/final/polyfill.min.js b/7-ES6/final/polyfill.min.js new file mode 100644 index 0000000000..e26aa3e970 --- /dev/null +++ b/7-ES6/final/polyfill.min.js @@ -0,0 +1,4 @@ +!function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var c="function"==typeof require&&require;if(!u&&c)return c(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var a=n[o]={exports:{}};t[o][0].call(a.exports,function(n){var r=t[o][1][n];return s(r?r:n)},a,a.exports,e,t,n,r)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;o2?arguments[2]:void 0,s=Math.min((void 0===a?u:i(a,u))-f,u-c),l=1;for(f0;)f in r?r[c]=r[f]:delete r[c],c+=l,f+=l;return r}},{105:105,108:108,109:109}],9:[function(t,n,r){"use strict";var e=t(109),i=t(105),o=t(108);n.exports=function fill(t){for(var n=e(this),r=o(n.length),u=arguments.length,c=i(u>1?arguments[1]:void 0,r),f=u>2?arguments[2]:void 0,a=void 0===f?r:i(f,r);a>c;)n[c++]=t;return n}},{105:105,108:108,109:109}],10:[function(t,n,r){var e=t(37);n.exports=function(t,n){var r=[];return e(t,!1,r.push,r,n),r}},{37:37}],11:[function(t,n,r){var e=t(107),i=t(108),o=t(105);n.exports=function(t){return function(n,r,u){var c,f=e(n),a=i(f.length),s=o(u,a);if(t&&r!=r){for(;a>s;)if(c=f[s++],c!=c)return!0}else for(;a>s;s++)if((t||s in f)&&f[s]===r)return t||s||0;return!t&&-1}}},{105:105,107:107,108:108}],12:[function(t,n,r){var e=t(25),i=t(45),o=t(109),u=t(108),c=t(15);n.exports=function(t,n){var r=1==t,f=2==t,a=3==t,s=4==t,l=6==t,h=5==t||l,v=n||c;return function(n,c,p){for(var d,y,g=o(n),b=i(g),x=e(c,p,3),m=u(b.length),w=0,S=r?v(n,m):f?v(n,0):void 0;m>w;w++)if((h||w in b)&&(d=b[w],y=x(d,w,g),t))if(r)S[w]=y;else if(y)switch(t){case 3:return!0;case 5:return d;case 6:return w;case 2:S.push(d)}else if(s)return!1;return l?-1:a||s?s:S}}},{108:108,109:109,15:15,25:25,45:45}],13:[function(t,n,r){var e=t(3),i=t(109),o=t(45),u=t(108);n.exports=function(t,n,r,c,f){e(n);var a=i(t),s=o(a),l=u(a.length),h=f?l-1:0,v=f?-1:1;if(r<2)for(;;){if(h in s){c=s[h],h+=v;break}if(h+=v,f?h<0:l<=h)throw TypeError("Reduce of empty array with no initial value")}for(;f?h>=0:l>h;h+=v)h in s&&(c=n(c,s[h],h,a));return c}},{108:108,109:109,3:3,45:45}],14:[function(t,n,r){var e=t(49),i=t(47),o=t(117)("species");n.exports=function(t){var n;return i(t)&&(n=t.constructor,"function"!=typeof n||n!==Array&&!i(n.prototype)||(n=void 0),e(n)&&(n=n[o],null===n&&(n=void 0))),void 0===n?Array:n}},{117:117,47:47,49:49}],15:[function(t,n,r){var e=t(14);n.exports=function(t,n){return new(e(t))(n)}},{14:14}],16:[function(t,n,r){"use strict";var e=t(3),i=t(49),o=t(44),u=[].slice,c={},f=function(t,n,r){if(!(n in c)){for(var e=[],i=0;i1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(r(n.v,n.k,this);n&&n.r;)n=n.p},has:function has(t){return!!y(this,t)}}),v&&e(l.prototype,"size",{get:function(){return f(this[d])}}),l},def:function(t,n,r){var e,i,o=y(t,n);return o?o.v=r:(t._l=o={i:i=p(n,!0),k:n,v:r,p:e=t._l,n:void 0,r:!1},t._f||(t._f=o),e&&(e.n=o),t[d]++,"F"!==i&&(t._i[i]=o)),t},getEntry:y,setStrong:function(t,n,r){s(t,n,function(t,n){this._t=t,this._k=n,this._l=void 0},function(){for(var t=this,n=t._k,r=t._l;r&&r.r;)r=r.p;return t._t&&(t._l=r=r?r.n:t._t._f)?"keys"==n?l(0,r.k):"values"==n?l(0,r.v):l(0,[r.k,r.v]):(t._t=void 0,l(1))},r?"entries":"values",!r,!0),h(n)}}},{25:25,27:27,28:28,37:37,53:53,55:55,6:6,62:62,66:66,67:67,86:86,91:91}],20:[function(t,n,r){var e=t(17),i=t(10);n.exports=function(t){return function toJSON(){if(e(this)!=t)throw TypeError(t+"#toJSON isn't generic");return i(this)}}},{10:10,17:17}],21:[function(t,n,r){"use strict";var e=t(86),i=t(62).getWeak,o=t(7),u=t(49),c=t(6),f=t(37),a=t(12),s=t(39),l=a(5),h=a(6),v=0,p=function(t){return t._l||(t._l=new d)},d=function(){this.a=[]},y=function(t,n){return l(t.a,function(t){return t[0]===n})};d.prototype={get:function(t){var n=y(this,t);if(n)return n[1]},has:function(t){return!!y(this,t)},set:function(t,n){var r=y(this,t);r?r[1]=n:this.a.push([t,n])},delete:function(t){var n=h(this.a,function(n){return n[0]===t});return~n&&this.a.splice(n,1),!!~n}},n.exports={getConstructor:function(t,n,r,o){var a=t(function(t,e){c(t,a,n,"_i"),t._i=v++,t._l=void 0,void 0!=e&&f(e,r,t[o],t)});return e(a.prototype,{delete:function(t){if(!u(t))return!1;var n=i(t);return n===!0?p(this).delete(t):n&&s(n,this._i)&&delete n[this._i]},has:function has(t){if(!u(t))return!1;var n=i(t);return n===!0?p(this).has(t):n&&s(n,this._i)}}),a},def:function(t,n,r){var e=i(o(n),!0);return e===!0?p(t).set(n,r):e[t._i]=r,t},ufstore:p}},{12:12,37:37,39:39,49:49,6:6,62:62,7:7,86:86}],22:[function(t,n,r){"use strict";var e=t(38),i=t(32),o=t(87),u=t(86),c=t(62),f=t(37),a=t(6),s=t(49),l=t(34),h=t(54),v=t(92),p=t(43);n.exports=function(t,n,r,d,y,g){var b=e[t],x=b,m=y?"set":"add",w=x&&x.prototype,S={},_=function(t){var n=w[t];o(w,t,"delete"==t?function(t){return!(g&&!s(t))&&n.call(this,0===t?0:t)}:"has"==t?function has(t){return!(g&&!s(t))&&n.call(this,0===t?0:t)}:"get"==t?function get(t){return g&&!s(t)?void 0:n.call(this,0===t?0:t)}:"add"==t?function add(t){return n.call(this,0===t?0:t),this}:function set(t,r){return n.call(this,0===t?0:t,r),this})};if("function"==typeof x&&(g||w.forEach&&!l(function(){(new x).entries().next()}))){var E=new x,O=E[m](g?{}:-0,1)!=E,F=l(function(){E.has(1)}),P=h(function(t){new x(t)}),A=!g&&l(function(){for(var t=new x,n=5;n--;)t[m](n,n);return!t.has(-0)});P||(x=n(function(n,r){a(n,x,t);var e=p(new b,n,x);return void 0!=r&&f(r,y,e[m],e),e}),x.prototype=w,w.constructor=x),(F||A)&&(_("delete"),_("has"),y&&_("get")),(A||O)&&_(m),g&&w.clear&&delete w.clear}else x=d.getConstructor(n,t,y,m),u(x.prototype,r),c.NEED=!0;return v(x,t),S[t]=x,i(i.G+i.W+i.F*(x!=b),S),g||d.setStrong(x,t,y),x}},{32:32,34:34,37:37,38:38,43:43,49:49,54:54,6:6,62:62,86:86,87:87,92:92}],23:[function(t,n,r){var e=n.exports={version:"2.4.0"};"number"==typeof __e&&(__e=e)},{}],24:[function(t,n,r){"use strict";var e=t(67),i=t(85);n.exports=function(t,n,r){n in t?e.f(t,n,i(0,r)):t[n]=r}},{67:67,85:85}],25:[function(t,n,r){var e=t(3);n.exports=function(t,n,r){if(e(t),void 0===n)return t;switch(r){case 1:return function(r){return t.call(n,r)};case 2:return function(r,e){return t.call(n,r,e)};case 3:return function(r,e,i){return t.call(n,r,e,i)}}return function(){return t.apply(n,arguments)}}},{3:3}],26:[function(t,n,r){"use strict";var e=t(7),i=t(110),o="number";n.exports=function(t){if("string"!==t&&t!==o&&"default"!==t)throw TypeError("Incorrect hint");return i(e(this),t!=o)}},{110:110,7:7}],27:[function(t,n,r){n.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},{}],28:[function(t,n,r){n.exports=!t(34)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{34:34}],29:[function(t,n,r){var e=t(49),i=t(38).document,o=e(i)&&e(i.createElement);n.exports=function(t){return o?i.createElement(t):{}}},{38:38,49:49}],30:[function(t,n,r){n.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},{}],31:[function(t,n,r){var e=t(76),i=t(73),o=t(77);n.exports=function(t){var n=e(t),r=i.f;if(r)for(var u,c=r(t),f=o.f,a=0;c.length>a;)f.call(t,u=c[a++])&&n.push(u);return n}},{73:73,76:76,77:77}],32:[function(t,n,r){var e=t(38),i=t(23),o=t(40),u=t(87),c=t(25),f="prototype",a=function(t,n,r){var s,l,h,v,p=t&a.F,d=t&a.G,y=t&a.S,g=t&a.P,b=t&a.B,x=d?e:y?e[n]||(e[n]={}):(e[n]||{})[f],m=d?i:i[n]||(i[n]={}),w=m[f]||(m[f]={});d&&(r=n);for(s in r)l=!p&&x&&void 0!==x[s],h=(l?x:r)[s],v=b&&l?c(h,e):g&&"function"==typeof h?c(Function.call,h):h,x&&u(x,s,h,t&a.U),m[s]!=h&&o(m,s,v),g&&w[s]!=h&&(w[s]=h)};e.core=i,a.F=1,a.G=2,a.S=4,a.P=8,a.B=16,a.W=32,a.U=64,a.R=128,n.exports=a},{23:23,25:25,38:38,40:40,87:87}],33:[function(t,n,r){var e=t(117)("match");n.exports=function(t){var n=/./;try{"/./"[t](n)}catch(r){try{return n[e]=!1,!"/./"[t](n)}catch(t){}}return!0}},{117:117}],34:[function(t,n,r){n.exports=function(t){try{return!!t()}catch(t){return!0}}},{}],35:[function(t,n,r){"use strict";var e=t(40),i=t(87),o=t(34),u=t(27),c=t(117);n.exports=function(t,n,r){var f=c(t),a=r(u,f,""[t]),s=a[0],l=a[1];o(function(){var n={};return n[f]=function(){return 7},7!=""[t](n)})&&(i(String.prototype,t,s),e(RegExp.prototype,f,2==n?function(t,n){return l.call(t,this,n)}:function(t){return l.call(t,this)}))}},{117:117,27:27,34:34,40:40,87:87}],36:[function(t,n,r){"use strict";var e=t(7);n.exports=function(){var t=e(this),n="";return t.global&&(n+="g"),t.ignoreCase&&(n+="i"),t.multiline&&(n+="m"),t.unicode&&(n+="u"),t.sticky&&(n+="y"),n}},{7:7}],37:[function(t,n,r){var e=t(25),i=t(51),o=t(46),u=t(7),c=t(108),f=t(118),a={},s={},r=n.exports=function(t,n,r,l,h){var v,p,d,y,g=h?function(){return t}:f(t),b=e(r,l,n?2:1),x=0;if("function"!=typeof g)throw TypeError(t+" is not iterable!");if(o(g)){for(v=c(t.length);v>x;x++)if(y=n?b(u(p=t[x])[0],p[1]):b(t[x]),y===a||y===s)return y}else for(d=g.call(t);!(p=d.next()).done;)if(y=i(d,b,p.value,n),y===a||y===s)return y};r.BREAK=a,r.RETURN=s},{108:108,118:118,25:25,46:46,51:51,7:7}],38:[function(t,n,r){var e=n.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=e)},{}],39:[function(t,n,r){var e={}.hasOwnProperty;n.exports=function(t,n){return e.call(t,n)}},{}],40:[function(t,n,r){var e=t(67),i=t(85);n.exports=t(28)?function(t,n,r){return e.f(t,n,i(1,r))}:function(t,n,r){return t[n]=r,t}},{28:28,67:67,85:85}],41:[function(t,n,r){n.exports=t(38).document&&document.documentElement},{38:38}],42:[function(t,n,r){n.exports=!t(28)&&!t(34)(function(){return 7!=Object.defineProperty(t(29)("div"),"a",{get:function(){return 7}}).a})},{28:28,29:29,34:34}],43:[function(t,n,r){var e=t(49),i=t(90).set;n.exports=function(t,n,r){var o,u=n.constructor;return u!==r&&"function"==typeof u&&(o=u.prototype)!==r.prototype&&e(o)&&i&&i(t,o),t}},{49:49,90:90}],44:[function(t,n,r){n.exports=function(t,n,r){var e=void 0===r;switch(n.length){case 0:return e?t():t.call(r);case 1:return e?t(n[0]):t.call(r,n[0]);case 2:return e?t(n[0],n[1]):t.call(r,n[0],n[1]);case 3:return e?t(n[0],n[1],n[2]):t.call(r,n[0],n[1],n[2]);case 4:return e?t(n[0],n[1],n[2],n[3]):t.call(r,n[0],n[1],n[2],n[3])}return t.apply(r,n)}},{}],45:[function(t,n,r){var e=t(18);n.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==e(t)?t.split(""):Object(t)}},{18:18}],46:[function(t,n,r){var e=t(56),i=t(117)("iterator"),o=Array.prototype;n.exports=function(t){return void 0!==t&&(e.Array===t||o[i]===t)}},{117:117,56:56}],47:[function(t,n,r){var e=t(18);n.exports=Array.isArray||function isArray(t){return"Array"==e(t)}},{18:18}],48:[function(t,n,r){var e=t(49),i=Math.floor;n.exports=function isInteger(t){return!e(t)&&isFinite(t)&&i(t)===t}},{49:49}],49:[function(t,n,r){n.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},{}],50:[function(t,n,r){var e=t(49),i=t(18),o=t(117)("match");n.exports=function(t){var n;return e(t)&&(void 0!==(n=t[o])?!!n:"RegExp"==i(t))}},{117:117,18:18,49:49}],51:[function(t,n,r){var e=t(7);n.exports=function(t,n,r,i){try{return i?n(e(r)[0],r[1]):n(r)}catch(n){var o=t.return;throw void 0!==o&&e(o.call(t)),n}}},{7:7}],52:[function(t,n,r){"use strict";var e=t(66),i=t(85),o=t(92),u={};t(40)(u,t(117)("iterator"),function(){return this}),n.exports=function(t,n,r){t.prototype=e(u,{next:i(1,r)}),o(t,n+" Iterator")}},{117:117,40:40,66:66,85:85,92:92}],53:[function(t,n,r){"use strict";var e=t(58),i=t(32),o=t(87),u=t(40),c=t(39),f=t(56),a=t(52),s=t(92),l=t(74),h=t(117)("iterator"),v=!([].keys&&"next"in[].keys()),p="@@iterator",d="keys",y="values",g=function(){return this};n.exports=function(t,n,r,b,x,m,w){a(r,n,b);var S,_,E,O=function(t){if(!v&&t in M)return M[t];switch(t){case d:return function keys(){return new r(this,t)};case y:return function values(){return new r(this,t)}}return function entries(){return new r(this,t)}},F=n+" Iterator",P=x==y,A=!1,M=t.prototype,I=M[h]||M[p]||x&&M[x],j=I||O(x),N=x?P?O("entries"):j:void 0,k="Array"==n?M.entries||I:I;if(k&&(E=l(k.call(new t)),E!==Object.prototype&&(s(E,F,!0),e||c(E,h)||u(E,h,g))),P&&I&&I.name!==y&&(A=!0,j=function values(){return I.call(this)}),e&&!w||!v&&!A&&M[h]||u(M,h,j),f[n]=j,f[F]=g,x)if(S={values:P?j:O(y),keys:m?j:O(d),entries:N},w)for(_ in S)_ in M||o(M,_,S[_]);else i(i.P+i.F*(v||A),n,S);return S}},{117:117,32:32,39:39,40:40,52:52,56:56,58:58,74:74,87:87,92:92}],54:[function(t,n,r){var e=t(117)("iterator"),i=!1;try{var o=[7][e]();o.return=function(){i=!0},Array.from(o,function(){throw 2})}catch(t){}n.exports=function(t,n){if(!n&&!i)return!1;var r=!1;try{var o=[7],u=o[e]();u.next=function(){return{done:r=!0}},o[e]=function(){return u},t(o)}catch(t){}return r}},{117:117}],55:[function(t,n,r){n.exports=function(t,n){return{value:n,done:!!t}}},{}],56:[function(t,n,r){n.exports={}},{}],57:[function(t,n,r){var e=t(76),i=t(107);n.exports=function(t,n){for(var r,o=i(t),u=e(o),c=u.length,f=0;c>f;)if(o[r=u[f++]]===n)return r}},{107:107,76:76}],58:[function(t,n,r){n.exports=!1},{}],59:[function(t,n,r){var e=Math.expm1;n.exports=!e||e(10)>22025.465794806718||e(10)<22025.465794806718||e(-2e-17)!=-2e-17?function expm1(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:Math.exp(t)-1}:e},{}],60:[function(t,n,r){n.exports=Math.log1p||function log1p(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:Math.log(1+t)}},{}],61:[function(t,n,r){n.exports=Math.sign||function sign(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},{}],62:[function(t,n,r){var e=t(114)("meta"),i=t(49),o=t(39),u=t(67).f,c=0,f=Object.isExtensible||function(){return!0},a=!t(34)(function(){return f(Object.preventExtensions({}))}),s=function(t){u(t,e,{value:{i:"O"+ ++c,w:{}}})},l=function(t,n){if(!i(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!o(t,e)){if(!f(t))return"F";if(!n)return"E";s(t)}return t[e].i},h=function(t,n){if(!o(t,e)){if(!f(t))return!0;if(!n)return!1;s(t)}return t[e].w},v=function(t){return a&&p.NEED&&f(t)&&!o(t,e)&&s(t),t},p=n.exports={KEY:e,NEED:!1,fastKey:l,getWeak:h,onFreeze:v}},{114:114,34:34,39:39,49:49,67:67}],63:[function(t,n,r){var e=t(149),i=t(32),o=t(94)("metadata"),u=o.store||(o.store=new(t(255))),c=function(t,n,r){var i=u.get(t);if(!i){if(!r)return;u.set(t,i=new e)}var o=i.get(n);if(!o){if(!r)return;i.set(n,o=new e)}return o},f=function(t,n,r){var e=c(n,r,!1);return void 0!==e&&e.has(t)},a=function(t,n,r){var e=c(n,r,!1);return void 0===e?void 0:e.get(t)},s=function(t,n,r,e){c(r,e,!0).set(t,n)},l=function(t,n){var r=c(t,n,!1),e=[];return r&&r.forEach(function(t,n){e.push(n)}),e},h=function(t){return void 0===t||"symbol"==typeof t?t:String(t)},v=function(t){i(i.S,"Reflect",t)};n.exports={store:u,map:c,has:f,get:a,set:s,keys:l,key:h,exp:v}},{149:149,255:255,32:32,94:94}],64:[function(t,n,r){var e=t(38),i=t(104).set,o=e.MutationObserver||e.WebKitMutationObserver,u=e.process,c=e.Promise,f="process"==t(18)(u);n.exports=function(){var t,n,r,a=function(){var e,i;for(f&&(e=u.domain)&&e.exit();t;){i=t.fn,t=t.next;try{i()}catch(e){throw t?r():n=void 0,e}}n=void 0,e&&e.enter()};if(f)r=function(){u.nextTick(a)};else if(o){var s=!0,l=document.createTextNode("");new o(a).observe(l,{characterData:!0}),r=function(){l.data=s=!s}}else if(c&&c.resolve){var h=c.resolve();r=function(){h.then(a)}}else r=function(){i.call(e,a)};return function(e){var i={fn:e,next:void 0};n&&(n.next=i),t||(t=i,r()),n=i}}},{104:104,18:18,38:38}],65:[function(t,n,r){"use strict";var e=t(76),i=t(73),o=t(77),u=t(109),c=t(45),f=Object.assign;n.exports=!f||t(34)(function(){var t={},n={},r=Symbol(),e="abcdefghijklmnopqrst";return t[r]=7,e.split("").forEach(function(t){n[t]=t}),7!=f({},t)[r]||Object.keys(f({},n)).join("")!=e})?function assign(t,n){for(var r=u(t),f=arguments.length,a=1,s=i.f,l=o.f;f>a;)for(var h,v=c(arguments[a++]),p=s?e(v).concat(s(v)):e(v),d=p.length,y=0;d>y;)l.call(v,h=p[y++])&&(r[h]=v[h]);return r}:f},{109:109,34:34,45:45,73:73,76:76,77:77}],66:[function(t,n,r){var e=t(7),i=t(68),o=t(30),u=t(93)("IE_PROTO"),c=function(){},f="prototype",a=function(){var n,r=t(29)("iframe"),e=o.length,i="<",u=">";for(r.style.display="none",t(41).appendChild(r),r.src="javascript:",n=r.contentWindow.document,n.open(),n.write(i+"script"+u+"document.F=Object"+i+"/script"+u),n.close(),a=n.F;e--;)delete a[f][o[e]];return a()};n.exports=Object.create||function create(t,n){var r;return null!==t?(c[f]=e(t),r=new c,c[f]=null,r[u]=t):r=a(),void 0===n?r:i(r,n)}},{29:29,30:30,41:41,68:68,7:7,93:93}],67:[function(t,n,r){var e=t(7),i=t(42),o=t(110),u=Object.defineProperty;r.f=t(28)?Object.defineProperty:function defineProperty(t,n,r){if(e(t),n=o(n,!0),e(r),i)try{return u(t,n,r)}catch(t){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(t[n]=r.value),t}},{110:110,28:28,42:42,7:7}],68:[function(t,n,r){var e=t(67),i=t(7),o=t(76);n.exports=t(28)?Object.defineProperties:function defineProperties(t,n){i(t);for(var r,u=o(n),c=u.length,f=0;c>f;)e.f(t,r=u[f++],n[r]);return t}},{28:28,67:67,7:7,76:76}],69:[function(t,n,r){n.exports=t(58)||!t(34)(function(){var n=Math.random();__defineSetter__.call(null,n,function(){}),delete t(38)[n]})},{34:34,38:38,58:58}],70:[function(t,n,r){var e=t(77),i=t(85),o=t(107),u=t(110),c=t(39),f=t(42),a=Object.getOwnPropertyDescriptor;r.f=t(28)?a:function getOwnPropertyDescriptor(t,n){if(t=o(t),n=u(n,!0),f)try{return a(t,n)}catch(t){}if(c(t,n))return i(!e.f.call(t,n),t[n])}},{107:107,110:110,28:28,39:39,42:42,77:77,85:85}],71:[function(t,n,r){var e=t(107),i=t(72).f,o={}.toString,u="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],c=function(t){try{return i(t)}catch(t){return u.slice()}};n.exports.f=function getOwnPropertyNames(t){return u&&"[object Window]"==o.call(t)?c(t):i(e(t))}},{107:107,72:72}],72:[function(t,n,r){var e=t(75),i=t(30).concat("length","prototype");r.f=Object.getOwnPropertyNames||function getOwnPropertyNames(t){return e(t,i)}},{30:30,75:75}],73:[function(t,n,r){r.f=Object.getOwnPropertySymbols},{}],74:[function(t,n,r){var e=t(39),i=t(109),o=t(93)("IE_PROTO"),u=Object.prototype;n.exports=Object.getPrototypeOf||function(t){return t=i(t),e(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?u:null}},{109:109,39:39,93:93}],75:[function(t,n,r){var e=t(39),i=t(107),o=t(11)(!1),u=t(93)("IE_PROTO");n.exports=function(t,n){var r,c=i(t),f=0,a=[];for(r in c)r!=u&&e(c,r)&&a.push(r);for(;n.length>f;)e(c,r=n[f++])&&(~o(a,r)||a.push(r));return a}},{107:107,11:11,39:39,93:93}],76:[function(t,n,r){var e=t(75),i=t(30);n.exports=Object.keys||function keys(t){return e(t,i)}},{30:30,75:75}],77:[function(t,n,r){r.f={}.propertyIsEnumerable},{}],78:[function(t,n,r){var e=t(32),i=t(23),o=t(34);n.exports=function(t,n){var r=(i.Object||{})[t]||Object[t],u={};u[t]=n(r),e(e.S+e.F*o(function(){r(1)}),"Object",u)}},{23:23,32:32,34:34}],79:[function(t,n,r){var e=t(76),i=t(107),o=t(77).f;n.exports=function(t){return function(n){for(var r,u=i(n),c=e(u),f=c.length,a=0,s=[];f>a;)o.call(u,r=c[a++])&&s.push(t?[r,u[r]]:u[r]);return s}}},{107:107,76:76,77:77}],80:[function(t,n,r){var e=t(72),i=t(73),o=t(7),u=t(38).Reflect;n.exports=u&&u.ownKeys||function ownKeys(t){var n=e.f(o(t)),r=i.f;return r?n.concat(r(t)):n}},{38:38,7:7,72:72,73:73}],81:[function(t,n,r){var e=t(38).parseFloat,i=t(102).trim;n.exports=1/e(t(103)+"-0")!==-(1/0)?function parseFloat(t){var n=i(String(t),3),r=e(n);return 0===r&&"-"==n.charAt(0)?-0:r}:e},{102:102,103:103,38:38}],82:[function(t,n,r){var e=t(38).parseInt,i=t(102).trim,o=t(103),u=/^[\-+]?0[xX]/;n.exports=8!==e(o+"08")||22!==e(o+"0x16")?function parseInt(t,n){var r=i(String(t),3);return e(r,n>>>0||(u.test(r)?16:10))}:e},{102:102,103:103,38:38}],83:[function(t,n,r){"use strict";var e=t(84),i=t(44),o=t(3);n.exports=function(){for(var t=o(this),n=arguments.length,r=Array(n),u=0,c=e._,f=!1;n>u;)(r[u]=arguments[u++])===c&&(f=!0);return function(){var e,o=this,u=arguments.length,a=0,s=0;if(!f&&!u)return i(t,r,o);if(e=r.slice(),f)for(;n>a;a++)e[a]===c&&(e[a]=arguments[s++]);for(;u>s;)e.push(arguments[s++]);return i(t,e,o)}}},{3:3,44:44,84:84}],84:[function(t,n,r){n.exports=t(38)},{38:38}],85:[function(t,n,r){n.exports=function(t,n){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:n}}},{}],86:[function(t,n,r){var e=t(87);n.exports=function(t,n,r){for(var i in n)e(t,i,n[i],r);return t}},{87:87}],87:[function(t,n,r){var e=t(38),i=t(40),o=t(39),u=t(114)("src"),c="toString",f=Function[c],a=(""+f).split(c);t(23).inspectSource=function(t){return f.call(t)},(n.exports=function(t,n,r,c){var f="function"==typeof r;f&&(o(r,"name")||i(r,"name",n)),t[n]!==r&&(f&&(o(r,u)||i(r,u,t[n]?""+t[n]:a.join(String(n)))),t===e?t[n]=r:c?t[n]?t[n]=r:i(t,n,r):(delete t[n],i(t,n,r)))})(Function.prototype,c,function toString(){return"function"==typeof this&&this[u]||f.call(this)})},{114:114,23:23,38:38,39:39,40:40}],88:[function(t,n,r){n.exports=function(t,n){var r=n===Object(n)?function(t){return n[t]}:n;return function(n){return String(n).replace(t,r)}}},{}],89:[function(t,n,r){n.exports=Object.is||function is(t,n){return t===n?0!==t||1/t===1/n:t!=t&&n!=n}},{}],90:[function(t,n,r){var e=t(49),i=t(7),o=function(t,n){if(i(t),!e(n)&&null!==n)throw TypeError(n+": can't set as prototype!")};n.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(n,r,e){try{e=t(25)(Function.call,t(70).f(Object.prototype,"__proto__").set,2),e(n,[]),r=!(n instanceof Array)}catch(t){r=!0}return function setPrototypeOf(t,n){return o(t,n),r?t.__proto__=n:e(t,n),t}}({},!1):void 0),check:o}},{25:25,49:49,7:7,70:70}],91:[function(t,n,r){"use strict";var e=t(38),i=t(67),o=t(28),u=t(117)("species");n.exports=function(t){var n=e[t];o&&n&&!n[u]&&i.f(n,u,{configurable:!0,get:function(){return this}})}},{117:117,28:28,38:38,67:67}],92:[function(t,n,r){var e=t(67).f,i=t(39),o=t(117)("toStringTag");n.exports=function(t,n,r){t&&!i(t=r?t:t.prototype,o)&&e(t,o,{configurable:!0,value:n})}},{117:117,39:39,67:67}],93:[function(t,n,r){var e=t(94)("keys"),i=t(114);n.exports=function(t){return e[t]||(e[t]=i(t))}},{114:114,94:94}],94:[function(t,n,r){var e=t(38),i="__core-js_shared__",o=e[i]||(e[i]={});n.exports=function(t){return o[t]||(o[t]={})}},{38:38}],95:[function(t,n,r){var e=t(7),i=t(3),o=t(117)("species");n.exports=function(t,n){var r,u=e(t).constructor;return void 0===u||void 0==(r=e(u)[o])?n:i(r)}},{117:117,3:3,7:7}],96:[function(t,n,r){var e=t(34);n.exports=function(t,n){return!!t&&e(function(){n?t.call(null,function(){},1):t.call(null)})}},{34:34}],97:[function(t,n,r){var e=t(106),i=t(27);n.exports=function(t){return function(n,r){var o,u,c=String(i(n)),f=e(r),a=c.length;return f<0||f>=a?t?"":void 0:(o=c.charCodeAt(f),o<55296||o>56319||f+1===a||(u=c.charCodeAt(f+1))<56320||u>57343?t?c.charAt(f):o:t?c.slice(f,f+2):(o-55296<<10)+(u-56320)+65536)}}},{106:106,27:27}],98:[function(t,n,r){var e=t(50),i=t(27);n.exports=function(t,n,r){if(e(n))throw TypeError("String#"+r+" doesn't accept regex!");return String(i(t))}},{27:27,50:50}],99:[function(t,n,r){var e=t(32),i=t(34),o=t(27),u=/"/g,c=function(t,n,r,e){var i=String(o(t)),c="<"+n;return""!==r&&(c+=" "+r+'="'+String(e).replace(u,""")+'"'),c+">"+i+""};n.exports=function(t,n){var r={};r[t]=n(c),e(e.P+e.F*i(function(){var n=""[t]('"');return n!==n.toLowerCase()||n.split('"').length>3}),"String",r)}},{27:27,32:32,34:34}],100:[function(t,n,r){var e=t(108),i=t(101),o=t(27);n.exports=function(t,n,r,u){var c=String(o(t)),f=c.length,a=void 0===r?" ":String(r),s=e(n);if(s<=f||""==a)return c;var l=s-f,h=i.call(a,Math.ceil(l/a.length));return h.length>l&&(h=h.slice(0,l)),u?h+c:c+h}},{101:101,108:108,27:27}],101:[function(t,n,r){"use strict";var e=t(106),i=t(27);n.exports=function repeat(t){var n=String(i(this)),r="",o=e(t);if(o<0||o==1/0)throw RangeError("Count can't be negative");for(;o>0;(o>>>=1)&&(n+=n))1&o&&(r+=n);return r}},{106:106,27:27}],102:[function(t,n,r){var e=t(32),i=t(27),o=t(34),u=t(103),c="["+u+"]",f="โ€‹ย…",a=RegExp("^"+c+c+"*"),s=RegExp(c+c+"*$"),l=function(t,n,r){var i={},c=o(function(){return!!u[t]()||f[t]()!=f}),a=i[t]=c?n(h):u[t];r&&(i[r]=a),e(e.P+e.F*c,"String",i)},h=l.trim=function(t,n){return t=String(i(t)),1&n&&(t=t.replace(a,"")),2&n&&(t=t.replace(s,"")),t};n.exports=l},{103:103,27:27,32:32,34:34}],103:[function(t,n,r){n.exports="\t\n\v\f\r ย แš€แ Žโ€€โ€โ€‚โ€ƒโ€„โ€…โ€†โ€‡โ€ˆโ€‰โ€Šโ€ฏโŸใ€€\u2028\u2029\ufeff"},{}],104:[function(t,n,r){var e,i,o,u=t(25),c=t(44),f=t(41),a=t(29),s=t(38),l=s.process,h=s.setImmediate,v=s.clearImmediate,p=s.MessageChannel,d=0,y={},g="onreadystatechange",b=function(){var t=+this;if(y.hasOwnProperty(t)){var n=y[t];delete y[t],n()}},x=function(t){b.call(t.data)};h&&v||(h=function setImmediate(t){for(var n=[],r=1;arguments.length>r;)n.push(arguments[r++]);return y[++d]=function(){c("function"==typeof t?t:Function(t),n)},e(d),d},v=function clearImmediate(t){delete y[t]},"process"==t(18)(l)?e=function(t){l.nextTick(u(b,t,1))}:p?(i=new p,o=i.port2,i.port1.onmessage=x,e=u(o.postMessage,o,1)):s.addEventListener&&"function"==typeof postMessage&&!s.importScripts?(e=function(t){s.postMessage(t+"","*")},s.addEventListener("message",x,!1)):e=g in a("script")?function(t){f.appendChild(a("script"))[g]=function(){f.removeChild(this),b.call(t)}}:function(t){setTimeout(u(b,t,1),0)}),n.exports={set:h,clear:v}},{18:18,25:25,29:29,38:38,41:41,44:44}],105:[function(t,n,r){var e=t(106),i=Math.max,o=Math.min;n.exports=function(t,n){return t=e(t),t<0?i(t+n,0):o(t,n)}},{106:106}],106:[function(t,n,r){var e=Math.ceil,i=Math.floor;n.exports=function(t){return isNaN(t=+t)?0:(t>0?i:e)(t)}},{}],107:[function(t,n,r){var e=t(45),i=t(27);n.exports=function(t){return e(i(t))}},{27:27,45:45}],108:[function(t,n,r){var e=t(106),i=Math.min;n.exports=function(t){return t>0?i(e(t),9007199254740991):0}},{106:106}],109:[function(t,n,r){var e=t(27);n.exports=function(t){return Object(e(t))}},{27:27}],110:[function(t,n,r){var e=t(49);n.exports=function(t,n){if(!e(t))return t;var r,i;if(n&&"function"==typeof(r=t.toString)&&!e(i=r.call(t)))return i;if("function"==typeof(r=t.valueOf)&&!e(i=r.call(t)))return i;if(!n&&"function"==typeof(r=t.toString)&&!e(i=r.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},{49:49}],111:[function(t,n,r){"use strict";if(t(28)){var e=t(58),i=t(38),o=t(34),u=t(32),c=t(113),f=t(112),a=t(25),s=t(6),l=t(85),h=t(40),v=t(86),p=t(106),d=t(108),y=t(105),g=t(110),b=t(39),x=t(89),m=t(17),w=t(49),S=t(109),_=t(46),E=t(66),O=t(74),F=t(72).f,P=t(118),A=t(114),M=t(117),I=t(12),j=t(11),N=t(95),k=t(130),R=t(56),T=t(54),L=t(91),C=t(9),U=t(8),G=t(67),D=t(70),W=G.f,B=D.f,V=i.RangeError,z=i.TypeError,K=i.Uint8Array,J="ArrayBuffer",Y="Shared"+J,q="BYTES_PER_ELEMENT",X="prototype",$=Array[X],H=f.ArrayBuffer,Z=f.DataView,Q=I(0),tt=I(2),nt=I(3),rt=I(4),et=I(5),it=I(6),ot=j(!0),ut=j(!1),ct=k.values,ft=k.keys,at=k.entries,st=$.lastIndexOf,lt=$.reduce,ht=$.reduceRight,vt=$.join,pt=$.sort,dt=$.slice,yt=$.toString,gt=$.toLocaleString,bt=M("iterator"),xt=M("toStringTag"),mt=A("typed_constructor"),wt=A("def_constructor"),St=c.CONSTR,_t=c.TYPED,Et=c.VIEW,Ot="Wrong length!",Ft=I(1,function(t,n){return Nt(N(t,t[wt]),n)}),Pt=o(function(){return 1===new K(new Uint16Array([1]).buffer)[0]}),At=!!K&&!!K[X].set&&o(function(){new K(1).set({})}),Mt=function(t,n){if(void 0===t)throw z(Ot);var r=+t,e=d(t);if(n&&!x(r,e))throw V(Ot);return e},It=function(t,n){var r=p(t);if(r<0||r%n)throw V("Wrong offset!");return r},jt=function(t){if(w(t)&&_t in t)return t;throw z(t+" is not a typed array!")},Nt=function(t,n){if(!(w(t)&&mt in t))throw z("It is not a typed array constructor!");return new t(n)},kt=function(t,n){return Rt(N(t,t[wt]),n)},Rt=function(t,n){for(var r=0,e=n.length,i=Nt(t,e);e>r;)i[r]=n[r++];return i},Tt=function(t,n,r){W(t,n,{get:function(){return this._d[r]}})},Lt=function from(t){var n,r,e,i,o,u,c=S(t),f=arguments.length,s=f>1?arguments[1]:void 0,l=void 0!==s,h=P(c);if(void 0!=h&&!_(h)){for(u=h.call(c),e=[],n=0;!(o=u.next()).done;n++)e.push(o.value);c=e}for(l&&f>2&&(s=a(s,arguments[2],2)),n=0,r=d(c.length),i=Nt(this,r);r>n;n++)i[n]=l?s(c[n],n):c[n];return i},Ct=function of(){for(var t=0,n=arguments.length,r=Nt(this,n);n>t;)r[t]=arguments[t++];return r},Ut=!!K&&o(function(){gt.call(new K(1))}),Gt=function toLocaleString(){return gt.apply(Ut?dt.call(jt(this)):jt(this),arguments)},Dt={copyWithin:function copyWithin(t,n){return U.call(jt(this),t,n,arguments.length>2?arguments[2]:void 0)},every:function every(t){return rt(jt(this),t,arguments.length>1?arguments[1]:void 0)},fill:function fill(t){return C.apply(jt(this),arguments)},filter:function filter(t){return kt(this,tt(jt(this),t,arguments.length>1?arguments[1]:void 0))},find:function find(t){return et(jt(this),t,arguments.length>1?arguments[1]:void 0)},findIndex:function findIndex(t){ + return it(jt(this),t,arguments.length>1?arguments[1]:void 0)},forEach:function forEach(t){Q(jt(this),t,arguments.length>1?arguments[1]:void 0)},indexOf:function indexOf(t){return ut(jt(this),t,arguments.length>1?arguments[1]:void 0)},includes:function includes(t){return ot(jt(this),t,arguments.length>1?arguments[1]:void 0)},join:function join(t){return vt.apply(jt(this),arguments)},lastIndexOf:function lastIndexOf(t){return st.apply(jt(this),arguments)},map:function map(t){return Ft(jt(this),t,arguments.length>1?arguments[1]:void 0)},reduce:function reduce(t){return lt.apply(jt(this),arguments)},reduceRight:function reduceRight(t){return ht.apply(jt(this),arguments)},reverse:function reverse(){for(var t,n=this,r=jt(n).length,e=Math.floor(r/2),i=0;i1?arguments[1]:void 0)},sort:function sort(t){return pt.call(jt(this),t)},subarray:function subarray(t,n){var r=jt(this),e=r.length,i=y(t,e);return new(N(r,r[wt]))(r.buffer,r.byteOffset+i*r.BYTES_PER_ELEMENT,d((void 0===n?e:y(n,e))-i))}},Wt=function slice(t,n){return kt(this,dt.call(jt(this),t,n))},Bt=function set(t){jt(this);var n=It(arguments[1],1),r=this.length,e=S(t),i=d(e.length),o=0;if(i+n>r)throw V(Ot);for(;o255?255:255&e),i.v[p](r*n+i.o,e,Pt)},M=function(t,n){W(t,n,{get:function(){return P(this,n)},set:function(t){return A(this,n,t)},enumerable:!0})};x?(y=r(function(t,r,e,i){s(t,y,a,"_d");var o,u,c,f,l=0,v=0;if(w(r)){if(!(r instanceof H||(f=m(r))==J||f==Y))return _t in r?Rt(y,r):Lt.call(y,r);o=r,v=It(e,n);var p=r.byteLength;if(void 0===i){if(p%n)throw V(Ot);if(u=p-v,u<0)throw V(Ot)}else if(u=d(i)*n,u+v>p)throw V(Ot);c=u/n}else c=Mt(r,!0),u=c*n,o=new H(u);for(h(t,"_d",{b:o,o:v,l:u,e:c,v:new Z(o)});l>1,s=23===n?M(2,-24)-M(2,-77):0,l=0,h=t<0||0===t&&1/t<0?1:0;for(t=A(t),t!=t||t===F?(i=t!=t?1:0,e=f):(e=I(j(t)/N),t*(o=M(2,-e))<1&&(e--,o*=2),t+=e+a>=1?s/o:s*M(2,1-a),t*o>=2&&(e++,o/=2),e+a>=f?(i=0,e=f):e+a>=1?(i=(t*o-1)*M(2,n),e+=a):(i=t*M(2,a-1)*M(2,n),e=0));n>=8;u[l++]=255&i,i/=256,n-=8);for(e=e<0;u[l++]=255&e,e/=256,c-=8);return u[--l]|=128*h,u},D=function(t,n,r){var e,i=8*r-n-1,o=(1<>1,c=i-7,f=r-1,a=t[f--],s=127&a;for(a>>=7;c>0;s=256*s+t[f],f--,c-=8);for(e=s&(1<<-c)-1,s>>=-c,c+=n;c>0;e=256*e+t[f],f--,c-=8);if(0===s)s=1-u;else{if(s===o)return e?NaN:a?-F:F;e+=M(2,n),s-=u}return(a?-1:1)*e*M(2,s-n)},W=function(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]},B=function(t){return[255&t]},V=function(t){return[255&t,t>>8&255]},z=function(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]},K=function(t){return G(t,52,8)},J=function(t){return G(t,23,4)},Y=function(t,n,r){p(t[x],n,{get:function(){return this[r]}})},q=function(t,n,r,e){var i=+r,o=l(i);if(i!=o||o<0||o+n>t[C])throw O(w);var u=t[L]._b,c=o+t[U],f=u.slice(c,c+n);return e?f:f.reverse()},X=function(t,n,r,e,i,o){var u=+r,c=l(u);if(u!=c||c<0||c+n>t[C])throw O(w);for(var f=t[L]._b,a=c+t[U],s=e(+i),h=0;htt;)(H=Q[tt++])in S||c(S,H,P[H]);o||(Z.constructor=S)}var nt=new _(new S(2)),rt=_[x].setInt8;nt.setInt8(0,2147483648),nt.setInt8(1,2147483649),!nt.getInt8(0)&&nt.getInt8(1)||f(_[x],{setInt8:function setInt8(t,n){rt.call(this,t,n<<24>>24)},setUint8:function setUint8(t,n){rt.call(this,t,n<<24>>24)}},!0)}else S=function ArrayBuffer(t){var n=$(this,t);this._b=d.call(Array(n),0),this[C]=n},_=function DataView(t,n,r){s(this,_,b),s(t,S,b);var e=t[C],i=l(n);if(i<0||i>e)throw O("Wrong offset!");if(r=void 0===r?e-i:h(r),i+r>e)throw O(m);this[L]=t,this[U]=i,this[C]=r},i&&(Y(S,R,"_l"),Y(_,k,"_b"),Y(_,R,"_l"),Y(_,T,"_o")),f(_[x],{getInt8:function getInt8(t){return q(this,1,t)[0]<<24>>24},getUint8:function getUint8(t){return q(this,1,t)[0]},getInt16:function getInt16(t){var n=q(this,2,t,arguments[1]);return(n[1]<<8|n[0])<<16>>16},getUint16:function getUint16(t){var n=q(this,2,t,arguments[1]);return n[1]<<8|n[0]},getInt32:function getInt32(t){return W(q(this,4,t,arguments[1]))},getUint32:function getUint32(t){return W(q(this,4,t,arguments[1]))>>>0},getFloat32:function getFloat32(t){return D(q(this,4,t,arguments[1]),23,4)},getFloat64:function getFloat64(t){return D(q(this,8,t,arguments[1]),52,8)},setInt8:function setInt8(t,n){X(this,1,t,B,n)},setUint8:function setUint8(t,n){X(this,1,t,B,n)},setInt16:function setInt16(t,n){X(this,2,t,V,n,arguments[2])},setUint16:function setUint16(t,n){X(this,2,t,V,n,arguments[2])},setInt32:function setInt32(t,n){X(this,4,t,z,n,arguments[2])},setUint32:function setUint32(t,n){X(this,4,t,z,n,arguments[2])},setFloat32:function setFloat32(t,n){X(this,4,t,J,n,arguments[2])},setFloat64:function setFloat64(t,n){X(this,8,t,K,n,arguments[2])}});y(S,g),y(_,b),c(_[x],u.VIEW,!0),r[g]=S,r[b]=_},{106:106,108:108,113:113,28:28,34:34,38:38,40:40,58:58,6:6,67:67,72:72,86:86,9:9,92:92}],113:[function(t,n,r){for(var e,i=t(38),o=t(40),u=t(114),c=u("typed_array"),f=u("view"),a=!(!i.ArrayBuffer||!i.DataView),s=a,l=0,h=9,v="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");l1?arguments[1]:void 0)}}),t(5)(o)},{12:12,32:32,5:5}],125:[function(t,n,r){"use strict";var e=t(32),i=t(12)(5),o="find",u=!0;o in[]&&Array(1)[o](function(){u=!1}),e(e.P+e.F*u,"Array",{find:function find(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),t(5)(o)},{12:12,32:32,5:5}],126:[function(t,n,r){"use strict";var e=t(32),i=t(12)(0),o=t(96)([].forEach,!0);e(e.P+e.F*!o,"Array",{forEach:function forEach(t){return i(this,t,arguments[1])}})},{12:12,32:32,96:96}],127:[function(t,n,r){"use strict";var e=t(25),i=t(32),o=t(109),u=t(51),c=t(46),f=t(108),a=t(24),s=t(118);i(i.S+i.F*!t(54)(function(t){Array.from(t)}),"Array",{from:function from(t){var n,r,i,l,h=o(t),v="function"==typeof this?this:Array,p=arguments.length,d=p>1?arguments[1]:void 0,y=void 0!==d,g=0,b=s(h);if(y&&(d=e(d,p>2?arguments[2]:void 0,2)),void 0==b||v==Array&&c(b))for(n=f(h.length),r=new v(n);n>g;g++)a(r,g,y?d(h[g],g):h[g]);else for(l=b.call(h),r=new v;!(i=l.next()).done;g++)a(r,g,y?u(l,d,[i.value,g],!0):i.value);return r.length=g,r}})},{108:108,109:109,118:118,24:24,25:25,32:32,46:46,51:51,54:54}],128:[function(t,n,r){"use strict";var e=t(32),i=t(11)(!1),o=[].indexOf,u=!!o&&1/[1].indexOf(1,-0)<0;e(e.P+e.F*(u||!t(96)(o)),"Array",{indexOf:function indexOf(t){return u?o.apply(this,arguments)||0:i(this,t,arguments[1])}})},{11:11,32:32,96:96}],129:[function(t,n,r){var e=t(32);e(e.S,"Array",{isArray:t(47)})},{32:32,47:47}],130:[function(t,n,r){"use strict";var e=t(5),i=t(55),o=t(56),u=t(107);n.exports=t(53)(Array,"Array",function(t,n){this._t=u(t),this._i=0,this._k=n},function(){var t=this._t,n=this._k,r=this._i++;return!t||r>=t.length?(this._t=void 0,i(1)):"keys"==n?i(0,r):"values"==n?i(0,t[r]):i(0,[r,t[r]])},"values"),o.Arguments=o.Array,e("keys"),e("values"),e("entries")},{107:107,5:5,53:53,55:55,56:56}],131:[function(t,n,r){"use strict";var e=t(32),i=t(107),o=[].join;e(e.P+e.F*(t(45)!=Object||!t(96)(o)),"Array",{join:function join(t){return o.call(i(this),void 0===t?",":t)}})},{107:107,32:32,45:45,96:96}],132:[function(t,n,r){"use strict";var e=t(32),i=t(107),o=t(106),u=t(108),c=[].lastIndexOf,f=!!c&&1/[1].lastIndexOf(1,-0)<0;e(e.P+e.F*(f||!t(96)(c)),"Array",{lastIndexOf:function lastIndexOf(t){if(f)return c.apply(this,arguments)||0;var n=i(this),r=u(n.length),e=r-1;for(arguments.length>1&&(e=Math.min(e,o(arguments[1]))),e<0&&(e=r+e);e>=0;e--)if(e in n&&n[e]===t)return e||0;return-1}})},{106:106,107:107,108:108,32:32,96:96}],133:[function(t,n,r){"use strict";var e=t(32),i=t(12)(1);e(e.P+e.F*!t(96)([].map,!0),"Array",{map:function map(t){return i(this,t,arguments[1])}})},{12:12,32:32,96:96}],134:[function(t,n,r){"use strict";var e=t(32),i=t(24);e(e.S+e.F*t(34)(function(){function F(){}return!(Array.of.call(F)instanceof F)}),"Array",{of:function of(){for(var t=0,n=arguments.length,r=new("function"==typeof this?this:Array)(n);n>t;)i(r,t,arguments[t++]);return r.length=n,r}})},{24:24,32:32,34:34}],135:[function(t,n,r){"use strict";var e=t(32),i=t(13);e(e.P+e.F*!t(96)([].reduceRight,!0),"Array",{reduceRight:function reduceRight(t){return i(this,t,arguments.length,arguments[1],!0)}})},{13:13,32:32,96:96}],136:[function(t,n,r){"use strict";var e=t(32),i=t(13);e(e.P+e.F*!t(96)([].reduce,!0),"Array",{reduce:function reduce(t){return i(this,t,arguments.length,arguments[1],!1)}})},{13:13,32:32,96:96}],137:[function(t,n,r){"use strict";var e=t(32),i=t(41),o=t(18),u=t(105),c=t(108),f=[].slice;e(e.P+e.F*t(34)(function(){i&&f.call(i)}),"Array",{slice:function slice(t,n){var r=c(this.length),e=o(this);if(n=void 0===n?r:n,"Array"==e)return f.call(this,t,n);for(var i=u(t,r),a=u(n,r),s=c(a-i),l=Array(s),h=0;h9?t:"0"+t};e(e.P+e.F*(i(function(){return"0385-07-25T07:06:39.999Z"!=new Date(-5e13-1).toISOString()})||!i(function(){new Date(NaN).toISOString()})),"Date",{toISOString:function toISOString(){if(!isFinite(o.call(this)))throw RangeError("Invalid time value");var t=this,n=t.getUTCFullYear(),r=t.getUTCMilliseconds(),e=n<0?"-":n>9999?"+":"";return e+("00000"+Math.abs(n)).slice(e?-6:-4)+"-"+u(t.getUTCMonth()+1)+"-"+u(t.getUTCDate())+"T"+u(t.getUTCHours())+":"+u(t.getUTCMinutes())+":"+u(t.getUTCSeconds())+"."+(r>99?r:"0"+u(r))+"Z"}})},{32:32,34:34}],143:[function(t,n,r){"use strict";var e=t(32),i=t(109),o=t(110);e(e.P+e.F*t(34)(function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}),"Date",{toJSON:function toJSON(t){var n=i(this),r=o(n);return"number"!=typeof r||isFinite(r)?n.toISOString():null}})},{109:109,110:110,32:32,34:34}],144:[function(t,n,r){var e=t(117)("toPrimitive"),i=Date.prototype;e in i||t(40)(i,e,t(26))},{117:117,26:26,40:40}],145:[function(t,n,r){var e=Date.prototype,i="Invalid Date",o="toString",u=e[o],c=e.getTime;new Date(NaN)+""!=i&&t(87)(e,o,function toString(){var t=c.call(this);return t===t?u.call(this):i})},{87:87}],146:[function(t,n,r){var e=t(32);e(e.P,"Function",{bind:t(16)})},{16:16,32:32}],147:[function(t,n,r){"use strict";var e=t(49),i=t(74),o=t(117)("hasInstance"),u=Function.prototype;o in u||t(67).f(u,o,{value:function(t){if("function"!=typeof this||!e(t))return!1;if(!e(this.prototype))return t instanceof this;for(;t=i(t);)if(this.prototype===t)return!0;return!1}})},{117:117,49:49,67:67,74:74}],148:[function(t,n,r){var e=t(67).f,i=t(85),o=t(39),u=Function.prototype,c=/^\s*function ([^ (]*)/,f="name",a=Object.isExtensible||function(){return!0};f in u||t(28)&&e(u,f,{configurable:!0,get:function(){try{var t=this,n=(""+t).match(c)[1];return o(t,f)||!a(t)||e(t,f,i(5,n)),n}catch(t){return""}}})},{28:28,39:39,67:67,85:85}],149:[function(t,n,r){"use strict";var e=t(19);n.exports=t(22)("Map",function(t){return function Map(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function get(t){var n=e.getEntry(this,t);return n&&n.v},set:function set(t,n){return e.def(this,0===t?0:t,n)}},e,!0)},{19:19,22:22}],150:[function(t,n,r){var e=t(32),i=t(60),o=Math.sqrt,u=Math.acosh;e(e.S+e.F*!(u&&710==Math.floor(u(Number.MAX_VALUE))&&u(1/0)==1/0),"Math",{acosh:function acosh(t){return(t=+t)<1?NaN:t>94906265.62425156?Math.log(t)+Math.LN2:i(t-1+o(t-1)*o(t+1))}})},{32:32,60:60}],151:[function(t,n,r){function asinh(t){return isFinite(t=+t)&&0!=t?t<0?-asinh(-t):Math.log(t+Math.sqrt(t*t+1)):t}var e=t(32),i=Math.asinh;e(e.S+e.F*!(i&&1/i(0)>0),"Math",{asinh:asinh})},{32:32}],152:[function(t,n,r){var e=t(32),i=Math.atanh;e(e.S+e.F*!(i&&1/i(-0)<0),"Math",{atanh:function atanh(t){return 0==(t=+t)?t:Math.log((1+t)/(1-t))/2}})},{32:32}],153:[function(t,n,r){var e=t(32),i=t(61);e(e.S,"Math",{cbrt:function cbrt(t){return i(t=+t)*Math.pow(Math.abs(t),1/3)}})},{32:32,61:61}],154:[function(t,n,r){var e=t(32);e(e.S,"Math",{clz32:function clz32(t){return(t>>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},{32:32}],155:[function(t,n,r){var e=t(32),i=Math.exp;e(e.S,"Math",{cosh:function cosh(t){return(i(t=+t)+i(-t))/2}})},{32:32}],156:[function(t,n,r){var e=t(32),i=t(59);e(e.S+e.F*(i!=Math.expm1),"Math",{expm1:i})},{32:32,59:59}],157:[function(t,n,r){var e=t(32),i=t(61),o=Math.pow,u=o(2,-52),c=o(2,-23),f=o(2,127)*(2-c),a=o(2,-126),s=function(t){return t+1/u-1/u};e(e.S,"Math",{fround:function fround(t){var n,r,e=Math.abs(t),o=i(t);return ef||r!=r?o*(1/0):o*r)}})},{32:32,61:61}],158:[function(t,n,r){var e=t(32),i=Math.abs;e(e.S,"Math",{hypot:function hypot(t,n){for(var r,e,o=0,u=0,c=arguments.length,f=0;u0?(e=r/f,o+=e*e):o+=r;return f===1/0?1/0:f*Math.sqrt(o)}})},{32:32}],159:[function(t,n,r){var e=t(32),i=Math.imul;e(e.S+e.F*t(34)(function(){return i(4294967295,5)!=-5||2!=i.length}),"Math",{imul:function imul(t,n){var r=65535,e=+t,i=+n,o=r&e,u=r&i;return 0|o*u+((r&e>>>16)*u+o*(r&i>>>16)<<16>>>0)}})},{32:32,34:34}],160:[function(t,n,r){var e=t(32);e(e.S,"Math",{log10:function log10(t){return Math.log(t)/Math.LN10}})},{32:32}],161:[function(t,n,r){var e=t(32);e(e.S,"Math",{log1p:t(60)})},{32:32,60:60}],162:[function(t,n,r){var e=t(32);e(e.S,"Math",{log2:function log2(t){return Math.log(t)/Math.LN2}})},{32:32}],163:[function(t,n,r){var e=t(32);e(e.S,"Math",{sign:t(61)})},{32:32,61:61}],164:[function(t,n,r){var e=t(32),i=t(59),o=Math.exp;e(e.S+e.F*t(34)(function(){return!Math.sinh(-2e-17)!=-2e-17}),"Math",{sinh:function sinh(t){return Math.abs(t=+t)<1?(i(t)-i(-t))/2:(o(t-1)-o(-t-1))*(Math.E/2)}})},{32:32,34:34,59:59}],165:[function(t,n,r){var e=t(32),i=t(59),o=Math.exp;e(e.S,"Math",{tanh:function tanh(t){var n=i(t=+t),r=i(-t);return n==1/0?1:r==1/0?-1:(n-r)/(o(t)+o(-t))}})},{32:32,59:59}],166:[function(t,n,r){var e=t(32);e(e.S,"Math",{trunc:function trunc(t){return(t>0?Math.floor:Math.ceil)(t)}})},{32:32}],167:[function(t,n,r){"use strict";var e=t(38),i=t(39),o=t(18),u=t(43),c=t(110),f=t(34),a=t(72).f,s=t(70).f,l=t(67).f,h=t(102).trim,v="Number",p=e[v],d=p,y=p.prototype,g=o(t(66)(y))==v,b="trim"in String.prototype,x=function(t){var n=c(t,!1);if("string"==typeof n&&n.length>2){n=b?n.trim():h(n,3);var r,e,i,o=n.charCodeAt(0);if(43===o||45===o){if(r=n.charCodeAt(2),88===r||120===r)return NaN}else if(48===o){switch(n.charCodeAt(1)){case 66:case 98:e=2,i=49;break;case 79:case 111:e=8,i=55;break;default:return+n}for(var u,f=n.slice(2),a=0,s=f.length;ai)return NaN;return parseInt(f,e)}}return+n};if(!p(" 0o1")||!p("0b1")||p("+0x1")){p=function Number(t){var n=arguments.length<1?0:t,r=this;return r instanceof p&&(g?f(function(){y.valueOf.call(r)}):o(r)!=v)?u(new d(x(n)),r,p):x(n)};for(var m,w=t(28)?a(d):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),S=0;w.length>S;S++)i(d,m=w[S])&&!i(p,m)&&l(p,m,s(d,m));p.prototype=y,y.constructor=p,t(87)(e,v,p)}},{102:102,110:110,18:18,28:28,34:34,38:38,39:39,43:43,66:66,67:67,70:70,72:72,87:87}],168:[function(t,n,r){var e=t(32);e(e.S,"Number",{EPSILON:Math.pow(2,-52)})},{32:32}],169:[function(t,n,r){var e=t(32),i=t(38).isFinite;e(e.S,"Number",{isFinite:function isFinite(t){return"number"==typeof t&&i(t)}})},{32:32,38:38}],170:[function(t,n,r){var e=t(32);e(e.S,"Number",{isInteger:t(48)})},{32:32,48:48}],171:[function(t,n,r){var e=t(32);e(e.S,"Number",{isNaN:function isNaN(t){return t!=t}})},{32:32}],172:[function(t,n,r){var e=t(32),i=t(48),o=Math.abs;e(e.S,"Number",{isSafeInteger:function isSafeInteger(t){return i(t)&&o(t)<=9007199254740991}})},{32:32,48:48}],173:[function(t,n,r){var e=t(32);e(e.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},{32:32}],174:[function(t,n,r){var e=t(32);e(e.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},{32:32}],175:[function(t,n,r){var e=t(32),i=t(81);e(e.S+e.F*(Number.parseFloat!=i),"Number",{parseFloat:i})},{32:32,81:81}],176:[function(t,n,r){var e=t(32),i=t(82);e(e.S+e.F*(Number.parseInt!=i),"Number",{parseInt:i})},{32:32,82:82}],177:[function(t,n,r){"use strict";var e=t(32),i=t(106),o=t(4),u=t(101),c=1..toFixed,f=Math.floor,a=[0,0,0,0,0,0],s="Number.toFixed: incorrect invocation!",l="0",h=function(t,n){for(var r=-1,e=n;++r<6;)e+=t*a[r],a[r]=e%1e7,e=f(e/1e7)},v=function(t){for(var n=6,r=0;--n>=0;)r+=a[n],a[n]=f(r/t),r=r%t*1e7},p=function(){for(var t=6,n="";--t>=0;)if(""!==n||0===t||0!==a[t]){var r=String(a[t]);n=""===n?r:n+u.call(l,7-r.length)+r}return n},d=function(t,n,r){return 0===n?r:n%2===1?d(t,n-1,r*t):d(t*t,n/2,r)},y=function(t){for(var n=0,r=t;r>=4096;)n+=12,r/=4096;for(;r>=2;)n+=1,r/=2;return n};e(e.P+e.F*(!!c&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!t(34)(function(){c.call({})})),"Number",{toFixed:function toFixed(t){var n,r,e,c,f=o(this,s),a=i(t),g="",b=l;if(a<0||a>20)throw RangeError(s);if(f!=f)return"NaN";if(f<=-1e21||f>=1e21)return String(f);if(f<0&&(g="-",f=-f),f>1e-21)if(n=y(f*d(2,69,1))-69,r=n<0?f*d(2,-n,1):f/d(2,n,1),r*=4503599627370496,n=52-n,n>0){for(h(0,r),e=a;e>=7;)h(1e7,0),e-=7;for(h(d(10,e,1),0),e=n-1;e>=23;)v(1<<23),e-=23;v(1<0?(c=b.length,b=g+(c<=a?"0."+u.call(l,a-c)+b:b.slice(0,c-a)+"."+b.slice(c-a))):b=g+b,b}})},{101:101,106:106,32:32,34:34,4:4}],178:[function(t,n,r){"use strict";var e=t(32),i=t(34),o=t(4),u=1..toPrecision;e(e.P+e.F*(i(function(){return"1"!==u.call(1,void 0)})||!i(function(){u.call({})})),"Number",{toPrecision:function toPrecision(t){var n=o(this,"Number#toPrecision: incorrect invocation!");return void 0===t?u.call(n):u.call(n,t)}})},{32:32,34:34,4:4}],179:[function(t,n,r){var e=t(32);e(e.S+e.F,"Object",{assign:t(65)})},{32:32,65:65}],180:[function(t,n,r){var e=t(32);e(e.S,"Object",{create:t(66)})},{32:32,66:66}],181:[function(t,n,r){var e=t(32);e(e.S+e.F*!t(28),"Object",{defineProperties:t(68)})},{28:28,32:32,68:68}],182:[function(t,n,r){var e=t(32);e(e.S+e.F*!t(28),"Object",{defineProperty:t(67).f})},{28:28,32:32,67:67}],183:[function(t,n,r){var e=t(49),i=t(62).onFreeze;t(78)("freeze",function(t){return function freeze(n){return t&&e(n)?t(i(n)):n}})},{49:49,62:62,78:78}],184:[function(t,n,r){var e=t(107),i=t(70).f;t(78)("getOwnPropertyDescriptor",function(){return function getOwnPropertyDescriptor(t,n){return i(e(t),n)}})},{107:107,70:70,78:78}],185:[function(t,n,r){t(78)("getOwnPropertyNames",function(){return t(71).f})},{71:71,78:78}],186:[function(t,n,r){var e=t(109),i=t(74);t(78)("getPrototypeOf",function(){return function getPrototypeOf(t){return i(e(t))}})},{109:109,74:74,78:78}],187:[function(t,n,r){var e=t(49);t(78)("isExtensible",function(t){return function isExtensible(n){return!!e(n)&&(!t||t(n))}})},{49:49,78:78}],188:[function(t,n,r){var e=t(49);t(78)("isFrozen",function(t){return function isFrozen(n){return!e(n)||!!t&&t(n)}})},{49:49,78:78}],189:[function(t,n,r){var e=t(49);t(78)("isSealed",function(t){return function isSealed(n){return!e(n)||!!t&&t(n)}})},{49:49,78:78}],190:[function(t,n,r){var e=t(32);e(e.S,"Object",{is:t(89)})},{32:32,89:89}],191:[function(t,n,r){var e=t(109),i=t(76);t(78)("keys",function(){return function keys(t){return i(e(t))}})},{109:109,76:76,78:78}],192:[function(t,n,r){var e=t(49),i=t(62).onFreeze;t(78)("preventExtensions",function(t){return function preventExtensions(n){return t&&e(n)?t(i(n)):n}})},{49:49,62:62,78:78}],193:[function(t,n,r){var e=t(49),i=t(62).onFreeze;t(78)("seal",function(t){return function seal(n){return t&&e(n)?t(i(n)):n}})},{49:49,62:62,78:78}],194:[function(t,n,r){var e=t(32);e(e.S,"Object",{setPrototypeOf:t(90).set})},{32:32,90:90}],195:[function(t,n,r){"use strict";var e=t(17),i={};i[t(117)("toStringTag")]="z",i+""!="[object z]"&&t(87)(Object.prototype,"toString",function toString(){return"[object "+e(this)+"]"},!0)},{117:117,17:17,87:87}],196:[function(t,n,r){var e=t(32),i=t(81);e(e.G+e.F*(parseFloat!=i),{parseFloat:i})},{32:32,81:81}],197:[function(t,n,r){var e=t(32),i=t(82);e(e.G+e.F*(parseInt!=i),{parseInt:i})},{32:32,82:82}],198:[function(t,n,r){"use strict";var e,i,o,u=t(58),c=t(38),f=t(25),a=t(17),s=t(32),l=t(49),h=t(3),v=t(6),p=t(37),d=t(95),y=t(104).set,g=t(64)(),b="Promise",x=c.TypeError,m=c.process,w=c[b],m=c.process,S="process"==a(m),_=function(){},E=!!function(){try{var n=w.resolve(1),r=(n.constructor={})[t(117)("species")]=function(t){t(_,_)};return(S||"function"==typeof PromiseRejectionEvent)&&n.then(_)instanceof r}catch(t){}}(),O=function(t,n){return t===n||t===w&&n===o},F=function(t){var n;return!(!l(t)||"function"!=typeof(n=t.then))&&n},P=function(t){return O(w,t)?new A(t):new i(t)},A=i=function(t){var n,r;this.promise=new t(function(t,e){if(void 0!==n||void 0!==r)throw x("Bad Promise constructor");n=t,r=e}),this.resolve=h(n),this.reject=h(r)},M=function(t){try{t()}catch(t){return{error:t}}},I=function(t,n){if(!t._n){t._n=!0;var r=t._c;g(function(){for(var e=t._v,i=1==t._s,o=0,u=function(n){var r,o,u=i?n.ok:n.fail,c=n.resolve,f=n.reject,a=n.domain;try{u?(i||(2==t._h&&k(t),t._h=1),u===!0?r=e:(a&&a.enter(),r=u(e),a&&a.exit()),r===n.promise?f(x("Promise-chain cycle")):(o=F(r))?o.call(r,c,f):c(r)):f(e)}catch(t){f(t)}};r.length>o;)u(r[o++]);t._c=[],t._n=!1,n&&!t._h&&j(t)})}},j=function(t){y.call(c,function(){var n,r,e,i=t._v;if(N(t)&&(n=M(function(){S?m.emit("unhandledRejection",i,t):(r=c.onunhandledrejection)?r({promise:t,reason:i}):(e=c.console)&&e.error&&e.error("Unhandled promise rejection",i)}),t._h=S||N(t)?2:1),t._a=void 0,n)throw n.error})},N=function(t){if(1==t._h)return!1;for(var n,r=t._a||t._c,e=0;r.length>e;)if(n=r[e++],n.fail||!N(n.promise))return!1;return!0},k=function(t){y.call(c,function(){var n;S?m.emit("rejectionHandled",t):(n=c.onrejectionhandled)&&n({promise:t,reason:t._v})})},R=function(t){var n=this;n._d||(n._d=!0,n=n._w||n,n._v=t,n._s=2,n._a||(n._a=n._c.slice()),I(n,!0))},T=function(t){var n,r=this;if(!r._d){r._d=!0,r=r._w||r;try{if(r===t)throw x("Promise can't be resolved itself");(n=F(t))?g(function(){var e={_w:r,_d:!1};try{n.call(t,f(T,e,1),f(R,e,1))}catch(t){R.call(e,t)}}):(r._v=t,r._s=1,I(r,!1))}catch(t){R.call({_w:r,_d:!1},t)}}};E||(w=function Promise(t){v(this,w,b,"_h"),h(t),e.call(this);try{t(f(T,this,1),f(R,this,1))}catch(t){R.call(this,t)}},e=function Promise(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},e.prototype=t(86)(w.prototype,{then:function then(t,n){var r=P(d(this,w));return r.ok="function"!=typeof t||t,r.fail="function"==typeof n&&n,r.domain=S?m.domain:void 0,this._c.push(r),this._a&&this._a.push(r),this._s&&I(this,!1),r.promise},catch:function(t){return this.then(void 0,t)}}),A=function(){var t=new e;this.promise=t,this.resolve=f(T,t,1),this.reject=f(R,t,1)}),s(s.G+s.W+s.F*!E,{Promise:w}),t(92)(w,b),t(91)(b),o=t(23)[b],s(s.S+s.F*!E,b,{reject:function reject(t){var n=P(this),r=n.reject;return r(t),n.promise}}),s(s.S+s.F*(u||!E),b,{resolve:function resolve(t){if(t instanceof w&&O(t.constructor,this))return t;var n=P(this),r=n.resolve;return r(t),n.promise}}),s(s.S+s.F*!(E&&t(54)(function(t){w.all(t).catch(_)})),b,{all:function all(t){var n=this,r=P(n),e=r.resolve,i=r.reject,o=M(function(){var r=[],o=0,u=1;p(t,!1,function(t){var c=o++,f=!1;r.push(void 0),u++,n.resolve(t).then(function(t){f||(f=!0,r[c]=t,--u||e(r))},i)}),--u||e(r)});return o&&i(o.error),r.promise},race:function race(t){var n=this,r=P(n),e=r.reject,i=M(function(){p(t,!1,function(t){n.resolve(t).then(r.resolve,e)})});return i&&e(i.error),r.promise}})},{104:104,117:117,17:17,23:23,25:25,3:3,32:32,37:37,38:38,49:49,54:54,58:58,6:6,64:64,86:86,91:91,92:92,95:95}],199:[function(t,n,r){var e=t(32),i=t(3),o=t(7),u=(t(38).Reflect||{}).apply,c=Function.apply;e(e.S+e.F*!t(34)(function(){u(function(){})}),"Reflect",{apply:function apply(t,n,r){var e=i(t),f=o(r);return u?u(e,n,f):c.call(e,n,f)}})},{3:3,32:32,34:34,38:38,7:7}],200:[function(t,n,r){var e=t(32),i=t(66),o=t(3),u=t(7),c=t(49),f=t(34),a=t(16),s=(t(38).Reflect||{}).construct,l=f(function(){function F(){}return!(s(function(){},[],F)instanceof F)}),h=!f(function(){s(function(){})});e(e.S+e.F*(l||h),"Reflect",{construct:function construct(t,n){o(t),u(n);var r=arguments.length<3?t:o(arguments[2]);if(h&&!l)return s(t,n,r);if(t==r){switch(n.length){case 0:return new t;case 1:return new t(n[0]);case 2:return new t(n[0],n[1]);case 3:return new t(n[0],n[1],n[2]);case 4:return new t(n[0],n[1],n[2],n[3])}var e=[null];return e.push.apply(e,n),new(a.apply(t,e))}var f=r.prototype,v=i(c(f)?f:Object.prototype),p=Function.apply.call(t,v,n);return c(p)?p:v}})},{16:16,3:3,32:32,34:34,38:38,49:49,66:66,7:7}],201:[function(t,n,r){var e=t(67),i=t(32),o=t(7),u=t(110);i(i.S+i.F*t(34)(function(){Reflect.defineProperty(e.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function defineProperty(t,n,r){o(t),n=u(n,!0),o(r);try{return e.f(t,n,r),!0}catch(t){return!1}}})},{110:110,32:32,34:34,67:67,7:7}],202:[function(t,n,r){var e=t(32),i=t(70).f,o=t(7);e(e.S,"Reflect",{deleteProperty:function deleteProperty(t,n){var r=i(o(t),n);return!(r&&!r.configurable)&&delete t[n]}})},{32:32,7:7,70:70}],203:[function(t,n,r){"use strict";var e=t(32),i=t(7),o=function(t){this._t=i(t),this._i=0;var n,r=this._k=[];for(n in t)r.push(n)};t(52)(o,"Object",function(){var t,n=this,r=n._k;do if(n._i>=r.length)return{value:void 0,done:!0};while(!((t=r[n._i++])in n._t));return{value:t,done:!1}}),e(e.S,"Reflect",{enumerate:function enumerate(t){return new o(t)}})},{32:32,52:52,7:7}],204:[function(t,n,r){var e=t(70),i=t(32),o=t(7);i(i.S,"Reflect",{getOwnPropertyDescriptor:function getOwnPropertyDescriptor(t,n){return e.f(o(t),n)}})},{32:32,7:7,70:70}],205:[function(t,n,r){var e=t(32),i=t(74),o=t(7);e(e.S,"Reflect",{getPrototypeOf:function getPrototypeOf(t){return i(o(t))}})},{32:32,7:7,74:74}],206:[function(t,n,r){function get(t,n){var r,u,a=arguments.length<3?t:arguments[2];return f(t)===a?t[n]:(r=e.f(t,n))?o(r,"value")?r.value:void 0!==r.get?r.get.call(a):void 0:c(u=i(t))?get(u,n,a):void 0}var e=t(70),i=t(74),o=t(39),u=t(32),c=t(49),f=t(7);u(u.S,"Reflect",{get:get})},{32:32,39:39,49:49,7:7,70:70,74:74}],207:[function(t,n,r){var e=t(32);e(e.S,"Reflect",{has:function has(t,n){return n in t; +}})},{32:32}],208:[function(t,n,r){var e=t(32),i=t(7),o=Object.isExtensible;e(e.S,"Reflect",{isExtensible:function isExtensible(t){return i(t),!o||o(t)}})},{32:32,7:7}],209:[function(t,n,r){var e=t(32);e(e.S,"Reflect",{ownKeys:t(80)})},{32:32,80:80}],210:[function(t,n,r){var e=t(32),i=t(7),o=Object.preventExtensions;e(e.S,"Reflect",{preventExtensions:function preventExtensions(t){i(t);try{return o&&o(t),!0}catch(t){return!1}}})},{32:32,7:7}],211:[function(t,n,r){var e=t(32),i=t(90);i&&e(e.S,"Reflect",{setPrototypeOf:function setPrototypeOf(t,n){i.check(t,n);try{return i.set(t,n),!0}catch(t){return!1}}})},{32:32,90:90}],212:[function(t,n,r){function set(t,n,r){var c,l,h=arguments.length<4?t:arguments[3],v=i.f(a(t),n);if(!v){if(s(l=o(t)))return set(l,n,r,h);v=f(0)}return u(v,"value")?!(v.writable===!1||!s(h))&&(c=i.f(h,n)||f(0),c.value=r,e.f(h,n,c),!0):void 0!==v.set&&(v.set.call(h,r),!0)}var e=t(67),i=t(70),o=t(74),u=t(39),c=t(32),f=t(85),a=t(7),s=t(49);c(c.S,"Reflect",{set:set})},{32:32,39:39,49:49,67:67,7:7,70:70,74:74,85:85}],213:[function(t,n,r){var e=t(38),i=t(43),o=t(67).f,u=t(72).f,c=t(50),f=t(36),a=e.RegExp,s=a,l=a.prototype,h=/a/g,v=/a/g,p=new a(h)!==h;if(t(28)&&(!p||t(34)(function(){return v[t(117)("match")]=!1,a(h)!=h||a(v)==v||"/a/i"!=a(h,"i")}))){a=function RegExp(t,n){var r=this instanceof a,e=c(t),o=void 0===n;return!r&&e&&t.constructor===a&&o?t:i(p?new s(e&&!o?t.source:t,n):s((e=t instanceof a)?t.source:t,e&&o?f.call(t):n),r?this:l,a)};for(var d=(function(t){t in a||o(a,t,{configurable:!0,get:function(){return s[t]},set:function(n){s[t]=n}})}),y=u(s),g=0;y.length>g;)d(y[g++]);l.constructor=a,a.prototype=l,t(87)(e,"RegExp",a)}t(91)("RegExp")},{117:117,28:28,34:34,36:36,38:38,43:43,50:50,67:67,72:72,87:87,91:91}],214:[function(t,n,r){t(28)&&"g"!=/./g.flags&&t(67).f(RegExp.prototype,"flags",{configurable:!0,get:t(36)})},{28:28,36:36,67:67}],215:[function(t,n,r){t(35)("match",1,function(t,n,r){return[function match(r){"use strict";var e=t(this),i=void 0==r?void 0:r[n];return void 0!==i?i.call(r,e):new RegExp(r)[n](String(e))},r]})},{35:35}],216:[function(t,n,r){t(35)("replace",2,function(t,n,r){return[function replace(e,i){"use strict";var o=t(this),u=void 0==e?void 0:e[n];return void 0!==u?u.call(e,o,i):r.call(String(o),e,i)},r]})},{35:35}],217:[function(t,n,r){t(35)("search",1,function(t,n,r){return[function search(r){"use strict";var e=t(this),i=void 0==r?void 0:r[n];return void 0!==i?i.call(r,e):new RegExp(r)[n](String(e))},r]})},{35:35}],218:[function(t,n,r){t(35)("split",2,function(n,r,e){"use strict";var i=t(50),o=e,u=[].push,c="split",f="length",a="lastIndex";if("c"=="abbc"[c](/(b)*/)[1]||4!="test"[c](/(?:)/,-1)[f]||2!="ab"[c](/(?:ab)*/)[f]||4!="."[c](/(.?)(.?)/)[f]||"."[c](/()()/)[f]>1||""[c](/.?/)[f]){var s=void 0===/()??/.exec("")[1];e=function(t,n){var r=String(this);if(void 0===t&&0===n)return[];if(!i(t))return o.call(r,t,n);var e,c,l,h,v,p=[],d=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),y=0,g=void 0===n?4294967295:n>>>0,b=new RegExp(t.source,d+"g");for(s||(e=new RegExp("^"+b.source+"$(?!\\s)",d));(c=b.exec(r))&&(l=c.index+c[0][f],!(l>y&&(p.push(r.slice(y,c.index)),!s&&c[f]>1&&c[0].replace(e,function(){for(v=1;v1&&c.index=g)));)b[a]===c.index&&b[a]++;return y===r[f]?!h&&b.test("")||p.push(""):p.push(r.slice(y)),p[f]>g?p.slice(0,g):p}}else"0"[c](void 0,0)[f]&&(e=function(t,n){return void 0===t&&0===n?[]:o.call(this,t,n)});return[function split(t,i){var o=n(this),u=void 0==t?void 0:t[r];return void 0!==u?u.call(t,o,i):e.call(String(o),t,i)},e]})},{35:35,50:50}],219:[function(t,n,r){"use strict";t(214);var e=t(7),i=t(36),o=t(28),u="toString",c=/./[u],f=function(n){t(87)(RegExp.prototype,u,n,!0)};t(34)(function(){return"/a/b"!=c.call({source:"a",flags:"b"})})?f(function toString(){var t=e(this);return"/".concat(t.source,"/","flags"in t?t.flags:!o&&t instanceof RegExp?i.call(t):void 0)}):c.name!=u&&f(function toString(){return c.call(this)})},{214:214,28:28,34:34,36:36,7:7,87:87}],220:[function(t,n,r){"use strict";var e=t(19);n.exports=t(22)("Set",function(t){return function Set(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function add(t){return e.def(this,t=0===t?0:t,t)}},e)},{19:19,22:22}],221:[function(t,n,r){"use strict";t(99)("anchor",function(t){return function anchor(n){return t(this,"a","name",n)}})},{99:99}],222:[function(t,n,r){"use strict";t(99)("big",function(t){return function big(){return t(this,"big","","")}})},{99:99}],223:[function(t,n,r){"use strict";t(99)("blink",function(t){return function blink(){return t(this,"blink","","")}})},{99:99}],224:[function(t,n,r){"use strict";t(99)("bold",function(t){return function bold(){return t(this,"b","","")}})},{99:99}],225:[function(t,n,r){"use strict";var e=t(32),i=t(97)(!1);e(e.P,"String",{codePointAt:function codePointAt(t){return i(this,t)}})},{32:32,97:97}],226:[function(t,n,r){"use strict";var e=t(32),i=t(108),o=t(98),u="endsWith",c=""[u];e(e.P+e.F*t(33)(u),"String",{endsWith:function endsWith(t){var n=o(this,t,u),r=arguments.length>1?arguments[1]:void 0,e=i(n.length),f=void 0===r?e:Math.min(i(r),e),a=String(t);return c?c.call(n,a,f):n.slice(f-a.length,f)===a}})},{108:108,32:32,33:33,98:98}],227:[function(t,n,r){"use strict";t(99)("fixed",function(t){return function fixed(){return t(this,"tt","","")}})},{99:99}],228:[function(t,n,r){"use strict";t(99)("fontcolor",function(t){return function fontcolor(n){return t(this,"font","color",n)}})},{99:99}],229:[function(t,n,r){"use strict";t(99)("fontsize",function(t){return function fontsize(n){return t(this,"font","size",n)}})},{99:99}],230:[function(t,n,r){var e=t(32),i=t(105),o=String.fromCharCode,u=String.fromCodePoint;e(e.S+e.F*(!!u&&1!=u.length),"String",{fromCodePoint:function fromCodePoint(t){for(var n,r=[],e=arguments.length,u=0;e>u;){if(n=+arguments[u++],i(n,1114111)!==n)throw RangeError(n+" is not a valid code point");r.push(n<65536?o(n):o(((n-=65536)>>10)+55296,n%1024+56320))}return r.join("")}})},{105:105,32:32}],231:[function(t,n,r){"use strict";var e=t(32),i=t(98),o="includes";e(e.P+e.F*t(33)(o),"String",{includes:function includes(t){return!!~i(this,t,o).indexOf(t,arguments.length>1?arguments[1]:void 0)}})},{32:32,33:33,98:98}],232:[function(t,n,r){"use strict";t(99)("italics",function(t){return function italics(){return t(this,"i","","")}})},{99:99}],233:[function(t,n,r){"use strict";var e=t(97)(!0);t(53)(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,n=this._t,r=this._i;return r>=n.length?{value:void 0,done:!0}:(t=e(n,r),this._i+=t.length,{value:t,done:!1})})},{53:53,97:97}],234:[function(t,n,r){"use strict";t(99)("link",function(t){return function link(n){return t(this,"a","href",n)}})},{99:99}],235:[function(t,n,r){var e=t(32),i=t(107),o=t(108);e(e.S,"String",{raw:function raw(t){for(var n=i(t.raw),r=o(n.length),e=arguments.length,u=[],c=0;r>c;)u.push(String(n[c++])),c1?arguments[1]:void 0,n.length)),e=String(t);return c?c.call(n,e,r):n.slice(r,r+e.length)===e}})},{108:108,32:32,33:33,98:98}],239:[function(t,n,r){"use strict";t(99)("strike",function(t){return function strike(){return t(this,"strike","","")}})},{99:99}],240:[function(t,n,r){"use strict";t(99)("sub",function(t){return function sub(){return t(this,"sub","","")}})},{99:99}],241:[function(t,n,r){"use strict";t(99)("sup",function(t){return function sup(){return t(this,"sup","","")}})},{99:99}],242:[function(t,n,r){"use strict";t(102)("trim",function(t){return function trim(){return t(this,3)}})},{102:102}],243:[function(t,n,r){"use strict";var e=t(38),i=t(39),o=t(28),u=t(32),c=t(87),f=t(62).KEY,a=t(34),s=t(94),l=t(92),h=t(114),v=t(117),p=t(116),d=t(115),y=t(57),g=t(31),b=t(47),x=t(7),m=t(107),w=t(110),S=t(85),_=t(66),E=t(71),O=t(70),F=t(67),P=t(76),A=O.f,M=F.f,I=E.f,j=e.Symbol,N=e.JSON,k=N&&N.stringify,R="prototype",T=v("_hidden"),L=v("toPrimitive"),C={}.propertyIsEnumerable,U=s("symbol-registry"),G=s("symbols"),D=s("op-symbols"),W=Object[R],B="function"==typeof j,V=e.QObject,z=!V||!V[R]||!V[R].findChild,K=o&&a(function(){return 7!=_(M({},"a",{get:function(){return M(this,"a",{value:7}).a}})).a})?function(t,n,r){var e=A(W,n);e&&delete W[n],M(t,n,r),e&&t!==W&&M(W,n,e)}:M,J=function(t){var n=G[t]=_(j[R]);return n._k=t,n},Y=B&&"symbol"==typeof j.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof j},q=function defineProperty(t,n,r){return t===W&&q(D,n,r),x(t),n=w(n,!0),x(r),i(G,n)?(r.enumerable?(i(t,T)&&t[T][n]&&(t[T][n]=!1),r=_(r,{enumerable:S(0,!1)})):(i(t,T)||M(t,T,S(1,{})),t[T][n]=!0),K(t,n,r)):M(t,n,r)},X=function defineProperties(t,n){x(t);for(var r,e=g(n=m(n)),i=0,o=e.length;o>i;)q(t,r=e[i++],n[r]);return t},$=function create(t,n){return void 0===n?_(t):X(_(t),n)},H=function propertyIsEnumerable(t){var n=C.call(this,t=w(t,!0));return!(this===W&&i(G,t)&&!i(D,t))&&(!(n||!i(this,t)||!i(G,t)||i(this,T)&&this[T][t])||n)},Z=function getOwnPropertyDescriptor(t,n){if(t=m(t),n=w(n,!0),t!==W||!i(G,n)||i(D,n)){var r=A(t,n);return!r||!i(G,n)||i(t,T)&&t[T][n]||(r.enumerable=!0),r}},Q=function getOwnPropertyNames(t){for(var n,r=I(m(t)),e=[],o=0;r.length>o;)i(G,n=r[o++])||n==T||n==f||e.push(n);return e},tt=function getOwnPropertySymbols(t){for(var n,r=t===W,e=I(r?D:m(t)),o=[],u=0;e.length>u;)!i(G,n=e[u++])||r&&!i(W,n)||o.push(G[n]);return o};B||(j=function Symbol(){if(this instanceof j)throw TypeError("Symbol is not a constructor!");var t=h(arguments.length>0?arguments[0]:void 0),n=function(r){this===W&&n.call(D,r),i(this,T)&&i(this[T],t)&&(this[T][t]=!1),K(this,t,S(1,r))};return o&&z&&K(W,t,{configurable:!0,set:n}),J(t)},c(j[R],"toString",function toString(){return this._k}),O.f=Z,F.f=q,t(72).f=E.f=Q,t(77).f=H,t(73).f=tt,o&&!t(58)&&c(W,"propertyIsEnumerable",H,!0),p.f=function(t){return J(v(t))}),u(u.G+u.W+u.F*!B,{Symbol:j});for(var nt="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),rt=0;nt.length>rt;)v(nt[rt++]);for(var nt=P(v.store),rt=0;nt.length>rt;)d(nt[rt++]);u(u.S+u.F*!B,"Symbol",{for:function(t){return i(U,t+="")?U[t]:U[t]=j(t)},keyFor:function keyFor(t){if(Y(t))return y(U,t);throw TypeError(t+" is not a symbol!")},useSetter:function(){z=!0},useSimple:function(){z=!1}}),u(u.S+u.F*!B,"Object",{create:$,defineProperty:q,defineProperties:X,getOwnPropertyDescriptor:Z,getOwnPropertyNames:Q,getOwnPropertySymbols:tt}),N&&u(u.S+u.F*(!B||a(function(){var t=j();return"[null]"!=k([t])||"{}"!=k({a:t})||"{}"!=k(Object(t))})),"JSON",{stringify:function stringify(t){if(void 0!==t&&!Y(t)){for(var n,r,e=[t],i=1;arguments.length>i;)e.push(arguments[i++]);return n=e[1],"function"==typeof n&&(r=n),!r&&b(n)||(n=function(t,n){if(r&&(n=r.call(this,t,n)),!Y(n))return n}),e[1]=n,k.apply(N,e)}}}),j[R][L]||t(40)(j[R],L,j[R].valueOf),l(j,"Symbol"),l(Math,"Math",!0),l(e.JSON,"JSON",!0)},{107:107,110:110,114:114,115:115,116:116,117:117,28:28,31:31,32:32,34:34,38:38,39:39,40:40,47:47,57:57,58:58,62:62,66:66,67:67,7:7,70:70,71:71,72:72,73:73,76:76,77:77,85:85,87:87,92:92,94:94}],244:[function(t,n,r){"use strict";var e=t(32),i=t(113),o=t(112),u=t(7),c=t(105),f=t(108),a=t(49),s=t(38).ArrayBuffer,l=t(95),h=o.ArrayBuffer,v=o.DataView,p=i.ABV&&s.isView,d=h.prototype.slice,y=i.VIEW,g="ArrayBuffer";e(e.G+e.W+e.F*(s!==h),{ArrayBuffer:h}),e(e.S+e.F*!i.CONSTR,g,{isView:function isView(t){return p&&p(t)||a(t)&&y in t}}),e(e.P+e.U+e.F*t(34)(function(){return!new h(2).slice(1,void 0).byteLength}),g,{slice:function slice(t,n){if(void 0!==d&&void 0===n)return d.call(u(this),t);for(var r=u(this).byteLength,e=c(t,r),i=c(void 0===n?r:n,r),o=new(l(this,h))(f(i-e)),a=new v(this),s=new v(o),p=0;e0?arguments[0]:void 0)}},d={get:function get(t){if(a(t)){var n=s(t);return n===!0?h(this).get(t):n?n[this._i]:void 0}},set:function set(t,n){return f.def(this,t,n)}},y=n.exports=t(22)("WeakMap",p,d,f,!0,!0);7!=(new y).set((Object.freeze||Object)(v),7).get(v)&&(e=f.getConstructor(p),c(e.prototype,d),u.NEED=!0,i(["delete","has","get","set"],function(t){var n=y.prototype,r=n[t];o(n,t,function(n,i){if(a(n)&&!l(n)){this._f||(this._f=new e);var o=this._f[t](n,i);return"set"==t?this:o}return r.call(this,n,i)})}))},{12:12,21:21,22:22,49:49,62:62,65:65,87:87}],256:[function(t,n,r){"use strict";var e=t(21);t(22)("WeakSet",function(t){return function WeakSet(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function add(t){return e.def(this,t,!0)}},e,!1,!0)},{21:21,22:22}],257:[function(t,n,r){"use strict";var e=t(32),i=t(11)(!0);e(e.P,"Array",{includes:function includes(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),t(5)("includes")},{11:11,32:32,5:5}],258:[function(t,n,r){var e=t(32),i=t(64)(),o=t(38).process,u="process"==t(18)(o);e(e.G,{asap:function asap(t){var n=u&&o.domain;i(n?n.bind(t):t)}})},{18:18,32:32,38:38,64:64}],259:[function(t,n,r){var e=t(32),i=t(18);e(e.S,"Error",{isError:function isError(t){return"Error"===i(t)}})},{18:18,32:32}],260:[function(t,n,r){var e=t(32);e(e.P+e.R,"Map",{toJSON:t(20)("Map")})},{20:20,32:32}],261:[function(t,n,r){var e=t(32);e(e.S,"Math",{iaddh:function iaddh(t,n,r,e){var i=t>>>0,o=n>>>0,u=r>>>0;return o+(e>>>0)+((i&u|(i|u)&~(i+u>>>0))>>>31)|0}})},{32:32}],262:[function(t,n,r){var e=t(32);e(e.S,"Math",{imulh:function imulh(t,n){var r=65535,e=+t,i=+n,o=e&r,u=i&r,c=e>>16,f=i>>16,a=(c*u>>>0)+(o*u>>>16);return c*f+(a>>16)+((o*f>>>0)+(a&r)>>16)}})},{32:32}],263:[function(t,n,r){var e=t(32);e(e.S,"Math",{isubh:function isubh(t,n,r,e){var i=t>>>0,o=n>>>0,u=r>>>0;return o-(e>>>0)-((~i&u|~(i^u)&i-u>>>0)>>>31)|0}})},{32:32}],264:[function(t,n,r){var e=t(32);e(e.S,"Math",{umulh:function umulh(t,n){var r=65535,e=+t,i=+n,o=e&r,u=i&r,c=e>>>16,f=i>>>16,a=(c*u>>>0)+(o*u>>>16);return c*f+(a>>>16)+((o*f>>>0)+(a&r)>>>16)}})},{32:32}],265:[function(t,n,r){"use strict";var e=t(32),i=t(109),o=t(3),u=t(67);t(28)&&e(e.P+t(69),"Object",{__defineGetter__:function __defineGetter__(t,n){u.f(i(this),t,{get:o(n),enumerable:!0,configurable:!0})}})},{109:109,28:28,3:3,32:32,67:67,69:69}],266:[function(t,n,r){"use strict";var e=t(32),i=t(109),o=t(3),u=t(67);t(28)&&e(e.P+t(69),"Object",{__defineSetter__:function __defineSetter__(t,n){u.f(i(this),t,{set:o(n),enumerable:!0,configurable:!0})}})},{109:109,28:28,3:3,32:32,67:67,69:69}],267:[function(t,n,r){var e=t(32),i=t(79)(!0);e(e.S,"Object",{entries:function entries(t){return i(t)}})},{32:32,79:79}],268:[function(t,n,r){var e=t(32),i=t(80),o=t(107),u=t(70),c=t(24);e(e.S,"Object",{getOwnPropertyDescriptors:function getOwnPropertyDescriptors(t){for(var n,r=o(t),e=u.f,f=i(r),a={},s=0;f.length>s;)c(a,n=f[s++],e(r,n));return a}})},{107:107,24:24,32:32,70:70,80:80}],269:[function(t,n,r){"use strict";var e=t(32),i=t(109),o=t(110),u=t(74),c=t(70).f;t(28)&&e(e.P+t(69),"Object",{__lookupGetter__:function __lookupGetter__(t){var n,r=i(this),e=o(t,!0);do if(n=c(r,e))return n.get;while(r=u(r))}})},{109:109,110:110,28:28,32:32,69:69,70:70,74:74}],270:[function(t,n,r){"use strict";var e=t(32),i=t(109),o=t(110),u=t(74),c=t(70).f;t(28)&&e(e.P+t(69),"Object",{__lookupSetter__:function __lookupSetter__(t){var n,r=i(this),e=o(t,!0);do if(n=c(r,e))return n.set;while(r=u(r))}})},{109:109,110:110,28:28,32:32,69:69,70:70,74:74}],271:[function(t,n,r){var e=t(32),i=t(79)(!1);e(e.S,"Object",{values:function values(t){return i(t)}})},{32:32,79:79}],272:[function(t,n,r){"use strict";var e=t(32),i=t(38),o=t(23),u=t(64)(),c=t(117)("observable"),f=t(3),a=t(7),s=t(6),l=t(86),h=t(40),v=t(37),p=v.RETURN,d=function(t){return null==t?void 0:f(t)},y=function(t){var n=t._c;n&&(t._c=void 0,n())},g=function(t){return void 0===t._o},b=function(t){g(t)||(t._o=void 0,y(t))},x=function(t,n){a(t),this._c=void 0,this._o=t,t=new m(this);try{var r=n(t),e=r;null!=r&&("function"==typeof r.unsubscribe?r=function(){e.unsubscribe()}:f(r),this._c=r)}catch(n){return void t.error(n)}g(this)&&y(this)};x.prototype=l({},{unsubscribe:function unsubscribe(){b(this)}});var m=function(t){this._s=t};m.prototype=l({},{next:function next(t){var n=this._s;if(!g(n)){var r=n._o;try{var e=d(r.next);if(e)return e.call(r,t)}catch(t){try{b(n)}finally{throw t}}}},error:function error(t){var n=this._s;if(g(n))throw t;var r=n._o;n._o=void 0;try{var e=d(r.error);if(!e)throw t;t=e.call(r,t)}catch(t){try{y(n)}finally{throw t}}return y(n),t},complete:function complete(t){var n=this._s;if(!g(n)){var r=n._o;n._o=void 0;try{var e=d(r.complete);t=e?e.call(r,t):void 0}catch(t){try{y(n)}finally{throw t}}return y(n),t}}});var w=function Observable(t){s(this,w,"Observable","_f")._f=f(t)};l(w.prototype,{subscribe:function subscribe(t){return new x(t,this._f)},forEach:function forEach(t){var n=this;return new(o.Promise||i.Promise)(function(r,e){f(t);var i=n.subscribe({next:function(n){try{return t(n)}catch(t){e(t),i.unsubscribe()}},error:e,complete:r})})}}),l(w,{from:function from(t){var n="function"==typeof this?this:w,r=d(a(t)[c]);if(r){var e=a(r.call(t));return e.constructor===n?e:new n(function(t){return e.subscribe(t)})}return new n(function(n){var r=!1;return u(function(){if(!r){try{if(v(t,!1,function(t){if(n.next(t),r)return p})===p)return}catch(t){if(r)throw t;return void n.error(t)}n.complete()}}),function(){r=!0}})},of:function of(){for(var t=0,n=arguments.length,r=Array(n);t1?arguments[1]:void 0,!1)}})},{100:100,32:32}],286:[function(t,n,r){"use strict";var e=t(32),i=t(100);e(e.P,"String",{padStart:function padStart(t){return i(this,t,arguments.length>1?arguments[1]:void 0,!0)}})},{100:100,32:32}],287:[function(t,n,r){"use strict";t(102)("trimLeft",function(t){return function trimLeft(){return t(this,1)}},"trimStart")},{102:102}],288:[function(t,n,r){"use strict";t(102)("trimRight",function(t){return function trimRight(){return t(this,2)}},"trimEnd")},{102:102}],289:[function(t,n,r){t(115)("asyncIterator")},{115:115}],290:[function(t,n,r){t(115)("observable")},{115:115}],291:[function(t,n,r){var e=t(32);e(e.S,"System",{global:t(38)})},{32:32,38:38}],292:[function(t,n,r){for(var e=t(130),i=t(87),o=t(38),u=t(40),c=t(56),f=t(117),a=f("iterator"),s=f("toStringTag"),l=c.Array,h=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],v=0;v<5;v++){var p,d=h[v],y=o[d],g=y&&y.prototype;if(g){g[a]||u(g,a,l),g[s]||u(g,s,d),c[d]=l;for(p in e)g[p]||i(g,p,e[p],!0)}}},{117:117,130:130,38:38,40:40,56:56,87:87}],293:[function(t,n,r){var e=t(32),i=t(104);e(e.G+e.B,{setImmediate:i.set,clearImmediate:i.clear})},{104:104,32:32}],294:[function(t,n,r){var e=t(38),i=t(32),o=t(44),u=t(83),c=e.navigator,f=!!c&&/MSIE .\./.test(c.userAgent),a=function(t){return f?function(n,r){return t(o(u,[].slice.call(arguments,2),"function"==typeof n?n:Function(n)),r)}:t};i(i.G+i.B+i.F*f,{setTimeout:a(e.setTimeout),setInterval:a(e.setInterval)})},{32:32,38:38,44:44,83:83}],295:[function(t,n,r){t(243),t(180),t(182),t(181),t(184),t(186),t(191),t(185),t(183),t(193),t(192),t(188),t(189),t(187),t(179),t(190),t(194),t(195),t(146),t(148),t(147),t(197),t(196),t(167),t(177),t(178),t(168),t(169),t(170),t(171),t(172),t(173),t(174),t(175),t(176),t(150),t(151),t(152),t(153),t(154),t(155),t(156),t(157),t(158),t(159),t(160),t(161),t(162),t(163),t(164),t(165),t(166),t(230),t(235),t(242),t(233),t(225),t(226),t(231),t(236),t(238),t(221),t(222),t(223),t(224),t(227),t(228),t(229),t(232),t(234),t(237),t(239),t(240),t(241),t(141),t(143),t(142),t(145),t(144),t(129),t(127),t(134),t(131),t(137),t(139),t(126),t(133),t(123),t(138),t(121),t(136),t(135),t(128),t(132),t(120),t(122),t(125),t(124),t(140),t(130),t(213),t(219),t(214),t(215),t(216),t(217),t(218),t(198),t(149),t(220),t(255),t(256),t(244),t(245),t(250),t(253),t(254),t(248),t(251),t(249),t(252),t(246),t(247),t(199),t(200),t(201),t(202),t(203),t(206),t(204),t(205),t(207),t(208),t(209),t(210),t(212),t(211),t(257),t(283),t(286),t(285),t(287),t(288),t(284),t(289),t(290),t(268),t(271),t(267),t(265),t(266),t(269),t(270),t(260),t(282),t(291),t(259),t(261),t(263),t(262),t(264),t(273),t(274),t(276),t(275),t(278),t(277),t(279),t(280),t(281),t(258),t(272),t(294),t(293),t(292),n.exports=t(23)},{120:120,121:121,122:122,123:123,124:124,125:125,126:126,127:127,128:128,129:129,130:130,131:131,132:132,133:133,134:134,135:135,136:136,137:137,138:138,139:139,140:140,141:141,142:142,143:143,144:144,145:145,146:146,147:147,148:148,149:149,150:150,151:151,152:152,153:153,154:154,155:155,156:156,157:157,158:158,159:159,160:160,161:161,162:162,163:163,164:164,165:165,166:166,167:167,168:168,169:169,170:170,171:171,172:172,173:173,174:174,175:175,176:176,177:177,178:178,179:179,180:180,181:181,182:182,183:183,184:184,185:185,186:186,187:187,188:188,189:189,190:190,191:191,192:192,193:193,194:194,195:195,196:196,197:197,198:198,199:199,200:200,201:201,202:202,203:203,204:204,205:205,206:206,207:207,208:208,209:209,210:210,211:211,212:212,213:213,214:214,215:215,216:216,217:217,218:218,219:219,220:220,221:221,222:222,223:223,224:224,225:225,226:226,227:227,228:228,229:229,23:23,230:230,231:231,232:232,233:233,234:234,235:235,236:236,237:237,238:238,239:239,240:240,241:241,242:242,243:243,244:244,245:245,246:246,247:247,248:248,249:249,250:250,251:251,252:252,253:253,254:254,255:255,256:256,257:257,258:258,259:259,260:260,261:261,262:262,263:263,264:264,265:265,266:266,267:267,268:268,269:269,270:270,271:271,272:272,273:273,274:274,275:275,276:276,277:277,278:278,279:279,280:280,281:281,282:282,283:283,284:284,285:285,286:286,287:287,288:288,289:289,290:290,291:291,292:292,293:293,294:294}],296:[function(t,n,r){(function(t){!function(t){"use strict";function wrap(t,n,r,e){var i=Object.create((n||Generator).prototype),o=new Context(e||[]);return i._invoke=makeInvokeMethod(t,r,o),i}function tryCatch(t,n,r){try{return{type:"normal",arg:t.call(n,r)}}catch(t){return{type:"throw",arg:t}}}function Generator(){}function GeneratorFunction(){}function GeneratorFunctionPrototype(){}function defineIteratorMethods(t){["next","throw","return"].forEach(function(n){t[n]=function(t){return this._invoke(n,t)}})}function AwaitArgument(t){this.arg=t}function AsyncIterator(t){function invoke(n,r,e,i){var o=tryCatch(t[n],t,r);if("throw"!==o.type){var u=o.arg,c=u.value;return c instanceof AwaitArgument?Promise.resolve(c.arg).then(function(t){invoke("next",t,e,i)},function(t){invoke("throw",t,e,i)}):Promise.resolve(c).then(function(t){u.value=t,e(u)},i)}i(o.arg)}function enqueue(t,r){function callInvokeWithMethodAndArg(){return new Promise(function(n,e){invoke(t,r,n,e)})}return n=n?n.then(callInvokeWithMethodAndArg,callInvokeWithMethodAndArg):callInvokeWithMethodAndArg()}"object"==typeof process&&process.domain&&(invoke=process.domain.bind(invoke));var n;this._invoke=enqueue}function makeInvokeMethod(t,n,e){var i=a;return function invoke(o,u){if(i===l)throw new Error("Generator is already running");if(i===h){if("throw"===o)throw u;return doneResult()}for(;;){var c=e.delegate;if(c){if("return"===o||"throw"===o&&c.iterator[o]===r){e.delegate=null;var f=c.iterator.return;if(f){var p=tryCatch(f,c.iterator,u);if("throw"===p.type){o="throw",u=p.arg;continue}}if("return"===o)continue}var p=tryCatch(c.iterator[o],c.iterator,u);if("throw"===p.type){e.delegate=null,o="throw",u=p.arg;continue}o="next",u=r;var d=p.arg;if(!d.done)return i=s,d;e[c.resultName]=d.value,e.next=c.nextLoc,e.delegate=null}if("next"===o)e.sent=e._sent=u;else if("throw"===o){if(i===a)throw i=h,u;e.dispatchException(u)&&(o="next",u=r)}else"return"===o&&e.abrupt("return",u);i=l;var p=tryCatch(t,n,e);if("normal"===p.type){i=e.done?h:s;var d={value:p.arg,done:e.done};if(p.arg!==v)return d;e.delegate&&"next"===o&&(u=r)}else"throw"===p.type&&(i=h,o="throw",u=p.arg)}}}function pushTryEntry(t){var n={tryLoc:t[0]};1 in t&&(n.catchLoc=t[1]),2 in t&&(n.finallyLoc=t[2],n.afterLoc=t[3]),this.tryEntries.push(n)}function resetTryEntry(t){var n=t.completion||{};n.type="normal",delete n.arg,t.completion=n}function Context(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(pushTryEntry,this),this.reset(!0)}function values(t){if(t){var n=t[o];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var i=-1,u=function next(){for(;++i=0;--r){var i=this.tryEntries[r],o=i.completion;if("root"===i.tryLoc)return handle("end");if(i.tryLoc<=this.prev){var u=e.call(i,"catchLoc"),c=e.call(i,"finallyLoc"); +if(u&&c){if(this.prev=0;--r){var i=this.tryEntries[r];if(i.tryLoc<=this.prev&&e.call(i,"finallyLoc")&&this.prev=0;--n){var r=this.tryEntries[n];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),resetTryEntry(r),v}},catch:function(t){for(var n=this.tryEntries.length-1;n>=0;--n){var r=this.tryEntries[n];if(r.tryLoc===t){var e=r.completion;if("throw"===e.type){var i=e.arg;resetTryEntry(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:values(t),resultName:n,nextLoc:r},v}}}("object"==typeof t?t:"object"==typeof window?window:"object"==typeof self?self:this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[1]); diff --git a/7-ES6/final/script-transpiled.js b/7-ES6/final/script-transpiled.js new file mode 100644 index 0000000000..caee003ade --- /dev/null +++ b/7-ES6/final/script-transpiled.js @@ -0,0 +1,746 @@ +'use strict'; + +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +///////////////////////////////// +// Lecture: let and const + +/* +// ES5 +var name5 = 'Jane Smith'; +var age5 = 23; +name5 = 'Jane Miller'; +console.log(name5); + +// ES6 +const name6 = 'Jane Smith'; +let age6 = 23; +name6 = 'Jane Miller'; +console.log(name6); + + +// ES5 +function driversLicence5(passedTest) { + + if (passedTest) { + console.log(firstName); + var firstName = 'John'; + var yearOfBirth = 1990; + } + + + console.log(firstName + ', born in ' + yearOfBirth + ', is now officially allowed to drive a car.'); +} + +driversLicence5(true); + + +// ES6 +function driversLicence6(passedTest) { + + //console.log(firstName); + let firstName; + const yearOfBirth = 1990; + + if (passedTest) { + firstName = 'John'; + } + + console.log(firstName + ', born in ' + yearOfBirth + ', is now officially allowed to drive a car.'); +} + +driversLicence6(true); + + + +var i = 23; + +for (var i = 0; i < 5; i++) { + console.log(i); +} + +console.log(i); +*/ + +///////////////////////////////// +// Lecture: Blocks and IIFEs + +/* +// ES6 +{ + const a = 1; + let b = 2; + var c = 3; +} + +//console.log(a + b); +console.log(c); + + +// ES5 +(function() { + var c = 3; +})(); + +//console.log(c); +*/ + +///////////////////////////////// +// Lecture: Strings + +/* +let firstName = 'John'; +let lastName = 'Smith'; +const yearOfBirth = 1990; + +function calcAge(year) { + return 2016 - year; +} + + +// ES5 +console.log('This is ' + firstName + ' ' + lastName + '. He was born in ' + yearOfBirth + '. Today, he is ' + calcAge(yearOfBirth) + ' years old.'); + +// ES6 +console.log(`This is ${firstName} ${lastName}. He was born in ${yearOfBirth}. Today, he is ${calcAge(yearOfBirth)} years old.`); + + + + +const n = `${firstName} ${lastName}`; +console.log(n.startsWith('j')); +console.log(n.endsWith('Sm')); +console.log(n.includes('oh')); +console.log(`${firstName} `.repeat(5)); +*/ + +///////////////////////////////// +// Lecture: Arrow functions + +/* +const years = [1990, 1965, 1982, 1937]; + +// ES5 +var ages5 = years.map(function(el) { + return 2016 - el; +}); +console.log(ages5); + + +// ES6 +let ages6 = years.map(el => 2016 - el); +console.log(ages6); + +ages6 = years.map((el, index) => `Age element ${index + 1}: ${2016 - el}.`); +console.log(ages6); + +ages6 = years.map((el, index) => { + const now = new Date().getFullYear(); + const age = now - el; + return `Age element ${index + 1}: ${age}.` +}); +console.log(ages6); +*/ + +///////////////////////////////// +// Lecture: Arrow functions 2 + +/* +// ES5 +var box5 = { + color: 'green', + position: 1, + clickMe: function() { + + var self = this; document.querySelector('.green').addEventListener('click', function() { + var str = 'This is box number ' + self.position + ' and it is ' + self.color; + alert(str); + }); + } +} +//box5.clickMe(); + + +// ES6 +const box6 = { + color: 'green', + position: 1, + clickMe: function() { + document.querySelector('.green').addEventListener('click', () => { + var str = 'This is box number ' + this.position + ' and it is ' + this.color; + alert(str); + }); + } +} +box6.clickMe(); + + +const box66 = { + color: 'green', + position: 1, + clickMe: () => { + document.querySelector('.green').addEventListener('click', () => { + var str = 'This is box number ' + this.position + ' and it is ' + this.color; + alert(str); + }); + } +} +box66.clickMe(); + + + + +function Person(name) { + this.name = name; +} + +// ES5 +Person.prototype.myFriends5 = function(friends) { + + var arr = friends.map(function(el) { + return this.name + ' is friends with ' + el; + }.bind(this)); + + console.log(arr); +} + +var friends = ['Bob', 'Jane', 'Mark']; +new Person('John').myFriends5(friends); + + +// ES6 +Person.prototype.myFriends6 = function(friends) { + + var arr = friends.map(el => `${this.name} is friends with ${el}`); + + console.log(arr); +} + +new Person('Mike').myFriends6(friends); +*/ + +///////////////////////////////// +// Lecture: Destructuring + +/* +// ES5 +var john = ['John', 26]; +//var name = john[0]; +//var age = john[1]; + + +// ES6 +const [name, age] = ['John', 26]; +console.log(name); +console.log(age); + +const obj = { + firstName: 'John', + lastName: 'Smith' +}; + +const {firstName, lastName} = obj; +console.log(firstName); +console.log(lastName); + +const {firstName: a, lastName: b} = obj; +console.log(a); +console.log(b); + + + + + +function calcAgeRetirement(year) { + const age = new Date().getFullYear() - year; + return [age, 65 - age]; +} + + +const [age2, retirement] = calcAgeRetirement(1990); +console.log(age2); +console.log(retirement); +*/ + +///////////////////////////////// +// Lecture: Arrays + +/* +const boxes = document.querySelectorAll('.box'); + +//ES5 +var boxesArr5 = Array.prototype.slice.call(boxes); +boxesArr5.forEach(function(cur) { + cur.style.backgroundColor = 'dodgerblue'; +}); + +//ES6 +const boxesArr6 = Array.from(boxes); +Array.from(boxes).forEach(cur => cur.style.backgroundColor = 'dodgerblue'); + + +//ES5 +for(var i = 0; i < boxesArr5.length; i++) { + + if(boxesArr5[i].className === 'box blue') { + continue; + } + + boxesArr5[i].textContent = 'I changed to blue!'; + +} + + +//ES6 +for (const cur of boxesArr6) { + if (cur.className.includes('blue')) { + continue; + } + cur.textContent = 'I changed to blue!'; +} + + + + +//ES5 +var ages = [12, 17, 8, 21, 14, 11]; + +var full = ages.map(function(cur) { + return cur >= 18; +}); +console.log(full); + +console.log(full.indexOf(true)); +console.log(ages[full.indexOf(true)]); + + +//ES6 +console.log(ages.findIndex(cur => cur >= 18)); +console.log(ages.find(cur => cur >= 18)); +*/ + +///////////////////////////////// +// Lecture: Spread operator + +/* +function addFourAges (a, b, c, d) { + return a + b + c + d; +} + +var sum1 = addFourAges(18, 30, 12, 21); +console.log(sum1); + +//ES5 +var ages = [18, 30, 12, 21]; +var sum2 = addFourAges.apply(null, ages); +console.log(sum2); + +//ES6 +const sum3 = addFourAges(...ages); +console.log(sum3); + + +const familySmith = ['John', 'Jane', 'Mark']; +const familyMiller = ['Mary', 'Bob', 'Ann']; +const bigFamily = [...familySmith, 'Lily', ...familyMiller]; +console.log(bigFamily); + + +const h = document.querySelector('h1'); +const boxes = document.querySelectorAll('.box'); +const all = [h, ...boxes]; + +Array.from(all).forEach(cur => cur.style.color = 'purple'); +*/ + +///////////////////////////////// +// Lecture: Rest parameters + +/* +//ES5 +function isFullAge5() { + //console.log(arguments); + var argsArr = Array.prototype.slice.call(arguments); + + argsArr.forEach(function(cur) { + console.log((2016 - cur) >= 18); + }) +} + + +//isFullAge5(1990, 1999, 1965); +//isFullAge5(1990, 1999, 1965, 2016, 1987); + + +//ES6 +function isFullAge6(...years) { + years.forEach(cur => console.log( (2016 - cur) >= 18)); +} + +isFullAge6(1990, 1999, 1965, 2016, 1987); + + + +//ES5 +function isFullAge5(limit) { + var argsArr = Array.prototype.slice.call(arguments, 1); + + argsArr.forEach(function(cur) { + console.log((2016 - cur) >= limit); + }) +} + + +//isFullAge5(16, 1990, 1999, 1965); +isFullAge5(1990, 1999, 1965, 2016, 1987); + + +//ES6 +function isFullAge6(limit, ...years) { + years.forEach(cur => console.log( (2016 - cur) >= limit)); +} + +isFullAge6(16, 1990, 1999, 1965, 2016, 1987); + +*/ + +///////////////////////////////// +// Lecture: Default parameters + +/* +// ES5 +function SmithPerson(firstName, yearOfBirth, lastName, nationality) { + + lastName === undefined ? lastName = 'Smith' : lastName = lastName; + nationality === undefined ? nationality = 'american' : nationality = nationality; + + this.firstName = firstName; + this.lastName = lastName; + this.yearOfBirth = yearOfBirth; + this.nationality = nationality; +} + + +//ES6 +function SmithPerson(firstName, yearOfBirth, lastName = 'Smith', nationality = 'american') { + this.firstName = firstName; + this.lastName = lastName; + this.yearOfBirth = yearOfBirth; + this.nationality = nationality; +} + + +var john = new SmithPerson('John', 1990); +var emily = new SmithPerson('Emily', 1983, 'Diaz', 'spanish'); +*/ + +///////////////////////////////// +// Lecture: Maps + +/* +const question = new Map(); +question.set('question', 'What is the official name of the latest major JavaScript version?'); +question.set(1, 'ES5'); +question.set(2, 'ES6'); +question.set(3, 'ES2015'); +question.set(4, 'ES7'); +question.set('correct', 3); +question.set(true, 'Correct answer :D'); +question.set(false, 'Wrong, please try again!'); + +console.log(question.get('question')); +//console.log(question.size); + + +if(question.has(4)) { + //question.delete(4); + //console.log('Answer 4 is here') +} + +//question.clear(); + + +//question.forEach((value, key) => console.log(`This is ${key}, and it's set to ${value}`)); + + +for (let [key, value] of question.entries()) { + if (typeof(key) === 'number') { + console.log(`Answer ${key}: ${value}`); + } +} + +const ans = parseInt(prompt('Write the correct answer')); +console.log(question.get(ans === question.get('correct'))); +*/ + +///////////////////////////////// +// Lecture: Classes + +/* +//ES5 +var Person5 = function(name, yearOfBirth, job) { + this.name = name; + this.yearOfBirth = yearOfBirth; + this.job = job; +} + +Person5.prototype.calculateAge = function() { + var age = new Date().getFullYear - this.yearOfBirth; + console.log(age); +} + +var john5 = new Person5('John', 1990, 'teacher'); + +//ES6 +class Person6 { + constructor (name, yearOfBirth, job) { + this.name = name; + this.yearOfBirth = yearOfBirth; + this.job = job; + } + + calculateAge() { + var age = new Date().getFullYear - this.yearOfBirth; + console.log(age); + } + + static greeting() { + console.log('Hey there!'); + } +} + +const john6 = new Person6('John', 1990, 'teacher'); + +Person6.greeting(); +*/ + +///////////////////////////////// +// Lecture: Classes and subclasses + +/* +//ES5 +var Person5 = function(name, yearOfBirth, job) { + this.name = name; + this.yearOfBirth = yearOfBirth; + this.job = job; +} + +Person5.prototype.calculateAge = function() { + var age = new Date().getFullYear() - this.yearOfBirth; + console.log(age); +} + +var Athlete5 = function(name, yearOfBirth, job, olymicGames, medals) { + Person5.call(this, name, yearOfBirth, job); + this.olymicGames = olymicGames; + this.medals = medals; +} + +Athlete5.prototype = Object.create(Person5.prototype); + + +Athlete5.prototype.wonMedal = function() { + this.medals++; + console.log(this.medals); +} + + +var johnAthlete5 = new Athlete5('John', 1990, 'swimmer', 3, 10); + +johnAthlete5.calculateAge(); +johnAthlete5.wonMedal(); + + +//ES6 +class Person6 { + constructor (name, yearOfBirth, job) { + this.name = name; + this.yearOfBirth = yearOfBirth; + this.job = job; + } + + calculateAge() { + var age = new Date().getFullYear() - this.yearOfBirth; + console.log(age); + } +} + +class Athlete6 extends Person6 { + constructor(name, yearOfBirth, job, olympicGames, medals) { + super(name, yearOfBirth, job); + this.olympicGames = olympicGames; + this.medals = medals; + } + + wonMedal() { + this.medals++; + console.log(this.medals); + } +} + +const johnAthlete6 = new Athlete6('John', 1990, 'swimmer', 3, 10); + +johnAthlete6.wonMedal(); +johnAthlete6.calculateAge(); +*/ + +///////////////////////////////// +// CODING CHALLENGE + +/* + +Suppose that you're working in a small town administration, and you're in charge of two town elements: +1. Parks +2. Streets + +It's a very small town, so right now there are only 3 parks and 4 streets. All parks and streets have a name and a build year. + +At an end-of-year meeting, your boss wants a final report with the following: +1. Tree density of each park in the town (forumla: number of trees/park area) +2. Average age of each town's park (forumla: sum of all ages/number of parks) +3. The name of the park that has more than 1000 trees +4. Total and average length of the town's streets +5. Size classification of all streets: tiny/small/normal/big/huge. If the size is unknown, the default is normal + +All the report data should be printed to the console. + +HINT: Use some of the ES6 features: classes, subclasses, template strings, default parameters, maps, arrow functions, destructuring, etc. + +*/ + +var Element = function Element(name, buildYear) { + _classCallCheck(this, Element); + + this.name = name; + this.buildYear = buildYear; +}; + +var Park = function (_Element) { + _inherits(Park, _Element); + + function Park(name, buildYear, area, numTrees) { + _classCallCheck(this, Park); + + var _this = _possibleConstructorReturn(this, (Park.__proto__ || Object.getPrototypeOf(Park)).call(this, name, buildYear)); + + _this.area = area; //km2 + _this.numTrees = numTrees; + return _this; + } + + _createClass(Park, [{ + key: 'treeDensity', + value: function treeDensity() { + var density = this.numTrees / this.area; + console.log(this.name + ' has a tree density of ' + density + ' trees per square km.'); + } + }]); + + return Park; +}(Element); + +var Street = function (_Element2) { + _inherits(Street, _Element2); + + function Street(name, buildYear, length) { + var size = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 3; + + _classCallCheck(this, Street); + + var _this2 = _possibleConstructorReturn(this, (Street.__proto__ || Object.getPrototypeOf(Street)).call(this, name, buildYear)); + + _this2.length = length; + _this2.size = size; + return _this2; + } + + _createClass(Street, [{ + key: 'classifyStreet', + value: function classifyStreet() { + var classification = new Map(); + classification.set(1, 'tiny'); + classification.set(2, 'small'); + classification.set(3, 'normal'); + classification.set(4, 'big'); + classification.set(5, 'huge'); + console.log(this.name + ', build in ' + this.buildYear + ', is a ' + classification.get(this.size) + ' street.'); + } + }]); + + return Street; +}(Element); + +var allParks = [new Park('Green Park', 1987, 0.2, 215), new Park('National Park', 1894, 2.9, 3541), new Park('Oak Park', 1953, 0.4, 949)]; + +var allStreets = [new Street('Ocean Avenue', 1999, 1.1, 4), new Street('Evergreen Street', 2008, 2.7, 2), new Street('4th Street', 2015, 0.8), new Street('Sunset Boulevard', 1982, 2.5, 5)]; + +function calc(arr) { + + var sum = arr.reduce(function (prev, cur, index) { + return prev + cur; + }, 0); + + return [sum, sum / arr.length]; +} + +function reportParks(p) { + + console.log('-----PARKS REPORT-----'); + + // Density + p.forEach(function (el) { + return el.treeDensity(); + }); + + // Average age + var ages = p.map(function (el) { + return new Date().getFullYear() - el.buildYear; + }); + + var _calc = calc(ages), + _calc2 = _slicedToArray(_calc, 2), + totalAge = _calc2[0], + avgAge = _calc2[1]; + + console.log('Our ' + p.length + ' parks have an average of ' + avgAge + ' years.'); + + // Which park has more than 1000 trees + var i = p.map(function (el) { + return el.numTrees; + }).findIndex(function (el) { + return el >= 1000; + }); + console.log(p[i].name + ' has more than 1000 trees.'); +} + +function reportStreets(s) { + + console.log('-----STREETS REPORT-----'); + + //Total and average length of the town's streets + + var _calc3 = calc(s.map(function (el) { + return el.length; + })), + _calc4 = _slicedToArray(_calc3, 2), + totalLength = _calc4[0], + avgLength = _calc4[1]; + + console.log('Our ' + s.length + ' streets have a total length of ' + totalLength + ' km, with an average of ' + avgLength + ' km.'); + + // CLassify sizes + s.forEach(function (el) { + return el.classifyStreet(); + }); +} + +reportParks(allParks); +reportStreets(allStreets); diff --git a/7-ES6/final/script.js b/7-ES6/final/script.js new file mode 100755 index 0000000000..b10cbbc42b --- /dev/null +++ b/7-ES6/final/script.js @@ -0,0 +1,730 @@ +///////////////////////////////// +// Lecture: let and const + +/* +// ES5 +var name5 = 'Jane Smith'; +var age5 = 23; +name5 = 'Jane Miller'; +console.log(name5); + +// ES6 +const name6 = 'Jane Smith'; +let age6 = 23; +name6 = 'Jane Miller'; +console.log(name6); + + +// ES5 +function driversLicence5(passedTest) { + + if (passedTest) { + console.log(firstName); + var firstName = 'John'; + var yearOfBirth = 1990; + } + + + console.log(firstName + ', born in ' + yearOfBirth + ', is now officially allowed to drive a car.'); +} + +driversLicence5(true); + + +// ES6 +function driversLicence6(passedTest) { + + //console.log(firstName); + let firstName; + const yearOfBirth = 1990; + + if (passedTest) { + firstName = 'John'; + } + + console.log(firstName + ', born in ' + yearOfBirth + ', is now officially allowed to drive a car.'); +} + +driversLicence6(true); + + + +var i = 23; + +for (var i = 0; i < 5; i++) { + console.log(i); +} + +console.log(i); +*/ + + + + +///////////////////////////////// +// Lecture: Blocks and IIFEs + +/* +// ES6 +{ + const a = 1; + let b = 2; + var c = 3; +} + +//console.log(a + b); +console.log(c); + + +// ES5 +(function() { + var c = 3; +})(); + +//console.log(c); +*/ + + + + +///////////////////////////////// +// Lecture: Strings + +/* +let firstName = 'John'; +let lastName = 'Smith'; +const yearOfBirth = 1990; + +function calcAge(year) { + return 2016 - year; +} + +// ES5 +console.log('This is ' + firstName + ' ' + lastName + '. He was born in ' + yearOfBirth + '. Today, he is ' + calcAge(yearOfBirth) + ' years old.'); + +// ES6 +console.log(`This is ${firstName} ${lastName}. He was born in ${yearOfBirth}. Today, he is ${calcAge(yearOfBirth)} years old.`); + + +const n = `${firstName} ${lastName}`; +console.log(n.startsWith('j')); +console.log(n.endsWith('Sm')); +console.log(n.includes('oh')); +console.log(`${firstName} `.repeat(5)); +*/ + + + + +///////////////////////////////// +// Lecture: Arrow functions + +/* +const years = [1990, 1965, 1982, 1937]; + +// ES5 +var ages5 = years.map(function(el) { + return 2016 - el; +}); +console.log(ages5); + + +// ES6 +let ages6 = years.map(el => 2016 - el); +console.log(ages6); + +ages6 = years.map((el, index) => `Age element ${index + 1}: ${2016 - el}.`); +console.log(ages6); + +ages6 = years.map((el, index) => { + const now = new Date().getFullYear(); + const age = now - el; + return `Age element ${index + 1}: ${age}.` +}); +console.log(ages6); +*/ + + + + +///////////////////////////////// +// Lecture: Arrow functions 2 + +/* +// ES5 +var box5 = { + color: 'green', + position: 1, + clickMe: function() { + + var self = this; document.querySelector('.green').addEventListener('click', function() { + var str = 'This is box number ' + self.position + ' and it is ' + self.color; + alert(str); + }); + } +} +//box5.clickMe(); + + +// ES6 +const box6 = { + color: 'green', + position: 1, + clickMe: function() { + document.querySelector('.green').addEventListener('click', () => { + var str = 'This is box number ' + this.position + ' and it is ' + this.color; + alert(str); + }); + } +} +box6.clickMe(); + + +const box66 = { + color: 'green', + position: 1, + clickMe: () => { + document.querySelector('.green').addEventListener('click', () => { + var str = 'This is box number ' + this.position + ' and it is ' + this.color; + alert(str); + }); + } +} +box66.clickMe(); + + +function Person(name) { + this.name = name; +} + +// ES5 +Person.prototype.myFriends5 = function(friends) { + + var arr = friends.map(function(el) { + return this.name + ' is friends with ' + el; + }.bind(this)); + + console.log(arr); +} + +var friends = ['Bob', 'Jane', 'Mark']; +new Person('John').myFriends5(friends); + + +// ES6 +Person.prototype.myFriends6 = function(friends) { + + var arr = friends.map(el => `${this.name} is friends with ${el}`); + + console.log(arr); +} + +new Person('Mike').myFriends6(friends); +*/ + + + + +///////////////////////////////// +// Lecture: Destructuring + +/* +// ES5 +var john = ['John', 26]; +//var name = john[0]; +//var age = john[1]; + + +// ES6 +const [name, age] = ['John', 26]; +console.log(name); +console.log(age); + +const obj = { + firstName: 'John', + lastName: 'Smith' +}; + +const {firstName, lastName} = obj; +console.log(firstName); +console.log(lastName); + +const {firstName: a, lastName: b} = obj; +console.log(a); +console.log(b); + + + +function calcAgeRetirement(year) { + const age = new Date().getFullYear() - year; + return [age, 65 - age]; +} + + +const [age2, retirement] = calcAgeRetirement(1990); +console.log(age2); +console.log(retirement); +*/ + + + + +///////////////////////////////// +// Lecture: Arrays + +/* +const boxes = document.querySelectorAll('.box'); + +//ES5 +var boxesArr5 = Array.prototype.slice.call(boxes); +boxesArr5.forEach(function(cur) { + cur.style.backgroundColor = 'dodgerblue'; +}); + +//ES6 +const boxesArr6 = Array.from(boxes); +Array.from(boxes).forEach(cur => cur.style.backgroundColor = 'dodgerblue'); + + +//ES5 +for(var i = 0; i < boxesArr5.length; i++) { + + if(boxesArr5[i].className === 'box blue') { + continue; + } + + boxesArr5[i].textContent = 'I changed to blue!'; + +} + + +//ES6 +for (const cur of boxesArr6) { + if (cur.className.includes('blue')) { + continue; + } + cur.textContent = 'I changed to blue!'; +} + + + + +//ES5 +var ages = [12, 17, 8, 21, 14, 11]; + +var full = ages.map(function(cur) { + return cur >= 18; +}); +console.log(full); + +console.log(full.indexOf(true)); +console.log(ages[full.indexOf(true)]); + + +//ES6 +console.log(ages.findIndex(cur => cur >= 18)); +console.log(ages.find(cur => cur >= 18)); +*/ + + + + +///////////////////////////////// +// Lecture: Spread operator + +/* +function addFourAges (a, b, c, d) { + return a + b + c + d; +} + +var sum1 = addFourAges(18, 30, 12, 21); +console.log(sum1); + +//ES5 +var ages = [18, 30, 12, 21]; +var sum2 = addFourAges.apply(null, ages); +console.log(sum2); + +//ES6 +const sum3 = addFourAges(...ages); +console.log(sum3); + + +const familySmith = ['John', 'Jane', 'Mark']; +const familyMiller = ['Mary', 'Bob', 'Ann']; +const bigFamily = [...familySmith, 'Lily', ...familyMiller]; +console.log(bigFamily); + + +const h = document.querySelector('h1'); +const boxes = document.querySelectorAll('.box'); +const all = [h, ...boxes]; + +Array.from(all).forEach(cur => cur.style.color = 'purple'); +*/ + + + + +///////////////////////////////// +// Lecture: Rest parameters + +/* +//ES5 +function isFullAge5() { + //console.log(arguments); + var argsArr = Array.prototype.slice.call(arguments); + + argsArr.forEach(function(cur) { + console.log((2016 - cur) >= 18); + }) +} + + +//isFullAge5(1990, 1999, 1965); +//isFullAge5(1990, 1999, 1965, 2016, 1987); + + +//ES6 +function isFullAge6(...years) { + years.forEach(cur => console.log( (2016 - cur) >= 18)); +} + +isFullAge6(1990, 1999, 1965, 2016, 1987); + + +//ES5 +function isFullAge5(limit) { + var argsArr = Array.prototype.slice.call(arguments, 1); + + argsArr.forEach(function(cur) { + console.log((2016 - cur) >= limit); + }) +} + + +//isFullAge5(16, 1990, 1999, 1965); +isFullAge5(1990, 1999, 1965, 2016, 1987); + + +//ES6 +function isFullAge6(limit, ...years) { + years.forEach(cur => console.log( (2016 - cur) >= limit)); +} + +isFullAge6(16, 1990, 1999, 1965, 2016, 1987); +*/ + + + + +///////////////////////////////// +// Lecture: Default parameters + +/* +// ES5 +function SmithPerson(firstName, yearOfBirth, lastName, nationality) { + + lastName === undefined ? lastName = 'Smith' : lastName = lastName; + nationality === undefined ? nationality = 'american' : nationality = nationality; + + this.firstName = firstName; + this.lastName = lastName; + this.yearOfBirth = yearOfBirth; + this.nationality = nationality; +} + + +//ES6 +function SmithPerson(firstName, yearOfBirth, lastName = 'Smith', nationality = 'american') { + this.firstName = firstName; + this.lastName = lastName; + this.yearOfBirth = yearOfBirth; + this.nationality = nationality; +} + + +var john = new SmithPerson('John', 1990); +var emily = new SmithPerson('Emily', 1983, 'Diaz', 'spanish'); +*/ + + + + +///////////////////////////////// +// Lecture: Maps + +/* +const question = new Map(); +question.set('question', 'What is the official name of the latest major JavaScript version?'); +question.set(1, 'ES5'); +question.set(2, 'ES6'); +question.set(3, 'ES2015'); +question.set(4, 'ES7'); +question.set('correct', 3); +question.set(true, 'Correct answer :D'); +question.set(false, 'Wrong, please try again!'); + +console.log(question.get('question')); +//console.log(question.size); + + +if(question.has(4)) { + //question.delete(4); + //console.log('Answer 4 is here') +} + +//question.clear(); + + +//question.forEach((value, key) => console.log(`This is ${key}, and it's set to ${value}`)); + + +for (let [key, value] of question.entries()) { + if (typeof(key) === 'number') { + console.log(`Answer ${key}: ${value}`); + } +} + +const ans = parseInt(prompt('Write the correct answer')); +console.log(question.get(ans === question.get('correct'))); +*/ + + + + +///////////////////////////////// +// Lecture: Classes + +/* +//ES5 +var Person5 = function(name, yearOfBirth, job) { + this.name = name; + this.yearOfBirth = yearOfBirth; + this.job = job; +} + +Person5.prototype.calculateAge = function() { + var age = new Date().getFullYear - this.yearOfBirth; + console.log(age); +} + +var john5 = new Person5('John', 1990, 'teacher'); + +//ES6 +class Person6 { + constructor (name, yearOfBirth, job) { + this.name = name; + this.yearOfBirth = yearOfBirth; + this.job = job; + } + + calculateAge() { + var age = new Date().getFullYear - this.yearOfBirth; + console.log(age); + } + + static greeting() { + console.log('Hey there!'); + } +} + +const john6 = new Person6('John', 1990, 'teacher'); + +Person6.greeting(); +*/ + + + + +///////////////////////////////// +// Lecture: Classes and subclasses + +/* +//ES5 +var Person5 = function(name, yearOfBirth, job) { + this.name = name; + this.yearOfBirth = yearOfBirth; + this.job = job; +} + +Person5.prototype.calculateAge = function() { + var age = new Date().getFullYear() - this.yearOfBirth; + console.log(age); +} + +var Athlete5 = function(name, yearOfBirth, job, olymicGames, medals) { + Person5.call(this, name, yearOfBirth, job); + this.olymicGames = olymicGames; + this.medals = medals; +} + +Athlete5.prototype = Object.create(Person5.prototype); + + +Athlete5.prototype.wonMedal = function() { + this.medals++; + console.log(this.medals); +} + + +var johnAthlete5 = new Athlete5('John', 1990, 'swimmer', 3, 10); + +johnAthlete5.calculateAge(); +johnAthlete5.wonMedal(); + + +//ES6 +class Person6 { + constructor (name, yearOfBirth, job) { + this.name = name; + this.yearOfBirth = yearOfBirth; + this.job = job; + } + + calculateAge() { + var age = new Date().getFullYear() - this.yearOfBirth; + console.log(age); + } +} + +class Athlete6 extends Person6 { + constructor(name, yearOfBirth, job, olympicGames, medals) { + super(name, yearOfBirth, job); + this.olympicGames = olympicGames; + this.medals = medals; + } + + wonMedal() { + this.medals++; + console.log(this.medals); + } +} + +const johnAthlete6 = new Athlete6('John', 1990, 'swimmer', 3, 10); + +johnAthlete6.wonMedal(); +johnAthlete6.calculateAge(); +*/ + + + + +///////////////////////////////// +// CODING CHALLENGE + +/* + +Suppose that you're working in a small town administration, and you're in charge of two town elements: +1. Parks +2. Streets + +It's a very small town, so right now there are only 3 parks and 4 streets. All parks and streets have a name and a build year. + +At an end-of-year meeting, your boss wants a final report with the following: +1. Tree density of each park in the town (forumla: number of trees/park area) +2. Average age of each town's park (forumla: sum of all ages/number of parks) +3. The name of the park that has more than 1000 trees +4. Total and average length of the town's streets +5. Size classification of all streets: tiny/small/normal/big/huge. If the size is unknown, the default is normal + +All the report data should be printed to the console. + +HINT: Use some of the ES6 features: classes, subclasses, template strings, default parameters, maps, arrow functions, destructuring, etc. + +*/ + + +class Element { + constructor(name, buildYear) { + this.name = name; + this.buildYear = buildYear; + } +} + + +class Park extends Element { + constructor(name, buildYear, area, numTrees) { + super(name, buildYear); + this.area = area; //km2 + this.numTrees = numTrees; + } + + treeDensity() { + const density = this.numTrees / this.area; + console.log(`${this.name} has a tree density of ${density} trees per square km.`); + } +} + + +class Street extends Element { + constructor(name, buildYear, length, size = 3) { + super(name, buildYear); + this.length = length; + this.size = size; + } + + classifyStreet () { + const classification = new Map(); + classification.set(1, 'tiny'); + classification.set(2, 'small'); + classification.set(3, 'normal'); + classification.set(4, 'big'); + classification.set(5, 'huge'); + console.log(`${this.name}, build in ${this.buildYear}, is a ${classification.get(this.size)} street.`); + } +} + + +const allParks = [new Park('Green Park', 1987, 0.2, 215), + new Park('National Park', 1894, 2.9, 3541), + new Park('Oak Park', 1953, 0.4, 949)]; + +const allStreets = [new Street('Ocean Avenue', 1999, 1.1, 4), + new Street('Evergreen Street', 2008, 2.7, 2), + new Street('4th Street', 2015, 0.8), + new Street('Sunset Boulevard', 1982, 2.5, 5)]; + + +function calc(arr) { + + const sum = arr.reduce((prev, cur, index) => prev + cur, 0); + + return [sum, sum / arr.length]; + +} + + +function reportParks(p) { + + console.log('-----PARKS REPORT-----'); + + // Density + p.forEach(el => el.treeDensity()); + + // Average age + const ages = p.map(el => new Date().getFullYear() - el.buildYear); + const [totalAge, avgAge] = calc(ages); + console.log(`Our ${p.length} parks have an average of ${avgAge} years.`); + + // Which park has more than 1000 trees + const i = p.map(el => el.numTrees).findIndex(el => el >= 1000); + console.log(`${p[i].name} has more than 1000 trees.`); + +} + + +function reportStreets(s) { + + console.log('-----STREETS REPORT-----'); + + //Total and average length of the town's streets + const [totalLength, avgLength] = calc(s.map(el => el.length)); + console.log(`Our ${s.length} streets have a total length of ${totalLength} km, with an average of ${avgLength} km.`); + + // CLassify sizes + s.forEach(el => el.classifyStreet()); +} + +reportParks(allParks); +reportStreets(allStreets); \ No newline at end of file diff --git a/7-ES6/starter/index.html b/7-ES6/starter/index.html new file mode 100755 index 0000000000..8bf6a167bd --- /dev/null +++ b/7-ES6/starter/index.html @@ -0,0 +1,33 @@ + + + + + Section 7: Get Ready for the Future: ES6 / ES2015 + + + + + + +

    Section 7: Get Ready for the Future: ES6 / ES2015

    + +
    I'm green!
    +
    I'm blue!
    +
    I'm orange!
    + + + + \ No newline at end of file diff --git a/7-ES6/starter/script.js b/7-ES6/starter/script.js new file mode 100755 index 0000000000..e69de29bb2 diff --git a/8-asynchronous-JS/.DS_Store b/8-asynchronous-JS/.DS_Store new file mode 100644 index 0000000000..7de13f06e3 Binary files /dev/null and b/8-asynchronous-JS/.DS_Store differ diff --git a/8-asynchronous-JS/final/asynchronous.html b/8-asynchronous-JS/final/asynchronous.html new file mode 100644 index 0000000000..c903011c6e --- /dev/null +++ b/8-asynchronous-JS/final/asynchronous.html @@ -0,0 +1,136 @@ + + + + + + + Asynchronous JavaScript + + +

    Asynchronous JavaScript

    + + + \ No newline at end of file diff --git a/8-asynchronous-JS/starter/asynchronous.html b/8-asynchronous-JS/starter/asynchronous.html new file mode 100644 index 0000000000..a94431c2c6 --- /dev/null +++ b/8-asynchronous-JS/starter/asynchronous.html @@ -0,0 +1,15 @@ + + + + + + + Asynchronous JavaScript + + +

    Asynchronous JavaScript

    + + + \ No newline at end of file diff --git a/9-forkify/.DS_Store b/9-forkify/.DS_Store new file mode 100644 index 0000000000..0cdc767bc2 Binary files /dev/null and b/9-forkify/.DS_Store differ diff --git a/9-forkify/final/.DS_Store b/9-forkify/final/.DS_Store new file mode 100644 index 0000000000..bf2c7a3e13 Binary files /dev/null and b/9-forkify/final/.DS_Store differ diff --git a/9-forkify/final/.babelrc b/9-forkify/final/.babelrc new file mode 100644 index 0000000000..822529e6c8 --- /dev/null +++ b/9-forkify/final/.babelrc @@ -0,0 +1,12 @@ +{ + "presets": [ + ["env", { + "targets": { + "browsers": [ + "last 5 versions", + "ie >= 8" + ] + } + }] + ] +} \ No newline at end of file diff --git a/9-forkify/final/dist/.DS_Store b/9-forkify/final/dist/.DS_Store new file mode 100644 index 0000000000..aac648b1e9 Binary files /dev/null and b/9-forkify/final/dist/.DS_Store differ diff --git a/9-forkify/final/dist/css/style.css b/9-forkify/final/dist/css/style.css new file mode 100644 index 0000000000..9ec5c35935 --- /dev/null +++ b/9-forkify/final/dist/css/style.css @@ -0,0 +1,492 @@ +* { + margin: 0; + padding: 0; } + +*, +*::before, +*::after { + box-sizing: inherit; } + +html { + box-sizing: border-box; + font-size: 62.5%; } + @media only screen and (max-width: 68.75em) { + html { + font-size: 50%; } } + +body { + font-family: 'Nunito Sans', sans-serif; + font-weight: 400; + line-height: 1.6; + color: #655A56; + background-image: linear-gradient(to right bottom, #FBDB89, #F48982); + background-size: cover; + background-repeat: no-repeat; + min-height: calc(100vh - 2 * 4vw); } + +.container { + max-width: 120rem; + margin: 4vw auto; + background-color: #fff; + border-radius: 6px; + overflow: hidden; + box-shadow: 0 2rem 6rem 0.5rem rgba(101, 90, 86, 0.2); + display: grid; + grid-template-rows: 10rem minmax(100rem, auto); + grid-template-columns: 1.1fr 2fr 1.1fr; + grid-template-areas: "head head head" "list recipe shopping"; } + @media only screen and (max-width: 68.75em) { + .container { + width: 100%; + margin: 0; + border-radius: 0; } } + +.btn, .btn-small, .btn-small:link, .btn-small:visited { + background-image: linear-gradient(to right bottom, #FBDB89, #F48982); + border-radius: 10rem; + border: none; + text-transform: uppercase; + color: #fff; + cursor: pointer; + display: flex; + align-items: center; + transition: all .2s; } + .btn:hover, .btn-small:hover { + transform: scale(1.05); } + .btn:focus, .btn-small:focus { + outline: none; } + .btn > *:first-child, .btn-small > *:first-child { + margin-right: 1rem; } + +.btn { + padding: 1.3rem 3rem; + font-size: 1.4rem; } + .btn svg { + height: 2.25rem; + width: 2.25rem; + fill: currentColor; } + +.btn-small, .btn-small:link, .btn-small:visited { + font-size: 1.3rem; + padding: 1rem 1.75rem; + text-decoration: none; } + .btn-small svg, .btn-small:link svg, .btn-small:visited svg { + height: 1.5rem; + width: 1.5rem; + fill: currentColor; } + +.btn-inline { + color: #F59A83; + font-size: 1.2rem; + border: none; + background-color: #F9F5F3; + padding: .8rem 1.2rem; + border-radius: 10rem; + cursor: pointer; + display: flex; + align-items: center; + transition: all .2s; } + .btn-inline svg { + height: 1.5rem; + width: 1.5rem; + fill: currentColor; + margin: 0 .2rem; } + .btn-inline span { + margin: 0 .4rem; } + .btn-inline:hover { + color: #F48982; + background-color: #F2EFEE; } + .btn-inline:focus { + outline: none; } + +.btn-tiny { + height: 1.75rem; + width: 1.75rem; + border: none; + background: none; + cursor: pointer; } + .btn-tiny svg { + height: 100%; + width: 100%; + fill: #F59A83; + transition: all .3s; } + .btn-tiny:focus { + outline: none; } + .btn-tiny:hover svg { + fill: #F48982; + transform: translateY(-1px); } + .btn-tiny:active svg { + fill: #F48982; + transform: translateY(0); } + .btn-tiny:not(:last-child) { + margin-right: .3rem; } + +.heading-2 { + font-size: 1.8rem; + font-weight: 600; + color: #F59A83; + text-transform: uppercase; + margin-bottom: 2.5rem; + text-align: center; + transform: skewY(-3deg); } + +.copyright { + color: #968B87; + font-size: 1.2rem; + margin-top: auto; } + +.link:link, +.link:visited { + color: #968B87; } + +.loader { + margin: 5rem auto; + text-align: center; } + .loader svg { + height: 5.5rem; + width: 5.5rem; + fill: #F59A83; + transform-origin: 44% 50%; + animation: rotate 1.5s infinite linear; } + +@keyframes rotate { + 0% { + transform: rotate(0); } + 100% { + transform: rotate(360deg); } } + +.header { + grid-area: head; + background-color: #F9F5F3; + display: flex; + align-items: center; + justify-content: space-between; } + .header__logo { + margin-left: 4rem; + height: 4.5rem; + display: block; } + +.search { + background-color: #fff; + border-radius: 10rem; + display: flex; + align-items: center; + padding-left: 3rem; + transition: all .3s; } + .search:focus-within { + transform: translateY(-2px); + box-shadow: 0 0.7rem 3rem rgba(101, 90, 86, 0.08); } + .search__field { + border: none; + background: none; + font-family: inherit; + color: inherit; + font-size: 1.7rem; + width: 30rem; } + .search__field:focus { + outline: none; } + .search__field::placeholder { + color: #DAD0CC; } + +.likes { + position: relative; + align-self: stretch; + padding: 0 !important; } + .likes__field { + cursor: pointer; + padding: 0 4rem; + display: flex; + align-items: center; + height: 100%; + transition: all .3s; } + .likes__field:hover { + background-color: #F2EFEE; } + .likes__panel:hover, + .likes__field:hover + .likes__panel { + visibility: visible; + opacity: 1; } + .likes__icon { + fill: #F59A83; + height: 3.75rem; + width: 3.75rem; } + .likes__panel { + position: absolute; + right: 0; + top: 10rem; + z-index: 10; + padding: 2rem 0; + width: 34rem; + background-color: #fff; + box-shadow: 0 0.8rem 5rem 2rem rgba(101, 90, 86, 0.1); + visibility: hidden; + opacity: 0; + transition: all .5s .2s; } + +.results, +.likes { + padding: 3rem 0; } + .results__list, + .likes__list { + list-style: none; } + .results__link:link, .results__link:visited, + .likes__link:link, + .likes__link:visited { + display: flex; + align-items: center; + padding: 1.5rem 3rem; + transition: all .3s; + border-right: 1px solid #fff; + text-decoration: none; } + .results__link:hover, + .likes__link:hover { + background-color: #F9F5F3; + transform: translateY(-2px); } + .results__link--active, + .likes__link--active { + background-color: #F9F5F3; } + .results__fig, + .likes__fig { + flex: 0 0 5.5rem; + border-radius: 50%; + overflow: hidden; + height: 5.5rem; + margin-right: 2rem; + position: relative; + backface-visibility: hidden; } + .results__fig::before, + .likes__fig::before { + content: ''; + display: block; + height: 100%; + width: 100%; + position: absolute; + top: 0; + left: 0; + background-image: linear-gradient(to right bottom, #FBDB89, #F48982); + opacity: .4; } + .results__fig img, + .likes__fig img { + display: block; + width: 100%; + height: 100%; + object-fit: cover; + transition: all .3s; } + .results__name, + .likes__name { + font-size: 1.3rem; + color: #F59A83; + text-transform: uppercase; + font-weight: 600; + margin-bottom: .3rem; } + .results__author, + .likes__author { + font-size: 1.1rem; + color: #968B87; + text-transform: uppercase; + font-weight: 600; } + .results__pages, + .likes__pages { + margin-top: 3rem; + padding: 0 3rem; } + .results__pages::after, + .likes__pages::after { + content: ""; + display: table; + clear: both; } + .results__btn--prev, + .likes__btn--prev { + float: left; + flex-direction: row-reverse; } + .results__btn--next, + .likes__btn--next { + float: right; } + +.recipe { + background-color: #F9F5F3; + border-top: 1px solid #fff; } + .recipe__fig { + height: 30rem; + position: relative; + transform: scale(1.04) translateY(-1px); + transform-origin: top; } + .recipe__fig::before { + content: ''; + display: block; + height: 100%; + width: 100%; + position: absolute; + top: 0; + left: 0; + background-image: linear-gradient(to right bottom, #FBDB89, #F48982); + opacity: .6; } + .recipe__img { + width: 100%; + display: block; + height: 100%; + object-fit: cover; } + .recipe__title { + position: absolute; + bottom: 0; + left: 50%; + transform: translate(-50%, 20%) skewY(-6deg); + color: #fff; + font-weight: 700; + font-size: 2.75rem; + text-transform: uppercase; + width: 70%; + line-height: 1.95; + text-align: center; } + .recipe__title span { + -webkit-box-decoration-break: clone; + box-decoration-break: clone; + padding: 1.3rem 2rem; + background-image: linear-gradient(to right bottom, #FBDB89, #F48982); } + .recipe__details { + display: flex; + align-items: center; + padding: 8rem 3rem 3rem 3rem; } + .recipe__info { + font-size: 1.5rem; + text-transform: uppercase; + display: flex; + align-items: center; } + .recipe__info:not(:last-child) { + margin-right: 4rem; } + .recipe__info-icon { + height: 2rem; + width: 2rem; + fill: #F59A83; + margin-right: 1rem; } + .recipe__info-data { + margin-right: .4rem; + font-weight: 600; } + .recipe__info-buttons { + display: flex; + margin-left: 1.5rem; + visibility: hidden; + opacity: 0; + transform: translateY(5px); + transition: all .4s; } + .recipe:hover .recipe__info-buttons { + visibility: visible; + opacity: 1; + transform: translateY(0); } + .recipe__love { + background-image: linear-gradient(to right bottom, #FBDB89, #F48982); + border-radius: 50%; + border: none; + cursor: pointer; + height: 4.5rem; + width: 4.5rem; + margin-left: auto; + transition: all .2s; + display: flex; + align-items: center; + justify-content: center; } + .recipe__love:hover { + transform: scale(1.07); } + .recipe__love:focus { + outline: none; } + .recipe__love svg { + height: 2.75rem; + width: 2.75rem; + fill: #fff; } + .recipe__ingredients { + padding: 4rem 5rem; + font-size: 1.5rem; + line-height: 1.4; + background-color: #F2EFEE; + display: flex; + flex-direction: column; + align-items: center; } + .recipe__ingredient-list { + display: grid; + grid-template-columns: 1fr 1fr; + grid-column-gap: 1.5rem; + grid-row-gap: 2.5rem; + list-style: none; + margin-bottom: 3rem; } + .recipe__item { + display: flex; } + .recipe__icon { + height: 1.8rem; + width: 1.8rem; + fill: #F59A83; + border: 1px solid #F59A83; + border-radius: 50%; + padding: 2px; + margin-right: 1rem; + flex: 0 0 auto; + margin-top: .1rem; } + .recipe__count { + margin-right: .5rem; + flex: 0 0 auto; } + .recipe__directions { + padding: 4rem; + padding-bottom: 5rem; + display: flex; + flex-direction: column; + align-items: center; } + .recipe__directions-text { + font-size: 1.5rem; + text-align: center; + width: 90%; + margin-bottom: 3rem; + color: #968B87; } + .recipe__by { + font-weight: 700; } + +.shopping { + padding: 3rem 4rem; + display: flex; + flex-direction: column; } + .shopping__list { + list-style: none; + max-height: 77rem; + overflow: scroll; } + .shopping__item { + display: flex; + align-items: flex-start; + padding: 1.3rem 0; + border-bottom: 1px solid #F2EFEE; + position: relative; } + .shopping__count { + flex: 0 0 7.5rem; + padding: .4rem .5rem; + border: 1px solid #F2EFEE; + border-radius: 3px; + margin-right: 2rem; + cursor: pointer; + display: flex; + justify-content: space-between; } + .shopping__count input { + color: inherit; + font-family: inherit; + font-size: 1.2rem; + text-align: center; + border: none; + width: 3.7rem; + border-radius: 3px; } + .shopping__count input:focus { + outline: none; + background-color: #F2EFEE; } + .shopping__count p { + font-size: 1.2rem; } + .shopping__description { + flex: 1; + font-size: 1.3rem; + margin-top: .4rem; + margin-right: 1.5rem; } + .shopping__delete { + margin-top: .5rem; + position: absolute; + right: 0; + background-image: linear-gradient(to right, transparent 0%, #fff 40%, #fff 100%); + width: 3.75rem; + padding-left: 2rem; + visibility: hidden; + opacity: 0; + transition: all .5s; } + .shopping__item:hover .shopping__delete { + opacity: 1; + visibility: visible; } diff --git a/9-forkify/final/dist/img/.DS_Store b/9-forkify/final/dist/img/.DS_Store new file mode 100644 index 0000000000..5008ddfcf5 Binary files /dev/null and b/9-forkify/final/dist/img/.DS_Store differ diff --git a/18-forkify/final/src/img/favicon.png b/9-forkify/final/dist/img/favicon.png similarity index 100% rename from 18-forkify/final/src/img/favicon.png rename to 9-forkify/final/dist/img/favicon.png diff --git a/9-forkify/final/dist/img/icons.svg b/9-forkify/final/dist/img/icons.svg new file mode 100755 index 0000000000..1ea46807f8 --- /dev/null +++ b/9-forkify/final/dist/img/icons.svg @@ -0,0 +1,60 @@ + diff --git a/18-forkify/final/src/img/logo.png b/9-forkify/final/dist/img/logo.png similarity index 100% rename from 18-forkify/final/src/img/logo.png rename to 9-forkify/final/dist/img/logo.png diff --git a/9-forkify/final/dist/img/test-1.jpg b/9-forkify/final/dist/img/test-1.jpg new file mode 100644 index 0000000000..a339e6e81e Binary files /dev/null and b/9-forkify/final/dist/img/test-1.jpg differ diff --git a/9-forkify/final/dist/img/test-10.jpg b/9-forkify/final/dist/img/test-10.jpg new file mode 100644 index 0000000000..9c83e0ea83 Binary files /dev/null and b/9-forkify/final/dist/img/test-10.jpg differ diff --git a/9-forkify/final/dist/img/test-2.jpg b/9-forkify/final/dist/img/test-2.jpg new file mode 100644 index 0000000000..656025359e Binary files /dev/null and b/9-forkify/final/dist/img/test-2.jpg differ diff --git a/9-forkify/final/dist/img/test-3.jpg b/9-forkify/final/dist/img/test-3.jpg new file mode 100644 index 0000000000..15f78df800 Binary files /dev/null and b/9-forkify/final/dist/img/test-3.jpg differ diff --git a/9-forkify/final/dist/img/test-4.jpg b/9-forkify/final/dist/img/test-4.jpg new file mode 100644 index 0000000000..3090b9a3f4 Binary files /dev/null and b/9-forkify/final/dist/img/test-4.jpg differ diff --git a/9-forkify/final/dist/img/test-5.jpg b/9-forkify/final/dist/img/test-5.jpg new file mode 100644 index 0000000000..35a8e7f8a9 Binary files /dev/null and b/9-forkify/final/dist/img/test-5.jpg differ diff --git a/9-forkify/final/dist/img/test-6.jpg b/9-forkify/final/dist/img/test-6.jpg new file mode 100644 index 0000000000..1f200ffaf5 Binary files /dev/null and b/9-forkify/final/dist/img/test-6.jpg differ diff --git a/9-forkify/final/dist/img/test-7.jpg b/9-forkify/final/dist/img/test-7.jpg new file mode 100644 index 0000000000..1f200ffaf5 Binary files /dev/null and b/9-forkify/final/dist/img/test-7.jpg differ diff --git a/9-forkify/final/dist/img/test-8.jpg b/9-forkify/final/dist/img/test-8.jpg new file mode 100644 index 0000000000..b63ad410a3 Binary files /dev/null and b/9-forkify/final/dist/img/test-8.jpg differ diff --git a/9-forkify/final/dist/img/test-9.jpg b/9-forkify/final/dist/img/test-9.jpg new file mode 100644 index 0000000000..b0b7ce5e88 Binary files /dev/null and b/9-forkify/final/dist/img/test-9.jpg differ diff --git a/9-forkify/final/dist/index.html b/9-forkify/final/dist/index.html new file mode 100644 index 0000000000..d567c8af65 --- /dev/null +++ b/9-forkify/final/dist/index.html @@ -0,0 +1,441 @@ + + + + + + + + + + + forkify // Search over 1,000,000 recipes + + + +
    +
    + + + +
    + + +
    +
      + +
    + +
    + +
    +
    + + + +
    + + +
    + + + + + +
    +

    My Shopping List

    + +
      + + +
    + + + +
    +
    + + + + \ No newline at end of file diff --git a/9-forkify/final/dist/js/bundle.js b/9-forkify/final/dist/js/bundle.js new file mode 100644 index 0000000000..4c1307d03c --- /dev/null +++ b/9-forkify/final/dist/js/bundle.js @@ -0,0 +1,8 @@ +!function(t){var n={};function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.r=function(t){Object.defineProperty(t,"__esModule",{value:!0})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},e.p="",e(e.s=368)}([function(t,n,e){var r=e(2),i=e(27),o=e(13),u=e(12),c=e(21),a=function(t,n,e){var s,f,l,h,p=t&a.F,v=t&a.G,d=t&a.S,g=t&a.P,y=t&a.B,m=v?r:d?r[n]||(r[n]={}):(r[n]||{}).prototype,_=v?i:i[n]||(i[n]={}),b=_.prototype||(_.prototype={});for(s in v&&(e=n),e)l=((f=!p&&m&&void 0!==m[s])?m:e)[s],h=y&&f?c(l,r):g&&"function"==typeof l?c(Function.call,l):l,m&&u(m,s,l,t&a.U),_[s]!=l&&o(_,s,h),g&&b[s]!=l&&(b[s]=l)};r.core=i,a.F=1,a.G=2,a.S=4,a.P=8,a.B=16,a.W=32,a.U=64,a.R=128,t.exports=a},function(t,n,e){var r=e(4);t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},function(t,n){var e=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=e)},function(t,n){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,n){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,n,e){var r=e(64)("wks"),i=e(41),o=e(2).Symbol,u="function"==typeof o;(t.exports=function(t){return r[t]||(r[t]=u&&o[t]||(u?o:i)("Symbol."+t))}).store=r},function(t,n,e){var r=e(24),i=Math.min;t.exports=function(t){return t>0?i(r(t),9007199254740991):0}},function(t,n,e){var r=e(1),i=e(135),o=e(26),u=Object.defineProperty;n.f=e(8)?Object.defineProperty:function(t,n,e){if(r(t),n=o(n,!0),r(e),i)try{return u(t,n,e)}catch(t){}if("get"in e||"set"in e)throw TypeError("Accessors not supported!");return"value"in e&&(t[n]=e.value),t}},function(t,n,e){t.exports=!e(3)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,n,e){var r=e(25);t.exports=function(t){return Object(r(t))}},function(t,n){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,n,e){var r=e(0),i=e(3),o=e(25),u=/"/g,c=function(t,n,e,r){var i=String(o(t)),c="<"+n;return""!==e&&(c+=" "+e+'="'+String(r).replace(u,""")+'"'),c+">"+i+""};t.exports=function(t,n){var e={};e[t]=n(c),r(r.P+r.F*i(function(){var n=""[t]('"');return n!==n.toLowerCase()||n.split('"').length>3}),"String",e)}},function(t,n,e){var r=e(2),i=e(13),o=e(14),u=e(41)("src"),c=Function.toString,a=(""+c).split("toString");e(27).inspectSource=function(t){return c.call(t)},(t.exports=function(t,n,e,c){var s="function"==typeof e;s&&(o(e,"name")||i(e,"name",n)),t[n]!==e&&(s&&(o(e,u)||i(e,u,t[n]?""+t[n]:a.join(String(n)))),t===r?t[n]=e:c?t[n]?t[n]=e:i(t,n,e):(delete t[n],i(t,n,e)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[u]||c.call(this)})},function(t,n,e){var r=e(7),i=e(42);t.exports=e(8)?function(t,n,e){return r.f(t,n,i(1,e))}:function(t,n,e){return t[n]=e,t}},function(t,n){var e={}.hasOwnProperty;t.exports=function(t,n){return e.call(t,n)}},function(t,n,e){"use strict";var r=e(100),i=e(162),o=Object.prototype.toString;function u(t){return"[object Array]"===o.call(t)}function c(t){return null!==t&&"object"==typeof t}function a(t){return"[object Function]"===o.call(t)}function s(t,n){if(null!==t&&void 0!==t)if("object"!=typeof t&&(t=[t]),u(t))for(var e=0,r=t.length;ew;w++)if((h||w in m)&&(g=_(d=m[w],w,y),t))if(e)x[w]=g;else if(g)switch(t){case 3:return!0;case 5:return d;case 6:return w;case 2:x.push(d)}else if(f)return!1;return l?-1:s||f?f:x}}},function(t,n,e){var r=e(0),i=e(27),o=e(3);t.exports=function(t,n){var e=(i.Object||{})[t]||Object[t],u={};u[t]=n(e),r(r.S+r.F*o(function(){e(1)}),"Object",u)}},function(t,n){var e=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:e)(t)}},function(t,n){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,n,e){var r=e(4);t.exports=function(t,n){if(!r(t))return t;var e,i;if(n&&"function"==typeof(e=t.toString)&&!r(i=e.call(t)))return i;if("function"==typeof(e=t.valueOf)&&!r(i=e.call(t)))return i;if(!n&&"function"==typeof(e=t.toString)&&!r(i=e.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},function(t,n){var e=t.exports={version:"2.5.3"};"number"==typeof __e&&(__e=e)},function(t,n,e){var r=e(114),i=e(0),o=e(64)("metadata"),u=o.store||(o.store=new(e(111))),c=function(t,n,e){var i=u.get(t);if(!i){if(!e)return;u.set(t,i=new r)}var o=i.get(n);if(!o){if(!e)return;i.set(n,o=new r)}return o};t.exports={store:u,map:c,has:function(t,n,e){var r=c(n,e,!1);return void 0!==r&&r.has(t)},get:function(t,n,e){var r=c(n,e,!1);return void 0===r?void 0:r.get(t)},set:function(t,n,e,r){c(e,r,!0).set(t,n)},keys:function(t,n){var e=c(t,n,!1),r=[];return e&&e.forEach(function(t,n){r.push(n)}),r},key:function(t){return void 0===t||"symbol"==typeof t?t:String(t)},exp:function(t){i(i.S,"Reflect",t)}}},function(t,n,e){"use strict";if(e(8)){var r=e(40),i=e(2),o=e(3),u=e(0),c=e(54),a=e(67),s=e(21),f=e(34),l=e(42),h=e(13),p=e(32),v=e(24),d=e(6),g=e(109),y=e(38),m=e(26),_=e(14),b=e(48),w=e(4),x=e(9),S=e(76),E=e(37),k=e(16),M=e(36).f,O=e(74),P=e(41),F=e(5),I=e(22),j=e(63),A=e(56),L=e(71),R=e(44),T=e(59),N=e(35),C=e(72),D=e(119),B=e(7),U=e(17),q=B.f,W=U.f,G=i.RangeError,V=i.TypeError,z=i.Uint8Array,H=Array.prototype,J=a.ArrayBuffer,Y=a.DataView,K=I(0),X=I(2),$=I(3),Z=I(4),Q=I(5),tt=I(6),nt=j(!0),et=j(!1),rt=L.values,it=L.keys,ot=L.entries,ut=H.lastIndexOf,ct=H.reduce,at=H.reduceRight,st=H.join,ft=H.sort,lt=H.slice,ht=H.toString,pt=H.toLocaleString,vt=F("iterator"),dt=F("toStringTag"),gt=P("typed_constructor"),yt=P("def_constructor"),mt=c.CONSTR,_t=c.TYPED,bt=c.VIEW,wt=I(1,function(t,n){return Mt(A(t,t[yt]),n)}),xt=o(function(){return 1===new z(new Uint16Array([1]).buffer)[0]}),St=!!z&&!!z.prototype.set&&o(function(){new z(1).set({})}),Et=function(t,n){var e=v(t);if(e<0||e%n)throw G("Wrong offset!");return e},kt=function(t){if(w(t)&&_t in t)return t;throw V(t+" is not a typed array!")},Mt=function(t,n){if(!(w(t)&> in t))throw V("It is not a typed array constructor!");return new t(n)},Ot=function(t,n){return Pt(A(t,t[yt]),n)},Pt=function(t,n){for(var e=0,r=n.length,i=Mt(t,r);r>e;)i[e]=n[e++];return i},Ft=function(t,n,e){q(t,n,{get:function(){return this._d[e]}})},It=function(t){var n,e,r,i,o,u,c=x(t),a=arguments.length,f=a>1?arguments[1]:void 0,l=void 0!==f,h=O(c);if(void 0!=h&&!S(h)){for(u=h.call(c),r=[],n=0;!(o=u.next()).done;n++)r.push(o.value);c=r}for(l&&a>2&&(f=s(f,arguments[2],2)),n=0,e=d(c.length),i=Mt(this,e);e>n;n++)i[n]=l?f(c[n],n):c[n];return i},jt=function(){for(var t=0,n=arguments.length,e=Mt(this,n);n>t;)e[t]=arguments[t++];return e},At=!!z&&o(function(){pt.call(new z(1))}),Lt=function(){return pt.apply(At?lt.call(kt(this)):kt(this),arguments)},Rt={copyWithin:function(t,n){return D.call(kt(this),t,n,arguments.length>2?arguments[2]:void 0)},every:function(t){return Z(kt(this),t,arguments.length>1?arguments[1]:void 0)},fill:function(t){return C.apply(kt(this),arguments)},filter:function(t){return Ot(this,X(kt(this),t,arguments.length>1?arguments[1]:void 0))},find:function(t){return Q(kt(this),t,arguments.length>1?arguments[1]:void 0)},findIndex:function(t){return tt(kt(this),t,arguments.length>1?arguments[1]:void 0)},forEach:function(t){K(kt(this),t,arguments.length>1?arguments[1]:void 0)},indexOf:function(t){return et(kt(this),t,arguments.length>1?arguments[1]:void 0)},includes:function(t){return nt(kt(this),t,arguments.length>1?arguments[1]:void 0)},join:function(t){return st.apply(kt(this),arguments)},lastIndexOf:function(t){return ut.apply(kt(this),arguments)},map:function(t){return wt(kt(this),t,arguments.length>1?arguments[1]:void 0)},reduce:function(t){return ct.apply(kt(this),arguments)},reduceRight:function(t){return at.apply(kt(this),arguments)},reverse:function(){for(var t,n=kt(this).length,e=Math.floor(n/2),r=0;r1?arguments[1]:void 0)},sort:function(t){return ft.call(kt(this),t)},subarray:function(t,n){var e=kt(this),r=e.length,i=y(t,r);return new(A(e,e[yt]))(e.buffer,e.byteOffset+i*e.BYTES_PER_ELEMENT,d((void 0===n?r:y(n,r))-i))}},Tt=function(t,n){return Ot(this,lt.call(kt(this),t,n))},Nt=function(t){kt(this);var n=Et(arguments[1],1),e=this.length,r=x(t),i=d(r.length),o=0;if(i+n>e)throw G("Wrong length!");for(;o255?255:255&r),i.v[p](e*n+i.o,r,xt)}(this,e,t)},enumerable:!0})};_?(v=e(function(t,e,r,i){f(t,v,s,"_d");var o,u,c,a,l=0,p=0;if(w(e)){if(!(e instanceof J||"ArrayBuffer"==(a=b(e))||"SharedArrayBuffer"==a))return _t in e?Pt(v,e):It.call(v,e);o=e,p=Et(r,n);var y=e.byteLength;if(void 0===i){if(y%n)throw G("Wrong length!");if((u=y-p)<0)throw G("Wrong length!")}else if((u=d(i)*n)+p>y)throw G("Wrong length!");c=u/n}else c=g(e),o=new J(u=c*n);for(h(t,"_d",{b:o,o:p,l:u,e:c,v:new Y(o)});l_;_++)if((g=n?m(u(v=t[_])[0],v[1]):m(t[_]))===s||g===f)return g}else for(d=y.call(t);!(v=d.next()).done;)if((g=i(d,m,v.value,n))===s||g===f)return g}).BREAK=s,n.RETURN=f},function(t,n){t.exports=function(t,n,e,r){if(!(t instanceof n)||void 0!==r&&r in t)throw TypeError(e+": incorrect invocation!");return t}},function(t,n,e){"use strict";var r=e(2),i=e(7),o=e(8),u=e(5)("species");t.exports=function(t){var n=r[t];o&&n&&!n[u]&&i.f(n,u,{configurable:!0,get:function(){return this}})}},function(t,n,e){var r=e(133),i=e(89).concat("length","prototype");n.f=Object.getOwnPropertyNames||function(t){return r(t,i)}},function(t,n,e){var r=e(1),i=e(132),o=e(89),u=e(90)("IE_PROTO"),c=function(){},a=function(){var t,n=e(92)("iframe"),r=o.length;for(n.style.display="none",e(88).appendChild(n),n.src="javascript:",(t=n.contentWindow.document).open(),t.write("