From e095dd45ef026a237e883a48ddce4a6cef9f08f0 Mon Sep 17 00:00:00 2001 From: Jim Cramer Date: Sun, 4 Aug 2019 17:31:12 +0200 Subject: [PATCH 01/77] Clarify week3 MAKEME instructions --- Week3/MAKEME.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Week3/MAKEME.md b/Week3/MAKEME.md index febcfdb60..dcdb081fe 100644 --- a/Week3/MAKEME.md +++ b/Week3/MAKEME.md @@ -27,7 +27,7 @@ _Deadline Monday_ The homework for week 3 will build on the work you did in week 2. You will create a new branch based on the `week2` branch. 1. Make sure that you committed all changes in the week 2 version of your homework. -2. Create a new `week3` branch: +2. With the `week2` branch checked out, create a new `week3` branch: ``` git checkout -b week3 @@ -35,12 +35,14 @@ The homework for week 3 will build on the work you did in week 2. You will creat ### 2.2 Assignment -This week you will work with all JavaScript files in the `src` folder. The assignment consists of two parts: +The assignment consists of two parts. + +In the first part you will modify the 'promise' homework in the from week 2 (in the `homework` folder): 1. Replace `XMLHttpRequest` with the `fetch` API. 2. Refactor all `.then()` and `.catch()` methods with `async`/`await` and `try...catch`. -3. Make your app ARIA-compliant (see below). -4. Refactor your application to use ES6 classes. + +In the second part you will 'refactor' your application to use ES6 classes. For this, you need to modify the files in the `homework-classes` folder. #### 2.2.1 Replace XMLHttpRequest with fetch From 5b7edc98f81b730ce2c7370d279c30ebe0106ac9 Mon Sep 17 00:00:00 2001 From: Noer Paanakker Date: Wed, 7 Aug 2019 11:32:49 +0200 Subject: [PATCH 02/77] added some stuff about apis in week 1/2 --- README.md | 50 +++++++++++++++++++------ Week1/LESSONPLAN.md | 0 Week1/MAKEME.md | 24 ++++++------ Week1/README.md | 64 ++++++++++++++++++++++---------- Week2/LESSONPLAN.md | 0 Week2/MAKEME.md | 19 ++++++++++ Week2/README.md | 17 ++++++++- Week3/LESSONPLAN.md | 0 Week3/MAKEME.md | 82 +++++++++-------------------------------- assets/javascript3.png | Bin 0 -> 98013 bytes 10 files changed, 150 insertions(+), 106 deletions(-) create mode 100644 Week1/LESSONPLAN.md create mode 100644 Week2/LESSONPLAN.md create mode 100644 Week3/LESSONPLAN.md create mode 100644 assets/javascript3.png diff --git a/README.md b/README.md index fa97dad57..9a411282e 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,51 @@ > Please help us improve and share your feedback! If you find better tutorials -or links, please share them by [opening a pull request](https://github.com/HackYourFuture/JavaScript3/pulls). +> or links, please share them by [opening a pull request](https://github.com/HackYourFuture/JavaScript3/pulls). -# HackYourFuture JavaScript 3 +# Module #4 - JavaScript 3: Advanced JavaScript and working with APIs (Frontend) -Here you can find course content and homework for the JavaScript3 modules +![JavaScript3](./assets/javascript3.png) -|Week|Topic|Read|Homework| -|----|-----|----|--------| -|1.|• Structure for a basic SPA (Single Page Application)
• [XMLHttpRequests](../../../fundamentals/blob/master/fundamentals/XMLHttpRequest.md)
• API calls|[Reading Week 1](/Week1/README.md)|[Homework Week 1](/Week1/MAKEME.md)| -|2.|• [Event Loop (order of execution)](../../../fundamentals/blob/master/fundamentals/event_loop.md)
• [Promises](../../../fundamentals/blob/master/fundamentals/promises.md)|[Reading Week 2](/Week2/README.md)|[Homework Week 2](/Week2/MAKEME.md)| -|3.|• [try...catch](../../../fundamentals/blob/master/fundamentals/try_catch.md)
• [async/await](../../../fundamentals/blob/master/fundamentals/async_await.md)
• [The `this` keyword](../../../fundamentals/blob/master/fundamentals/this.md)
• call, apply, bind
• [Object Oriented Programming and ES6 Classes](../../../fundamentals/blob/master/fundamentals/oop_classes.md)|[Reading Week 3](/Week3/README.md)|[Homework Week 3](/Week3/MAKEME.md)| +## Learning goals -__Kind note:__ +In order to successfully complete this module you will need to master the following: -We expect you to __always__ come prepared to the class on Sunday. +- + +## How to use this repository + +This repository consists of 3 essential parts: + +1. `Reading materials`: this document contains all the required theory you need to know _**while**_ you're coding. It's meant as both study material and as a reference to understand what you're doing. +2. `Homework`: this document contains the instructions for each week's homework. +3. `Lesson Plans`: this part is meant for teachers as a reference. However, as a student don't be shy to take a look at it as well! + +After your first class you should start off with checking the `reading materials` for that week. At the beginning that would be the [Week 1 Reading](/Week1/README.md). Study all the concepts and try to get the gist of everything. After, you can get started with the `homework` for that week. + +If you have any questions or if something is not entirely clear ¯\\\_(ツ)\_/¯, please ask/comment on Slack! + +Topics: + +1. API calls + - XMLHttpRequest + - Fetch + - jQuery + +> In practice, the terms `API call`, `network request` and `network call` are all used to refer to the same thing: sending a request from the client to some kind of server in order to get data. + +| Week | Topic | Reading Materials | Homework | Lesson Plan | +| ---- | ----------------------------------------------------- | ------------------------------ | ------------------------------- | -------------------------------------- | +| 1. | Application Programming Interface (API), AJAX, jQuery | [Reading W1](/Week1/README.md) | [Homework W1](/Week1/MAKEME.md) | [Lesson Plan W1](/Week1/LESSONPLAN.md) | +| 2. | Fetch API, Promises, Async/await, Try...Catch | [Reading W2](/Week2/README.md) | [Homework W2](/Week2/MAKEME.md) | [Lesson Plan W1](/Week1/LESSONPLAN.md) | +| 3. | ES6 Classes, 'this' keyword, Arrow functions | [Reading W3](/Week3/README.md) | [Homework W3](/Week3/MAKEME.md) | [Lesson Plan W1](/Week1/LESSONPLAN.md) | + +**Kind note:** + +We expect you to **always** come prepared to the class on Sunday. ### Overall + A good understanding of all the above mentioned topics. Want to check your Knowledge? Go through the [JavaScript Fundamentals README](../../../fundamentals/blob/master/README.md) and research/ ask for help (Slack!) with the concepts that are not entirely clear. -*The HackYourFuture curriculum is subject to CC BY copyright. This means you can freely use our materials, but just make sure to give us credit for it :)* +_The HackYourFuture curriculum is subject to CC BY copyright. This means you can freely use our materials, but just make sure to give us credit for it :)_ Creative Commons License
This work is licensed under a Creative Commons Attribution 4.0 International License. diff --git a/Week1/LESSONPLAN.md b/Week1/LESSONPLAN.md new file mode 100644 index 000000000..e69de29bb diff --git a/Week1/MAKEME.md b/Week1/MAKEME.md index eed3987c8..68ced8847 100644 --- a/Week1/MAKEME.md +++ b/Week1/MAKEME.md @@ -1,19 +1,21 @@ -# Homework Week 1 +# Homework JavaScript3 Week 1 -``` -Topics discussed this week: -• Structure for a basic SPA -• XMLHttpRequests -• API calls -``` +## **Todo list** + +1. Practice the concepts +2. JavaScript exercises +3. Code along +4. PROJECT: Hack Your Repo I + +## **1. Practice the concepts** -## Step 1: Single Page Application :sweat_drops: +- [Introduction to jQuery](https://www.codecademy.com/learn/learn-jquery) -**_Deadline Thursday_** +## **2. JavaScript exercises** -_This homework is more extensive and challenging than previous homework! Please read the instructions below carefully and follow them with great attention to detail. Start this homework as soon as you can and allow time for discussion and questions (slack!)._ +## **3. Code along** -### 1.1 Introduction +## **4. PROJECT: Hack Your Repo I** > In this assignment you will built upon some existing code that is already pre-written by your teachers. Your homework consist of writing the code to make the application work as requested per week. diff --git a/Week1/README.md b/Week1/README.md index 6756bb92d..502c1034a 100644 --- a/Week1/README.md +++ b/Week1/README.md @@ -1,34 +1,60 @@ -# Reading material for the first lecture: +# Reading Material JavaScript3 Week 1 -``` -In week one we will discuss the following topics: -• Structure for a basic SPA (Single Page Application) -• XMLHttpRequests -• API calls -``` +## Agenda -Here are resources that we like you to read as a preparation for the first lecture: +These are the topics for week 1: -### Fundamentals +1. Application Programming Interface (API) + - Public/private APIs + - Connecting with APIs +2. Asynchronous JavaScript and XML (AJAX) + - XMLHttpRequest (XHR) + - What is JSON? +3. jQuery + - What's a module/package? + - What's a library? + - Using jQuery to make AJAX requests -- [XMLHttpRequest](../../../../fundamentals/blob/master/fundamentals/XMLHttpRequest.md) +## 1. Application Programming Interface (API) + +- [What are APIs - series](https://www.youtube.com/watch?v=cpRcK4GS068&list=PLcgRuP1JhcBP8Kh0MC53GH_pxqfOhTVLa) + +### Public/private APIs + +There are 2 different types of APIs: **public** and **private** APIs. + +An API is **public** when software companies publish parts of their software to be freely used by developers from the outside world. If you were to integrate the Facebook API as a login sytem in your application, you would be using their API as a public API. + +Conversely, there are also **private** APIs: software companies that grant access to parts of their backend applications to internal developers only, in order to develop new services to be used either internally or for the outside world. -### APIs +In reality, there are way more private than public APIs. This is because it's usually in the company's best interest to keep their code base hidden from the public eye: it would be like giving your secret recipe away for nothing. -- Read about APIS: https://www.programmableweb.com/api-university/what-are-apis-and-how-do-they-work +Understand this fundamental truth: programming is a means to serving a business end. In this course you're learning how to program, to make nice-looking functional applications. However, this is always done within a business context. This is to say: does this software lead to making more money? -### XMLHttpRequests +- [The Business Impact of Private, Partner and Public APIs](https://www.youtube.com/watch?v=Bk50AYGvs-g) +### Connecting with APIs + +A big part of what applications do is **moving data from one place to another**. Let's say you are on the HackYourFuture website and feel like donating some money. First of all, that's very nice of you! You head out to the website and click on the donate button. You type in the amount and click on "donate"! You'll notice you immediately get redirected to a different website, namely Mollie.com. How did Mollie know to do this? + +It's because the HackYourFuture website sends an **API call** to Mollie. The request basically says "Hey Mollie, some user from the HackYourFuture site wants to make a digital payment, can you handle that?". As a response Mollie answers "Of course, send the user to this specific URL and I'll take it from there!". + +> Anytime a request to an API is made this is called an `API call`. However, in practice people use different terms for the same thing. Synonyms for `API call` are `API request`, `Network call/request` or`HTTP call/request`. Which do you prefer? + +- [Working with APIs in JavaScript](https://www.youtube.com/watch?v=ecT42O6I_WI) - [Making HTTP Requests in JavaScript](https://www.kirupa.com/html5/making_http_requests_js.htm) -### Clean Code +## 2. Asynchronous JavaScript and XML (AJAX) + +### XMLHttpRequests (XHR) -- [How to write clean code? Lessons learnt from “The Clean Code” — Robert C. Martin](https://medium.com/mindorks/how-to-write-clean-code-lessons-learnt-from-the-clean-code-robert-c-martin-9ffc7aef870c). +- [XMLHttpRequest](../../../../fundamentals/blob/master/fundamentals/XMLHttpRequest.md) +- [AJAX Crash Course](https://www.youtube.com/watch?v=82hnvUYY6QA) - > Note that this article includes some code examples writte in Java, but the same principles can equally be applied to JavaScript. +## 3. jQuery -- [Clean Code concepts adapted for JavaScript](https://github.com/ryanmcdermott/clean-code-javascript) +### What's a module/package? -### Handing in homework using GitHub pull requests +### What's a library? -- [Handing in homework](https://github.com/HackYourFuture/fundamentals/blob/master/fundamentals/homework_pr.md) +### Using jQuery to make AJAX requests diff --git a/Week2/LESSONPLAN.md b/Week2/LESSONPLAN.md new file mode 100644 index 000000000..e69de29bb diff --git a/Week2/MAKEME.md b/Week2/MAKEME.md index e35660898..afeab60d7 100644 --- a/Week2/MAKEME.md +++ b/Week2/MAKEME.md @@ -1,3 +1,22 @@ +# Homework JavaScript3 Week 2 + +## **Todo list** + +1. Practice the concepts +2. JavaScript exercises +3. Code along +4. PROJECT: Hack Your Repo II + +## **1. Practice the concepts** + +## **2. JavaScript exercises** + +## **3. Code along** + +- [Build a Weather App with Vanilla JavaScript Tutorial](https://www.youtube.com/watch?v=wPElVpR1rwA) + +## **4. PROJECT: Hack Your Repo II** + # Homework Week 2 ``` diff --git a/Week2/README.md b/Week2/README.md index e55018f74..eadbfd77e 100644 --- a/Week2/README.md +++ b/Week2/README.md @@ -1,3 +1,19 @@ +## 1. Promises + +By now you should've had some practice using callbacks. To reiterate, we use callbacks **as a way to create asynchronicity** in our application: we want to + +- [Callback Hell](http://callbackhell.com/) + +- [Async JS Crash Course](https://www.youtube.com/watch?v=PoRJizFvM7s) + +## 2. Fetch API + +Last week you learned about making API calls. For repetition's sake + +- [fetch()](https://www.youtube.com/watch?v=tc8DU14qX6I) + +## 3. + # Reading material for the second lecture: ``` @@ -20,5 +36,4 @@ Here are resources that we like you to read as a preparation for the second lect - [Event Loop](../../../../fundamentals/blob/master/fundamentals/event_loop.md) - [Promises](../../../../fundamentals/blob/master/fundamentals/promises.md) - _Please go through the material and come to class prepared!_ diff --git a/Week3/LESSONPLAN.md b/Week3/LESSONPLAN.md new file mode 100644 index 000000000..e69de29bb diff --git a/Week3/MAKEME.md b/Week3/MAKEME.md index ab57382f2..d2919e6fe 100644 --- a/Week3/MAKEME.md +++ b/Week3/MAKEME.md @@ -1,3 +1,20 @@ +# Homework JavaScript3 Week 3 + +## **Todo list** + +1. Practice the concepts +2. JavaScript exercises +3. Code along +4. PROJECT: Hack Your Repo III + +## **1. Practice the concepts** + +## **2. JavaScript exercises** + +## **3. Code along** + +## **4. PROJECT: Hack Your Repo III** + # Homework Week 3 ``` @@ -38,8 +55,7 @@ The homework for week 3 will build on the work you did in week 2. You will creat This week you will work with all JavaScript files in the `src` folder. The assignment consists of two parts: 1. Refactor all `.then()` and `.catch()` methods with `async`/`await` and `try...catch`. -2. Make your app ARIA-compliant (see below). -3. Refactor your application to use ES6 classes. +2. Refactor your application to use ES6 classes. #### 2.2.1 async/await @@ -71,65 +87,3 @@ _Read:_ - HYF fundamental: [ES6 Classes](https://github.com/HackYourFuture/fundamentals/blob/master/fundamentals/oop_classes.md#es6-classes) - More on ES6 classes: [ES6 Classes in Depth](https://ponyfoo.com/articles/es6-classes-in-depth) - -#### 2.2.3 ARIA-compliance (BONUS) - -Please review the material from the HTML/CSS module: [Get familiar with Accessible Rich Internet Applications (ARIA)](https://github.com/HackYourFuture/HTML-CSS/tree/master/Week1#get-familiar-with-accessible-rich-internet-applications-aria). - -For the GitHub application ARIA-compliance means that the Contributors list should either be a native HTML list (i.e. using `ul` and `li` elements) or otherwise marked with an appropriate ARIA **role**. Furthermore, a user should be able to navigate through all interactive elements using the keyboard (e.g., using the **Tab** key). Pressing **Enter** on such an element should be equivalent to clicking the mouse. - -#### 2.2.4 Handing in your homework - -If necessary, review the instructions how to [Hand in homework](https://github.com/HackYourFuture/fundamentals/blob/master/fundamentals/homework_pr.md) using GitHub pull request. - -To test whether your code will be accepted when you submit your homework as a pull request you need to ensure that it does not contain ESLinr errors. Open a terminal window in VSCode and type the following command: - -``` -npm test -``` - -If any errors or warnings are reported by this command you need to fix them before submitting a pull request. - -In addition, check for the following: - -- Have you removed all commented out code (should never be present in a PR)? -- Do the variable, function and argument names you created follow the [Naming Conventions](../../../../fundamentals/blob/master/fundamentals/naming_conventions.md)? -- Is your code well-formatted (see [Code Formatting](../../../../fundamentals/blob/master/fundamentals/code_formatting.md))? - -If the answer is 'yes' to the preceding questions you are ready to follow these instructions: - -1. Push your `week3` branch to GitHub: - - ``` - git push -u origin week3 - ``` - -2. Create a pull request for your `week3` branch. - -## Step 3: Read before next lecture - -_Deadline Sunday morning_ - -Go trough the reading material in the [README.md](https://github.com/HackYourFuture/Node.js) of the Node repository to prepare for your next class. - -## Alternative _BONUS_ : Code Kata Race - -If you haven't already join our clan: "Hack Your Future" in codewars - -Solve the following problems: - -- [Problem 1](https://www.codewars.com/kata/keep-up-the-hoop) -- [Problem 2](https://www.codewars.com/kata/find-the-first-non-consecutive-number) -- [Problem 3](https://www.codewars.com/kata/negation-of-a-value) -- Some more [Homework](https://www.codewars.com/collections/hyf-homework-1) - -_Hints_ - -- Hint for Q1: split your code into two parts, one part for the case that one of the two strings has an extra letter at the start or the end but is otherwise identical & one part for the case that the strings are the same length but one character is different in one of the strings -- Also for Q1 this function on strings might be useful: [JavaScript String slice() method](https://www.w3schools.com/jsref/jsref_slice_string.asp) -- Also potentially useful: [JavaScript String charAt() Method](https://www.w3schools.com/jsref/jsref_charat.asp) -- [Hint for Q2](https://www.w3schools.com/jsref/jsref_sort.asp) Also there are no sample tests, you need to use submit - -Remember the person with the most kata points gets a prize from Gijs (and you can do exercises on this website without us assigning them - anything kyu 7 or kyu 8 you can try to do - kyu 6 or lower is probably too hard) --> - --[MORE BONUS](https://www.codewars.com/collections/hyf-homework-1-bonus-credit) :collision: diff --git a/assets/javascript3.png b/assets/javascript3.png new file mode 100644 index 0000000000000000000000000000000000000000..fe3fc019ace72fbc2a297820894b472165843a0e GIT binary patch literal 98013 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�lf2Uj6#) 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 Date: Wed, 7 Aug 2019 17:56:06 +0200 Subject: [PATCH 03/77] wrote more content for week 1, added tutorials for code along --- Week1/MAKEME.md | 7 ++++++ Week1/README.md | 28 +++++++++++++++++++++-- Week2/MAKEME.md | 61 +------------------------------------------------ Week3/MAKEME.md | 47 ++----------------------------------- 4 files changed, 36 insertions(+), 107 deletions(-) diff --git a/Week1/MAKEME.md b/Week1/MAKEME.md index 68ced8847..04c67c576 100644 --- a/Week1/MAKEME.md +++ b/Week1/MAKEME.md @@ -15,6 +15,13 @@ ## **3. Code along** +Now that you've learned about APIs and how to connect with them, let's apply it in the context of a complete application. + +In + +- [Vanilla JS Numbers Facts App - AJAX & Fetch](https://www.youtube.com/watch?v=tUE2Nic21BA) +- [Build a JavaScript & jQuery Movie Info App](https://www.youtube.com/watch?v=YsPqjYGauns) + ## **4. PROJECT: Hack Your Repo I** > In this assignment you will built upon some existing code that is already pre-written by your teachers. Your homework consist of writing the code to make the application work as requested per week. diff --git a/Week1/README.md b/Week1/README.md index 502c1034a..ead15f93a 100644 --- a/Week1/README.md +++ b/Week1/README.md @@ -11,12 +11,16 @@ These are the topics for week 1: - XMLHttpRequest (XHR) - What is JSON? 3. jQuery - - What's a module/package? + - What's a module? - What's a library? - Using jQuery to make AJAX requests ## 1. Application Programming Interface (API) +An Application Programming Interface, or API for short, is + +You can think of APIs in the following manner: Imagine you want to rent out a room in your house through Airbnb. + - [What are APIs - series](https://www.youtube.com/watch?v=cpRcK4GS068&list=PLcgRuP1JhcBP8Kh0MC53GH_pxqfOhTVLa) ### Public/private APIs @@ -41,11 +45,15 @@ It's because the HackYourFuture website sends an **API call** to Mollie. The req > Anytime a request to an API is made this is called an `API call`. However, in practice people use different terms for the same thing. Synonyms for `API call` are `API request`, `Network call/request` or`HTTP call/request`. Which do you prefer? +For further study of how to make API calls, check out the following resources: + - [Working with APIs in JavaScript](https://www.youtube.com/watch?v=ecT42O6I_WI) - [Making HTTP Requests in JavaScript](https://www.kirupa.com/html5/making_http_requests_js.htm) ## 2. Asynchronous JavaScript and XML (AJAX) +AJAX is the idea that data can be loaded into a webpage without refreshing the entire website. + ### XMLHttpRequests (XHR) - [XMLHttpRequest](../../../../fundamentals/blob/master/fundamentals/XMLHttpRequest.md) @@ -53,8 +61,24 @@ It's because the HackYourFuture website sends an **API call** to Mollie. The req ## 3. jQuery -### What's a module/package? +### What's a module? + +A `module` is a part of a program that contains one or more functionalities. For example, a single function that has only 1 job could be considered a module. When developing applications you'll always be writing multiple functionalities in order for your software to work as expected. These can be written all in one file, and it would fine. The browser/operating system would be able to interpret and execute it anyway. But for you, the human, it's very hard to keep overview of what is happening at what level of the application. + +In order to keep a better overview, we can choose to **modularize** our application: split it up into smaller parts that, in theory, all work independently. + +However, creating better overview is not the only reason. Among other reasons, modules make a developer's job easy by: + +- Allowing the them to focus on only one area of the functionality of the software application +- Isolating individual blocks of code, in case anything breaks +- Encouraging the developer to write code in a way that makes it reusable + +For more information about this, go through the following: + +- [JavaScript Modules: From IIFEs to CommonJS to ES6 Modules](https://www.youtube.com/watch?v=qJWALEoGge4) ### What's a library? ### Using jQuery to make AJAX requests + +One of the most well-known and often used libraries in JavaScript is called `jQuery`. It's a library that was designed to make DOM manipulation, as well as event handling, CSS animation and AJAX operations much easier to perform. diff --git a/Week2/MAKEME.md b/Week2/MAKEME.md index afeab60d7..89f9ea06c 100644 --- a/Week2/MAKEME.md +++ b/Week2/MAKEME.md @@ -17,37 +17,6 @@ ## **4. PROJECT: Hack Your Repo II** -# Homework Week 2 - -``` -Topics discussed this week: -• Async vs Sync -• Event Loop (order of execution) -• Promises -``` - -## Step 1: Read - -- Read this article on scopes & closures: [explaining-javascript-scope-and-closures](https://robertnyman.com/2008/10/09/explaining-javascript-scope-and-closures/) - -- If you are still not completely clear on promises, here are some additional resources :ring: - - - [Google's post about Promises](https://developers.google.com/web/fundamentals/getting-started/primers/promises) - - [A nice article from David Walsh](https://davidwalsh.name/promises) - - [A real life example](https://github.com/mdn/js-examples/blob/master/promises-test/index.html) - - [stackoverflow](http://stackoverflow.com/questions/13343340/calling-an-asynchronous-function-within-a-for-loop-in-javascript) - - YouTube: [promises](https://www.youtube.com/watch?v=WBupia9oidU) - -## Step 2: Implement requested PR changes - -- Fix Requested Changes (if any) on the Pull Request. - -## Step 3: Convert callbacks to promises - -**_Deadline Thursday_** - -### 3.1 Preparation - The homework for week 2 will build on the work you did in week 1. You will create a new branch based on the `week1` branch. 1. Make sure that you committed all changes in the week 1 version of your homework. @@ -61,31 +30,10 @@ The homework for week 2 will build on the work you did in week 1. You will creat You will continue to work on the files `index.js` and (possibly) `style.css`. -- Complete your GitHub app code from the previous week, if needed, to meet the requirements from that week's assignment. - Replace all asynchronous callbacks (e.g. as used with XMLHttpRequest) by ES6 promises. - Beautify your app's styling. - If not yet completed in week 1, make your app responsive (use CSS media queries and [Flexbox](https://css-tricks.com/snippets/css/a-guide-to-flexbox/)). -### 3.3 Handing in your homework - -If necessary, review the instructions how to [Hand in homework](https://github.com/HackYourFuture/fundamentals/blob/master/fundamentals/homework_pr.md) using GitHub pull request. - -To test whether your code will be accepted when you submit your homework as a pull request you need to ensure that it does not contain ESLinr errors. Open a terminal window in VSCode and type the following command: - -``` -npm test -``` - -If any errors or warnings are reported by this command you need to fix them before submitting a pull request. - -In addition, check for the following: - -- Have you removed all commented out code (should never be present in a PR)? -- Do the variable, function and argument names you created follow the [Naming Conventions](../../../../fundamentals/blob/master/fundamentals/naming_conventions.md)? -- Is your code well-formatted (see [Code Formatting](../../../../fundamentals/blob/master/fundamentals/code_formatting.md))? - -If the answer is 'yes' to the preceding questions you are ready to follow these instructions: - 1. Push your `week2` branch to GitHub: ``` @@ -94,11 +42,4 @@ If the answer is 'yes' to the preceding questions you are ready to follow these 2. Create a pull request for your `week2` branch. -Note: - -1. Please remove all redundant, commented-out code and console.log's from your files before pushing your homework as finished. There is no need for your mentors to review this stuff. -2. Please make sure your code is well-formatted and follows the recommended naming conventions. - -## Step 4: Read before next lecture - -Go through the reading material in the [README.md](../Week3/README.md) to prepare for your next class. +> Note: Please remove all redundant, commented-out code and console.log's from your files before pushing your homework as finished. There is no need for your mentors to review this stuff. Also, please make sure your code is well-formatted and follows the recommended naming conventions. diff --git a/Week3/MAKEME.md b/Week3/MAKEME.md index d2919e6fe..d75823d5a 100644 --- a/Week3/MAKEME.md +++ b/Week3/MAKEME.md @@ -13,58 +13,15 @@ ## **3. Code along** -## **4. PROJECT: Hack Your Repo III** - -# Homework Week 3 - -``` -Topics discussed this week: -• Object Oriented Programming and ES6 Classes -• The this keyword -• call, apply, bind -``` - -## Step 1: Fix requested changes - -_Deadline Monday_ - -- Fix Requested Changes (if any) on the Pull Request. - -## Step 2 - -**_Deadline Thursday_** - -### 2.1 Preparation - -**Read the fundamental pages on:** +- [YouTube API Project with Authentication](https://www.youtube.com/watch?v=r-yxNNO1EI8) -- [try...catch](../../../../fundamentals/blob/master/fundamentals/try_catch.md) -- [async/await](../../../../fundamentals/blob/master/fundamentals/async_await.md) - -The homework for week 3 will build on the work you did in week 2. You will create a new branch based on the `week2` branch. - -1. Make sure that you committed all changes in the week 2 version of your homework. -2. Create a new `week3` branch: - - ``` - git checkout -b week3 - ``` - -### 2.2 Assignment +## **4. PROJECT: Hack Your Repo III** This week you will work with all JavaScript files in the `src` folder. The assignment consists of two parts: 1. Refactor all `.then()` and `.catch()` methods with `async`/`await` and `try...catch`. 2. Refactor your application to use ES6 classes. -#### 2.2.1 async/await - -**Instructions:** - -1. Refactor all `.then()` and `.catch()` methods with `async`/`await` and `try...catch`. - -2. Make sure that your error handling code still works. See the week2 MAKEME on how to force an error response from GitHub. - #### 2.2.2 ES6 Classes **_Deadline Saturday_** From 637344b5016b42ecacc5fb43939a240762eebbed Mon Sep 17 00:00:00 2001 From: Noer Paanakker Date: Tue, 13 Aug 2019 17:32:06 +0200 Subject: [PATCH 04/77] added content about libraries --- Week1/README.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/Week1/README.md b/Week1/README.md index ead15f93a..c536a4d15 100644 --- a/Week1/README.md +++ b/Week1/README.md @@ -52,7 +52,7 @@ For further study of how to make API calls, check out the following resources: ## 2. Asynchronous JavaScript and XML (AJAX) -AJAX is the idea that data can be loaded into a webpage without refreshing the entire website. +AJAX is the idea that data can be loaded into a webpage without refreshing the entire website. The term is a ### XMLHttpRequests (XHR) @@ -69,7 +69,7 @@ In order to keep a better overview, we can choose to **modularize** our applicat However, creating better overview is not the only reason. Among other reasons, modules make a developer's job easy by: -- Allowing the them to focus on only one area of the functionality of the software application +- Allowing them to focus on only one area of the functionality of the software application - Isolating individual blocks of code, in case anything breaks - Encouraging the developer to write code in a way that makes it reusable @@ -79,6 +79,16 @@ For more information about this, go through the following: ### What's a library? +If you've ever written code you know how easy it is to duplicate it: you just copy and paste it. + +Modules are small blocks of code that introduce a . If you were to add more code and the code base could really solve a particular problem? + +A `library` is a set of code that a developer (or several developers) has written in order to solve a specific problem within an application. This could be, for example, how to easier select items from the DOM, how to handle [data validation](https://www.techopedia.com/definition/10283/data-validation) or how to more easily create a [Single Page Application](https://en.wikipedia.org/wiki/Single-page_application). + +At it's most fundamental level it means that others have written functions and other logical processes to make development quicker and easier. If they have published their code, through [npmjs.com](https://www.npmjs.com/) for example, you can legally make use of it in your own code. Almost all applications out there, no matter what language they're written in, contain at least a couple of libraries. + ### Using jQuery to make AJAX requests One of the most well-known and often used libraries in JavaScript is called `jQuery`. It's a library that was designed to make DOM manipulation, as well as event handling, CSS animation and AJAX operations much easier to perform. + +- [jQuery Crash Course Playlist](https://www.youtube.com/playlist?list=PLillGF-RfqbYJVXBgZ_nA7FTAAEpp_IAc) From 94bef2772a3b7759ed9813ad34b641fd5dac7e41 Mon Sep 17 00:00:00 2001 From: Jim Cramer Date: Sun, 18 Aug 2019 19:57:47 +0200 Subject: [PATCH 05/77] Prepare for class 23 (WIP) --- .eslintrc.json | 2 +- .vscode/extensions.json | 10 + .vscode/settings.json | 3 +- Week1/MAKEME.md | 73 +- Week1/assets/hyf-github-error.png | Bin 10721 -> 10721 bytes Week1/assets/hyf-github.png | Bin 71234 -> 71234 bytes Week2/MAKEME.md | 84 ++- Week2/assets/week2.png | Bin 0 -> 51788 bytes Week3/MAKEME.md | 52 +- homework-classes/App.js | 95 +-- homework-classes/Contributor.js | 19 - homework-classes/Model.js | 50 ++ homework-classes/Observer.js | 11 + homework-classes/Repository.js | 33 - homework-classes/Subject.js | 23 + homework-classes/Util.js | 35 - homework-classes/View.js | 103 +++ homework-classes/hyf.png | Bin 6971 -> 9116 bytes homework-classes/index.html | 13 +- homework-classes/style.css | 134 +++- homework/hyf.png | Bin 6971 -> 9116 bytes homework/index.js | 20 +- package-lock.json | 1148 +++++++++++------------------ package.json | 17 +- prettier.config.js | 1 - 25 files changed, 934 insertions(+), 992 deletions(-) create mode 100644 .vscode/extensions.json create mode 100644 Week2/assets/week2.png delete mode 100644 homework-classes/Contributor.js create mode 100644 homework-classes/Model.js create mode 100644 homework-classes/Observer.js delete mode 100644 homework-classes/Repository.js create mode 100644 homework-classes/Subject.js delete mode 100644 homework-classes/Util.js create mode 100644 homework-classes/View.js diff --git a/.eslintrc.json b/.eslintrc.json index 53642f8ce..5a7dad200 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,5 +1,5 @@ { - "extends": ["airbnb", "prettier"], + "extends": ["airbnb-base", "prettier"], "plugins": ["prettier"], "env": { "browser": true, diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 000000000..469f36b11 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,10 @@ +{ + "recommendations": [ + "CoenraadS.bracket-pair-colorizer", + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode", + "ritwickdey.LiveServer", + "streetsidesoftware.code-spell-checker", + "techer.open-in-browser" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json index f9ecd22b9..4678924cf 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -6,6 +6,7 @@ "editor.tabSize": 2, "cSpell.words": [ "networkidle", - "tabindex" + "tabindex", + "whiteframe" ] } \ No newline at end of file diff --git a/Week1/MAKEME.md b/Week1/MAKEME.md index c09be166f..40c09779b 100644 --- a/Week1/MAKEME.md +++ b/Week1/MAKEME.md @@ -19,14 +19,12 @@ _This homework is more extensive and challenging than previous homework! Please You are going to write a _Single Page Application_ (SPA) that uses the [GitHub API](https://developer.github.com/guides/getting-started/). -This application should display information about the available [HYF GitHub repositories](https://github.com/hackyourfuture). The functionalities we would like to see in your application are as follows: +This application should display information about the available [HYF GitHub repositories](https://github.com/hackyourfuture). The functionalities we would like to see in your application in the first week are as follows: -- The user should be able to select a repository from a list of available repositories. -- The application should display high-level information about the selected repository and show a list of its contributors. -- When clicking on the name of the selected repository the GitHub page for the corresponding repository should be opened in a new browser tab. -- When clicking on a contributor, the GitHub page for the contributor should be opened in a new browser tab. +- The application should fetch repository information for the HYF GitHub account and display summary information for each repository. +- This list of repositories should be sorted alphabetically by repository name. -Figure 1 below shows an example of what your application could look like. Note that this is just an example. If you find it boring or unimaginative, please improve on it! On the other hand, a simpler version is OK too, so long as you implement the expected functionality. +Figure 1 below shows an example of what your application could look like. ![UI Example](./assets/hyf-github.png) @@ -48,11 +46,7 @@ If you open this URL in the browser (_try it!_) you will receive JSON data about The returned JSON data contains some basic information about each repository, such as `name`, `full_name`, `description` etc. There are also many properties that contain URLs that can be used to obtain detail information about certain aspects of the repository. -#### 1.2.2 Get contributor information for a repository - -The JSON data that is returned from the initial request to get repository information includes a property named `contributors_url`. Use the value of this property to fetch a list of contributors. - -#### 1.2.3 GitHub API documentation +#### 1.2.2 GitHub API documentation You can find detailed information about the GitHub API by means of the link listed below. However, the documentation is very extensive and not easy to digest. For this homework it is not necessary to study the GitHub API documentation. We provide the link here for completeness. @@ -70,11 +64,11 @@ While you do not need to read this guide in detail, it is recommended that you r You will be working on the same application during the next three weeks. For each week you will need to create a new Git branch, as listed in the Table 1 below. -| Week | Branch | Assignment | -| :--: | ------- | -------------------------------------------------------------------------------------------------------------------------------- | -| 1 | `week1` | - Create a basic application using callbacks to handle network requests. | -| 2 | `week2` | Based on the `week1` branch:
- Refactor the callbacks to promises.
- Make the UI responsive. | -| 3 | `week3` | Based on the `week2` branch:
- Refactor the application to use ES6 Classes and async/await.
- Make the app ARIA-compliant. | +| Week | Branch | Assignment | +| :--: | ------- | ---------- | +| 1 | `week1` | - Create a basic application using callbacks to handle network requests. | +| 2 | `week2` | Based on the `week1` branch:
- Display details on a single repository and its contributors
- Refactor the callbacks to promises. | +| 3 | `week3` | Based on the `week2` branch:
- Refactor the application to use `fetch` and `async`/`await`.
- Reuse portions of the code to complete a provided Object Oriented (OOP) version of the application that uses ES6 classes. | Table 1. Homework schedule @@ -83,17 +77,13 @@ You will be working on the same application during the next three weeks. For eac 1. Fork the JavaScript3 repository (_this repository_) to your own GitHub account. 2. Clone the fork to your laptop. 3. Open the newly created `JavaScript3` folder from the cloned repository in VSCode. -4. Install the following extension in VSCode: - - **Prettier - Code formatter**. - -5. Open a Terminal window in VSCode and type the following command to install Prettier and ESLint tools as required for the homework: +4. Open a Terminal window in VSCode and type the following command to install Prettier and ESLint tools as required for the homework: ``` npm install ``` -6. Create a new branch for the week 1 homework with the following command: +5. Create a new branch for the week 1 homework with the following command: ``` git checkout -b week1 @@ -135,37 +125,23 @@ _**Do not change or delete any files outside of the `homework` folder!**_ | `createAndAppend` | A utility function for easily creating and appending HTML elements. | | `main` | Contains the start-up code for the application. | - `index.js` also contains a constant with the URL for the HYF repositories as listed in section 2.2.1: + `index.js` also contains a constant with the URL required for fetching information about the HYF repositories: ```js const HYF_REPOS_URL = 'https://api.github.com/orgs/HackYourFuture/repos?per_page=100'; ``` -3. Open the `index.html` file in your browser. Notice that it produces the same JSON output that you saw previously when you opened the URL directly in the browser. +3. Open the `index.html` file in your browser. You will see an unordered list with the names of the HYF repositories. -4. Review the `main()` function in `index.js` and examine how this code renders the JSON output in the browser by means of a `pre` HTML element (for demonstration purposes). +4. Review the `main()` function in `index.js` and examine how this code fetches the JSON data and calls renders the data as unordered list in the web page. ### 1.6 Week 1 Assignment -The assignment is to produce an application similar to the one illustrated in Figure 1 above. - -It should include the following components: +1. The assignment is to produce an application similar to the one illustrated in Figure 1 above. -1. An HTML `select` element from which the user can select a HYF repository. This `select` element must be populated with `option` elements, one for each HYF repository. -2. A left-hand column that displays basic information about the selected repository. -3. A right-hand column that displays a list of contributors to the repository. +2. You should render network errors to the DOM (see Figure 2 below for an example). Do not use `console.log` as regular users will not see the console output. Use the predefined `alert-error` class from `style.css` to style your error. - > In case you run out of time, you can also do the contributors list in week 2. - -**Functional Requirements:** - -1. The list of repositories in the `select` element should be sorted (case-insensitive) on repository name. -2. At start-up your application should display information about the first repository as displayed in the `select` element. -3. When the user changes the selection, the information in the web page should be refreshed for the newly selected repository. -4. You should be able to click on the repository name of the selected repository to open a new browser tab with the GitHub page for that repository. -5. You should be able to click on a contributor to open a new browser tab with the GitHub page for that contributor. -6. You should render network errors to the DOM (see Figure 2 below for an example). Do not use `console.log` as regular users will not see the console output. Use the predefined `alert-error` class from `style.css` to style your error. -7. Your UI should be responsive. Try it with Chrome Developer Tools in the browser, using a mobile phone format and a tablet format, portrait and landscape. If necessary, you can also do this work in week 2. +3. Your UI should be responsive. Try it with Chrome Developer Tools in the browser, using a mobile phone format and a tablet format, portrait and landscape. If necessary, you can also do this work in week 2. ![Error rendering](./assets/hyf-github-error.png) @@ -183,27 +159,18 @@ It should include the following components: **Hints:** -- Add one `option` element per repository to the `select` element, where each `option` element has the array index of the repository as its `value` attribute and the name of the repository as its text content: - - ```html - - ``` - * To sort the list repositories use [`.sort()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) and [`.localeCompare()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare). * Use CSS media queries and [Flexbox](https://css-tricks.com/snippets/css/a-guide-to-flexbox/) to make the UI responsive. * To force a `404` network error so that you can test the rendering of errors, change the URL to make an invalid GitHub request, e.g. append an `x` to `orgs`: `orgsx`. + ### 1.7 Handing in your homework If necessary, review the instructions how to [Hand in homework](https://github.com/HackYourFuture/fundamentals/blob/master/fundamentals/homework_pr.md) using GitHub pull request. -To test whether your code will be accepted when you submit your homework as a pull request you need to ensure that it does not contain ESLinr errors. Open a terminal window in VSCode and type the following command: +To test whether your code will be accepted when you submit your homework as a pull request you need to ensure that it does not contain ESLint errors. Open a terminal window in VSCode and type the following command: ``` npm test diff --git a/Week1/assets/hyf-github-error.png b/Week1/assets/hyf-github-error.png index 545c658f4b105f1dd36fdde8d9bdd4d276d3dcdf..707651dd359cbf0579e182f578f3e8ebd19feb9d 100644 GIT binary patch delta 3769 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 K`uo!M%6|j?Zv+Vd delta 3769 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 diff --git a/Week1/assets/hyf-github.png b/Week1/assets/hyf-github.png index bfc5ac470b0c62063272656b3254e2b336ef365f..393bc02886d86fd70b222759bc862f24ff8fe565 100644 GIT binary patch delta 41537 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 delta 41537 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
VUQ1RpnoF9X9pjx`y( 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 1. Example User Interface using [Material Design](https://material.io/guidelines/) principles. -The homework for week 2 will build on the work you did in week 1. You will create a new branch based on the `week1` branch. +The web page should include the following components: -1. Make sure that you committed all changes in the week 1 version of your homework. -2. Create a new `week2` branch: +1. An HTML `select` element from which the user can select a HYF repository. This `select` element must be populated with `option` elements, one for each HYF repository. +2. A left-hand column that displays basic information about the selected repository. +3. A right-hand column that displays a list of contributors to the repository. - ``` - git checkout -b week2 - ``` +**Functional Requirements:** + +1. The list of repositories in the `select` element should be sorted (case-insensitive) on repository name. +2. At start-up your application should display information about the first repository as displayed in the `select` element. +3. When the user changes the selection, the information in the web page should be refreshed for the newly selected repository. +4. You should be able to click on the repository name of the selected repository to open a new browser tab with the GitHub page for that repository. +5. You should be able to click on a contributor to open a new browser tab with the GitHub page for that contributor. +6. Your UI should be responsive. Try it with Chrome Developer Tools in the browser, using a mobile phone format and a tablet format, portrait and landscape. + +**Code modifications:** + +**`index.js`** + +- Modify this file as required to meet the functional requirements of the assignment. +- Convert the callbacks to promises. + +**`style.css`** + +- Add your own styling. + +**Hints:** + +- Add one `option` element per repository to the `select` element, where each `option` element has the array index of the repository as its `value` attribute and the name of the repository as its text content: -### 3.2 Assignment + ```html + + ``` -You will continue to work on the files `index.js` and (possibly) `style.css`. +* To sort the list repositories use [`.sort()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) and [`.localeCompare()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare). -- Complete your GitHub app code from the previous week, if needed, to meet the requirements from that week's assignment. -- Replace all asynchronous callbacks (e.g. as used with `XMLHttpRequest`) by ES6 promises. -- Beautify your app's styling. -- If not yet completed in week 1, make your app responsive (use CSS media queries and [Flexbox](https://css-tricks.com/snippets/css/a-guide-to-flexbox/)). +* Use CSS media queries and [Flexbox](https://css-tricks.com/snippets/css/a-guide-to-flexbox/) to make the UI responsive. -### 3.3 Handing in your homework +### Handing in your homework If necessary, review the instructions how to [Hand in homework](https://github.com/HackYourFuture/fundamentals/blob/master/fundamentals/homework_pr.md) using GitHub pull request. -To test whether your code will be accepted when you submit your homework as a pull request you need to ensure that it does not contain ESLinr errors. Open a terminal window in VSCode and type the following command: +To test whether your code will be accepted when you submit your homework as a pull request you need to ensure that it does not contain ESLint errors. Open a terminal window in VSCode and type the following command: ``` npm test diff --git a/Week2/assets/week2.png b/Week2/assets/week2.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3be59cd247a69c63ec77f237e7e618d4467d79 GIT binary patch literal 51788 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

yYR!c>hm$${Gy*N9&8XDjZ!65Rw_ciO4 z0&aFLEIenv__Nv_t*>({#yj`xE&E==WFBy2C{3B&xkGWnzEKCWENz0#Jwmk4zVlFkwA zUE)Mh&#vxEf;BeYy)nJloYs7`DnyjD`0Y^YQxyIS4d+#4vCtj@wK(UEa7cSZ{%+_S zF5bPJcnZ{2mGzB;1m2r>)!K>%2Gu6MG)9*tE%!%>7iF8elLW^N_ATFxu1g9EHe#TP zioN@YLEDN*VPJ4@2<(Btz*yzfz(+*aind)cZ;In-Ma_C>M7IU7bV^BSGjy@pn_Oiy zl(>YaYv~ZLZ6?2| zypqx#xM_@it9|v)xZLTBUY$2}F#h#dZw(FfZMj~GCAIsW9-ejAu^{m6fGn&mwBazA z$4SkC7#JSJ5ORgz?e8Za7blKG zizmAOF6s_0y+`YkEtdk66Bg{o)5UJp?R6bosX}uWa5r9Z;`c2J>xic=TTI`dXBr*WBCNn29fqV6ysrW=%FRy~JIbo7vs+uqhLB(6-tKNnYKpCmouZ+D4Ut!foH9vbFwA+LF zI7vtr2nkSgSy6J!bGN8T54?{ONFInoHx(5ujzh>RfnKf&aCZm;~Lq@38Pp8iO=Vl3`;QmS7? z>df*6iV+(X9gIBIsiWyB&yQYTtgLi&bp8{}c6k5psn*E*JjN>kJ>x?S?L9m?e5`+Yb*8W^Xi^TEM;a8OWq*Wp?nQa`5QB q{eMOe|IHi!$Di^1?!}AeXDJlZH8z|Z3FM~O3k6wKnM$dzKmQAHWO%^< diff --git a/homework-classes/index.html b/homework-classes/index.html index 2d1fc8fa7..99c41b9af 100644 --- a/homework-classes/index.html +++ b/homework-classes/index.html @@ -13,15 +13,18 @@ Codestin Search App - + -

- - - + + + + diff --git a/homework-classes/style.css b/homework-classes/style.css index a8985a8a5..83ea60355 100644 --- a/homework-classes/style.css +++ b/homework-classes/style.css @@ -1,3 +1,133 @@ +body { + margin: 0 auto; + background-color: #f8f8f8; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, + Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; + color: rgb(0, 0, 0, 87%); +} + +#main-container { + display: flex; + flex-direction: column; + align-items: stretch; + margin: 0 4px; +} + +@media (min-width: 960px) { + body { + width: 960px; + } + #main-container { + flex-direction: row; + align-items: flex-start; + margin: 0; + } +} + +.header { + color: white; + background-color: #3f51b5; + padding: 8px 16px; + display: flex; + flex-direction: row; + align-items: center; +} + +.repo-select { + height: 32px; + margin: 0 16px; +} + +.repo-container, +.contributors-container { + background-color: white; + flex: 1; + margin: 8px 4px; +} + +.card-container { + padding: 16px; +} + +.contributor-header { + font-size: 0.8rem; + color: rgb(0, 0, 0, 54%); + padding: 16px; +} + +.contributor-list { + list-style-type: none; + padding: 0; + margin: 0; +} + +.contributor-item { + border-bottom: solid 1px rgb(0, 0, 0, 12%); + padding: 16px; + display: flex; + flex-direction: row; + align-items: center; + text-decoration: none; +} + +.contributor-item:hover { + background-color: #eee; +} + +.contributor-avatar { + border-radius: 3px; + margin-right: 16px; +} + +.contributor-data { + flex: 1; + display: flex; + flex-direction: row; + justify-content: space-between; + align-content: center; +} + +.contributor-badge { + font-size: 12px; + padding: 2px 8px; + line-height: 1rem; + background-color: gray; + color: white; + border-radius: 4px; +} + +table { + table-layout: fixed; + color: rgb(0, 0, 0, 81%); +} + +td, +th { + vertical-align: top; +} + +th { + width: 100px; + min-width: 100px; + max-width: 100px; +} + +.whiteframe { + border: none; + border-radius: 2px; + background-color: #fff; + box-shadow: 0 1px 8px 0 rgba(0, 0, 0, 0.2), 0 3px 4px 0 rgba(0, 0, 0, 0.14), + 0 3px 3px -2px rgba(0, 0, 0, 0.12); +} + +.alert { + padding: 0.75rem 1.25rem; + margin: 4px 0; + border-radius: 0.25rem; + flex: 1; +} + .alert-error { - color: red; -} \ No newline at end of file + color: #721c24; + background-color: #f8d7da; +} diff --git a/homework/hyf.png b/homework/hyf.png index a4626c91cc28dd92f3a8843aa3919c472d609984..76bc5a13b4a53ea97a6c09ca5fe399f40ab20e4e 100644 GIT binary patch literal 9116 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 GkN*WepL25n literal 6971 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

yYR!c>hm$${Gy*N9&8XDjZ!65Rw_ciO4 z0&aFLEIenv__Nv_t*>({#yj`xE&E==WFBy2C{3B&xkGWnzEKCWENz0#Jwmk4zVlFkwA zUE)Mh&#vxEf;BeYy)nJloYs7`DnyjD`0Y^YQxyIS4d+#4vCtj@wK(UEa7cSZ{%+_S zF5bPJcnZ{2mGzB;1m2r>)!K>%2Gu6MG)9*tE%!%>7iF8elLW^N_ATFxu1g9EHe#TP zioN@YLEDN*VPJ4@2<(Btz*yzfz(+*aind)cZ;In-Ma_C>M7IU7bV^BSGjy@pn_Oiy zl(>YaYv~ZLZ6?2| zypqx#xM_@it9|v)xZLTBUY$2}F#h#dZw(FfZMj~GCAIsW9-ejAu^{m6fGn&mwBazA z$4SkC7#JSJ5ORgz?e8Za7blKG zizmAOF6s_0y+`YkEtdk66Bg{o)5UJp?R6bosX}uWa5r9Z;`c2J>xic=TTI`dXBr*WBCNn29fqV6ysrW=%FRy~JIbo7vs+uqhLB(6-tKNnYKpCmouZ+D4Ut!foH9vbFwA+LF zI7vtr2nkSgSy6J!bGN8T54?{ONFInoHx(5ujzh>RfnKf&aCZm;~Lq@38Pp8iO=Vl3`;QmS7? z>df*6iV+(X9gIBIsiWyB&yQYTtgLi&bp8{}c6k5psn*E*JjN>kJ>x?S?L9m?e5`+Yb*8W^Xi^TEM;a8OWq*Wp?nQa`5QB q{eMOe|IHi!$Di^1?!}AeXDJlZH8z|Z3FM~O3k6wKnM$dzKmQAHWO%^< diff --git a/homework/index.js b/homework/index.js index d150b6609..3886cbac9 100644 --- a/homework/index.js +++ b/homework/index.js @@ -19,8 +19,7 @@ function createAndAppend(name, parent, options = {}) { const elem = document.createElement(name); parent.appendChild(elem); - Object.keys(options).forEach(key => { - const value = options[key]; + Object.entries(options).forEach(([key, value]) => { if (key === 'text') { elem.textContent = value; } else { @@ -30,17 +29,26 @@ return elem; } + function renderRepoDetails(repo, ul) { + createAndAppend('li', ul, { text: repo.name }); + } + function main(url) { - fetchJSON(url, (err, repositories) => { + fetchJSON(url, (err, repos) => { const root = document.getElementById('root'); if (err) { - createAndAppend('div', root, { text: err.message, class: 'alert-error' }); + createAndAppend('div', root, { + text: err.message, + class: 'alert-error', + }); return; } - createAndAppend('pre', root, { text: JSON.stringify(repositories, null, 2) }); + const ul = createAndAppend('ul', root); + repos.forEach(repo => renderRepoDetails(repo, ul)); }); } - const HYF_REPOS_URL = 'https://api.github.com/orgs/HackYourFuture/repos?per_page=100'; + const HYF_REPOS_URL = + 'https://api.github.com/orgs/HackYourFuture/repos?per_page=100'; window.onload = () => main(HYF_REPOS_URL); } diff --git a/package-lock.json b/package-lock.json index aff021598..9219dda64 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,19 +5,17 @@ "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", - "dev": true, + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", "requires": { "@babel/highlight": "^7.0.0" } }, "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "dev": true, + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", "requires": { "chalk": "^2.0.0", "esutils": "^2.0.2", @@ -25,22 +23,19 @@ } }, "acorn": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.4.tgz", - "integrity": "sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg==", - "dev": true + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==" }, "acorn-jsx": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", - "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", - "dev": true + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==" }, "ajv": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz", - "integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==", - "dev": true, + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "requires": { "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", @@ -49,22 +44,22 @@ } }, "ansi-escapes": { - "version": "3.1.0", - "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", - "dev": true + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", + "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", + "requires": { + "type-fest": "^0.5.2" + } }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "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" } @@ -73,88 +68,47 @@ "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" } }, - "aria-query": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", - "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", - "dev": true, - "requires": { - "ast-types-flow": "0.0.7", - "commander": "^2.11.0" - } - }, "array-includes": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", - "dev": true, "requires": { "define-properties": "^1.1.2", "es-abstract": "^1.7.0" } }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", - "dev": true - }, - "axobject-query": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", - "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", - "dev": true, - "requires": { - "ast-types-flow": "0.0.7" - } + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "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" } }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "^0.2.0" - } - }, "callsites": { - "version": "0.2.0", - "resolved": "http://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -164,35 +118,25 @@ "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "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, + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "requires": { - "restore-cursor": "^2.0.0" + "restore-cursor": "^3.1.0" } }, "cli-width": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" }, "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" } @@ -200,51 +144,46 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "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 + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "confusing-browser-globals": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.8.tgz", + "integrity": "sha512-lI7asCibVJ6Qd3FGU7mu4sfG4try4LX3+GVS+Gv8UlrEf2AeW57piecapnog2UHZSbcX/P/1UDWVaTsblowlZg==" }, "contains-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=" }, "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" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, - "damerau-levenshtein": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz", - "integrity": "sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ=", - "dev": true - }, "debug": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", - "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", - "dev": true, + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "requires": { "ms": "^2.1.1" } @@ -252,60 +191,54 @@ "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 + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" }, "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" } }, "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "requires": { "esutils": "^2.0.2" } }, "emoji-regex": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz", - "integrity": "sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==", - "dev": true + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "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.12.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", - "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", - "dev": true, + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", "requires": { - "es-to-primitive": "^1.1.1", + "es-to-primitive": "^1.2.0", "function-bind": "^1.1.1", - "has": "^1.0.1", - "is-callable": "^1.1.3", - "is-regex": "^1.0.4" + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" } }, "es-to-primitive": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -315,82 +248,66 @@ "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 + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.9.0.tgz", - "integrity": "sha512-g4KWpPdqN0nth+goDNICNXGfJF7nNnepthp46CAlJoJtC5K/cLu3NgCM3AHu1CkJ5Hzt9V0Y0PBAO6Ay/gGb+w==", - "dev": true, + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.1.0.tgz", + "integrity": "sha512-QhrbdRD7ofuV09IuE2ySWBz0FyXCq0rriLTZXZqaWSI79CVtHVRdkFuFTViiqzZhkCgfOh9USpriuGN2gIpZDQ==", "requires": { "@babel/code-frame": "^7.0.0", - "ajv": "^6.5.3", + "ajv": "^6.10.0", "chalk": "^2.1.0", "cross-spawn": "^6.0.5", "debug": "^4.0.1", - "doctrine": "^2.1.0", - "eslint-scope": "^4.0.0", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", "eslint-utils": "^1.3.1", "eslint-visitor-keys": "^1.0.0", - "espree": "^4.0.0", + "espree": "^6.0.0", "esquery": "^1.0.1", "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", + "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", + "glob-parent": "^5.0.0", "globals": "^11.7.0", "ignore": "^4.0.6", + "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^6.1.0", - "is-resolvable": "^1.1.0", - "js-yaml": "^3.12.0", + "inquirer": "^6.4.1", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", - "lodash": "^4.17.5", + "lodash": "^4.17.14", "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", "progress": "^2.0.0", "regexpp": "^2.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^5.0.2", - "text-table": "^0.2.0" - } - }, - "eslint-config-airbnb": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-17.1.0.tgz", - "integrity": "sha512-R9jw28hFfEQnpPau01NO5K/JWMGLi6aymiF6RsnMURjTk+MqZKllCqGK/0tOvHkPi/NWSSOU2Ced/GX++YxLnw==", - "dev": true, - "requires": { - "eslint-config-airbnb-base": "^13.1.0", - "object.assign": "^4.1.0", - "object.entries": "^1.0.4" + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" } }, "eslint-config-airbnb-base": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.1.0.tgz", - "integrity": "sha512-XWwQtf3U3zIoKO1BbHh6aUhJZQweOwSt4c2JrPDg9FP3Ltv3+YfEv7jIDB8275tVnO/qOHbfuYg3kzw6Je7uWw==", - "dev": true, + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.0.0.tgz", + "integrity": "sha512-2IDHobw97upExLmsebhtfoD3NAKhV4H0CJWP3Uprd/uk+cHuWYOczPVxQ8PxLFUAw7o3Th1RAU8u1DoUpr+cMA==", "requires": { - "eslint-restricted-globals": "^0.1.1", + "confusing-browser-globals": "^1.0.7", "object.assign": "^4.1.0", - "object.entries": "^1.0.4" + "object.entries": "^1.1.0" } }, "eslint-config-prettier": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-3.3.0.tgz", - "integrity": "sha512-Bc3bh5bAcKNvs3HOpSi6EfGA2IIp7EzWcg2tS4vP7stnXu/J1opihHDM7jI9JCIckyIDTgZLSWn7J3HY0j2JfA==", - "dev": true, + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.0.0.tgz", + "integrity": "sha512-vDrcCFE3+2ixNT5H83g28bO/uYAwibJxerXPj+E7op4qzBCsAV36QfvdAyVOoNxKAH2Os/e01T/2x++V0LPukA==", "requires": { "get-stdin": "^6.0.0" } @@ -399,7 +316,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", - "dev": true, "requires": { "debug": "^2.6.9", "resolve": "^1.5.0" @@ -409,7 +325,6 @@ "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" } @@ -417,26 +332,23 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, "eslint-module-utils": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", - "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", - "dev": true, + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz", + "integrity": "sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw==", "requires": { "debug": "^2.6.8", - "pkg-dir": "^1.0.0" + "pkg-dir": "^2.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" } @@ -444,43 +356,40 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, "eslint-plugin-import": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz", - "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==", - "dev": true, + "version": "2.18.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz", + "integrity": "sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ==", "requires": { + "array-includes": "^3.0.3", "contains-path": "^0.1.0", - "debug": "^2.6.8", + "debug": "^2.6.9", "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.1", - "eslint-module-utils": "^2.2.0", - "has": "^1.0.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.3", + "eslint-import-resolver-node": "^0.3.2", + "eslint-module-utils": "^2.4.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.0", "read-pkg-up": "^2.0.0", - "resolve": "^1.6.0" + "resolve": "^1.11.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" } }, "doctrine": { "version": "1.5.0", - "resolved": "http://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, "requires": { "esutils": "^2.0.2", "isarray": "^1.0.0" @@ -489,84 +398,46 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, - "eslint-plugin-jsx-a11y": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.1.2.tgz", - "integrity": "sha512-7gSSmwb3A+fQwtw0arguwMdOdzmKUgnUcbSNlo+GjKLAQFuC2EZxWqG9XHRI8VscBJD5a8raz3RuxQNFW+XJbw==", - "dev": true, - "requires": { - "aria-query": "^3.0.0", - "array-includes": "^3.0.3", - "ast-types-flow": "^0.0.7", - "axobject-query": "^2.0.1", - "damerau-levenshtein": "^1.0.4", - "emoji-regex": "^6.5.1", - "has": "^1.0.3", - "jsx-ast-utils": "^2.0.1" - } - }, "eslint-plugin-prettier": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.0.0.tgz", - "integrity": "sha512-4g11opzhqq/8+AMmo5Vc2Gn7z9alZ4JqrbZ+D4i8KlSyxeQhZHlmIrY8U9Akf514MoEhogPa87Jgkq87aZ2Ohw==", - "dev": true, + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.0.tgz", + "integrity": "sha512-XWX2yVuwVNLOUhQijAkXz+rMPPoCr7WFiAl8ig6I7Xn+pPVhDhzg4DxHpmbeb0iqjO9UronEA3Tb09ChnFVHHA==", "requires": { "prettier-linter-helpers": "^1.0.0" } }, - "eslint-plugin-react": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz", - "integrity": "sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw==", - "dev": true, - "requires": { - "array-includes": "^3.0.3", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.0.1", - "prop-types": "^15.6.2" - } - }, - "eslint-restricted-globals": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz", - "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=", - "dev": true - }, "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", - "dev": true, + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", "requires": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" } }, "eslint-utils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", - "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", - "dev": true + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.0.tgz", + "integrity": "sha512-7ehnzPaP5IIEh1r1tkjuIrxqhNkzUJa9z3R92tLJdZIVdWaczEhr3EbhGtsMrVxi1KeR8qA7Off6SWc5WNQqyQ==", + "requires": { + "eslint-visitor-keys": "^1.0.0" + } }, "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", - "dev": true + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==" }, "espree": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", - "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", - "dev": true, + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.0.0.tgz", + "integrity": "sha512-lJvCS6YbCn3ImT3yKkPe0+tJ+mH6ljhGNjHQH9mRtiO6gjhVAOhVXW1yjnwqGwTkK3bGbye+hb00nFNmu0l/1Q==", "requires": { - "acorn": "^6.0.2", + "acorn": "^6.0.7", "acorn-jsx": "^5.0.0", "eslint-visitor-keys": "^1.0.0" } @@ -574,14 +445,12 @@ "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 + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", - "dev": true, "requires": { "estraverse": "^4.0.0" } @@ -590,28 +459,24 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, "requires": { "estraverse": "^4.1.0" } }, "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" }, "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", - "dev": true, + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "requires": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -621,97 +486,86 @@ "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, "fast-diff": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, "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 + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.0.0.tgz", + "integrity": "sha512-HKri+WoWoUgr83pehn/SIgLOMZ9nAWC6dcGj26RY2R4F50u4+RTUz0RCrUlOV3nKRAICW1UGzyb+kcX2qK1S/g==", "requires": { "escape-string-regexp": "^1.0.5" } }, "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" + "flat-cache": "^2.0.1" } }, "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "locate-path": "^2.0.0" } }, "flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", - "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", - "dev": true, + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", "requires": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" } }, + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==" + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, "get-stdin": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==" }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -721,23 +575,28 @@ "path-is-absolute": "^1.0.0" } }, + "glob-parent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", + "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", + "requires": { + "is-glob": "^4.0.1" + } + }, "globals": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz", - "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==", - "dev": true + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" }, "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" } @@ -745,26 +604,22 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "has-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" }, "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", + "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==" }, "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" } @@ -772,111 +627,106 @@ "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + }, + "import-fresh": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", + "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, "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.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "inquirer": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz", - "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==", - "dev": true, + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.1.tgz", + "integrity": "sha512-uxNHBeQhRXIoHWTSNYUFhQVrHYFThIt6IVo2fFmSe8aBwdR3/w6b58hJpiL/fMukFkvGzjg+hSxFtwvVmKZmXw==", "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", + "ansi-escapes": "^4.2.1", + "chalk": "^2.4.2", + "cli-cursor": "^3.1.0", "cli-width": "^2.0.0", - "external-editor": "^3.0.0", - "figures": "^2.0.0", - "lodash": "^4.17.10", - "mute-stream": "0.0.7", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", "run-async": "^2.2.0", - "rxjs": "^6.1.0", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", + "rxjs": "^6.4.0", + "string-width": "^4.1.0", + "strip-ansi": "^5.1.0", "through": "^2.3.6" } }, "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-builtin-module": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, "is-callable": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" }, "is-date-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true + "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==" + }, + "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==", + "requires": { + "is-extglob": "^2.1.1" + } }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" }, "is-regex": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, "requires": { "has": "^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-symbol": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "dev": true, "requires": { "has-symbols": "^1.0.0" } @@ -884,26 +734,22 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "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 + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -912,29 +758,17 @@ "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 + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "jsx-ast-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", - "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", - "dev": true, - "requires": { - "array-includes": "^3.0.3" - } + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" }, "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" @@ -942,9 +776,8 @@ }, "load-json-file": { "version": "2.0.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", @@ -956,118 +789,89 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, "requires": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } } }, "lodash": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "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" - } + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, "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 + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "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": "0.0.8", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, "mkdirp": { "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, "requires": { "minimist": "0.0.8" } }, "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 + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true, + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "requires": { "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", + "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, - "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-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "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", @@ -1076,40 +880,47 @@ } }, "object.entries": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.0.4.tgz", - "integrity": "sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=", - "dev": true, + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz", + "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==", "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.6.1", - "function-bind": "^1.1.0", - "has": "^1.0.1" + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "object.values": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", + "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" } }, "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, + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", "requires": { - "mimic-fn": "^1.0.0" + "mimic-fn": "^2.1.0" } }, "optionator": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, "requires": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.4", @@ -1121,15 +932,13 @@ }, "os-tmpdir": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, "requires": { "p-try": "^1.0.0" } @@ -1138,7 +947,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, "requires": { "p-limit": "^1.1.0" } @@ -1146,144 +954,97 @@ "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "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==", + "requires": { + "callsites": "^3.0.0" + } }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, "requires": { "error-ex": "^1.2.0" } }, "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" }, "path-is-absolute": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, "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 + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, "path-type": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, "requires": { "pify": "^2.0.0" } }, "pify": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" }, "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "requires": { - "find-up": "^1.0.0" + "find-up": "^2.1.0" } }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "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 + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "prettier": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.15.2.tgz", - "integrity": "sha512-YgPLFFA0CdKL4Eg2IHtUSjzj/BWgszDHiNQAe0VAIBse34148whfdzLagRL+QiKS+YfK5ftB6X4v/MBw8yCoug==", - "dev": true + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz", + "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==" }, "prettier-linter-helpers": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, "requires": { "fast-diff": "^1.1.2" } }, "progress": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz", - "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==", - "dev": true - }, - "prop-types": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", - "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", - "dev": true, - "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, "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 + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, "requires": { "load-json-file": "^2.0.0", "normalize-package-data": "^2.3.2", @@ -1294,87 +1055,58 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, "requires": { "find-up": "^2.0.0", "read-pkg": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - } } }, "regexpp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "http://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - } + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" }, "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", - "dev": true, + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", "requires": { - "path-parse": "^1.0.5" + "path-parse": "^1.0.6" } }, "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" }, "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, + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "requires": { - "onetime": "^2.0.0", + "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "requires": { - "glob": "^7.0.5" + "glob": "^7.1.3" } }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, "requires": { "is-promise": "^2.1.0" } }, "rxjs": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", - "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", - "dev": true, + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", + "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", "requires": { "tslib": "^1.9.0" } @@ -1382,20 +1114,17 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, "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" } @@ -1403,29 +1132,34 @@ "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 + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + } } }, "spdx-correct": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz", - "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==", - "dev": true, + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -1434,133 +1168,149 @@ "spdx-exceptions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" }, "spdx-expression-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz", - "integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==", - "dev": true + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.1.0.tgz", + "integrity": "sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ==", "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^5.2.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, + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" } }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" }, "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==" }, "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" } }, "table": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/table/-/table-5.1.0.tgz", - "integrity": "sha512-e542in22ZLhD/fOIuXs/8yDZ9W61ltF8daM88rkRNtgTIct+vI2fTnAyu/Db2TCfEcI8i7mjZz6meLq0nW7TYg==", - "dev": true, - "requires": { - "ajv": "^6.5.3", - "lodash": "^4.17.10", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + } } }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" }, "through": { "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, "requires": { "os-tmpdir": "~1.0.2" } }, "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", - "dev": true + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" }, "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.5.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", + "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==" + }, "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" } }, + "v8-compile-cache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==" + }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -1570,7 +1320,6 @@ "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" } @@ -1578,20 +1327,17 @@ "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", "requires": { "mkdirp": "^0.5.1" } diff --git a/package.json b/package.json index fd3398c5b..7eeca2da8 100644 --- a/package.json +++ b/package.json @@ -8,15 +8,12 @@ }, "author": "Jim Cramer", "license": "CC-BY-4.0", - "devDependencies": { - "eslint": "^5.9.0", - "eslint-config-airbnb": "^17.1.0", - "eslint-config-airbnb-base": "^13.1.0", - "eslint-config-prettier": "^3.3.0", - "eslint-plugin-import": "^2.14.0", - "eslint-plugin-jsx-a11y": "^6.1.2", - "eslint-plugin-prettier": "^3.0.0", - "eslint-plugin-react": "^7.11.1", - "prettier": "^1.15.2" + "dependencies": { + "eslint": "^6.2.0", + "eslint-config-airbnb-base": "^14.0.0", + "eslint-config-prettier": "^6.0.0", + "eslint-plugin-import": "^2.18.2", + "eslint-plugin-prettier": "^3.1.0", + "prettier": "^1.18.2" } } diff --git a/prettier.config.js b/prettier.config.js index ee80efd56..8b959e312 100644 --- a/prettier.config.js +++ b/prettier.config.js @@ -1,5 +1,4 @@ module.exports = { - printWidth: 100, singleQuote: true, trailingComma: 'all', bracketSpacing: true, From 88b72648f135b57c7e3a5fe0d5d968b30ae7fbec Mon Sep 17 00:00:00 2001 From: Jim Cramer Date: Mon, 19 Aug 2019 13:08:18 +0200 Subject: [PATCH 06/77] Fix ESLint version error --- package-lock.json | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9219dda64..b918fcb7a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,9 +23,9 @@ } }, "acorn": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", - "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.0.0.tgz", + "integrity": "sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ==" }, "acorn-jsx": { "version": "5.0.1", @@ -251,9 +251,9 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.1.0.tgz", - "integrity": "sha512-QhrbdRD7ofuV09IuE2ySWBz0FyXCq0rriLTZXZqaWSI79CVtHVRdkFuFTViiqzZhkCgfOh9USpriuGN2gIpZDQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.2.0.tgz", + "integrity": "sha512-sS0SZwm5UAoI83F+cgdomz0cBNPs+AnRvEboNYeWvrZ8UcDHCu/5muocwoDL2TkHq9skkP0GvZjmwI8HG7S3sw==", "requires": { "@babel/code-frame": "^7.0.0", "ajv": "^6.10.0", @@ -262,9 +262,9 @@ "debug": "^4.0.1", "doctrine": "^3.0.0", "eslint-scope": "^5.0.0", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^6.0.0", + "eslint-utils": "^1.4.0", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.0", "esquery": "^1.0.1", "esutils": "^2.0.2", "file-entry-cache": "^5.0.1", @@ -433,13 +433,13 @@ "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==" }, "espree": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.0.0.tgz", - "integrity": "sha512-lJvCS6YbCn3ImT3yKkPe0+tJ+mH6ljhGNjHQH9mRtiO6gjhVAOhVXW1yjnwqGwTkK3bGbye+hb00nFNmu0l/1Q==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.0.tgz", + "integrity": "sha512-boA7CHRLlVWUSg3iL5Kmlt/xT3Q+sXnKoRYYzj1YeM10A76TEJBbotV5pKbnK42hEUIr121zTv+QLRM5LsCPXQ==", "requires": { - "acorn": "^6.0.7", + "acorn": "^7.0.0", "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" + "eslint-visitor-keys": "^1.1.0" } }, "esprima": { From d21420c3923c9971e5ae974d738d785df8ed28c5 Mon Sep 17 00:00:00 2001 From: Jim Cramer Date: Mon, 19 Aug 2019 15:30:07 +0200 Subject: [PATCH 07/77] Fix error in OOP starter code --- homework-classes/View.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/homework-classes/View.js b/homework-classes/View.js index 249f98e36..1708f0737 100644 --- a/homework-classes/View.js +++ b/homework-classes/View.js @@ -46,9 +46,9 @@ * @param {Object[]} repos An array of repository objects. */ renderSelect(repos) { - const select = this.createAndAppend('select', this.header); + this.select = this.createAndAppend('select', this.header); // TODO: replace this comment and the console.log with your own code - console.log(select, repos); + console.log(repos); } /** From 13331776ce60069f490ec74f1edbaae891275880 Mon Sep 17 00:00:00 2001 From: Jim Cramer Date: Mon, 26 Aug 2019 09:00:25 +0200 Subject: [PATCH 08/77] Rename Subject to Observable --- .vscode/settings.json | 1 + Week3/MAKEME.md | 4 ++-- homework-classes/App.js | 2 +- homework-classes/Model.js | 17 ++++++++--------- homework-classes/Observable.js | 20 ++++++++++++++++++++ homework-classes/Observer.js | 8 ++++++-- homework-classes/Subject.js | 23 ----------------------- homework-classes/View.js | 20 ++++++++++---------- homework-classes/index.html | 2 +- 9 files changed, 49 insertions(+), 48 deletions(-) create mode 100644 homework-classes/Observable.js delete mode 100644 homework-classes/Subject.js diff --git a/.vscode/settings.json b/.vscode/settings.json index 4678924cf..6b977e680 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -6,6 +6,7 @@ "editor.tabSize": 2, "cSpell.words": [ "networkidle", + "remarcmij", "tabindex", "whiteframe" ] diff --git a/Week3/MAKEME.md b/Week3/MAKEME.md index debdb95f2..d498441b3 100644 --- a/Week3/MAKEME.md +++ b/Week3/MAKEME.md @@ -83,9 +83,9 @@ Object Oriented Programming is a vast topic and in this homework we can only scr | style.css | CSS styling. | | hyf.png | The HYF logo. | | App.js | The **App** class contains the start-up code and manages the overall orchestration of the app. | -| Model.js | The **Model** class is concerned with all data handling (e.g. fetching). Extends the Subject class. | +| Model.js | The **Model** class is concerned with all data handling (e.g. fetching). Extends the Observable class. | | View.js | The **View** class is concerned with rendering the data from the Model to the web page. Extends the Observer class. | -| Subject.js | The **Subject** class is a component of a Observer pattern implementation. | +| Observable.js | The **Observable** class is a component of a Observer pattern implementation. | | Observer.js | The **Observer** class is a component of a Observer pattern implementation. | >For this part of the homework you should need to modify **View.js**, by adding and adapting code from your non-OOP version of the homework to this file. diff --git a/homework-classes/App.js b/homework-classes/App.js index d931bbce8..7b0cff181 100644 --- a/homework-classes/App.js +++ b/homework-classes/App.js @@ -21,7 +21,7 @@ class App { constructor(account) { const model = new Model(account); - this.pageView = new View(model, account); + this.view = new View(model, account); } } diff --git a/homework-classes/Model.js b/homework-classes/Model.js index 7a6fe6223..efeacdd62 100644 --- a/homework-classes/Model.js +++ b/homework-classes/Model.js @@ -1,12 +1,12 @@ 'use strict'; { - const { Subject } = window; + const { Observable } = window; const makeUrl = ({ name, type }) => `https://api.github.com/${type}s/${name}/repos?per_page=100`; - class Model extends Subject { + class Model extends Observable { constructor(account) { super(); this.account = account; @@ -19,20 +19,19 @@ } async fetchData(selectedIndex = 0) { - const newState = { ...this.state, error: null }; + this.state.error = null; try { if (this.state.repos.length === 0) { const repos = await Model.fetchJSON(makeUrl(this.account)); - newState.repos = repos.sort((a, b) => a.name.localeCompare(b.name)); + this.state.repos = repos.sort((a, b) => a.name.localeCompare(b.name)); } - newState.selectedRepo = newState.repos[selectedIndex]; - newState.contributors = await Model.fetchJSON( - newState.selectedRepo.contributors_url, + this.state.selectedRepo = this.state.repos[selectedIndex]; + this.state.contributors = await Model.fetchJSON( + this.state.selectedRepo.contributors_url, ); } catch (err) { - newState.error = err; + this.state.error = err; } - this.state = newState; this.notify(this.state); } diff --git a/homework-classes/Observable.js b/homework-classes/Observable.js new file mode 100644 index 000000000..3eb5b2530 --- /dev/null +++ b/homework-classes/Observable.js @@ -0,0 +1,20 @@ +'use strict'; + +{ + class Observable { + constructor() { + this.observers = new Set(); + } + + subscribe(observer = {}) { + this.observers.add(observer); + return () => this.observers.delete(observer); + } + + notify(data) { + this.observers.forEach(observer => observer.update(data)); + } + } + + window.Observable = Observable; +} diff --git a/homework-classes/Observer.js b/homework-classes/Observer.js index 108edcfb4..26b88195b 100644 --- a/homework-classes/Observer.js +++ b/homework-classes/Observer.js @@ -2,8 +2,12 @@ { class Observer { - constructor(subject) { - subject.register(this); + constructor(Observable) { + Observable.subscribe(this); + } + + update() { + throw new Error('Observer: the `update` method should be overridden.'); } } diff --git a/homework-classes/Subject.js b/homework-classes/Subject.js deleted file mode 100644 index ac0f40313..000000000 --- a/homework-classes/Subject.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -{ - class Subject { - constructor() { - this.observers = new Set(); - } - - register(observer = {}) { - if (!(typeof observer.update === 'function')) { - throw new Error(`Observer must implement an 'update' method.`); - } - this.observers.add(observer); - return () => this.observers.delete(observer); - } - - notify(payload) { - this.observers.forEach(observer => observer.update(payload)); - } - } - - window.Subject = Subject; -} diff --git a/homework-classes/View.js b/homework-classes/View.js index 1708f0737..17511e2c3 100644 --- a/homework-classes/View.js +++ b/homework-classes/View.js @@ -12,9 +12,9 @@ this.mainContainer = null; const root = document.getElementById('root'); - this.header = this.createAndAppend('header', root, { class: 'header' }); - this.createAndAppend('p', this.header, { text: account.name }); - this.mainContainer = this.createAndAppend('main', root, { + this.header = View.createAndAppend('header', root, { class: 'header' }); + View.createAndAppend('p', this.header, { text: account.name }); + this.mainContainer = View.createAndAppend('main', root, { id: 'main-container', }); @@ -22,7 +22,7 @@ } /** - * Receives data from the Subject to which this Observer is registered + * Receives data from the Observable to which this Observer is registered * and renders the data. * @param {Object} state On object containing the Model state */ @@ -46,9 +46,9 @@ * @param {Object[]} repos An array of repository objects. */ renderSelect(repos) { - this.select = this.createAndAppend('select', this.header); + this.select = View.createAndAppend('select', this.header); // TODO: replace this comment and the console.log with your own code - console.log(repos); + console.log('renderSelect', repos); } /** @@ -57,7 +57,7 @@ */ renderRepoDetails(repo) { // TODO: replace this comment and the console.log with your own code - console.log(repo); + console.log('renderRepoDetails', repo); } /** @@ -66,7 +66,7 @@ */ renderContributors(contributors) { // TODO: replace this comment and the console.log with your own code - console.log(contributors); + console.log('renderContributors', contributors); } /** @@ -75,7 +75,7 @@ */ renderError(err) { // TODO: replace this comment and the console.log with your own code - console.log(err); + console.log('renderError', err); } /** @@ -85,7 +85,7 @@ * @param {HTMLElement} parent The parent element. * @param {Object} options An object with attribute names and values. */ - createAndAppend(name, parent, options = {}) { + static createAndAppend(name, parent, options = {}) { const elem = document.createElement(name); parent.appendChild(elem); Object.entries(options).forEach(([key, value]) => { diff --git a/homework-classes/index.html b/homework-classes/index.html index 99c41b9af..8a2fffaa4 100644 --- a/homework-classes/index.html +++ b/homework-classes/index.html @@ -21,7 +21,7 @@

- + From 0f1308a23bf991e2efd95ca7ba54fdb2c42892ed Mon Sep 17 00:00:00 2001 From: Jim Cramer Date: Mon, 26 Aug 2019 12:54:34 +0200 Subject: [PATCH 09/77] Remove Observer as a separate class --- homework-classes/Observer.js | 15 --------------- homework-classes/View.js | 6 ++---- homework-classes/index.html | 1 - 3 files changed, 2 insertions(+), 20 deletions(-) delete mode 100644 homework-classes/Observer.js diff --git a/homework-classes/Observer.js b/homework-classes/Observer.js deleted file mode 100644 index 26b88195b..000000000 --- a/homework-classes/Observer.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -{ - class Observer { - constructor(Observable) { - Observable.subscribe(this); - } - - update() { - throw new Error('Observer: the `update` method should be overridden.'); - } - } - - window.Observer = Observer; -} diff --git a/homework-classes/View.js b/homework-classes/View.js index 17511e2c3..61a6f1899 100644 --- a/homework-classes/View.js +++ b/homework-classes/View.js @@ -1,11 +1,9 @@ 'use strict'; { - const { Observer } = window; - - class View extends Observer { + class View { constructor(model, account) { - super(model); + model.subscribe(this); this.model = model; this.header = null; this.select = null; diff --git a/homework-classes/index.html b/homework-classes/index.html index 8a2fffaa4..f58a1e2e3 100644 --- a/homework-classes/index.html +++ b/homework-classes/index.html @@ -22,7 +22,6 @@
- From 5448828f3681fc8ef60ecc83222a11a5ec3f32b9 Mon Sep 17 00:00:00 2001 From: Jim Cramer Date: Mon, 26 Aug 2019 22:53:01 +0200 Subject: [PATCH 10/77] Split up View into multiple classes --- homework-classes/App.js | 20 +++++- homework-classes/ContributorsView.js | 28 ++++++++ homework-classes/ErrorView.js | 28 ++++++++ homework-classes/HeaderView.js | 33 +++++++++ homework-classes/RepoView.js | 28 ++++++++ homework-classes/Util.js | 27 +++++++ homework-classes/View.js | 101 --------------------------- homework-classes/index.html | 6 +- homework-classes/style.css | 1 + 9 files changed, 168 insertions(+), 104 deletions(-) create mode 100644 homework-classes/ContributorsView.js create mode 100644 homework-classes/ErrorView.js create mode 100644 homework-classes/HeaderView.js create mode 100644 homework-classes/RepoView.js create mode 100644 homework-classes/Util.js delete mode 100644 homework-classes/View.js diff --git a/homework-classes/App.js b/homework-classes/App.js index 7b0cff181..6fdf0653d 100644 --- a/homework-classes/App.js +++ b/homework-classes/App.js @@ -16,12 +16,28 @@ }, }; - const { Model, View } = window; + const { Model, HeaderView, RepoView, ContributorsView, ErrorView } = window; + const { createAndAppend } = window.Util; class App { constructor(account) { + const root = document.getElementById('root'); + const header = createAndAppend('header', root, { class: 'header' }); + this.mainContainer = createAndAppend('main', root, { + id: 'main-container', + }); + const model = new Model(account); - this.view = new View(model, account); + model.subscribe(this); + model.subscribe(new HeaderView(model, account, header)); + model.subscribe(new RepoView(this.mainContainer)); + model.subscribe(new ContributorsView(this.mainContainer)); + model.subscribe(new ErrorView(this.mainContainer)); + model.fetchData(); + } + + update() { + this.mainContainer.innerHTML = ''; } } diff --git a/homework-classes/ContributorsView.js b/homework-classes/ContributorsView.js new file mode 100644 index 000000000..8dca2669b --- /dev/null +++ b/homework-classes/ContributorsView.js @@ -0,0 +1,28 @@ +'use strict'; + +{ + const { createAndAppend } = window.Util; + + class ContributorsView { + constructor(mainContainer) { + this.mainContainer = mainContainer; + } + + update(state) { + if (!state.error) { + this.render(state.contributors); + } + } + + /** + * Renders the list of contributors + * @param {Object[]} contributors An array of contributor objects + */ + render(contributors) { + // TODO: replace this comment and the console.log with your own code + console.log('renderContributors', contributors); + } + } + + window.ContributorsView = ContributorsView; +} diff --git a/homework-classes/ErrorView.js b/homework-classes/ErrorView.js new file mode 100644 index 000000000..40e35e8f6 --- /dev/null +++ b/homework-classes/ErrorView.js @@ -0,0 +1,28 @@ +'use strict'; + +{ + const { createAndAppend } = window.Util; + + class ErrorView { + constructor(mainContainer) { + this.mainContainer = mainContainer; + } + + update(state) { + if (state.error) { + this.render(state.error); + } + } + + /** + * Renders an error for the 'error' message type. + * @param {Error} error An Error object + */ + render(error) { + // TODO: replace this comment and the console.log with your own code + console.log('renderError', error); + } + } + + window.ErrorView = ErrorView; +} diff --git a/homework-classes/HeaderView.js b/homework-classes/HeaderView.js new file mode 100644 index 000000000..ac902b411 --- /dev/null +++ b/homework-classes/HeaderView.js @@ -0,0 +1,33 @@ +'use strict'; + +{ + const { createAndAppend } = window.Util; + + class HeaderView { + constructor(model, account, header) { + this.model = model; + this.account = account; + this.header = header; + this.select = null; + } + + update(state) { + if (!this.select && !this.error) { + this.render(state.repos); + } + } + + /** + * Renders the data for the 'select' message type. Create a element - * and its
Creative Commons License
This work is licensed under a Creative Commons Attribution 4.0 International License. diff --git a/Week1/MAKEME.md b/Week1/MAKEME.md index 40c09779b..515032461 100644 --- a/Week1/MAKEME.md +++ b/Week1/MAKEME.md @@ -155,7 +155,9 @@ _**Do not change or delete any files outside of the `homework` folder!**_ **`style.css`** -- Add your own styling. +- Add your own CSS styling. Use `style.css` for all your styling your HTML. Avoid using JavaScript for styling unless there is a genuine need. + + **You are not allowed to use a CSS library such as Bootstrap.** **Hints:** diff --git a/Week1/README.md b/Week1/README.md index 0936ae4fc..4e586c32d 100644 --- a/Week1/README.md +++ b/Week1/README.md @@ -3,34 +3,73 @@ ``` In week one we will discuss the following topics: • Structure for a basic SPA (Single Page Application) -• XMLHttpRequests +• AJAX & XMLHttpRequests • API calls ``` Here are resources that we like you to read as a preparation for the first lecture: -### Fundamentals +## 1. DOM manipulation -- [XMLHttpRequest](../../../../fundamentals/blob/master/fundamentals/XMLHttpRequest.md) +To refresh your DOM manipulation skills, watch this YouTube video series from Traversy Media: -### APIs +- [JavaScript DOM Crash Course](https://youtu.be/0ik6X4DJKCc). -- Read about APIS: https://www.programmableweb.com/api-university/what-are-apis-and-how-do-they-work -- Traversy Media (YouTube, 18 mins): [What Is A RESTful API? Explanation of REST & HTTP](https://youtu.be/Q-BpqyOT3a8). +You will be using these particular DOM manipulation methods and properties in the JS3 homework for the next three weeks: -### AJAX & XMLHttpRequests +#### Course Video Part 1 (39 mins): + +- `document.getElementById()` +- `element.textContent` + +#### Course Video Part 2 (21 mins): + +- `document.createElement()` +- `element.setAttribute()` +- `element.appendChild()` + +#### Course Video Part 3 (34 mins): + +- `change` event (` element - - const root = document.getElementById('root'); - - Util.createAndAppend('h1', root, { text: 'It works!' }); // TODO: replace with your own code - - try { - const repos = await Util.fetchJSON(url); - this.repos = repos.map(repo => new Repository(repo)); - // TODO: add your own code here - } catch (error) { - this.renderError(error); - } - } - - /** - * Removes all child elements from a container element - * @param {*} container Container element to clear - */ - static clearContainer(container) { - while (container.firstChild) { - container.removeChild(container.firstChild); - } - } - - /** - * Fetch contributor information for the selected repository and render the - * repo and its contributors as HTML elements in the DOM. - * @param {number} index The array index of the repository. - */ - async fetchContributorsAndRender(index) { - try { - const repo = this.repos[index]; - const contributors = await repo.fetchContributors(); - - const container = document.getElementById('container'); - App.clearContainer(container); - - const leftDiv = Util.createAndAppend('div', container); - const rightDiv = Util.createAndAppend('div', container); - - const contributorList = Util.createAndAppend('ul', rightDiv); - - repo.render(leftDiv); - - contributors - .map(contributor => new Contributor(contributor)) - .forEach(contributor => contributor.render(contributorList)); - } catch (error) { - this.renderError(error); - } - } - - /** - * Render an error to the DOM. - * @param {Error} error An Error object describing the error. - */ - renderError(error) { - console.log(error); // TODO: replace with your own code - } -} - -const HYF_REPOS_URL = 'https://api.github.com/orgs/HackYourFuture/repos?per_page=100'; - -window.onload = () => new App(HYF_REPOS_URL); diff --git a/homework/Contributor.js b/homework/Contributor.js deleted file mode 100644 index c74775216..000000000 --- a/homework/Contributor.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -/* global Util */ - -// eslint-disable-next-line no-unused-vars -class Contributor { - constructor(contributor) { - this.contributor = contributor; - } - - /** - * Render the contributor info to the DOM. - * @param {HTMLElement} container The container element in which to render the contributor. - */ - render(container) { - // TODO: replace the next line with your code. - Util.createAndAppend('pre', container, { text: JSON.stringify(this.contributor, null, 2) }); - } -} diff --git a/homework/Repository.js b/homework/Repository.js deleted file mode 100644 index 86b72d71d..000000000 --- a/homework/Repository.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict'; - -/* global Util */ - -// eslint-disable-next-line no-unused-vars -class Repository { - constructor(repository) { - this.repository = repository; - } - - /** - * Render the repository info to the DOM. - * @param {HTMLElement} container The container element in which to render the repository. - */ - render(container) { - // TODO: replace the next line with your code. - Util.createAndAppend('pre', container, { text: JSON.stringify(this.repository, null, 2) }); - } - - /** - * Returns an array of contributors as a promise - */ - fetchContributors() { - return Util.fetchJSON(this.repository.contributors_url); - } - - /** - * Returns the name of the repository - */ - name() { - return this.repository.name; - } -} diff --git a/homework/Util.js b/homework/Util.js deleted file mode 100644 index 981fea47a..000000000 --- a/homework/Util.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; - -// eslint-disable-next-line no-unused-vars -class Util { - static createAndAppend(name, parent, options = {}) { - const elem = document.createElement(name); - parent.appendChild(elem); - Object.keys(options).forEach(key => { - const value = options[key]; - if (key === 'text') { - elem.textContent = value; - } else { - elem.setAttribute(key, value); - } - }); - return elem; - } - - static fetchJSON(url) { - return new Promise((resolve, reject) => { - const xhr = new XMLHttpRequest(); - xhr.open('GET', url); - xhr.responseType = 'json'; - xhr.onload = () => { - if (xhr.status < 400) { - resolve(xhr.response); - } else { - reject(new Error(`Network error: ${xhr.status} - ${xhr.statusText}`)); - } - }; - xhr.onerror = () => reject(new Error('Network request failed')); - xhr.send(); - }); - } -} diff --git a/homework/hyf.png b/homework/hyf.png old mode 100644 new mode 100755 index a4626c91cc28dd92f3a8843aa3919c472d609984..76bc5a13b4a53ea97a6c09ca5fe399f40ab20e4e GIT binary patch literal 9116 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 GkN*WepL25n literal 6971 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

yYR!c>hm$${Gy*N9&8XDjZ!65Rw_ciO4 z0&aFLEIenv__Nv_t*>({#yj`xE&E==WFBy2C{3B&xkGWnzEKCWENz0#Jwmk4zVlFkwA zUE)Mh&#vxEf;BeYy)nJloYs7`DnyjD`0Y^YQxyIS4d+#4vCtj@wK(UEa7cSZ{%+_S zF5bPJcnZ{2mGzB;1m2r>)!K>%2Gu6MG)9*tE%!%>7iF8elLW^N_ATFxu1g9EHe#TP zioN@YLEDN*VPJ4@2<(Btz*yzfz(+*aind)cZ;In-Ma_C>M7IU7bV^BSGjy@pn_Oiy zl(>YaYv~ZLZ6?2| zypqx#xM_@it9|v)xZLTBUY$2}F#h#dZw(FfZMj~GCAIsW9-ejAu^{m6fGn&mwBazA z$4SkC7#JSJ5ORgz?e8Za7blKG zizmAOF6s_0y+`YkEtdk66Bg{o)5UJp?R6bosX}uWa5r9Z;`c2J>xic=TTI`dXBr*WBCNn29fqV6ysrW=%FRy~JIbo7vs+uqhLB(6-tKNnYKpCmouZ+D4Ut!foH9vbFwA+LF zI7vtr2nkSgSy6J!bGN8T54?{ONFInoHx(5ujzh>RfnKf&aCZm;~Lq@38Pp8iO=Vl3`;QmS7? z>df*6iV+(X9gIBIsiWyB&yQYTtgLi&bp8{}c6k5psn*E*JjN>kJ>x?S?L9m?e5`+Yb*8W^Xi^TEM;a8OWq*Wp?nQa`5QB q{eMOe|IHi!$Di^1?!}AeXDJlZH8z|Z3FM~O3k6wKnM$dzKmQAHWO%^< diff --git a/homework/index.html b/homework/index.html old mode 100644 new mode 100755 diff --git a/homework/index.js b/homework/index.js old mode 100644 new mode 100755 index d3a97645e..3886cbac9 --- a/homework/index.js +++ b/homework/index.js @@ -6,7 +6,7 @@ xhr.open('GET', url); xhr.responseType = 'json'; xhr.onload = () => { - if (xhr.status < 400) { + if (xhr.status >= 200 && xhr.status <= 299) { cb(null, xhr.response); } else { cb(new Error(`Network error: ${xhr.status} - ${xhr.statusText}`)); @@ -19,8 +19,7 @@ function createAndAppend(name, parent, options = {}) { const elem = document.createElement(name); parent.appendChild(elem); - Object.keys(options).forEach(key => { - const value = options[key]; + Object.entries(options).forEach(([key, value]) => { if (key === 'text') { elem.textContent = value; } else { @@ -30,18 +29,26 @@ return elem; } + function renderRepoDetails(repo, ul) { + createAndAppend('li', ul, { text: repo.name }); + } + function main(url) { - fetchJSON(url, (err, data) => { + fetchJSON(url, (err, repos) => { const root = document.getElementById('root'); if (err) { - createAndAppend('div', root, { text: err.message, class: 'alert-error' }); - } else { - createAndAppend('pre', root, { text: JSON.stringify(data, null, 2) }); + createAndAppend('div', root, { + text: err.message, + class: 'alert-error', + }); + return; } + const ul = createAndAppend('ul', root); + repos.forEach(repo => renderRepoDetails(repo, ul)); }); } - const HYF_REPOS_URL = 'https://api.github.com/orgs/HackYourFuture/repos?per_page=100'; - + const HYF_REPOS_URL = + 'https://api.github.com/orgs/HackYourFuture/repos?per_page=100'; window.onload = () => main(HYF_REPOS_URL); } diff --git a/homework/style.css b/homework/style.css old mode 100644 new mode 100755 index a8985a8a5..90d106051 --- a/homework/style.css +++ b/homework/style.css @@ -1,3 +1,3 @@ .alert-error { - color: red; -} \ No newline at end of file + color: red; +} diff --git a/package.json b/package.json old mode 100644 new mode 100755 index fd3398c5b..a3233dcca --- a/package.json +++ b/package.json @@ -1,22 +1,20 @@ { - "name": "hyf-js3-homework", + "name": "javascript3", "version": "1.0.0", - "description": "GitHub API application", + "description": "Course content for the JavaScript3 module", + "repository": "https://github.com/HackYourFuture/JavaScript3.git", "scripts": { "lint": "eslint homework", "test": "npm run lint" }, - "author": "Jim Cramer", + "author": "HackYourFuture", "license": "CC-BY-4.0", - "devDependencies": { - "eslint": "^5.9.0", - "eslint-config-airbnb": "^17.1.0", - "eslint-config-airbnb-base": "^13.1.0", - "eslint-config-prettier": "^3.3.0", - "eslint-plugin-import": "^2.14.0", - "eslint-plugin-jsx-a11y": "^6.1.2", - "eslint-plugin-prettier": "^3.0.0", - "eslint-plugin-react": "^7.11.1", - "prettier": "^1.15.2" + "dependencies": { + "eslint": "^6.2.0", + "eslint-config-airbnb-base": "^14.0.0", + "eslint-config-prettier": "^6.0.0", + "eslint-plugin-import": "^2.18.2", + "eslint-plugin-prettier": "^3.1.0", + "prettier": "^1.18.2" } } diff --git a/prettier.config.js b/prettier.config.js old mode 100644 new mode 100755 index ee80efd56..8b959e312 --- a/prettier.config.js +++ b/prettier.config.js @@ -1,5 +1,4 @@ module.exports = { - printWidth: 100, singleQuote: true, trailingComma: 'all', bracketSpacing: true, From 5750a0a62570eab6ed0805c1cae49f46cd49bf24 Mon Sep 17 00:00:00 2001 From: Noer Paanakker Date: Thu, 19 Sep 2019 09:40:46 +0200 Subject: [PATCH 30/77] finished readings --- Week1/README.md | 1 + Week2/README.md | 50 ++++++++++++++++++++++++++--- Week3/README.md | 83 ++++++++++++++++++++++++++++++++++++++++++------- 3 files changed, 119 insertions(+), 15 deletions(-) diff --git a/Week1/README.md b/Week1/README.md index 2cfe67fd4..77d92f629 100644 --- a/Week1/README.md +++ b/Week1/README.md @@ -96,6 +96,7 @@ Check the following resources to learn more about XHR. - [XMLHttpRequest](https://github.com/hackyourfuture/fundamentals/blob/master/fundamentals/XMLHttpRequest.md) - [AJAX Crash Course](https://www.youtube.com/watch?v=82hnvUYY6QA) +- [Sending JavaScript Http Requests with XMLHttRequest](https://www.youtube.com/watch?v=4K33w-0-p2c) ## 3. Modules & Libraries diff --git a/Week2/README.md b/Week2/README.md index 9b05795cf..93af93c93 100644 --- a/Week2/README.md +++ b/Week2/README.md @@ -24,6 +24,19 @@ function aFunction() { } ``` +You did so using an old version of JavaScript. + +But if you've ever used `arrow` functions (which you'll learn more about in the next section), you did so using a newer version of JavaScript. + +That's good and all, but why is this important to differentiate? There are several reasons: + +- Each feature (and its updates) of a language is made to solve a specific problem. It's important to know the context and purpose of each in order to know how to use it +- Software is always evolving. This means that there are different versions that different users might be using. This means not every feature will work for every application. + +That's why it's important to know a little about the history of JavaScript: it will make you think of JavaScript (and hopefully software in general) as a continually evolving thing, as opposed to "just a bunch of concepts and techniques you need to memorize". + +Check the following resources out to learn more about this: + - [The History of JavaScript | Why is JavaScript also called ECMAScript?](https://www.youtube.com/watch?v=JpwxjkpZfhY) - [The Weird History of JavaScript](https://www.youtube.com/watch?v=Sh6lK57Cuk4) @@ -37,7 +50,7 @@ But what if you want to have callbacks within callbacks... within callbacks? Thi - [Callback Hell](http://callbackhell.com/) -This is where Promises come in. The concept of a Promise, in execution, doesn't add anything new. It does exactly what callbacks aim to do, which is enabling asynchronous actions: for example, clicking a button to load in an image, while still being able to navigate the webpage. +This is where `Promises` come in. The concept of a Promise, in execution, doesn't add anything new. It does exactly what callbacks aim to do, which is enabling asynchronous actions: for example, clicking a button to load in an image, while still being able to navigate the webpage. What a Promise does is make writing callbacks more readable for you, the developer. This is its main benefit. In effect, you could call Promises the updated version of callbacks. Callbacks version 2.0. @@ -49,18 +62,47 @@ Go through the following resources to learn more about Promises: ## 3. Arrow functions -One of a programmer's favorite things to do is to write clean and concise code. Arrow functions are a new way within +One of a programmer's favorite things to do is to write clean and concise code. Arrow functions are a new way to write functions, given to us by the ECMAScript 6 (The software standard JavaScript is based upon) update of JavaScript. + +It is written like this: + +```js +// Arrow function +() => {}; +``` +Go through the following resources to learn more about why they're important: + +- [JavaScript ES6 Arrow Functions](https://www.youtube.com/watch?v=h33Srr5J9nY) - [Let's learn ES6 - Arrow functions](https://www.youtube.com/watch?v=oTRujqZYhrU) +- [When (and why) you should use ES6 arrow functions — and when you shouldn’t](https://www.freecodecamp.org/news/when-and-why-you-should-use-es6-arrow-functions-and-when-you-shouldnt-3d851d7f0b26/) + +### The `this` keyword + +In JavaScript, like in any other programming language you'll find, there are certain special keywords that always create a specific effect. The `this` keyword is one of those. + +In everyday communication we use words like "this" or "that" whenever we want to refer to things in the world or something someone said. It's similarly used in JavaScript. + +Simply put: `this` refers to any object it's defined in. The global object, `window` is the default value of `this`. However, anything a new object is created will have its own `this` value. + +Go through the following resources to learn more about `this`: + +- [Understanding "this" in JavaScript](https://www.codementor.io/dariogarciamoya/understanding--this--in-javascript-du1084lyn) +- [JavaScript "this" keyword](https://www.youtube.com/watch?v=gvicrj31JOM) ## 4. Fetch API Last week you learned about making API calls. You learned how to do this using the XHR object, which we can access through the browser's `window` object. -As we've learned in the previous sections, JavaScript as a language evolves. But so do browsers! +Now as we've learned in the previous sections, JavaScript as a language evolves continually. But so do browsers! New features get added to increase the user experience and make life easier for developers. + +One of those features added to browsers is an upgraded version of the XHR object. It's called `fetch` and it's the modern way to make API calls. It incorporates Promises, making it easier to handle your server responses. + +A `fetch` function is now provided in the global `window` scope in the browser. You can check it out by opening your developers tools and searching for `fetch`. Keep in mind that this only counts for certain browser version. To figure out which browsers can use fetch, check [this](https://caniuse.com/#feat=fetch) out. -It's a modern way to make API calls. It incorporates Promises. A `fetch` function is now provided in the global `window` scope in the browser. You can check it out by opening your developers tools and searching for `fetch`. +Learn more about `fetch`: +- [Fetch API Introduction](https://www.youtube.com/watch?v=Oive66jrwBs) - [Fetch() - Working with Data and APIs in JavaScript](https://www.youtube.com/watch?v=tc8DU14qX6I) ## Finished? diff --git a/Week3/README.md b/Week3/README.md index f3aa0912a..bc417900d 100644 --- a/Week3/README.md +++ b/Week3/README.md @@ -61,15 +61,25 @@ Almost anything that evolves within programming does so to solve a certain probl The problems that OOP tries to solve is the question we saw before: how can we write code in an organized and reusable fashion? -The answer that OOP gives us can be summarised in the following 4 pillars: +The answer that OOP gives us can be summarised in 4 pillars. To illustrate these pillars let's use a simple example: -1. **Encapsulation**: bundling data and operations (that manipulate that data) together, and data hiding. Putting objects inside of a 'capsule' we can prevent direct manipulation by outside sources. Reducing dependencies between objects, so that change in one place doesn't affect the rest of the application. +```js +const person = { + name: 'Mohammad', + age: 28, + walk() { + return `${this.name} is walking!`; + }, +}; +``` + +1. **Encapsulation**: In the example data and operations (that manipulate that data)are grouped together. This is called `encapsulation`. The main benefit is that this keeps our code organised. The second benefit is that putting objects inside of a 'capsule' we can prevent direct manipulation by outside sources, this is called `data hiding`. This reduces dependencies between objects, so that change in one place doesn't affect the rest of the application. -2. **Abstraction**: Complexity of logic hidden away, creating a simpler interface (remote controller to a tv). Only expose the essentials. Abstracting away complexities to create a +2. **Abstraction**: Let's say we had a Complexity of logic hidden away, creating a simpler interface (remote controller to a tv). Only expose the essentials. Abstracting away complexities to create an easier to use element. 3. **Inheritance**: eliminates redundant code by inheriting properties and methods in new instances. This encourages code reusability. -4. **Polymorphism**: an object can have many forms of expression, depending on the context. +4. **Polymorphism**: an object can have many forms of expression, depending on the context. Let's say we inherit Any class that exists or is made follows these pillars. @@ -97,31 +107,82 @@ const anObj = { }; ``` -This is called an `object literal`, and it's a valid way of creating an object. However, writing it like this abstracts away a lot of what's happening behind the scenes. +This is called an `object literal`, and it's a valid way of creating an object. However, writing it like this "abstracts away" a lot of what's happening behind the scenes. + +> To abstract away refers to intentionally hiding the details of how something complex works in order to simplify things conceptually. For example, the remote to your television is a complex device, but all of this is abstracted away so you don't have to deal with it. You just press the ON button and it works. + +You can write the same thing by using the Object `constructor function`. + +``` + +``` -The same thing +Well what is a constructor function ? Let's start at the beginning: `factory functions`. ### Factory functions -What if we want to create hundreds of object instances? +If we want to create an object we can just use an `object literal` and we're done. But what if we want to create hundreds of object instances of that same object? + +For that we use `factory functions`. Don't let the name mislead you though, a factory function is just a regular function. However, the single differentiating factor is that it always returns an object instance: it is a factory that produces object instances, hence the name `factory function`. Here's an example: + +```js +// Defining a blueprint for a person: +function createPerson(name, age) { + var obj = { + name: name, + age: age, + walk: function() { + console.log(`${this.name} is walking!`); + }, + }; + // other code to manipulate our object in some way here + return obj; +} +``` + +This is the most simple way of defining a `class` and creating object instances from it. Now every time we call this function we're creating a new person object. + +```js +const noer = createPerson('Noer', 27); +const wouter = createPerson('Wouter', 33); +const federico = createPerson('Federico', 32); +``` + +Go through the following to learn more about factory functions: - [The Factory Pattern](https://www.youtube.com/watch?v=0jTfc4wY6bM) - [JavaScript Factory Functions](https://www.youtube.com/watch?v=jpegXpQpb3o) ### Constructor functions +`Constructor functions` are ordinary functions that have a special purpose: to create object instances. You can consider them the more advanced version of `factory functions`. + +Here's an example: + +```js +// // Defining a blueprint for a person: +function Person(name, age) { + this.name = name; + this.age = age; +} +``` + +The difference with a factory function is the way to instantiate it. Instead of just calling it we have to use the keyword `new`, like so: + +```js +const noer = new Person('Noer', 27); +``` + - [JavaScript Constructor Functions](https://www.youtube.com/watch?v=23AOrSN-wmI) - [Constructors and object instances](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Object-oriented_JS#Constructors_and_object_instances) ### Classes -Like mentioned before, a `class` is a blueprint/template that represents a real-world entity. Whenever we want to create a version of this class, we `instantiate` it: in other words, we're creating a object. - As you've learned in the previous section, in JavaScript we can do this using `factory/constructor function`. -Since ES6 we can +Since ES6 we can make use of the `class` keyword, which is a way to create constructor objects as well. It's essentially the same thing as a constructor function, only written in a clearer and more straightforward way. -It's essentially the same thing as a constructor function, only written in a clearer and more straightforward way. +Go through the following to learn more: - [The Class](https://www.youtube.com/watch?v=sJvPXb_lmPE) - [An overview of ES6 classes](https://thecodebarbarian.com/an-overview-of-es6-classes) From 312fc90b98aaf0a76afe94aa8bf0e4e40c945eb9 Mon Sep 17 00:00:00 2001 From: Noer Paanakker Date: Thu, 19 Sep 2019 10:06:01 +0200 Subject: [PATCH 31/77] final test added --- README.md | 2 +- test.md | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 test.md diff --git a/README.md b/README.md index c0b58ddf8..6e4530aba 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ With this out of the way we can get started! | 1. | Application Programming Interface (API), AJAX, Modules & Libraries | [Reading W1](/Week1/README.md) | [Homework W1](/Week1/MAKEME.md) | [Lesson Plan W1](/Week1/LESSONPLAN.md) | | 2. | Promises, Fetch API, JavaScript Versions, 'this' keyword, Arrow functions | [Reading W2](/Week2/README.md) | [Homework W2](/Week2/MAKEME.md) | [Lesson Plan W1](/Week1/LESSONPLAN.md) | | 3. | Object-Oriented Programming (OOP), ES6 Classes, Async/await, Thinking like a programmer III | [Reading W3](/Week3/README.md) | [Homework W3](/Week3/MAKEME.md) | [Lesson Plan W1](/Week1/LESSONPLAN.md) | -| 4. | Final JavaScript Test | [Details]() | - | - | +| 4. | Final JavaScript Test | [Details](test.md) | - | - | ## Finished? diff --git a/test.md b/test.md new file mode 100644 index 000000000..448f045f7 --- /dev/null +++ b/test.md @@ -0,0 +1,35 @@ +# Final JavaScript Test + +It will be about all the JavaScript you’ve learned, from JavaScript1 to JavaScript3. + +## Purpose of the test + +We want to make sure you understand and master the material well enough to confidently go on in the program. We also want to see if you can keep up with the pace. +Test material +The test will be about all main JavaScript concepts we have discussed for the past weeks of JS. The following are the most important that will be tested: + +- `Functions & Variables` +- `Scope` +- `Loops` +- `Callbacks & Promises` +- `Array functions` +- `Conditional statements` +- `DOM manipulations` +- `XMLHttpRequests & API calls` +- `Try…catch` + +## How to prepare optimally + +For each of these you must be able to (1) write the basic code structure of it, (2) know when to apply them, and (3) apply it coherently with the rest of your code. + +## What type of questions to expect + +You are expected to solve several coding challenges. These include DOM manipulation and making API Calls. + +## What tools to use + +This test will be done on your laptop. You may use Google to help you out, but not the code from your homeworks. + +## Time and location + +The test will be held in the usual place, will start at 11.00 and takes about an hour to complete. Doors will open at 10:45 the latest so please be in time. From 3970aca4b37f820c2a16b8c58d0314a15523f1d6 Mon Sep 17 00:00:00 2001 From: Noer Paanakker Date: Wed, 16 Oct 2019 16:52:50 +0200 Subject: [PATCH 32/77] week 3 reading update --- Week1/MAKEME.md | 2 +- Week3/README.md | 38 +++++++++++++++++++++++++++++++++----- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/Week1/MAKEME.md b/Week1/MAKEME.md index bfb09b1c8..529aa700a 100644 --- a/Week1/MAKEME.md +++ b/Week1/MAKEME.md @@ -136,7 +136,7 @@ The returned JSON data contains some basic information about each repository, su Do the following to fulfill this week's requirements: -1. Modify **`imdex.js`**: Modify whatever you need in order to successfully make an API call to the HackYourFuture GitHub account and display the results inside the DOM. It is not likely that you will need to modify `fetchJSON()` and `createAndAppend()`. +1. Modify **`index.js`**: Modify whatever you need in order to successfully make an API call to the HackYourFuture GitHub account and display the results inside the DOM. It is not likely that you will need to modify `fetchJSON()` and `createAndAppend()`. 2. Add your own CSS styling inside **`style.css`**. Avoid using JavaScript for styling unless there is a genuine need. **You are not allowed to use a CSS library such as Bootstrap.** diff --git a/Week3/README.md b/Week3/README.md index bc417900d..6d2d13b8c 100644 --- a/Week3/README.md +++ b/Week3/README.md @@ -32,7 +32,7 @@ However, in the evolution of programming languages programmers started to think In this week you'll be exposed to one such programming style that evolved: `object oriented programming` (or OOP for short). OOP is a fundamentally different way of writing software: instead of breaking up a problem in variables and functions that operate on those variables, we break problems up into "entities" that interact with each other. -> Just to make sure you completely get the idea here: OOP is about a different way of thinking about how to write software. The concepts of variables, functions, promises, API (calls) and error handling all still apply. It's just that the way code is organised is differently. Instead of creating long procedures, we create objects that interact with each other. +> Just to make sure you completely get the idea here: OOP is about a different way of thinking about how to write software. The concepts of variables, functions, promises, API (calls) and error handling all still apply. It's just that the way code is organised is different. Instead of creating long procedures, we create objects that interact with each other. For further study, check the following: @@ -178,7 +178,7 @@ const noer = new Person('Noer', 27); ### Classes -As you've learned in the previous section, in JavaScript we can do this using `factory/constructor function`. +As you've learned in the previous section, in JavaScript we can do this using `factory or constructor functions`. Since ES6 we can make use of the `class` keyword, which is a way to create constructor objects as well. It's essentially the same thing as a constructor function, only written in a clearer and more straightforward way. @@ -198,17 +198,28 @@ const someFunc(param1, callback) { } ``` -Then we learned about how Promises are an improved on callbacks, by providing the developer with a more readable syntax that avoids **callback hell**. We can call them callbacks version 2.0. +Then we learned about how Promises are an improvement upon callbacks, by providing the developer with a more readable syntax that avoids **callback hell**. We can call them callbacks version 2.0. Here's the basic structure again: ```js new Promise(reject, resolve).then(...); ``` -And now we've arrived at the latest upgrade of the callback mechanism: `async/await`. +And now we've arrived at the latest upgrade of the callback mechanism: `async/await`. This construct is part of **ECMAScript 6** and its main benefit is to make using callbacks even more readable. Here's how it might look in action: ```js +async fetchData () { + const fetchedData = await fetch('https://randomuser.me/api/'); + const parsedData = await fetchedData.json(); + return parsedData; +} ``` +This new construct makes use of the Promise object, in the same way that Promises make use of callback functions. + +How do we use it? We put the keyword `async` in front of the function declaration that will contain asynchronous code. Then in every line that returns the Promise we put the keyword `await` in front. + +For more research, check the following resources: + - [The Evolution of Callbacks, Promises & Async/Await](https://www.youtube.com/watch?v=gB-OmN1egV8) - [Async JS Crash Course - Callbacks, Promises, Async/Await](https://www.youtube.com/watch?v=PoRJizFvM7s) @@ -216,9 +227,26 @@ And now we've arrived at the latest upgrade of the callback mechanism: `async/aw As you might have noticed, the Async/Await doesn't give us a way to do error handling like it does in the Promise object. -In the Promise object we have access to the `catch()` function, +In the Promise object we are given access to the `catch()` function, a function whose sole job it is to "catch errors". "Catching errors" is a phrase developers use to indicate various things: + +1. that a line of code has caused an error +2. that the program has shutdown to prevent any other errors from happening +3. that the application gives feedback to the developer and/or user + +In the Promise object, we can use the function `catch` to take care of errors. It takes in a callback, which automatically receives an error object. Here's an example: + +```js +Promise.catch(function(error) { + console.log(error); +}); +``` + +With the Async/Await construction, we don't get that. So instead we have to use some other solution: the `try... catch` block. It's also an addition to the language, given to us by **ECMAScript 6**. + +Learn more about it here: - [JavaScript Try Catch & Error Handling ES6 Tutorial](https://www.youtube.com/watch?v=ye-aIwGJKNg) +- [Error handling, "try..catch"](https://javascript.info/try-catch) ## Finished? From 150b89985a1c60390d4944f73035756b65b801a0 Mon Sep 17 00:00:00 2001 From: Noer Paanakker Date: Mon, 21 Oct 2019 10:57:38 +0200 Subject: [PATCH 33/77] finalize homeworks w2/w3 --- README.md | 7 ++++--- Week2/MAKEME.md | 1 + Week3/MAKEME.md | 14 ++++---------- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 6e4530aba..c3e30339c 100644 --- a/README.md +++ b/README.md @@ -5,10 +5,11 @@ ![JavaScript3](./assets/javascript3.png) -Welcome to JavaScript3! Congratulations on making it this far. You're well on your way to the top. +Welcome to JavaScript3! Congratulations on making it this far. You're well on your way to the top! -A big part of being a programmer means moving data from one place to another. -In this module you'll be learning about one of the core things of what makes a web developer: working with APIs! +A big part of being a programmer means moving data from one place to another. It also means working with other people's software. In this module you'll be learning about one of the core things of what makes a web developer: working with APIs! + +On top of that you'll also learn how to think differently about how you write your programs. Like in any field, once you've mastered a particular way of doing things you start thinking about how it could be done differently. In programming we call these `paradigms` and in this module you'll one such paradigm: Object-Oriented Programming! ## Learning goals diff --git a/Week2/MAKEME.md b/Week2/MAKEME.md index bb63eb230..3b12e762e 100644 --- a/Week2/MAKEME.md +++ b/Week2/MAKEME.md @@ -65,6 +65,7 @@ The enhanced application should fulfill the following requirements: 4. You should be able to click on the repository name of the selected repository to open a new browser tab with the GitHub page for that repository. 5. You should be able to click on a contributor to open a new browser tab with the GitHub page for that contributor. 6. Your UI should be responsive. Try it with Chrome Developer Tools in the browser, using a mobile phone format and a tablet format, portrait and landscape. +7. The `XMLHttpRequest` in the `fetchJSON` function should be replaced with `fetch`. Hint: Because `fetch` returns a promise out of the box there is no need create a promise yourself with `new Promise(...)`. **Hints:** diff --git a/Week3/MAKEME.md b/Week3/MAKEME.md index f7429ef15..3b8b90831 100644 --- a/Week3/MAKEME.md +++ b/Week3/MAKEME.md @@ -25,24 +25,18 @@ Let's continue exercising those programming muscles! Go through the following ex ## **4. PROJECT: Hack Your Repo III** -> The homework for week 2 will build on the work you did in week 1. You will create a new branch based on the the previous week's branch. +> The homework for week 3 will build on the work you did in week 2. You will create a new branch based on the the previous week's branch. The final week's assignment consists of two parts. In the first part you will update the homework from week 2 (in the `homework` folder). In the second part you will refactor your application to use `ES6 classes`. For this, you need to modify the files in the `homework-classes` folder. -### Step 1: Replace `XMLHttpRequest` with `fetch` - -- Replace `XMLHttpRequest` in the `fetchJSON` function with `fetch`. Because `fetch` returns a promise out of the box there is no need create a promise yourself with `new Promise(...)`. - -> `fetch` does not throw an error for HTTP errors. Review the documentation for [`response.ok`](https://developer.mozilla.org/en-US/docs/Web/API/Response/ok) for a clue how detect HTTP errors. - -### Step 2: `async/await` +### Step 1: `async/await` - Refactor all `.then()` and `.catch()` methods with `async`/`await` and `try...catch`. - Make sure that your error handling code still works. See the instructions from week 2's [homework](../Week2/MAKEME.md) on how to force an error response from GitHub. -### Step 3: OOP and ES6 classes +### Step 2: OOP and ES6 classes This final assignment requires you to go the extra mile and get acquainted with Object Oriented Programming and ES6 classes. @@ -85,7 +79,7 @@ You can conclude the following from this diagram: 3. The **SelectView** class calls the `fetchData()` method from the **Model** class to request a data fetch. -#### Step 4: `axios` +#### Step 3: `axios` 1. Modify the `fetchJSON` static method in **Model.js** to replace **fetch** with **axios**. 2. Add a ` - - ``` - - The `` tag contains a single `

` to which you will need to dynamically append HTML elements through your JavaScript code in `index.js`. - -2. Open `index.js`. This file contains a starter set of code for you to expand. It contains the following three functions: - - | Function | Description | - | ----------------- | ------------------------------------------------------------------------------------------------------------ | - | `fetchJSON` | Uses `XMLHttpRequest` to fetch JSON data from an API end point. This function uses an asynchronous callback. | - | `createAndAppend` | A utility function for easily creating and appending HTML elements. | - | `main` | Contains the start-up code for the application. | - - `index.js` also contains a variable with the URL required for fetching information about the HYF repositories: - - ```js - const HYF_REPOS_URL = - 'https://api.github.com/orgs/HackYourFuture/repos?per_page=100'; - ``` - -3. Open the `index.html` file in your browser. You will see an unordered list with the names of the HYF repositories. - -4. Review the `main()` function in `index.js` and examine how this code fetches the JSON data and calls renders the data as unordered list in the web page. - -5. Take a look at the API URL: - +In the course of the next 3 weeks you'll be writing the necessary code to make all of this work! + +### 4.1 Requirements + +To get started, make sure you're in the right GIT branch: `week1-[YOURNAME]`. Then, navigate to the `hackyourrepo-app` folder and become familiar with the files there. + +This week you're required to (1) setup the HTML structure of the application. In addition, you are expected to (2) style the application to make it user-friendly. + +Here are the requirements for the HTML: + +- Include 3 `
` tags +- Include a ` element - * and its

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 literal 0 HcmV?d00001 diff --git a/Week3/MAKEME.md b/Week3/MAKEME.md index dcdb081fe..debdb95f2 100644 --- a/Week3/MAKEME.md +++ b/Week3/MAKEME.md @@ -13,11 +13,20 @@ _Deadline Monday_ - Fix Requested Changes (if any) on the Pull Request. -## Step 2 +## Step 2: Create a new branch + +1. Make sure that your `week2` branch is checked out and clean. +2. Create a new branch for the week 3 homework: + + ``` + git checkout -b week3 + ``` + +## Step 3 **_Deadline Thursday_** -### 2.1 Preparation +### 3.1 Preparation **Read the fundamental pages on:** @@ -33,7 +42,7 @@ The homework for week 3 will build on the work you did in week 2. You will creat git checkout -b week3 ``` -### 2.2 Assignment +### 3.2 Assignment The assignment consists of two parts. @@ -44,13 +53,13 @@ In the first part you will modify the 'promise' homework in the from week 2 (in In the second part you will 'refactor' your application to use ES6 classes. For this, you need to modify the files in the `homework-classes` folder. -#### 2.2.1 Replace XMLHttpRequest with fetch +#### 3.2.1 Replace XMLHttpRequest with fetch Replace `XMLHttpRequest` in the `fetchJSON` function with `fetch`. Because `fetch` returns a promise out of the box there is no need create a promise yourself with `new Promise(...)`. > `fetch` does not throw an error for HTTP errors. Review the documentation for [`response.ok`](https://developer.mozilla.org/en-US/docs/Web/API/Response/ok) for a clue how detect HTTP errors. -#### 2.2.2 async/await +#### 3.2.2 async/await **Instructions:** @@ -58,38 +67,41 @@ Replace `XMLHttpRequest` in the `fetchJSON` function with `fetch`. Because `fetc 2. Make sure that your error handling code still works. See the week2 MAKEME on how to force an error response from GitHub. -#### 2.2.3 ES6 Classes +#### 3.2.3 Object Orientation and ES6 classes **_Deadline Saturday_** -This final assignment requires you to go the extra mile and master Object Oriented Programming and ES6 classes. +This final assignment requires you to go the extra mile and get acquainted with Object Oriented Programming and ES6 classes. -> The files to be modified are in the **homework-classes** folder. +Object Oriented Programming is a vast topic and in this homework we can only scratch the surface. The approach we have taken for this homework is for you, as aspiring junior developer, to complete an application for which the groundwork has been done by an experienced developer. You may have difficulty understanding the full details of the application, however this is not unlike a real world situation where you will be expected to make relative small modifications to a complex application, without breaking anything. -In this assignment you need to redistribute and adapt the code from `index.js` to the files `App.js`, `Repository.js` and `Contributor.js`. You do not need to modify `Util.js`. +> The relevant files can be found in the **homework-classes** folder. -| File | Description | -| ---------------- | -------------------------------------------------------------------------------------------- | -| `index.html` | The application's HTML file. | -| `App.js` | The `App` class contains the start-up code and manages the overall orchestration of the app. | -| `Repository.js` | The `Repository` class holds code and data for a single repository. | -| `Contributor.js` | The `Contributor` class holds code and data for a single contributor. | -| `Util.js` | The `Util` class contains static helper methods for use in the other classes. | +| File | Description | +| -------------- | -------------------------------------------------------------------------------------------- | +| index.html | The application's HTML file. | +| style.css | CSS styling. | +| hyf.png | The HYF logo. | +| App.js | The **App** class contains the start-up code and manages the overall orchestration of the app. | +| Model.js | The **Model** class is concerned with all data handling (e.g. fetching). Extends the Subject class. | +| View.js | The **View** class is concerned with rendering the data from the Model to the web page. Extends the Observer class. | +| Subject.js | The **Subject** class is a component of a Observer pattern implementation. | +| Observer.js | The **Observer** class is a component of a Observer pattern implementation. | -The `App.js`, `Repository.js` and `Contributor.js` files each contain skeleton code that you can use to migrate portions of your code from `index.js` to. +>For this part of the homework you should need to modify **View.js**, by adding and adapting code from your non-OOP version of the homework to this file. _Read:_ - HYF fundamental: [ES6 Classes](https://github.com/HackYourFuture/fundamentals/blob/master/fundamentals/oop_classes.md#es6-classes) - More on ES6 classes: [ES6 Classes in Depth](https://ponyfoo.com/articles/es6-classes-in-depth) -#### 2.2.4 ARIA-compliance (BONUS) +#### 3.2.4 ARIA-compliance (BONUS) Please review the material from the HTML/CSS module: [Get familiar with Accessible Rich Internet Applications (ARIA)](https://github.com/HackYourFuture/HTML-CSS/tree/master/Week1#get-familiar-with-accessible-rich-internet-applications-aria). For the GitHub application ARIA-compliance means that the Contributors list should either be a native HTML list (i.e. using `ul` and `li` elements) or otherwise marked with an appropriate ARIA **role**. Furthermore, a user should be able to navigate through all interactive elements using the keyboard (e.g., using the **Tab** key). Pressing **Enter** on such an element should be equivalent to clicking the mouse. -#### 2.2.5 Handing in your homework +#### 3.2.5 Handing in your homework If necessary, review the instructions how to [Hand in homework](https://github.com/HackYourFuture/fundamentals/blob/master/fundamentals/homework_pr.md) using GitHub pull request. @@ -117,7 +129,7 @@ If the answer is 'yes' to the preceding questions you are ready to follow these 2. Create a pull request for your `week3` branch. -## Step 3: Read before next lecture +## Step 4: Read before next lecture _Deadline Sunday morning_ diff --git a/homework-classes/App.js b/homework-classes/App.js index 7cc1c5772..d931bbce8 100644 --- a/homework-classes/App.js +++ b/homework-classes/App.js @@ -1,78 +1,29 @@ 'use strict'; -/* global Util, Repository, Contributor */ - -class App { - constructor(url) { - this.mainContainer = null; - this.initialize(url); - } - - /** - * Initialization - * @param {string} url The GitHub URL for obtaining the organization's repositories. - */ - async initialize(url) { - // Add code here to initialize your app - // 1. Create the fixed HTML elements of your page - // 2. Make an initial XMLHttpRequest using Util.fetchJSON() to populate your element + * and its