From f69440782e760ab00286caddba14ec91ecbd54f5 Mon Sep 17 00:00:00 2001 From: Joshua Lewis-Handley Date: Tue, 17 Sep 2019 13:39:06 +0100 Subject: [PATCH 001/106] Test --- 01 Setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/01 Setup.md b/01 Setup.md index 6a44b482..ccd13e2a 100644 --- a/01 Setup.md +++ b/01 Setup.md @@ -1,7 +1,7 @@ # Setup -In this worksheet you will learn how to configure your work environment using VS Code. You should start by installing **Visual Studio Code** (NOT VISUAL STUDIO!) from the [website](https://code.visualstudio.com), note that it might already be installed. If you are using a Coventry University computer and the software is not installed you can do this using AppsAnywhere. + this worksheet you will learn how to configure your work environment using VS Code. You should start by installing **Visual Studio Code** (NOT VISUAL STUDIO!) from the [website](https://code.visualstudio.com), note that it might already be installed. If you are using a Coventry University computer and the software is not installed you can do this using AppsAnywhere. If you are using Windows 10 you will also need to install [Git](https://git-scm.com/download/win), this may already be installed on a Coventry University computer. From fae1963445a6ebc27fc090225855e757d30c5fb5 Mon Sep 17 00:00:00 2001 From: Anir Nathwani Date: Tue, 17 Sep 2019 14:51:43 +0100 Subject: [PATCH 002/106] 1.3.2 --- exercises/02_http/01_url/index.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/exercises/02_http/01_url/index.js b/exercises/02_http/01_url/index.js index c7a9340a..30eac127 100644 --- a/exercises/02_http/01_url/index.js +++ b/exercises/02_http/01_url/index.js @@ -37,12 +37,17 @@ router.get('/anon', ctx => { // anon case }) -router.get('/books/:index', ctx => { - const books = ['The Hobbit', 'Alice in Wonderland', 'The Secret Garden'] +router.get('/books/:index/:index2', ctx => { + const books = ['The Hobbit', 'Alice in Wonderland', 'The Secret Garden','Animal Farm'] const parameters = ctx.params console.log(parameters) - const title = books[parameters.index] - ctx.body = title + if (parameters.index > 3) { + ctx.body = "Number cannot be greater than 3" + }else{ + const title = books[parameters.index] + const title2 = books[parameters.index2] + ctx.body = title + title2 + parameters.index + } }) router.get('/name', ctx => ctx.body = JSON.stringify(ctx.query)) From ffe6e8ce1cedf249c6feee2a9374a486cd733385 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Wed, 18 Sep 2019 08:34:23 +0100 Subject: [PATCH 003/106] added notes on running nodejs on Windows --- 01 Setup.md | 96 ++++++++++++++++++++++++++++------------------------- 1 file changed, 51 insertions(+), 45 deletions(-) diff --git a/01 Setup.md b/01 Setup.md index 6a44b482..6b139c2a 100644 --- a/01 Setup.md +++ b/01 Setup.md @@ -35,6 +35,8 @@ Locate the green **Clone or Download** button and click this. You will see the o ![The Clone Button](exercises/.images/clone01.png) +Make sure the url begins with `https://`, if it begins with `git` you need to click in the small **Use HTTPS** link! + Launch the **terminal** app (Mac and Linux users) or Bash Shell (Windows 10 users). Now use this to navigate to the directory where you want to store the lab materials. You should use the following bash commands: 1. `ls` is used to see the contents of the current directory. @@ -64,14 +66,56 @@ If you are using Windows 10 you will need to carry out some additional steps bef This will open a new Git Bash shell in the project directory. -## 3 Pushing the Changes to GitHub +## 3 Installing NodeJS + +Next we need to install and configure NodeJS. If you are using MacOS or Linux the first task is to install the Node Version Manager tool. You can find detailed [instructions](https://nodesource.com/blog/installing-node-js-tutorial-using-nvm-on-mac-os-x-and-ubuntu/). + +Once installed you may need to restart your computer. Now check it was installed correctly: + +```bash +$ command -v nvm + nvm +``` + +Now we can install the latest version of NodeJS: + +```bash +nvm install node +node -v +``` + +If you are running Windows 10 you need to [download the installer](https://nodejs.org/en/) for the **Current** version of NodeJS (12.10 at the time of writing). + +## 4 Running a Web Server + +Use the terminal to navigate to the `exercises/01_setup/` directory and try running the `index.js` script: + +```shell +$ cd exercises/01_setup/ +$ node index.js + Error: Cannot find module 'koa' +``` + +If you are using Windows 10 you will need to use the command prompt instead and navigate to the `01_setup/` directory. + +Notice you get an error, we need to install the missing module using the _Node Package Manager_ tool. We can then try to run the script again: + +```shell +$ npm install koa +$ node index.js + app listening on port 8080 +``` + +Now we have the server up and running so the final task is to view the web page using the web browser. Simply open the Chrome browser and navigate to localhost:8080 where you should see a message. If this works you are ready to start the lab exercises. + +## 5 Pushing the Changes to GitHub As you work through the lab activities two things are likely to happen: 1. You make changes to the code that you want to push to the forked copy of your repository. 2. You will need to pull any bug fixes from the original repository. -### 3.1 Configuring the Repository +### 5.1 Configuring the Repository Before you start interacting with the GitHub server you need to configure the local repository. Open the Bash Shell and run the following commands: @@ -82,7 +126,9 @@ git config user.email 'doej@coventry.ac.uk' remember to replace the values with you own name and your university email (but without the uni part). -### 3.2 Pushing Changes +### 5.2 Pushing Changes + +**NOTE: You only need to carry out this step when you have make changes to the code! This will normally need to take place each time you complete a "Test Your Understanding" section.** As you save your changes you will see a blue circle against the **Source Control** tab that indicates how many files have been changed, we need to get these changed files up to GitHub. Start by opening the tab, you will see a list of all the files you have changed. @@ -98,9 +144,9 @@ Now you should click on the **Sync** icon (shown below) to push the new commit u At this point you should be able to refresh your GitHub repository page to see the changes. -### 3.3 Pulling from Upstream +### 5.3 Pulling from Upstream -As changes are made to the master repository you will want to merge these into your forked repository. Before you can do this you will need to add a link to the upstream repository. Open a bash shell: +As new materials and resources are added to the original repository (and bugs fixed) you will want to merge these into your forked repository. Before you can do this you will need to add a link to the upstream repository. Open a bash shell: ```bash git remote add upstream https://github.coventry.ac.uk/web/foundation.git @@ -116,43 +162,3 @@ git merge upstream/master ``` Don't worry if you don't understand what is happening, this will be explained in a future lab. - -## 4 Installing NodeJS - -Next we need to install and configure NodeJS. If you are using MacOS or Linux the first task is to install the Node Version Manager tool. You can find detailed [instructions](https://nodesource.com/blog/installing-node-js-tutorial-using-nvm-on-mac-os-x-and-ubuntu/). - -Once installed you may need to restart your computer. Now check it was installed correctly: - -```bash -$ command -v nvm - nvm -``` - -Now we can install the latest version of NodeJS: - -```bash -nvm install node -node -v -``` - -If you are running Windows 10 you need to [download the installer](https://nodejs.org/en/) for the **Current** version of NodeJS (12.10 at the time of writing). - -## 5 Running a Web Server - -Use the terminal to navigate to the `exercises/01_setup/` directory and try running the `index.js` script: - -```shell -$ cd exercises/01_setup/ -$ node index.js - Error: Cannot find module 'koa' -``` - -Notice you get an error, we need to install the missing module using the _Node Package Manager_ tool. We can then try to run the script again: - -```shell -$ npm install koa -$ node index.js - app listening on port 8080 -``` - -Now we have the server up and running so the final task is to view the web page using the web browser. Simply open the Chrome browser and navigate to localhost:8080 where you should see a message. If this works you are ready to start the lab exercises. From ddb628d7485a54d3b011b81148087cd37e71df61 Mon Sep 17 00:00:00 2001 From: harjaus Date: Fri, 20 Sep 2019 17:10:09 +0100 Subject: [PATCH 004/106] Fixed inconsistency with test suite --- exercises/07_unit_testing/todo/modules/todo.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/07_unit_testing/todo/modules/todo.js b/exercises/07_unit_testing/todo/modules/todo.js index 5a034683..f4fdd7b8 100644 --- a/exercises/07_unit_testing/todo/modules/todo.js +++ b/exercises/07_unit_testing/todo/modules/todo.js @@ -9,7 +9,7 @@ module.exports.clear = () => { module.exports.add = (item, qty) => { qty = Number(qty) - if(isNaN(qty)) throw new Error('the quantity must be a number') + if(isNaN(qty)) throw new Error('qty must be a number') data.push({item: item, qty: qty}) } From 660bcf19ea719070573eec694809f78b285763ca Mon Sep 17 00:00:00 2001 From: harjaus Date: Fri, 20 Sep 2019 17:57:26 +0100 Subject: [PATCH 005/106] Added missing file for sheet 06. --- exercises/06_code_quality/nestedCallbacks.js | 61 ++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 exercises/06_code_quality/nestedCallbacks.js diff --git a/exercises/06_code_quality/nestedCallbacks.js b/exercises/06_code_quality/nestedCallbacks.js new file mode 100644 index 00000000..cd3fcc12 --- /dev/null +++ b/exercises/06_code_quality/nestedCallbacks.js @@ -0,0 +1,61 @@ + +'use strict' + +const request = require('request') + +getInput('enter base currency', (err, base) => { + if (err) { + console.log(err.message) + process.exit() + } + base = base.trim() + checkValidCurrencyCode(base, err => { + if (err) { + console.log(err.message) + process.exit() + } + getData(`http://api.fixer.io/latest?base=${base}`, (err, data) => { + if (err) { + console.log(err.message) + process.exit() + } + const obj = JSON.parse(data) + printObject(obj) + process.exit() + }) + }) +}) + +function getInput(prompt, callback) { + try { + process.stdin.resume() + process.stdin.setEncoding('utf8') + process.stdout.write(`${prompt}: `) + process.stdin.on('data', text => callback(null, text)) + } catch(err) { + callback(err) + } +} + +function checkValidCurrencyCode(code, callback) { + code = code.trim() + request('http://api.fixer.io/latest', (err, res, body) => { + if (err) callback(new Error('invalid API call')) + const rates = JSON.parse(body).rates + if (!rates.hasOwnProperty(code)) callback(new Error(`invalid currency code ${code}`)) + callback(null, true) + }) +} + +function getData(url, callback) { + request(url, (err, res, body) => { + if (err) callback(new Error('invalid API call')) + callback(null, body) + }) +} + +function printObject(data) { + const indent = 2 + const str = JSON.stringify(data, null, indent) + console.log(str) +} From 73dfc6a8009b058bd9ec3bbfe1d3721f97996c36 Mon Sep 17 00:00:00 2001 From: harjaus Date: Fri, 20 Sep 2019 18:36:13 +0100 Subject: [PATCH 006/106] Changed sheet to specify which folder --- 06 Code Quality.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/06 Code Quality.md b/06 Code Quality.md index ca40be68..36673e70 100644 --- a/06 Code Quality.md +++ b/06 Code Quality.md @@ -244,7 +244,7 @@ In the example above we store the data returned from the `getData` promise in th ### 6.4 Test Your Knowledge -Run the `promises.js` script, its functionality should be familiar to the `currency.js` script you worked with in chapter 3. +Run the `promises.js` script located in the otherScripts folder. Its functionality should be familiar to the `currency.js` script you worked with in chapter 3. Open the `promises.js` script and study the code carefully. Notice that it defines 5 promises and chains them together. You are going to extend the functionality by defining some additional promises and adding them to the promise chain. @@ -376,7 +376,7 @@ both `printObjectPromise` and `printObjectAsync` behave in exactly the same mann ### 7.3 Test Your Knowledge -Run the `asyncFunctions.js` script. Note that it works in the same way as the previous ones. Open the script and study it carefully. +Run the `asyncFunctions.js` script, located in the otherScripts folder. Note that it works in the same way as the previous ones. Open the script and study it carefully. 1. modify the script to ask for the currency to convert to and display only the one conversion rate. 2. instead of printing the exchange rate, ask for the amount to be converted and them return the equivalent in the chosen currency From 3e5f457c4aeafbfb318db25b80cd06bc02baf3f3 Mon Sep 17 00:00:00 2001 From: harjaus Date: Fri, 20 Sep 2019 18:36:24 +0100 Subject: [PATCH 007/106] Added missing files --- .../otherScripts/addressFinder.js | 32 +++++++ .../otherScripts/arrowFunctions.js | 41 +++++++++ .../07_unit_testing/otherScripts/asyncDemo.js | 35 ++++++++ .../otherScripts/asyncFunctions.js | 50 +++++++++++ .../07_unit_testing/otherScripts/books.js | 25 ++++++ .../otherScripts/classes/employee.js | 20 +++++ .../otherScripts/classes/employeeTest.js | 22 +++++ .../otherScripts/classes/person.js | 45 ++++++++++ .../otherScripts/classes/personTest.js | 16 ++++ .../otherScripts/coffee/betterCoffee.js | 73 +++++++++++++++ .../otherScripts/coffee/coffee.js | 38 ++++++++ .../otherScripts/coffee/coffee2.js | 68 ++++++++++++++ .../otherScripts/coffee/index.js | 25 ++++++ .../07_unit_testing/otherScripts/counter.js | 33 +++++++ .../07_unit_testing/otherScripts/countries.md | 11 +++ .../07_unit_testing/otherScripts/currency.js | 23 +++++ .../07_unit_testing/otherScripts/dogs/dog.js | 41 +++++++++ .../otherScripts/dogs/index.js | 35 ++++++++ .../07_unit_testing/otherScripts/employee.js | 38 ++++++++ .../07_unit_testing/otherScripts/flights.js | 16 ++++ .../otherScripts/functional.js | 90 +++++++++++++++++++ .../07_unit_testing/otherScripts/generator.js | 37 ++++++++ .../otherScripts/generators.js | 56 ++++++++++++ .../otherScripts/iteratingObjects.js | 15 ++++ .../07_unit_testing/otherScripts/iterator.js | 20 +++++ .../otherScripts/moreCurrency.js | 26 ++++++ .../otherScripts/moreFunctional.js | 26 ++++++ .../otherScripts/morePromises.js | 42 +++++++++ .../otherScripts/nestedCallbacks.js | 61 +++++++++++++ .../otherScripts/objectMethods.js | 54 +++++++++++ .../otherScripts/promiseLoop.js | 57 ++++++++++++ .../07_unit_testing/otherScripts/promises.js | 48 ++++++++++ .../otherScripts/promisesAll.js | 51 +++++++++++ .../otherScripts/promisesRace.js | 29 ++++++ .../07_unit_testing/otherScripts/weather.js | 30 +++++++ .../07_unit_testing/otherScripts/webWorker.js | 18 ++++ 36 files changed, 1347 insertions(+) create mode 100644 exercises/07_unit_testing/otherScripts/addressFinder.js create mode 100644 exercises/07_unit_testing/otherScripts/arrowFunctions.js create mode 100644 exercises/07_unit_testing/otherScripts/asyncDemo.js create mode 100644 exercises/07_unit_testing/otherScripts/asyncFunctions.js create mode 100755 exercises/07_unit_testing/otherScripts/books.js create mode 100755 exercises/07_unit_testing/otherScripts/classes/employee.js create mode 100755 exercises/07_unit_testing/otherScripts/classes/employeeTest.js create mode 100755 exercises/07_unit_testing/otherScripts/classes/person.js create mode 100755 exercises/07_unit_testing/otherScripts/classes/personTest.js create mode 100755 exercises/07_unit_testing/otherScripts/coffee/betterCoffee.js create mode 100755 exercises/07_unit_testing/otherScripts/coffee/coffee.js create mode 100755 exercises/07_unit_testing/otherScripts/coffee/coffee2.js create mode 100755 exercises/07_unit_testing/otherScripts/coffee/index.js create mode 100755 exercises/07_unit_testing/otherScripts/counter.js create mode 100644 exercises/07_unit_testing/otherScripts/countries.md create mode 100644 exercises/07_unit_testing/otherScripts/currency.js create mode 100755 exercises/07_unit_testing/otherScripts/dogs/dog.js create mode 100755 exercises/07_unit_testing/otherScripts/dogs/index.js create mode 100755 exercises/07_unit_testing/otherScripts/employee.js create mode 100755 exercises/07_unit_testing/otherScripts/flights.js create mode 100644 exercises/07_unit_testing/otherScripts/functional.js create mode 100644 exercises/07_unit_testing/otherScripts/generator.js create mode 100644 exercises/07_unit_testing/otherScripts/generators.js create mode 100755 exercises/07_unit_testing/otherScripts/iteratingObjects.js create mode 100644 exercises/07_unit_testing/otherScripts/iterator.js create mode 100755 exercises/07_unit_testing/otherScripts/moreCurrency.js create mode 100644 exercises/07_unit_testing/otherScripts/moreFunctional.js create mode 100644 exercises/07_unit_testing/otherScripts/morePromises.js create mode 100644 exercises/07_unit_testing/otherScripts/nestedCallbacks.js create mode 100755 exercises/07_unit_testing/otherScripts/objectMethods.js create mode 100644 exercises/07_unit_testing/otherScripts/promiseLoop.js create mode 100644 exercises/07_unit_testing/otherScripts/promises.js create mode 100644 exercises/07_unit_testing/otherScripts/promisesAll.js create mode 100644 exercises/07_unit_testing/otherScripts/promisesRace.js create mode 100644 exercises/07_unit_testing/otherScripts/weather.js create mode 100644 exercises/07_unit_testing/otherScripts/webWorker.js diff --git a/exercises/07_unit_testing/otherScripts/addressFinder.js b/exercises/07_unit_testing/otherScripts/addressFinder.js new file mode 100644 index 00000000..e158d201 --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/addressFinder.js @@ -0,0 +1,32 @@ + +'use strict' + +const request = require('request') + +try { + if (process.argv.length < 3) { + throw 'missing parameter' + } + let address = process.argv[2] + /* we need to remove the single quotes from the string */ + address = address.replace(/'/g,'') + console.log(address) + const url = `https://maps.googleapis.com/maps/api/geocode/json?region=gb&units=metric&appid=44c39f3fa462f86b3fc88f5678e5c5ff&address=${address}` + console.log(url) + request.get( url, (err, res, body) => { + if (err) { + throw 'could not complete request' + } + const json = JSON.parse(body) + console.log(JSON.stringify(json, null, 2)) + try { + if (json.status === 'ZERO_RESULTS') { + throw 'no results found' + } + } catch(err) { + console.log(err) + } + }) +} catch(err) { + console.log(err) +} \ No newline at end of file diff --git a/exercises/07_unit_testing/otherScripts/arrowFunctions.js b/exercises/07_unit_testing/otherScripts/arrowFunctions.js new file mode 100644 index 00000000..47c6af30 --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/arrowFunctions.js @@ -0,0 +1,41 @@ + +'use strict' + +/* eslint no-magic-numbers: 0, arrow-body-style: 0 */ + +// all four of these functions contain the same functionality. + +// traditional JavaScript function that takes an ECMA rest param and returns the total +// no use made of functional programming principles. +function add(...num) { + let total = 0 + + for (let i=0; i< num.length; i++) { + total += num[i] + } + return total +} + +// simple ECMAScript 5 compatible anonymous function assigned to a constant. +// Array.prototype.reduce used to eliminate the loop from the previous example. +const add2 = function(...num) { + return num.reduce( (acc, val) => acc + val) +} + +// arrow function syntax used instead of the traditional anonymous function declaration. +// normally a single parameter would not be enclosed in braces but these are needed for rest params. +const add3 = (...num) => { + return num.reduce( (acc, val) => acc + val) +} + +// if the body of the function contains a single line of code that returns a value +// the braces and return statement are not required. +const add4 = (...num) => num.reduce( (acc, val) => acc + val) + +console.log(add(1, 2, 3)) + +console.log(add2(1, 2, 3)) + +console.log(add3(1, 2, 3)) + +console.log(add4(1, 2, 3)) diff --git a/exercises/07_unit_testing/otherScripts/asyncDemo.js b/exercises/07_unit_testing/otherScripts/asyncDemo.js new file mode 100644 index 00000000..d2e18c5b --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/asyncDemo.js @@ -0,0 +1,35 @@ + +'use strict' + +const asyncFunc = (name, callback) => { + const names = ['colin', 'bob'] + if (names.indexOf(name) > -1) { + // success + const result = 'found' + return callback(null, result) + } else { + // error + const message = 'name not found' + return callback(message) + } +} + +// check username exists +const check = name => { + asyncFunc(name, (err, result) => { + if (err) { + // it didn't work i.e. not found + console.error(err) + throw new Error('broke looking for name') + } else { + // success: i.e. result has a value + console.log('It was found.') + console.log(result) + } + }) +} + +check('colin') +check('nobody') + +// (err, data) => {} is common callback signature \ No newline at end of file diff --git a/exercises/07_unit_testing/otherScripts/asyncFunctions.js b/exercises/07_unit_testing/otherScripts/asyncFunctions.js new file mode 100644 index 00000000..7d758f93 --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/asyncFunctions.js @@ -0,0 +1,50 @@ + +'use strict' + +const request = require('request') + +async function main() { + try { + const base = await getInput('enter base currency') + await checkValidCurrencyCode(base) + const data = await getData(`http://api.fixer.io/latest?base=${base}`) + await printObject(data) + process.exit() + } catch (err) { + console.log(`error: ${err.message}`) + } +} + +const getInput = prompt => new Promise( (resolve) => { + process.stdin.resume() + process.stdin.setEncoding('utf8') + process.stdout.write(`${prompt}: `) + process.stdin.on('data', text => resolve(text)) +}) + +const checkValidCurrencyCode = code => new Promise( (resolve, reject) => { + code = code.trim() + request('http://api.fixer.io/latest', (err, res, body) => { + if (err) reject(new Error('invalid API call')) + const rates = JSON.parse(body).rates + if (!rates.hasOwnProperty(code)) it.throw(new Error(`invalid currency code ${code}`)) + resolve() + }) +}) + +const getData = url => new Promise( (resolve, reject) => { + request(url, (err, res, body) => { + if (err) reject(new Error('invalid API call')) + resolve(body) + }) +}) + +const printObject = data => new Promise( (resolve) => { + const indent = 2 + data = JSON.parse(data) + const str = JSON.stringify(data, null, indent) + console.log(str) + resolve() +}) + +main() diff --git a/exercises/07_unit_testing/otherScripts/books.js b/exercises/07_unit_testing/otherScripts/books.js new file mode 100755 index 00000000..83bd49aa --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/books.js @@ -0,0 +1,25 @@ +#!/usr/bin/env node + +'use strict' + +function Book(isbn, title) { + this.isbn = isbn + this.title = title + this.year = null + Object.defineProperty(this, 'published', { + get: () => this.year, + set: year => this.year = year + }) + Object.defineProperty(this, 'summary', { + get: () => `${this.title} (${this.isbn}). Published ${this.year}.` + }) +} + +const b = new Book('1491943122', 'Learning Node') +if (b instanceof Book) console.log('its a Book') +console.log(`the b object is a '${typeof b}'`) +console.log(b.published) // prints null +b.year = 2016 +console.log(b.published) // prints 2016 +console.log(b) +console.log(b.summary) diff --git a/exercises/07_unit_testing/otherScripts/classes/employee.js b/exercises/07_unit_testing/otherScripts/classes/employee.js new file mode 100755 index 00000000..4e7716f9 --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/classes/employee.js @@ -0,0 +1,20 @@ +#!/usr/bin/env node +/* eslint no-magic-numbers: 0 */ + +'use strict' + +const Person = require('./person') + +module.exports = class Employee extends Person { + + constructor(firstname, lastname, grade = 1) { + super(firstname, lastname) + this.joinedDate = new Date() + this.grade = grade + } + + calculateSalary(months = 1) { + return this.grade * 1000 * months + } + +} diff --git a/exercises/07_unit_testing/otherScripts/classes/employeeTest.js b/exercises/07_unit_testing/otherScripts/classes/employeeTest.js new file mode 100755 index 00000000..dbfde4c0 --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/classes/employeeTest.js @@ -0,0 +1,22 @@ +#!/usr/bin/env node +/* eslint no-magic-numbers: 0 */ + +'use strict' + +const Employee = require('./employee') + +try { + const worker = new Employee('John', 'Doe') + console.log(worker.name) + + const salary = worker.calculateSalary() + console.log(salary) + + const manager = new Employee('Peter', 'Piper', 4) + console.log(manager.name) + console.log(manager.calculateSalary(6)) + console.log(manager) + +} catch(err) { + console.log(`ERROR: ${err}`) +} \ No newline at end of file diff --git a/exercises/07_unit_testing/otherScripts/classes/person.js b/exercises/07_unit_testing/otherScripts/classes/person.js new file mode 100755 index 00000000..1c84087e --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/classes/person.js @@ -0,0 +1,45 @@ +#!/usr/bin/env node + +'use strict' + +/** Class representing a person */ +module.exports = class Person { + + /** + * Create a person + * @param {string} firstname - the person's first name + * @param {string} lastname - the person's last name + */ + constructor(firstname, lastname) { + if (firstname === undefined || lastname === undefined) { + throw new Error('missing parameter') + } + this.first = firstname + this.last = lastname + } + + /** + * Set the person's first name + * @param {string} name - the person's first name + */ + set firstName(name) { + this.first = name + } + + /** + * Set the person's last name + * @param {string} name - the person's last name + */ + set lastName(name) { + this.last = name + } + + /** + * Get the person's full name + * @return {string} the person's full name + */ + get name() { + return `${this.first} ${this.last}` + } + +} diff --git a/exercises/07_unit_testing/otherScripts/classes/personTest.js b/exercises/07_unit_testing/otherScripts/classes/personTest.js new file mode 100755 index 00000000..3cdd030a --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/classes/personTest.js @@ -0,0 +1,16 @@ +#!/usr/bin/env node + +'use strict' + +const Person = require('./person') +try { + const person = new Person('Andy', 'Capp') + console.log(person.name) + person.lastName = 'Pandy' + console.log(JSON.stringify(person, null, 2)) + + const badPerson = new Person('anon') + console.log(badPerson) +} catch(err) { + console.log(`ERROR: ${err}`) +} \ No newline at end of file diff --git a/exercises/07_unit_testing/otherScripts/coffee/betterCoffee.js b/exercises/07_unit_testing/otherScripts/coffee/betterCoffee.js new file mode 100755 index 00000000..21cc4908 --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/coffee/betterCoffee.js @@ -0,0 +1,73 @@ +#!/usr/bin/env node + +'use strict' + +/* eslint no-magic-numbers: 0 */ + +function Coffee(roast, ounces = 8) { + + const privateData = {} + + privateData.size = { + small: 8, + medium: 12, + large: 16 + } + + if (roast === undefined) { + throw new Error('missing roast type') + } + + privateData.roast = roast + privateData.ounces = ounces + + function getSize() { + if (this.ounces === this.size.small) { + return 'small' + } else if (this.ounces === this.size.medium) { + return 'medium' + } else if (this.ounces === this.size.large) { + return 'large' + } + } + + return { + order: { + get: () => { + let msg + switch (getSize()) { + case 'small': + case 'medium': + case 'large': + msg = `You've ordered a ${getSize()} ${this.roast} coffee.` + break + default: + msg = `We don't have a ${this.roast} in that size!` + break + } + return msg + } + } + } + +} // end function Coffee + +try { + const coffee = new Coffee('House Blend', 12) + console.log(coffee.order) + console.log(coffee) + + const darkRoast = new Coffee('Dark Roast', 16) + console.log(darkRoast.order) + + const specialBlend = new Coffee('Special Blend', 200) + console.log(specialBlend.order) + + const kenyan = new Coffee('Kenyan') + console.log(kenyan.order) + + const anon = new Coffee() + console.log(anon.order) +} catch(err) { + console.log(`ERROR: ${err}`) +} \ No newline at end of file diff --git a/exercises/07_unit_testing/otherScripts/coffee/coffee.js b/exercises/07_unit_testing/otherScripts/coffee/coffee.js new file mode 100755 index 00000000..29341898 --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/coffee/coffee.js @@ -0,0 +1,38 @@ +#!/usr/bin/env node + +'use strict' + +const small = 8 +const medium = 12 +const large = 16 + +module.exports = function(roast, ounces = small) { // can't use arrow functions here... + if (roast === undefined) { + throw new Error('missing roast type') + } + this.roast = roast + this.ounces = ounces + this.getSize = () => { + if (this.ounces === small) { + return 'small' + } else if (this.ounces === medium) { + return 'medium' + } else if (this.ounces === large) { + return 'large' + } + } + this.order = () => { + let msg + switch (this.getSize()) { + case 'small': + case 'medium': + case 'large': + msg = `You've ordered a ${this.getSize()} ${this.roast} coffee.` + break + default: + msg = `We don't have a ${this.roast} in that size!` + break + } + return msg + } +} diff --git a/exercises/07_unit_testing/otherScripts/coffee/coffee2.js b/exercises/07_unit_testing/otherScripts/coffee/coffee2.js new file mode 100755 index 00000000..858f1170 --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/coffee/coffee2.js @@ -0,0 +1,68 @@ +#!/usr/bin/env node +/* eslint no-magic-numbers: 0 */ + +'use strict' + +function Coffee(roast, ounces = this.size.small) { + + this.size = { + small: 8, + medium: 12, + large: 16 + } + + if (roast === undefined) { + throw new Error('missing roast type') + } + + this.roast = roast + this.ounces = ounces + + this.getSize = () => { + if (this.ounces === this.size.small) { + return 'small' + } else if (this.ounces === this.size.medium) { + return 'medium' + } else if (this.ounces === this.size.large) { + return 'large' + } + } + + Object.defineProperty(this, 'order', { + get: () => { + let msg + switch (this.getSize()) { + case 'small': + case 'medium': + case 'large': + msg = `You've ordered a ${this.getSize()} ${this.roast} coffee.` + break + default: + msg = `We don't have a ${this.roast} in that size!` + break + } + return msg + } + }) + +} // end function Coffee + +try { + const coffee = new Coffee('House Blend', 12) + console.log(coffee.order) + console.log(coffee) + + const darkRoast = new Coffee('Dark Roast', 16) + console.log(darkRoast.order) + + const specialBlend = new Coffee('Special Blend', 200) + console.log(specialBlend.order) + + const kenyan = new Coffee('Kenyan') + console.log(kenyan.order) + + const anon = new Coffee() + console.log(anon.order) +} catch(err) { + console.log(`ERROR: ${err}`) +} diff --git a/exercises/07_unit_testing/otherScripts/coffee/index.js b/exercises/07_unit_testing/otherScripts/coffee/index.js new file mode 100755 index 00000000..4fa9e769 --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/coffee/index.js @@ -0,0 +1,25 @@ +#!/usr/bin/env node +/* eslint no-magic-numbers: 0 */ + +'use strict' + +const Coffee = require('./coffee') + +try { + const coffee = new Coffee('House Blend', 12) + console.log(coffee.order()) + + const darkRoast = new Coffee('Dark Roast', 16) + console.log(darkRoast.order()) + + const specialBlend = new Coffee('Special Blend', 200) + console.log(specialBlend.order()) + + const kenyan = new Coffee('Kenyan') + console.log(kenyan.order()) + + const anon = new Coffee() + console.log(anon.order()) +} catch(err) { + console.log(`ERROR: ${err}`) +} diff --git a/exercises/07_unit_testing/otherScripts/counter.js b/exercises/07_unit_testing/otherScripts/counter.js new file mode 100755 index 00000000..233793b5 --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/counter.js @@ -0,0 +1,33 @@ +#!/usr/bin/env node + +//'use strict' + +(function() { + console.log('Woohoo!') +})() + +// simple closure example (using an IIFE) +const add = ( () => { + let count = 0 + return () => count += 1 +})() + +add() +add() +console.log(add()) + +// IIFE returning multiple functions via an object +(() => { + let count = 0 + return { + increment: () => count += 1, + display: () => count, + reset: () => count = 0 + } +})() + +counter.increment() +counter.increment() +console.log(counter.display()) +counter.reset() +console.log(counter.display()) diff --git a/exercises/07_unit_testing/otherScripts/countries.md b/exercises/07_unit_testing/otherScripts/countries.md new file mode 100644 index 00000000..ca84a337 --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/countries.md @@ -0,0 +1,11 @@ + +'use strict' + +const request = require('sync-request') + +function checkCountryCode(code = 'GB') { + const res = request('GET', `https://restcountries.eu/rest/v2/alpha/${code}`) + if (res.statusCode === 400) { + throw new Error('invalid country code') + } +} diff --git a/exercises/07_unit_testing/otherScripts/currency.js b/exercises/07_unit_testing/otherScripts/currency.js new file mode 100644 index 00000000..c833a560 --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/currency.js @@ -0,0 +1,23 @@ + +'use strict' + +const request = require('request') + +try { + if (process.argv.length < 3) { + throw 'missing parameter' + } + const symbol = process.argv[2].toUpperCase() + const url = `http://api.fixer.io/latest?symbols=${symbol}` + console.log(url) + request.get( url, (err, res, body) => { + if (err) { + throw 'could not complete request' + } + const json = JSON.parse(body) + const output = JSON.stringify(json.rates, null, 2) + console.log(output) + }) +} catch(err) { + console.log(err) +} diff --git a/exercises/07_unit_testing/otherScripts/dogs/dog.js b/exercises/07_unit_testing/otherScripts/dogs/dog.js new file mode 100755 index 00000000..9fd8cc52 --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/dogs/dog.js @@ -0,0 +1,41 @@ +#!/usr/bin/env node +/* eslint no-magic-numbers: 0 */ + +'use strict' + +function Dog(name, breed, weight) { + this.name = name + this.breed = breed + this.weight = weight +} + +Dog.prototype.species = 'Canine' +Dog.prototype.sitting = false + +Dog.prototype.bark = function() { + const maxWeight = 25 + if (this.weight > maxWeight) { + console.log(`${this.name} says Woof!`) + } else { + console.log(`${this.name} says Yip!`) + } +} + +Dog.prototype.run = function() { + console.log('Run!') +} + +Dog.prototype.wag = function() { + console.log('Wag!') +} + +Dog.prototype.sit = function() { + if (this.sitting) { + console.log(`${this.name} is already sitting`) + } else { + this.sitting = true + console.log(`${this.name} is now sitting`) + } +} + +module.exports = Dog diff --git a/exercises/07_unit_testing/otherScripts/dogs/index.js b/exercises/07_unit_testing/otherScripts/dogs/index.js new file mode 100755 index 00000000..29b20278 --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/dogs/index.js @@ -0,0 +1,35 @@ +#!/usr/bin/env node +/* eslint no-magic-numbers: 0 */ + +'use strict' + +const Dog = require('./dog') + +const fido = new Dog('Fido', 'Mixed', 38) +const fluffy = new Dog('Fluffy', 'Poodle', 30) +const spot = new Dog('Spot', 'Chihuahua', 10) +const barnaby = new Dog('Barnaby', 'Basset Hound', 55) + +spot.bark = function() { + console.log(`${this.name} says WOOF!`) +} + +fido.bark() +fido.run() +fido.wag() + +fluffy.bark() +fluffy.run() +fluffy.wag() + +spot.bark() +spot.run() +spot.wag() + +barnaby.sit() +barnaby.sit() +spot.sit() +spot.sit() + +console.log(`Does spot have a sitting property? ${spot.hasOwnProperty('sitting')}`) +console.log(`Does fido have a sitting property? ${fido.hasOwnProperty('sitting')}`) \ No newline at end of file diff --git a/exercises/07_unit_testing/otherScripts/employee.js b/exercises/07_unit_testing/otherScripts/employee.js new file mode 100755 index 00000000..dd2753de --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/employee.js @@ -0,0 +1,38 @@ +#!/usr/bin/env node + +'use strict' + +const employee = { + firstName: 'Colin', + 'last name': 'Stephen', + 'department': 'Computing', + employment: { + department: 'Computing', + startDate: '20120815' + } +} + +console.log(employee) +const firstName = employee.firstName +const lastName = employee['last name'] +const dept = employee.employment.department +const grade = employee.employment.grade + +console.log(`${firstName} ${lastName} in ${dept} is at grade ${grade}`) + +console.log(employee.department) +employee.department = 'Computer Science' +console.log(employee.department) + +employee.grade = 4 +console.log(employee) +console.log(grade) + +delete employee.department +console.log(employee) + +// const nonExistentObject.postCode // throws "TypeError" +// const addressObject = employee.address // returns undefined +// const postCode = employee.address.postCode // throws "TypeError" +const postCode = employee.address && employee.address.postCode +console.log(postCode) diff --git a/exercises/07_unit_testing/otherScripts/flights.js b/exercises/07_unit_testing/otherScripts/flights.js new file mode 100755 index 00000000..642d922a --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/flights.js @@ -0,0 +1,16 @@ +#!/usr/bin/env node + +'use strict' + +// example of a nested function +function flights(airline, startCode, endCode) { + return function printDetails() { + return `you are flying ${airline} from ${startCode} to ${endCode}` + } +} + +const flight = flights('KLM', 'BHX', 'JFK') +const flightSummary = flight() +console.log(flightSummary) + +// https://www.sitepoint.com/javascript-closures-demystified/ diff --git a/exercises/07_unit_testing/otherScripts/functional.js b/exercises/07_unit_testing/otherScripts/functional.js new file mode 100644 index 00000000..451944d2 --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/functional.js @@ -0,0 +1,90 @@ +#!/usr/bin/env node +/* eslint no-magic-numbers: 0, arrow-body-style: 0 */ + +'use strict' + +// the examples uses these two arrays +const names = ['Mark', 'John', 'Stephen', 'James', 'William', 'John', 'Peter', 'Mark'] +const data = ['Coventry', 3.14159, 'Computer', 42, true, 365.25, 101] + +function makeUpperCase(name) { + return name.toUpperCase() +} + +const upper1 = names.map(makeUpperCase) + +console.log('upper1') +console.log(upper1) + +const upper2 = names.map( value => { + return value.toUpperCase() +}) + +console.log(upper2) + +const upper3 = names.map( value => value.toUpperCase() ) + +console.log(upper3) + +const integers = data.filter( val => Number.isInteger(val) ) + +console.log(integers) + +const strings = data.filter( val => typeof val === 'string') + +console.log(strings) + +const floats = data.filter( val => typeof val === 'number' && val % 1 !== 0) + +console.log(floats) + +const long2 = names.reduce( (acc, val) => { + if (val.length > acc.length) { + return val + } else { + return acc + } +}) + +console.log(long2) + +const long3 = names.reduce( (acc, val) => val.length > acc.length ? val : acc) + +console.log(long3) + +/* challenge: return the largest integer by chaining filter and reduce */ + +/* The Array.reduce() function takes an optional second parameter which allows you to +define a default value for the accumulator. In this example we wrap use the Array.map() +function to loop through the names. We then use the Array.reduce() function with the +accumulator defaulting to an empty array. */ + +const rev1 = names.map( value => { + const rev = value.split('').reduce( (acc, val) => { + acc.unshift(val) + return acc + }, []) + return rev.join('') +}) + +console.log(rev1) + +// rewritten using a different approach. + +function reverse(acc, val) { + return val + acc +} + +const rev = 'william'.split('').reduce(reverse, '') + +console.log(rev) + +/* As with all functional programming, with a few tweaks we can turn this into a single +line. The example below uses a different approach to reversing the strings, can you +figure out how this is done? */ + +const reverse2 = names.map( value => value.split('').reduce( (acc, val) => val + acc, '')) + +console.log(reverse2) + +/* challenge: use the Array.reduce() function to remove duplicates in the names array */ diff --git a/exercises/07_unit_testing/otherScripts/generator.js b/exercises/07_unit_testing/otherScripts/generator.js new file mode 100644 index 00000000..d493e3af --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/generator.js @@ -0,0 +1,37 @@ +'use strict' + +const request = require('request') + +/** + * wrapper to make sure the callback invokes the generator next() method + * @param {String} url - the url to callback + * @returns {undefined} - the yeild + */ +function makeAPICall(url) { + request.get( url, (err, res, body) => { + if (err) it.throw(new Error(err)) + it.next(JSON.parse(body)) + }) +} + +/** + * the generator + * @param {String} symbol - the currency symbol to process + * @returns {undefined} - the yield + */ +function *main(symbol) { + try { + const url = `http://api.fixer.io/latest?symbols=${symbol}` + const result = yield makeAPICall(url) + + console.log(JSON.stringify(result, null, 2)) + } catch(err) { + console.log(err.message) + } +} + +const it = main('GBP') + +it.next() + +// https://davidwalsh.name/async-generators diff --git a/exercises/07_unit_testing/otherScripts/generators.js b/exercises/07_unit_testing/otherScripts/generators.js new file mode 100644 index 00000000..6b20b965 --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/generators.js @@ -0,0 +1,56 @@ + +// this example shows how to use a genrerator to simplify async code +// after understanding this you should move onto promises +// based on code by https://davidwalsh.name/async-generators + +'use strict' + +const request = require('request') + +function *main() { + try { + const base = yield getInput('enter base currency') + yield checkValidCurrencyCode(base) + const body = yield getData(`http://api.fixer.io/latest?base=${base}`) + const obj = JSON.parse(body) + printObject(obj) + } catch(err) { + console.log(err.message) + } + process.exit() +} + +function getInput(prompt) { + process.stdin.resume() + process.stdin.setEncoding('utf8') + process.stdout.write(`${prompt}: `) + process.stdin.on('data', text => it.next(text)) +} + +function checkValidCurrencyCode(code) { + code = code.trim() + request('http://api.fixer.io/latest', (err, res, body) => { + if (err) it.throw(new Error('invalid API call')) + const rates = JSON.parse(body).rates + if (!rates.hasOwnProperty(code)) it.throw(new Error(`invalid currency code ${code}`)) + it.next() + }) +} + +function getData(url) { + // the async call is 'hidden' in this function + request(url, (err, res, body) => { + if (err) it.throw(new Error('invalid API call')) + it.next(body) + }) + // the function does not return anything +} + +function printObject(data) { + const indent = 2 + const str = JSON.stringify(data, null, indent) + console.log(str) +} + +const it = main() +it.next() diff --git a/exercises/07_unit_testing/otherScripts/iteratingObjects.js b/exercises/07_unit_testing/otherScripts/iteratingObjects.js new file mode 100755 index 00000000..6e058ab6 --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/iteratingObjects.js @@ -0,0 +1,15 @@ +#!/usr/bin/env node + +'use strict' + +const abbreviations = { + json: 'javascript object notation', + yaml: 'yet another markup language', + xml: 'extensible markup language', + csv: 'comma-separated values' +} + +for(const abbr in abbreviations) { + console.log(abbr) + console.log(abbreviations[abbr]) +} diff --git a/exercises/07_unit_testing/otherScripts/iterator.js b/exercises/07_unit_testing/otherScripts/iterator.js new file mode 100644 index 00000000..de3550d6 --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/iterator.js @@ -0,0 +1,20 @@ + +'use strict' +// https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Iterators_and_Generators + +const makeIterator = array => { + let nextIndex = 0 + + return { + next: () => { + if (nextIndex < array.length) return {value: array[nextIndex++], done: false} + return {done: true} + } + } +} + +const it = makeIterator(['red', 'orange']) + +console.log(it.next().value) +console.log(it.next().value) +console.log(it.next().done) diff --git a/exercises/07_unit_testing/otherScripts/moreCurrency.js b/exercises/07_unit_testing/otherScripts/moreCurrency.js new file mode 100755 index 00000000..c80db492 --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/moreCurrency.js @@ -0,0 +1,26 @@ +#!/usr/bin/env node + +'use strict' + +const readline = require('readline-sync') +const request = require('sync-request') + +// the first step is to get a JavaScript object containing the exchange rates +const base = 'GBP' +const url = `http://api.fixer.io/latest?base=${base}` +const res = request('GET', url) +const rates = JSON.parse(String(res.getBody())).rates +console.log(JSON.stringify(rates, null, 2)) + +// ask the user for the currency code, convert to uppercase and remove whitespace. Notice the methods are 'chained' +const code = String(readline.question('enter required currency code: ')).toUpperCase().trim() +console.log(`you chose code: "${code}"`) + +// does the currency code exist as a key in the rates object? +if (rates.hasOwnProperty(code)) { + console.log(`currency code ${code} is valid`) + const exchange = rates[code] + console.log(`exchange rate between ${base} and ${code} is ${exchange}`) +} else { + console.log(`the code ${code} is not valid`) +} diff --git a/exercises/07_unit_testing/otherScripts/moreFunctional.js b/exercises/07_unit_testing/otherScripts/moreFunctional.js new file mode 100644 index 00000000..fbb9c31e --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/moreFunctional.js @@ -0,0 +1,26 @@ + +'use strict' + +const arr = ['Steve', 'Alex', 'Dan', 'Alice', 'Bob'] + +arr.forEach( (element, index) => console.log(`${index}: ${element}`)) + +for(let i=0; i< arr.length; i++) { + console.log(arr[i]) +} + +const newArray = [] + +for(let i=0; i< arr.length; i++) { + if (arr[i].charAt(0) === 'A') { + newArray.push(arr[i]) + } +} + +console.log(newArray) + +console.log(arr.filter( name => name.charAt(0) === 'A')) + +//const print = item => console.log(item) + +//arr.forEach( item => print(item) ) diff --git a/exercises/07_unit_testing/otherScripts/morePromises.js b/exercises/07_unit_testing/otherScripts/morePromises.js new file mode 100644 index 00000000..c4d97678 --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/morePromises.js @@ -0,0 +1,42 @@ + +'use strict' + +const request = require('request') + +try { + if (process.argv.length < 3) { + throw 'missing parameter' + } + const symbol = process.argv[2].toUpperCase() + getData(symbol) + .then( (result) => { + print(result) + }).catch( (error) => { + console.log(error) + }) +} catch(err) { + console.log(err) +} + +function getData(symbol) { + return new Promise( (resolve, reject) => { + const url = `http://api.fixer.io/latest?symbols=${symbol}` + request.get( url, (err, res, body) => { + if (err) { + reject('could not complete request') + } + const json = JSON.parse(body) + resolve(json) + }) + }) +} + +function print(data) { + return new Promise( (resolve, reject) => { + if (data.rates === undefined) { + reject('missing rates array') + } + console.log(data.rates) + resolve(data.rates) + }) +} diff --git a/exercises/07_unit_testing/otherScripts/nestedCallbacks.js b/exercises/07_unit_testing/otherScripts/nestedCallbacks.js new file mode 100644 index 00000000..cd3fcc12 --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/nestedCallbacks.js @@ -0,0 +1,61 @@ + +'use strict' + +const request = require('request') + +getInput('enter base currency', (err, base) => { + if (err) { + console.log(err.message) + process.exit() + } + base = base.trim() + checkValidCurrencyCode(base, err => { + if (err) { + console.log(err.message) + process.exit() + } + getData(`http://api.fixer.io/latest?base=${base}`, (err, data) => { + if (err) { + console.log(err.message) + process.exit() + } + const obj = JSON.parse(data) + printObject(obj) + process.exit() + }) + }) +}) + +function getInput(prompt, callback) { + try { + process.stdin.resume() + process.stdin.setEncoding('utf8') + process.stdout.write(`${prompt}: `) + process.stdin.on('data', text => callback(null, text)) + } catch(err) { + callback(err) + } +} + +function checkValidCurrencyCode(code, callback) { + code = code.trim() + request('http://api.fixer.io/latest', (err, res, body) => { + if (err) callback(new Error('invalid API call')) + const rates = JSON.parse(body).rates + if (!rates.hasOwnProperty(code)) callback(new Error(`invalid currency code ${code}`)) + callback(null, true) + }) +} + +function getData(url, callback) { + request(url, (err, res, body) => { + if (err) callback(new Error('invalid API call')) + callback(null, body) + }) +} + +function printObject(data) { + const indent = 2 + const str = JSON.stringify(data, null, indent) + console.log(str) +} diff --git a/exercises/07_unit_testing/otherScripts/objectMethods.js b/exercises/07_unit_testing/otherScripts/objectMethods.js new file mode 100755 index 00000000..4b5ef0b1 --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/objectMethods.js @@ -0,0 +1,54 @@ +#!/usr/bin/env node +/* eslint no-magic-numbers: 0 */ + +'use strict' + +const fiat = { + make: 'Fiat', + model: '500', + year: 1957, + color: 'Medium Blue', + passengers: 2, + convertible: false, + mileage: 88000, + fuel: 0, + started: false, + start: function() { + console.log('trying to start car...') + if (this.fuel === 0) { + console.log('The car is on empty, fill up before starting!') + } else { + console.log('car started') + this.started = true + } + }, + stop: function() { + console.log('car stopping...') + this.started = false + }, + drive: function() { + if (this.started) { + if (this.fuel > 0) { + console.log(this.make+' '+this.model + ' goes zoom zoom!') + this.fuel = this.fuel - 1 + } else { + console.log('Uh oh, out of fuel.') + this.stop() + } + } else { + console.log('You need to start the engine first.') + } + }, + addFuel: function(amount) { + console.log('adding '+amount+' units of fuel') + this.fuel = this.fuel+amount + } +} + +fiat.start() +fiat.drive() +fiat.addFuel(2) +fiat.start() +fiat.drive() +fiat.drive() +fiat.drive() diff --git a/exercises/07_unit_testing/otherScripts/promiseLoop.js b/exercises/07_unit_testing/otherScripts/promiseLoop.js new file mode 100644 index 00000000..767d9853 --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/promiseLoop.js @@ -0,0 +1,57 @@ +'use strict' + +const readline = require('readline-sync') +const request = require('request') +const cheerio = require('cheerio') + +const author = String(readline.question('author name: ')).trim() + +getQuotes(author, (err, data) => { + try { + if (err) throw err + console.log(data) + } catch(err) { + console.log(`ERROR: ${err.message}`) + } +}) + +console.log('EOF') + +function getQuotes(author, callback) { + const page = 1 + scraper(author, page, (err, data) => { + if (err) return callback(err) + return callback(null, data) + }) +} + +function getPageCount(author) { + const pageCount = 10 + return new Promise( (resolve, reject) => { + const url = `http://www.quotationspage.com/search.php3?startsearch=Search&homesearch=${author}` + request.get(url, (err, res, body) => { + if (err) reject(new Error('page access error')) + const $ = cheerio.load(body, {decodeEntities: false}) + if ($('p:contains("No quotations found")').length) reject(new Error('invalid name')) + const quoteCount = $('small').text().match(/\d+/g).pop() + const pages = Math.ceil(quoteCount / pageCount) + resolve(pages) + }) + }) +} + +function getQuotes(author, page) { + return new Promise((resolve, reject) => { + const url = `http://www.quotationspage.com/search.php3?startsearch=Search&homesearch=${author}&page=${page}` + request.get(url, (err, res, body) => { + if (err) reject(new Error('page access error')) + const $ = cheerio.load(body, {decodeEntities: false}) + if ($('p:contains("No quotations found")').length) reject(new Error('invalid name')) + const quotes = [] + $('dt.quote > a').each(function(i, element) { + quotes.push(element.children[0].data) + }) + resolve(quotes) + }) + }) +} diff --git a/exercises/07_unit_testing/otherScripts/promises.js b/exercises/07_unit_testing/otherScripts/promises.js new file mode 100644 index 00000000..74c13396 --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/promises.js @@ -0,0 +1,48 @@ + +'use strict' + +const request = require('request') + +const getInput = prompt => new Promise( (resolve) => { + process.stdin.resume() + process.stdin.setEncoding('utf8') + process.stdout.write(`${prompt}: `) + process.stdin.on('data', text => resolve(text)) +}) + +const checkValidCurrencyCode = code => new Promise( (resolve, reject) => { + code = code.trim() + request('http://api.fixer.io/latest', (err, res, body) => { + if (err) reject(new Error('invalid API call')) + const rates = JSON.parse(body).rates + if (!rates.hasOwnProperty(code)) reject(new Error(`invalid currency code ${code}`)) + resolve(code) + }) +}) + +const getData = code => new Promise( (resolve, reject) => { + request(`http://api.fixer.io/latest?base=${code}`, (err, res, body) => { + if (err) reject(new Error('invalid API call')) + resolve(body) + }) +}) + +const printObject = data => new Promise( resolve => { + const indent = 2 + data = JSON.parse(data) + const str = JSON.stringify(data, null, indent) + console.log(str) + resolve() +}) + +const exit = () => new Promise( () => { + process.exit() +}) + +getInput('enter base currency') + .then(checkValidCurrencyCode) + .then(getData) + .then(printObject) + .then(exit) + .catch( err => console.error(`error: ${err.message}`)) + .then(exit) diff --git a/exercises/07_unit_testing/otherScripts/promisesAll.js b/exercises/07_unit_testing/otherScripts/promisesAll.js new file mode 100644 index 00000000..2c579bbe --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/promisesAll.js @@ -0,0 +1,51 @@ + +'use strict' + +const request = require('request') + +const getInput = prompt => new Promise( (resolve) => { + process.stdin.resume() + process.stdin.setEncoding('utf8') + process.stdout.write(`${prompt}: `) + process.stdin.on('data', text => resolve(text)) +}) + +const checkValidCurrencyCode = code => new Promise( (resolve, reject) => { + code = code.trim() + request('http://api.fixer.io/latest', (err, res, body) => { + if (err) reject(new Error('invalid API call')) + const rates = JSON.parse(body).rates + if (!rates.hasOwnProperty(code)) reject(new Error(`invalid currency code ${code}`)) + resolve(code) + }) +}) + +const exit = () => new Promise( () => { + process.exit() +}) + +getInput('enter base currency') + .then(checkValidCurrencyCode) + .then( base => { + this.base = base + this.itemPromises = ['USD', 'HKD'].map( curr => new Promise((resolve, reject) => { + const url = `http://api.fixer.io/latest?base=${this.base}&symbols=${curr}` + request.get(url, (err, res, body) => { + if (err) reject(new Error(`could not get conversion rate for ${base}`)) + resolve(body) + }) + })) + }) + .then( () => Promise.all(this.itemPromises)) + .then( results => results.forEach( item => console.log(item))) + .then(exit) + .catch( err => console.log(`error: ${err.message}`)) + .then(exit) + +// const itemPromises = ['USD', 'GBP'].map( base => new Promise((resolve, reject) => { +// const url = `http://api.fixer.io/latest?symbols=${base}` +// request.get(url, (err, res, body) => { +// if (err) reject(new Error(`could not get conversion rate for ${base}`)) +// resolve(body) +// }) +// })) diff --git a/exercises/07_unit_testing/otherScripts/promisesRace.js b/exercises/07_unit_testing/otherScripts/promisesRace.js new file mode 100644 index 00000000..8e721dba --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/promisesRace.js @@ -0,0 +1,29 @@ + +'use strict' + +const request = require('request') + +const itemPromises = ['USD', 'GBP'].map( base => new Promise((resolve, reject) => { + const url = `http://api.fixer.io/latest?symbols=${base}` + + console.log(url) + request.get(url, (err, res, body) => { + if (err) reject(new Error(`could not get conversion rate for ${base}`)) + resolve(body) + }) +})) + +Promise.race(itemPromises) + .then( result => { + console.log(result) + }).catch( err => { + console.log(`error: ${err.message}`) + }) + +const orig = [1, 2, 3, 4, 5, 6] +const res = orig + .filter( num => num % 2 === 0) + .map( num => num * num) + .reduce( (acc, val) => acc + val, 10) + +console.log(res) diff --git a/exercises/07_unit_testing/otherScripts/weather.js b/exercises/07_unit_testing/otherScripts/weather.js new file mode 100644 index 00000000..f071f61a --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/weather.js @@ -0,0 +1,30 @@ + +const readline = require('readline-sync') +const request = require('request') +const url = 'http://api.openweathermap.org/data/2.5/weather' + +const location = String(readline.question('location: ')).trim()+',GB' //otherwise defaults to the US... +const query_string = {q: location, units: "metric", appid: "44c39f3fa462f86b3fc88f5678e5c5ff"} +request.get({url: url, qs: query_string}, (err, res, body) => { + try { + if (err) { + throw err + } else { + //console.log(body) + const json = JSON.parse(body) + if (json.cod !== 200) { // test with xxxxxxxxxxxxxxxxxxxx + throw 'location not found' + } + const pretty = JSON.stringify(json, null, 2) + console.log('STATUS CODE: '+res.statusCode) + console.log(pretty) + console.log('################') + console.log(json.name) + console.log(json.sys.country) + console.log(json.weather[0].description) + console.log('################') + } + } catch(err) { + console.log(err) + } +}) diff --git a/exercises/07_unit_testing/otherScripts/webWorker.js b/exercises/07_unit_testing/otherScripts/webWorker.js new file mode 100644 index 00000000..ece70fee --- /dev/null +++ b/exercises/07_unit_testing/otherScripts/webWorker.js @@ -0,0 +1,18 @@ + +'use strict' + +const Worker = require('webworker-threads').Worker + +const worker = new Worker( () => { + this.postMessage('sending a message from inside the worker') + this.onmessage = event => { + console.log(`received message from main thread: ${event.data}`) + this.close() + } +}) + +worker.onmessage = event => { + console.log(`received message from worker: ${event.data}`) +} + +worker.postMessage('sending message from main thread') From d2c7f538ad94b7e58f16a96dfc30db7504ff84a5 Mon Sep 17 00:00:00 2001 From: harjaus Date: Sat, 21 Sep 2019 12:07:35 +0100 Subject: [PATCH 008/106] Minor spelling mistake --- 02 HTTP.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02 HTTP.md b/02 HTTP.md index 80943f2b..68744dc5 100644 --- a/02 HTTP.md +++ b/02 HTTP.md @@ -85,7 +85,7 @@ Start the server and access the `/books/1` route. What is displayed in the web b 2. Note that it is itself a JavaScript object and that it contains a single property called `index` which matches the name of the URL segment. 3. The value of this property is the string we added to the URL. 4. This index value is used to look up the title of the book in the array, the book title is stored in a constant. -5. Finally the book title is send to the web browser. +5. Finally the book title is sent to the web browser. #### 1.3.1 Core Knowledge From 9a87865d2964b3f8a367019c08da04c50fdf0da2 Mon Sep 17 00:00:00 2001 From: "Joshua Lewis-Handley (handley7)" Date: Sat, 21 Sep 2019 15:03:41 +0100 Subject: [PATCH 009/106] Update 01 Setup.md for Windows 10 WSL setup --- 01 Setup.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/01 Setup.md b/01 Setup.md index ccd13e2a..b8fbd5fa 100644 --- a/01 Setup.md +++ b/01 Setup.md @@ -13,6 +13,37 @@ Press CTRL-SHIFT-P and a selection box should appear at the top of the editor. T Now the integrated terminal uses the _Bash Shell_ meaning you can use the standard *nix bash commands! +# If _Bash Shell_ is _not_ listed on your Windows 10 machine + +On some versions of Windows 10, some extra configuration is required before Bash Shell is able to be selected within VS Code. If this is the case on your machine, follow the below troubleshooting steps before reattempting to change your shell as above. + +To start, we need to make sure Developer Mode is enabled in the Update and Security section of Windows 10. Press **WIN+R** (Windows Key and R simultaneosly) to open a Run dialog. In the dialog enter **ms-settings:developers** followed by the enter key. The window shown below should appear on screen. + +![Enabling Windows 10 Developer Mode](exercises/.images/developerMode.png) + +Select the **Developer mode** radio button and **yes** on any succeeding dialog boxes. Wait for any neccessary installations to complete. + +Once that has completed, we need to enable the WSL (Windows Subsystem for Linux). Press **WIN+R**, in the dialog enter **powershell** followed by the enter key. In the powershell window copy and paste the following: + +``` +Start-Process powershell -Verb runAs +exit +``` + +Press the enter key and accept the UAC (User Account Control) dialog. A new powershell window will launch with Administrator rights. + +Copy and paste the following: + +``` +Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux +``` + +Press the enter key and wait for the process to complete. Once complete, restart your computer before continuing. + +Finally, we need to install [Ubuntu from the Microsoft Store](https://www.microsoft.com/en-gb/p/ubuntu/9nblggh4msv6?activetab=pivot:overviewtab). Click the blue **Get** button and accept any dialogs to launch the Microsoft Store and begin the installation. Once Ubuntu for WSL (Windows Subsystem for Linux) has installed, restart Windows. + +Once restarted, reattempt to enable Bash Shell in VS Code as per the section above. + ## 1 Forking the Foundation Materials You should start by logging in to the University GitHub server using your university username and password. Make sure you don't log into GitHub.com! From 36d7da971daa18b98e90d3a1dce723874d555389 Mon Sep 17 00:00:00 2001 From: "Joshua Lewis-Handley (handley7)" Date: Sat, 21 Sep 2019 15:04:40 +0100 Subject: [PATCH 010/106] Update 01 Setup.md --- 01 Setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/01 Setup.md b/01 Setup.md index b8fbd5fa..85029cad 100644 --- a/01 Setup.md +++ b/01 Setup.md @@ -1,7 +1,7 @@ # Setup - this worksheet you will learn how to configure your work environment using VS Code. You should start by installing **Visual Studio Code** (NOT VISUAL STUDIO!) from the [website](https://code.visualstudio.com), note that it might already be installed. If you are using a Coventry University computer and the software is not installed you can do this using AppsAnywhere. +In this worksheet you will learn how to configure your work environment using VS Code. You should start by installing **Visual Studio Code** (NOT VISUAL STUDIO!) from the [website](https://code.visualstudio.com), note that it might already be installed. If you are using a Coventry University computer and the software is not installed you can do this using AppsAnywhere. If you are using Windows 10 you will also need to install [Git](https://git-scm.com/download/win), this may already be installed on a Coventry University computer. From c6dd19d1393a6a249483db0063f060f85b419160 Mon Sep 17 00:00:00 2001 From: Joshua Lewis-Handley Date: Sat, 21 Sep 2019 15:13:21 +0100 Subject: [PATCH 011/106] Update images for WSL tutorial in 01 Setup.md --- exercises/.images/developerMode.PNG | Bin 0 -> 1084156 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 exercises/.images/developerMode.PNG diff --git a/exercises/.images/developerMode.PNG b/exercises/.images/developerMode.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e287f8c48fa11417e04454fb47289f05112c8caf GIT binary patch literal 1084156 zcma&Nc~p|=-#>1c+ZZW4WFwgs3U=37$Ci^2)2pbEzyhewZW2c}%no zH+Cr&H#?ecgO%3cR5d(xyKc#*=CO{alj|^2g0=^jN_-oatND_LUC7w{!UI;>{s=BJ z#4UX~0h@i>L;veoeL6LqeONn`+BNExy+tDcRzLCvD#mSeOJAUd1t4~;HekW^>$vxI zJ{;tJt&h|nP?)Eg%fr1_dX+(X1#rcBa z!TY?fDn-aPtc*ecvC^pb7lU#0`DHchHhl^gT8$ykvZo~b3P5#+ayTs(Rxm8>J5HEP zw~3Yr!$TNx-t9ufxhZLsLOhEhBsPYMzh))znEBGGFkzXSVboz+b+n~@u&!<$)7^cq zAm0OOrIe2i0>f}#+xY{z;5;As-QIW_9sU$^Oc!7I?OmZFQRtrT3P!C(6RBS@FIAJp zq1;!) zAJ6l}PTRI!;rOZs*f;P++wV~e>T|qoc=b82f)lXoP@8x9p4U(aBhXHsa6_DLw0dgL zM)f62!mHy;)K!|P`=?aZp(M6CU8tZ4^00q04Chf=>TB62|5RJL)qujZBogA@}`?Ry54x*V3&4ys5if|lR?aEMJ7gXmr#3?W39+r0{ z%SIbGh^xnai+!LX?av5NA49tsm&hJZ6j)8n+|ruC%JLas`g^;a;->OdB1$kJc0St` z1VKry`qL?H>2Q|i^&r-Y0UmEu@@K9j@oT&@#aFXXNak-G7F<8U^8WK@AHc5!+AvUD zE-amVVtMiYKX1eqX9&;p#Z0%qBPGR(N~oMTO+$wjm1FLI%H&_Jxdil6qo9Wg$|~d8 zUHY*Y&a1p#yHty&yDk-{k=%EJ0m7?E{8Td}2YF)}P>2#X+z5t~j{aO=eHm;Y{fkO8xjS?LY6^%ahsnHF(r{qIk1eKkGR&(9|&;-O0YGZJ234N%&p^2 zdwEp4yuBemNjSWU2Z)c7S=P9YcZdIA<`CS8WpNsCAxO}vg%|9Hh6hBx+adq3#E?mR zg%pAnh9CXVQdF0Y0d|J>^&W(C=+kpihgBk=B^4+veVA0dxK~cj+ah49eKybS8jE5bSA+eI6I2&R&8o&o{buq<>-XhF z^M3NlIyXsF$Yoj&0otPh2ll6S4{%Q3$(y7J8a(jQoWrnZ005R#ePem@C%15(NXMj1 z5jh&i{tk>zR+~AyU1@7{Bnn2lP=2+-4dZ*$Xeyd(!YPR>mfXrHA@7h&1D9aiR`Nph zh%rgoXmeAKO)u7-a(y1fF>nabQ#(zx=*HIHEv-5EZ7IY$Y3lFY_g`&vgjALzoZQw_ zlv6`dZGiO0oQqR;N*_`w@0E{|@pp=(#H9QC$M*@(iQ{bC?lOwmR%WMM%$_A?VRvHN zPhVSK{HbBy`)i}bGwv`~qN&30hV3tt`8fio42eY-%406mf{ko@M(xJz!*b3KQ{4?v zJ%Uo@UX3U@{$IQAl!>Hm9eT?A;l`D}68)I3Q{*N?Q$x^gNertThu7|;yp$gc#p$k@ zwwC(}-ItgEybp)woOi+H*Pt@0a>4P&ZO)`M>j3+wnu`mAf{DXMR3f~(raSqYF|Tfb zFerj^q9Kd=ku#_IE7J617xQ~-T>;g~M`}mkG{!>Fr%gSc`BDou80va<&=<(}*6m*% zvwJm*mxvZv1Ng@kPErN;`Fo^IDH3<0X!uN_yv^&oXPwZDohtc>4!a&cKJVrz>L3cd zyOa63f^9Y2NPIgM8kWdCAbsERp7m)ErxZKB-B}>`3}&(FmN+!WL>DREW?o|HURC*` z%@Y~}_l-+@!DjJt@-AFuEmf4tw#)bTfenpMq_XoT-ZQVAp#719R2l#TiPy&3jAAc$ z9OPT-K137W^Gd1Veguvs8(BPra>dd0n29kG0S|a+w4rdz%Fq`2!XXCVi=B&eq-zEe zs(@KHrP~goFIyKBsUJKM=+5>RZg&~!S^nGb;JFTPBFjtQ!}KAB5_246HKB$D-n54M z^on)!-oZS1zNA?$#x(OA7HFG8m)09E#TrXDh3YZQZ;~@GHAV+o7*)p3htLdBga7@0 zD&Mi${)$>u!UpNk?M5McuBaznr;7Va)Uny9kpKK{MHnU-y}5Vs%xS>wZw;2*>K%uDhcU2cSdy82KWYhixRxL1ov^)jq-?Rk5 z9`m7!e2}a%X_z4K2}S}X)XlxEi!+Fui^}h@ER++e_vtSIWux9j$noKElo%6#U5>%4 z5=nHaiDHu=@o3=jz#LDarvLe_tbe<>xtcXGX$cS9pZ^kj`dkU!jz|2&F8wv#NPlo= zR7t?Dmx;O9wx`g)!#J;lo#~8_c`!&M{w&aZr>!`$RBAf1g|p< zjim%XbAX}mK3)prKsW5O$4sH6bwN);GKA)-zS=D-1nqfYO8fpYN(_)9jpsb)0#u56O({I+uxA{1%!AKp(@-+``!3 z=z1N>qf9FJIW@KNmq00zjQ)Hyh@)<}^wi#z# z+n99Oc-w#=oDk0GjRix?sNv9h0XX}&pGsnP%CBABcxsQ`saA&m8MxW`Xjx2vQNw)2 zjqK}(ua%62eooEChHmV{XI+LUm>AQ(&^Ib0k=@@kS^SJPOgLM4rxYk}mdm%69|@O- z@b{v+=43a!N$Wt0{+O(r4w9^J-b0Ct}KcGB*_Sru(b401t}oG>OIo z?-mn7o@OR)yA5WvWb2vl`Mm9!q~+~H&Z}Mh3jFA>O+5$1N_q$uPi?>jJ{mMx(TO|@ zx1L771_^Am*SL9hF?Sn9{vh5%;Z8T_xom@50e;@NhJ`sT%?p{hkXgPc9xOq!M;mi| zKBu~=cx{ULIZWXj1fKn4s%#cbvL0`Xp~J)`1@2mU+~{F=76xp;)Ee-g4FBN~zd5GVxtp(tnQg4{Ek3h>EGMw*Rr z4#Px`Iin%@usDIXn`#zb0&laykMVM#u1rd-=I7y`oFrwnb}@{T-iRHov_78*gpgU> zj%`j=5UM;m+yE4K>!(e@6`?7XAAV$n?s5T@^U4AHh$nV}ef=7Ef)fFY z))7zbx)8L&~Q+ErA>W%vRW+z9}+)?uc5Mzk)6qrP;On_ zIy*?qhpb!FJfApRU!Dcb6}yT? zUkOxpiYmJ?;4+#(-^ug&(+u&+Qli(g6I!Vtp0EigNoW*8BvFj3b=hIz zJDYfyaS}&+!V@5@?&jscZ;u>AXf%g0&We2I(WJfP_u~A;V?q)6UNXpjOnbwLJ1D^5!q?NKIr6j=q`0Et0( z)r{fYFl%Zaki>gd%Yr5w^>P6l#Q9^r|>qpr6@(r5soS^XZS zdt11%xT29nejS zz2v_=C~+@V%?FMxeez(e^=5pNPl3Y%p-JXqpCwJk<$$n?*#aw=pmF}$qQTA4Xp&Wd znx5UK0sL>>*ucYlQ99>>FEg?YQaP|HF!;YixB7!GW8I0rZZuv+KGJ)KY9`$9=IPP7 zy|5G(xv%l|i=K3jPyh%Fc+L8agy!)M)qDg^gpoT1jDVYR{gl{B^Bq{d5UbtZ;xZWR6kg zdI$OjF$Iq65Ho}6ya{}r9FLkbU8OROx!aVeX1N2Lfedsh#|!z3 z8=p~;(3}Q-!b{gmvIm?`5u0{25a2;Jo`P={^NnD~;>pDKHl5+819BMT(n8fqC<#fB zPaPI6!foObRjT$uS4bwhEZ;}K0Eo}AG?j=WZ4P8Lt);rHNHA!{ZuUkP@rpn?mj^Y` zr`e?n6+?V&;w!F|Qh=Ey8@T4~{`{XRa_@PoTUTV8^EnSZ${otzZ1w`gM;qMEZC3m~ zTXN{Uz!*S>cc#noo))SXg3;P-+?Da;)Vxg7b$DMwkt~? z!ca4DGZw?`?)x$F1JafYobYt^6~7a*>Klo|>RzLo^ewTyQsFy(&=->%s{S+iw2X*E zV<&3OuBA~@?aByr#xG~jIVbg9@2iYnUCZLdM*24xu8`2UDBA2Rc#M)WS$ANwYPTM? zbSeoe(!V9O`0egFVlL1Nr^8}9u}h;F95e?cX@?8SB3}|}<-hRU0rNpI08(&nayJ$6 zcPaMk(okw$dkY&woU>O8B#F zchmXYyl)7MGOYDUcNqT_g>v=_iA=Fh67ODpPwF2dOTm|+_=)y}ojnbB^F#*cp$RtKfMKD2rPvyT&LoBC55TM#%~F}rqHceD+hH@J!wy9o+^Zh zht2w363B1roPRshl;yxk>9TEC7o++b+G==9ipP;Kqj@plwE6JI3)7!TKFf4V1?LW- zr>u(T$#LoWS8*DcU)Ms=@loeLuU3N8(-n$Jg%eq!8nJP6Q81_28@L_aK0lg0j%)*< z8LV``Ve%~HK~WLnUc*bm+{+~5%9uB`9MtbzRflC@u7)@VEKHWg6z97gwHd~(Doo6E zLlc+L-IIUs=KsOLW4lZ~+F=9TtUzZ^85e9Z+q3bj2Z@l(c@pR=WYxlc40zu`83Ph> zcz!>dJ$p#Wxs+MghDeNMv7(DdFO(gx0-gqO9G8K96OwMK%#%g7P9KB z37R7S4LXZx@ytH7CO7NlGND|-J@nn?gby8q|0MW9VMFURSIcE)t9X)~JP$g>XnfwC z>ueV-J*|HQ$KBe;n%pq)o?F?j?k`ldbVcMdx*9>h8rm=rtwApx#Mxh>V$@|7MVGY%&;1D6<&2!E<)1oFAEZXwudrk(^a6) zlAd(63wwpU(SJ<25Hn&vm`%8$9$1%s?d)77$j>iu!^6GQs;w4O*$){nVWxbbaISfy3DxdL=tKcf<$gdp-O* z&{yux_m)B{0mS8>0oDIqZ<{cGZ}C!M73S}bSiO9j>xmI|9hQcT6@Lo2n3H!hBYGSR zWe%|H5;ma352;K>W=EBtcfdhRNj|7xa%wgC0P z=}=58_vgz}db2d>V`(sr#`peIAuUQ*3~fiEDg^@(h3qJ0qZpx3-zN|MbZkTRXY&gE zurID>AE7cZI7Me72n;G%bX}UBa)>{lJBwI*@=b%#?5pTlRspB5|wF1Ktr)X=^k;=Ylia z9!{j#+|Q7kap_&5OW7xkt6}m{i|?u+KG4vZ|Acab&hff2--0a6NK3TcOPBOpOa-c{ z7f!7*?TD2O8h35VZ}~i>yFN0cafne1@t*Cjir*#I_6b4~6IspS^2;_CxzGndH2d^_ z#rAGJ-|v^Oqz^aIlJ}ERK8O1!Wgv3E<+U@BP;X3XRD&z0ND=A={SgP;O#Mm)I1i)QL9Xd#3{G4mw9rtkx|xi#50 zbFVf`+d%aA13e6mccPPB48D$$$nA()U-L`K7etGfyzCgE3ya7`rnkMu@ubVERA(fo zq=#MPE+E1;(ig)x+A<3Y3#>Kk>qZJZ$ESLPPkj0}!dZoMjrDXbF zLCOxo-hN77>g|s6fzQ}VB7fuz7g}@b%C%J^1y9H}ICV!A!iIfkgnefT544MMrWxGS z%%~h2ea9>SlGmtHtB_(6*Y@n_Ub~pICh#3e!+!d)`(Y3I4;!gJ)dh5043{qy11JJe zaeAFci@c`x9zKxAOV-h$Hv7`Iun8buNE?AWnk7&za$}4aUw50YAd%C5$R*l@Y@^D9 z!wqTl&}E5YrN7$wKaGAlS=(|a&2K)lgTxv>+^&F?4Sx)}`^r4{;GWX{iDH`nM@Q1G zvkk4(P|{rJb6(_lLpm%Ds<}T7$REBSuXAl+w<({ir0(D0W)l`+0zh+lo2&k~H1eNu zx6&_}D)zLU_(DR)h4bf1q~6OKoN#VK6|ab`j~jz;yxS;-3-CDAIGs3>2wzK%?6Ie~j`P0;{P`c`n&YyD!bRCH(eKW> zh4S#csOV`_*U2aa1% zSZ#-%NX3d83x&wd5$HyCHrH?*%C(G-O&{h77#2#g`UI>|8m1}L{f$fBfr9%=t9saB zGR9wQ%ZpqqvUmR6f`hR1pePbLQ&C&DFamjZ1NXz4BZLxsmJ}r~G2Nvg`Azrzs)bBc z=)BACLa_=dSk!oJ_njMRf7G{$vTjfPao;t?o7^1EKCJq99G#l8xf44k`MadEQE;=g z(6WznDy|GrZByB=pQ4}{q)K>?hT*e?XSz}HT^sMq$pi&+5(rCVq4<&g&R?T`1>K0x z(MuVdZ`|77xDzN?07AkqNZGFVkayH^4q|-^pgDQ3IPwcl#bh*_4)Lcg zogPiRj+>HiT4%q6$-o(Fq7SvwqU)Tu(EaWku9$!t97vp#@E!hx*57CEf=DnvH*3a; zKJ?Y($)Q%NLBhbgb9<79qK}`N7B|FuN>1S>bK%QAUZu2JMxaZ#yQMWuyjx2^Vw>eA zlbZsTlvfpMB?*~EH=1*D&$FVo7;~bNSxtl4-vp(kABj!M$Ysu|y4N^vvVvhGaG7_R zl4^$`E3C6`7Sg?N0RQ*QkJAD)Mwt65Z5SE{%q|ix017muX-d3qBoZ0+-z>9ahF(s} zx@OBm;b~2R&=d!^aej51s6Di(1a72vfwn!!hj}2Gxm^+|awH7G#bB6q_UvbOpzPY( zKg*!3l>cMoR70KZ{wPrFX}?zk*(1q?DbwdVD(juEYxHfu_2zZ|?Y>y}8Mb(`WGw8c z)jroXHTqXW_Ik}dyX}njr$16WKnkL}i;`JE?{?b7ps{!67M?-j49(UmOr)yeEyh8Q zC77UG<6>PZ3I(})`w*ilB(w2y%>$Hz&z2V-t0KzpgENn`kWrGs~dYbE!M~2Bl2S zBacFqN=sI9psr@AhE#kBRm0Cc*vH5F|0P9S*@o*gvN`BDXA=ITy+&(tanHwJq25yP z&X6}9;d48vZ9TdHc34lRW%FFdHE_ubF8nu5Y1+tkhA@-esK$V@XQZNnGy2|C-x2pE z&{k)u>0IoyvC(IexD2Cy`AT^q+Gb@;tXy@Mdsw_`k-NTD70POKQ=jL&V*!Dy_*dXz zaoj`>A8oxP^{$PRm)-V;&2v-d0wzYh=uQ92GPKX?Xv}8o+p)+rS9hc6$ zshxomPKY)++YPq1hg1CT!^*~fZz+k`j?O$_dMkna!|pb>E6_WO%C>A}g!xk!_J*9A zy??3(-TJ03-dbiN+Jtb8Tk1u!avDAelJK94*?1;&#PN~5lx3kaQ{F#WIPCl*`D)N; zB{@BB7BR^JX-M?gL;>3Zjp&x=3&xrHH*(3=DE5wECn;&kNVlWza5lHXI}eeEI=T_Y zTCUcQW8sAeMNVL>Ad={&#pbwuvW5W<|96oEZ@S(F)9+*U6K=0}<+^hsITpdAd(ZNT z!=JFiuC2ib_x&^fx})FZ>2+vwZFl^SckH(89T)Gs|1CYMFtVh^{A+No&{-K}Hn+2sJ?~RjRb{8wsVH+V`P&Adyy@Ph|** z02c2h=q%rfosq~`TsE2+7XN21v+`TeEPRJ0ns33j7IGhZ6e4liAXP-56Ka;W72iW8 z*Cc7R3YA6kU$}DOPLH|K;u4TZ{}0K5v5rhbinZ~M=fAHhJ|+!|k7>7gST)8pxjgO2 zY1#M5s-S4U{B&)F-j?j{8)}cVcBb?S>$jM!T933Q{=7VqJnN4)PhO}N^yYj{?u(`| ziwCE++PX?EU4AOT`7xxDOo@|!lMOaS7d4_#Rh39t7jpwqlf|C~JHcV7*A&(P1cxV* z+y+AlK$sLPj7Xo1df165kc6nV%c4MMZEo3N!|7sS;Z0-bcWsB(G-qwCSu#I29`1Pg zkBK+kp||W`1|8gyY&f^``Iie|z~(XEyRR~?b&wVX1l-(ge(&%8l&tG>WMUV&0F_ta zA!J*o%8{;?HEo)p@FAf}KGhQ-vuPRUO&7RhQ8IopsQsk|ZCkYLt*14~ zlpvqH1rOwYDPn~AC#&B$6&`#&n!ELG(?Xfucjwj7@*j=RC9Xf58(5iyY!e~Y7BnPW zWdVgbQjh0(kAX0qCX)7F;swy*A20eh?uqn1-}ujX;F25*96oWSfTe5L<1?q6}17SGZ$`*VdA;h~=LBAbu5va$IP| zssVn{lr}-6Tyf;H>HvTZn}b%cc&&r9%mI1I4HdA9g0R6u@x>Mj7tBry9!hJi?{zxe zsS+rbSTkLyai2!$i2P@qhiP3u}3lVQ*Zf^f-P+lmUlUmU*TUsYlj_{F&(^ZHYgTFwMfh zhgu(e4MWTS{P64Aw?pJ$5EzxWEA-Uf?Se$qV#JLr1B98yjEs<%FdtCtxr~@X%ML*3 z1`*{hI6WhjJlAsMx6X!7Jjv|4w%QPb^kB!t()$PQP`AGhW~IXO;C{}s$A%bC zRaXOvW61$+?ej*=H?DV{(+~?Med_Yu8{uiANNC3HwLy?MiPm7YoFI0;-Lehhwz|o{ zOfxUhj!7JDY%f^(-8p5$mltD4{2KJVpB?(_tlj>>>EjoZn};~qIl1iujgxgxZn;&H z5p4Q2UKGkWbX4`t1A4zH-Xy$qC%4qjW%PwruPu4xpnL-y5KADovqJT0t+*V^;N^t!`KHIpv6 zTb6o)mt%6~!}ek`MMZR~`Bcbx;c)@dFjtr_I~6S2=|QW2+PyYr?_V)fnFy{&)RGYLUwox&W}_afZB?qyB9ksW;T|-@D?yM zigob)`C<3>?Nm2ZNaSCi^DVCrj9WJNpX>}R&ARwFddwh#tpA)C@JC7P*%oqEEJD3g zzxv41U#}9g)85v74tJYvUk)kaAATH(Vq9;NMLWKh40?m$3scE7HdI;h%uYuDGEPwDyH1K{BerHGe?U2~ z2jOkS_AF00IA4%lMo9^JWOfE2;!$@@!SpJTXR8Pcr)~P66tpIB}0Jm3VYEaX13}_KzE=M&lN-+vOdpHJd*Yf zzFN@EqM9~Vmo^f+oz1Vgq166Zobz`l6Q(;Wf5S#D#+Q7ni|LOE4<2`>4+i|md_dM`x z%Kq(-xt)tjMHItfEgLJ9$o8w+kglaA&y=p@xup{ZfN0u)qp^*KeWRHS^L8Iqv{Hb~{JBGxK3jjjM1Luye+iAico8{)MuNy^p!hXQSXo*s(a{+ov1Wgoai=A9Th>0p2fouRrJNCVt22 zx8q*$Sq1-oKcr@?j;k<-n6z2qM96PYSD9P-;$MsM4nh>XS}}wWE&Ei0({Ipicvg~v z`JmBoS_TitsDQ2n#Dj^tU7tsM7OKLrpC-ieCy1MqO>DRJYVfcN~*+(jm_^6@`yg zat`9}paM}H2QdOm-?*i)`0s350W>W@2Vmi#x@=)}0Sa^MAW~YhfHKUc$8QQ-G!M>j#5SbOT zXr{gYS>Bn5rL|Vp+?0v89weS!QArj7;!CO0=${hFGH|+N@QKJh&$aTgJ-3Vwr`yE} zGrV*;2L+`oA#3Vq&6HdP03i@Kv1I6}IL)TL1s1Akr#%mnuLf61`lnk@GctZT0Np<0 zLGp#xjgzjo%#wExFKR<5y0vGyMazvi4HlICtJbWuNO2g`^i?m_tU45hSLif29Z#~X zbZ&@u%OB7+jIHv!IB(KqJNPA-yfv1~gl;T>GcOEp*!-uu=YC|25+kj zd2^R^a<{Ow*>XChB&kTcPqz~{zmtcaZC*DtPX*t7o^{0d8D3g#@bWtgkiS$_LN^Z0 z{hYNWIqR&&uyl7$Y(vmR#7})L;#=X$NId8T#FfRtL`9nc)R`J#kD=M zXqT4`#0`7OKMK^)kvakvA8eVfxDx&CKz6;z{@!AujU}L}ivdPuZtnE-d(``zYRCP( z$$pK!VcBUdrswy(d09w(kC@L$NwiInO~--l>30zlXK^bVbkqel0nUEh0uTOCs#!B& z8ftW+b}1l zTq_!Oo;{J8I9uG|gNk!eWD{Dqy)+vnNjzaOTpp3k+JdvGn(1`M?d<=j4?p}HI2psO zobOk~u=3QNJ_0bZ7p&BWV7L@0mvDyiytm6!Wv%4tdBc&4?j^!>6<|D-ttUU3o z$SmjnHoJn@wW{x1hd>m$+L##hGxWLm{+ByV$=OijPL~S38$)METMDuMXBPIXz86uO zeCnJ_Z|D|c%8hI!X}}<<2hW6y`k$m-l*O%v^hJxE-#!KgCe4O;W0#jNg5({u{Ju58 z-fZ5xEWr7X4aXUhHh~W$8n12lib~eM)p1zzpa8hDxD)d(JuE!+ZAU7stK<`#_Kppl zXk=8eizgO3irHY!fp!eV1?5w+ys)!NrSpkj8tZb(K>OLFN{CYKnptN<|FsaaGjmAj zS^4r_e+5HFT$DVnMRXVWEbV@BzVb{_)>A<10&QF$?MtJ_DhHs3D`v-quOR5TB_-+QI=8s2?WVu~&WUJ5f@6bac6Q%2 z$uX`N%XI+niP2!P?38oiRSLq~tQVPhmsL5-@{3{vN0cPoU z8ziuxIbOQlc32a)Nq5`O=+*AnJ5>&cfU#}tM)!r-S4ptX!kv_Y0U1u<#Y1jl(R1~0 z8C$vC!QxiAT@_y#_GBlw{X*4$T$+z`j&-;Y9b;G`ZZB2Kvz_l|En_I%x`@6PHw zOIfc?0%j~kl-R5YaIm4q{%rES+h=M8QChR+d*4m#*I^7OA7--#zngVho6RMBr5t34 zg`QFi4*_8G3QNGu%89c7I0CJ`jL=M~N*<|7%`t0PvvuCSd2_|Z$%g%ub$y4wGkuUTTJihI^GjIPm@tL_}Zp7he-(o8B1J4J} z>ybB#uWl4#kuF+Ru7F4}cbxHnR_>SFnJX<^j-mJD!>;gW$-u2R-BlNQWx!wwownPF z7N_2J|AFbbs@UTSqo#W&Mje>_ha**Qnr&{m#73chN!CAKc5VaY3kfFU!)QbbFB*6# znl&d~ml@K&L157ny1J2}-zZW<*e>daI50A4M}ByHJm*B4#lA-5vLnUv_p!^c`aQ2$ zl8NIL9SlYTQwGoyrKsGnhaD~Nv+Sgz-R}VK|CDJt4KL|)tWV_ZT1acD!Opr_ALX)9n4IkF8fj6L3_ImfVSIqUrI3FB8x0 zLhhEge7Ffu%Ep*$=3VJ4&-mjP?B*9?j21xpQ~88Bl8mQ^T?QmMq}$Q4-9_?Z8K_0Px9M zka2siEUE2v6%P-GUFLnGYT#>Ix ztCwVtMVjkwEcNN9==xh2G3%E-r!Y)fT~%(`BHx5@X*pI*Y_&5=brk(s@0KkHxQvDwkM42%?PCs%QxD17Fr9XHTejaKaYq{ET{cL zd|~g!7xI>?^rP;b+&eo-n9odA@pRt7W0yLbi`_74pYhFbYqLjNb>Lo@xT>tyy@h#! z*8wR11>nypjzyG(-0Vk>~uuR9WGrLc;Tl z*S!s)`Ml%`zS$}^JiT{FScp+*Kp{?&eLQn1Xqfz#;K}VFjy9_5;*`vzsR8@i(4zlm z9GwFIobsA)_66iU(5e|cys~5Kklj3$h47w38n$2xzk1DfJVs^QKCE7^`I|HbVXV&S zKXqzvEX1!dYn$m$s13#c-{^WC1b|o zRHE-f0y0?clkL3_gine^LfGzfyXd~QWx0vvBN$pv=Z9fK{*|7pZXOzu`zKXp<08~~ z`bgcDR>t?aH8F4Xx{~>T1hKESU016y*)ab9&r;CaWu?{mx&3shz|v0ttln|!5@c)# z6AUB3oMPkHPn$AJnZ*VVjrF`fS+)|wT3?1;XY~d!UmDKfnEhj4p-BX{v@=<8##Hg3 zFYD33Y zX@JY&`Og*|U5Ul?(hA82Tp?YE_T`LAkGF9T#RxIjMtiO;>`gGuZ-JJ^7|u;8hw6X< z@A%P|GQS|W)b|#JU_&^8DBVy6ASA)nC&mE0B0(1w*8mJAsE@IeSRH`IC&~Q$VhU$j zs}V}A+TK~8jyukyVj5vr#0VuDrwa+T+5Q@%Re5;W9gEZ7UTJZ^c9Yvnir5MVtC>Ax z`+DW?EXVA>f|DM=f=)XG(i{H?Ky1SB&`cY>4`nyM87Rup} zKM|s9X*B`w8T{kd=~O{RrTc9N+V34FoD@tjdq%nqNu&2~ z`&30;Ic)qE)b6tmhU7dHc=tkG{6BH(tslDD^*3m@yZ6HlRo;b*0!hWqwbG?MvxSZ_MKYr?ajB{&J~H0t zydmuKG3o!-=I2qzd53$6m9XhqxHb0QJGn`FW*n%WSrFdQvE)ctMU2pgP-cQgzs&HDbWSd?vKaBw=~<7;eoh0)1n zgY#v*(xh`wf$bhUB#}8cD*!K>lF;4-E7unOu8|nfvbuH{37YX#)0DSKus9WW*89KHIdQ| zNJq4T3~ogY1?K_sCu$MU(r}5rH+wnwUy!5@rMy}^Hpcwh5~Dkk^XgT5X_8!)kfZRF~rFxtv&#(yB-q_)*n)hf6U$2R< zC*W}QM`=0`d)O?r3b_0E-GNn=$4crleQ~Gykh?$kvWsHRL5E&Qq7iuIRG_l;oXQ9Z zig$X~r+w}UjR1`eIy=!g4GD@zJ~K6m>(gx@N{m+X0D2=E#Y1c9gf1$*wN=h2IhNYE z?izhQhpl@W!&NaS8OEETkhJD~(5;`?D#TZ131uCW^<=J(=(s$aHQPXdSZzFR6|7QQ z1;Ns{j&W_qkfAApEHrs4L@u4A+{@UcP`bwYwKhd8HK^ND!K<6XYS-jsXCO@7!teNw zb*Y4mlh0m_{qEObfGei>HyVx#_WD1A*gm2yYm4<<*sPfqY1afp^p5=Jb$3_oM=J5lG9i!a=7z>XmZdX6 z__`3i9HT-@*i?__VP8QlukJ%%Etweb^6qRuV2ge5Ho991c12OY+4NTmCqi8(t4%v? zKXIpO=0&{Vtnb*#H6(ti+sCh&wogBX7S*q*ytXKb=0~nPD=ee5h7t=&PtVRJ8YG!c z?`vPYb~n=KT!A!kj?;U7gp!Bhu6vg^w}9A2gV_+Fq3=bJspnarq4hXN#-+;K8Dzx` z{I>98=ndfIDXDy?3nZz%qZ+NVT>8^ zRN*vC8%JzoVtQ(VV9w8jK8r%OlrH9hTg;4a*>Tc{HTp%K9CJ-qSo{^TIQ)}waGrzf z2o!J6E?m-}G3LE92=bdPMe;*sl85T5I*vT*ru}CcP(DQj_^yPD9pn$|CY&Y)lq|1IG;T|?%fAoj`@t+KPn3sK1=HRS}*$Kf#6_DT;aNf%AW8}toV}l42?qE zdTXy6)?Bb7h({bX6T5VJby%FVDfu%GDQRgtl-Ax-DpB3znu;va;r}0HZyJ|m{{R2B z*yJ~zlyV=_)U0s}jWH#+$}O`pbIM&)ODZPK7()c1EYn=Fa&ko|Tg(Y1BXb4HTxvw9 zG*DA;3sMkN6chx{)%SPKd7N`={=eJY;ezYBKJVrAdcLX+niD#Tt&7`)Vzcia-*#_B z)-4ZrH>GkB>>&qCq0yggyLz${#vbvnt^@8yZpm>uUP|K|tfpfs-pC81SF`{d0;u_b zMv`vq+X^UqfRvqkHTrAyQm?C1I)$B%K8?*Vw5W4t{8J|TWdJ1fm zC!1obdLd|ap+*i~od?sGxpJDkS59A5`R6-B^xk-CG?=T>zR;o97l98(zCbL&8WEdb zFBEmfezD!&GXP8g20T#f-doU>$`v>l^xz~QbFHVK{-q4^_*hh<7!is_dKoO4WhH^-Wc|ZXJUvK z?J<|ahramCv!iN}3G3JOI6R1|SJIfy`?>Frc; zeKW>~8u`72oqNqXgOH`@Mnt_*8!RzVwPWE!kl5u)@Olc3$Dwu!>{|LybVqSpDId@} zr0hBnFwd)x{aA|3Rh9@_S83gRXt!rigw^kS%z#5gV#XrcK=BlZm2^mOMYVVFy|4|@ zeQqpK6I>YGgiSB>*Y2sDPfCf^Q<}Kd0FUU(wpfGMIm`IdS+{lWP8eF1`h0BSqZp%0lhOqFq!;YVszK%U4j@Jbry-PE*Ch?NqeXt<(f6l0ttR` z!HV0-vE2;(?OI^|outI_ zj6a7j;4O!WCZ`^n(f)>hSi#*|V`Ndc?z!HwdN$jN=A)g;SMTg#k#p`C-qnM>+2ikI zw{FZUqg(PMmZ)$j_a!xShMH$cRT7+}M!f@&NJrt#Q;IEj+qXaOZtGE`atmvk$0OTX z(>8U#(!{dBYbjmjXw2PG0$lt$4~oQSB(>!&=aSobqKPA#DdByMzO<6>hR z7sY9kV?>pOWSTE^XDyCp567Z-3FnfGp=7z zmJQXg=vEnuU3)YCq43piG~d5EWIXBL?;7TN35{2N?uWW4OS4D+iecOQ)Mb0_tRErIEN8#WV48_&Fi?oh7DIn# zabOsFH;T;g$=@s)l+)qtCug6^v%M1L#p@P)@u6gkmn646hJ)#J$)c0=A>u`A#mOekn&m%h^_}8D8r2U{w5-5$ zkE#MX@8zJT0-V6VKL{9E?&LYFp-qF{T3&i`EF~#798vJ4TAklaPH{jWWS)I5VIJ_# z*Fzy4@LK1tf=WmO6MdiMfhcxPme#8c5}-Yl)~AWnFWRa>(~55~v`MX9dnKFE3I>8@ zL7zgIE%dzki1t~fCFIEjX6(mL_);PEC7&BFr?y^LkTMTn?)vZfiNM1>0d|fy5i#r5 zl}%TCDM3g7n@Vxc6PQD`2=H>}#x$Jk2Kwr*9NgQYHAY^(^e$bp%}*WkUw9yj2M!c= z;6?L}6c|)+kwISLO&`b`%`s+pvA&@So-CDM)89MoLNK3nn{?FkLAycMC#~TMeAXQo z`li4F*~&j)NNu2#6KcuaRZ<=lP1x}Aii|6XXK(lP!?$GBc`bkV1+qPM%}%nb;o85U zH)vLS&EC%FU}vwZ7Dv656fbm6(+m9C*3OF@Q_}BYaHe}oXCt%_x{}D=YUKqx6g=yF zwe^s_V6LKc?O+e=B9R)o|47sjdRcZHEwlWXikrrmBY7FHwp}Zp)Aw@ThG^z{oX2rl zebXTmsC?rRn5S^I=4~R^%mD{q@x#Cl!h5YDIxNg*6GEBbeFKXF9Uvi&eMTmDveK9k ze|tb|5H1)FMP1}SgC)uo6;E$cK0+F>*S@$@nPrNp;3ENelhvnP^YTYcmv20~(>5N! z&b6_2%DPVi9gB~K=;S@SHxL%ko0B|d5Eqllz@y{^r~6RhCDh3oii;4^C~$aw2ZM2iLcMY9;l<9xYKI?8ydSlq-LA@JW z9wC*6a>J}p)3uj29jfW6?3X%)E8U z5Oeja&H>`Vn52Ar6rYK%GZfNUIzGl$uyuN~d zR_jJ6IHe9^Q&4?7vP+jYh=cz~vZF%&=E!-Itx0Cm}>tGxm8 z&Gla&=o zip=aK(eT|4sYsr5SZ{r6BN75Tm?3FMU8<}75F=F#mawJ&;P288?AtY^U7JC&hCm3X zyjVMWiPU=piUBbl(e)BgiZri8vnM6;KNRd2PnqeeC>GCP-Qktx3g0!rZg*bNUOIj{ zEqBjyye(?=Y0kwI;mPW&Cr>PkQ)dGgE^fqwgM*~HH+cG;HR-z4@91W7@EDv_+ z?lTD;Ejw#@-qvBUhD!iKpx) zO$TEyF(6X)M0+??|Br5|vZtv}+hfyTCLP0mPQB#Z+Wb?ECwg*I23t^`suW;0-_Y=G=(R(=|rdLYOaz&g+J=*Q8Yz zxzgYA-kQXPY`V%q;f&XfO6oE|65G-fe`Teb)0jY60^HqY4V}Nk3onvmWIh@_p&7L* zwVZ~`OYu_76|E@+tDm0B!>TrhgKaGnPbua}ANIWu*Z;W)K?Y$9wkO4}>}39Cu-1{b zZWI9iG?h^1jko{(BxbIT1^Vn?DX5ZQt2Lnj8t_)H3AeeX7kvlL8mA5*&(%`x-jx;V z4uF5&n&1h)+>gqhl_vdyG)Is|?1T*O1V>@7o8V+LfWCMK@!&wajXllJ{ru-^$cwI* zJfp{}4AgB>Cv6JYDTxinQ!a}-)kW1@$mJxMZcoO%#9!#iCc$9ij0wU@zEMZAzmoB-pL5>BVGty(6>px9et9ZQ3_Y(0YHb4;g&M#2ZNYn zBl^`pz2#S}i%N*lC=)G9iGA;mB<5Qe!{$VUF9@4;#X0^+*4diH#^k!v_~_0zvj*-# zBO$B?Gmu^U7>dgfjNFlKv-s(hF6mh@R@kP~dZkk|!M#-YLYA`eJvvk*-5tk5pVdxO zS@~~MI>d^lyIZoU&_W&qXfI*oLxOLunbMUfa0RAL-r6Zfw!C+{sXSJjnv2t47L%1R zSCo00hS7lSIx9a%FWl;_;BVAkAXzsV_?V)jhY|8im?c0|oPEeClZ#wfy&LvoOWeVrcAj!jU}vz1sL|+Tz@>R9j#&&AW1=^>Rm>*b4$RL|$FYNPc0Z z_SIx;tGaE3@H52#4oT_ebO9ddZpHUg`L*|rDaVMdyAijc9JcE&4%^`07PoCWZQzGu zs34=)fopzZCGY5JVYtRh7hvBXfSdAKCUXY-&cF(s?BRmZUAM~IgoAyqP8z_seA7{r zfKymh#Y&saDZ~B|-6DJncCD-O%1DHjk?K;f$A&k@$BGsSl@WpiiIav`<-=bDX1dpY zXI_oO|0C+u)7_fA>BV;Gt7ZMu8gC*OerP<lkGf6nlB#0((Dg#;8M6+S@yZp#ySh*x%%Cct z%q>IYVGC@Ssa$cS2MsOROk<$qcdJNl6Ln)WZ+L;VAf_W9cBE%;4nf4Pt>rWxOB@y) z9xhce88L?d&y|E{N2`y12N8%$3fIiNyYGKv>Ai2p9@b(mjRp8-jHSjVjZA!M**kNm zIrsIQ<$__+7?%eZ^Bp$dT)Lz_bt>tb|F6(>ise@09>g9o&w!mSGI*oL&@SYWXHV2W z5x$DVpuS97b*NhD-j4(EG1DJdh7q7M@r}o&(;;nBCQeV|kIgVDs1(ETHg3fyh7QeNTm3Hlyy2;8; zC2Ypy&6Y-b2EqyAraG{7`SRts5}Z%CX|+VUND26)^yGmFvJQdlo?`Dw}vVe{;$ zaxXF6x5bf#W}|k;e{7(C;3YUr4xRybRA)C)3W$_~pr28)1maiQ$&*HSDx+P&#KVS% zR@%u6BSSb2_h9t1S&nhIzxDw~C$V*XhS!AJLoCwo+p`|WXN>e3e@vfH+-prby(!0YP*+d8qz-mQ3H)5vd7E%b# z?ZY9OE0q!qOe+P~G(P}Y1zT7SyL)4|4ZyBilV=T5cAr}72zkjyEfLP+sL0yJf$3dd zgOGXQ8~zn9DH+-^FQjUo8dU1(7Cw+0gjtu(Q6(d>%PJgh_IflilRdm%{UuiQ#f7)3 zmc#h}R9^~J?ii(NG)L}N78TOQ?5I=9hM1M!FFmFtX{D;P6~ijrpO2LfW`1qhdvk;i zQ|(T#97AL=P3Bv{0N>~N6}i1wfT^AOhGpar#;$#VFsnbwYVA>u0%M*ARKgwVY37G= z{FH)ZO~BTbU5xFDQj(gw!v%oY-<+s`6vJ6p&+2?v4EF#8vPa*N!m6#43Q`gTM{1=p z-w-VP+1{_1juyR`#6*EWvNMI&!v!}}%-aSb^jgeoW6(l;xgw0t4COK;UO?Z}*!&#(Ee zTX0%n{RftQDur;He}0W)s(`H!FE1LXBFGQEl!tmcAAkFNM|GCw*^xf%JVAv|;6d}s zDdvF;Y{rEJYZT(MQNz+8P)ZA6jD0!eHG|H7a+{e;GZ3LV-tpk+8;xNJ1Pj)Ad)A&S zH@XHYkU{Ks8T4__qh>uTt=)DJ#W_y`m5t`!1@|? zQr-DQ5{eGNZ@6XgEX!sMU+YcIDSsa{u3&DX*V5ZZJD0CZa5$|C`ZKodZ`zt@&}ckJ zX8Ybb(bTp-i|xbwf4 z3rR~Pv)eY3V1IgLhyv2z16aOhJnVKD%|%IJHk0RbFFo`$cxZVgo+UZWcF&$7D$qKt z;>E3k-JW@lyhIBeg`|JNBqZ(c+0eVzshXAr1*4Z0AwK7+&Rva7^IJ~R{z(u#Z?zh3 zFi0BvX6b|m#NHWvv-TLao7Wj)ta`q$duU*(@sOU7cF&ph)5Bl!;1w=CxF@+t6f~nA zl61R(sPX=~?wMQ%&CT<>-v`Y&V2|dVD}`7*ILp25!4q5)B`EnX*o<^MPFt)(fYOMEf^68^U3g&*jF}&q7U^s@8wm($|!c+Z>rwV^ug8F ztXDiFBVDA4(qG&nV1{{nu$$banE#~lhhx`wH6~q1s;`5?8-QBh9sXl7!rWiz#9?&* zZ|Ws=>Qad&W_7^#P2?KV8-rNeuKSu(ISIWsqrPp$fX|v7{}CF#9>EHQ4b1s!ywpt6 zuU7ZQt}foTdi}eu7PJH%H-!vBbjd~V%5|sN3%@GPCTmm?h-Afy>^q#&-v>(8olg8H zu}3flDY(m8hUQnCHoRH*XN8(Wc@XbFf-g}4C1`M-SNw3z$ybZdR9t|vZRrR*@~|$R z>o6YenHhztSu@Zi%(vOZU53|HMKABzxAQd%8oR~sobZnopoi(iFc&UbNaii*Iu)#& z1c#e3POLZiBb0PGsT03ewa$^c1gW4VQhncsvQREBn3II_z25U(vn;HT^uZJ_9d>TM zA`ulqbs{PRZ?{wkE=j6WPjzjFEYx1>|E`RL0B10IucWPhp}zksTGCrSyks*=<^1SM z#6)Pk)qI2aDILU5$JwL~LcfZf5n}Mm2qI-ABkY68=kBPi$GN}WvU_^O+!Eh$LMwV# zWs$R^us+8D6jttX)0wc2d8^>~Rvwl_8;)n51tH>>PuO|JAIoa)cztL|cfD2H*%H?t3CSKX(Htej~&xvqo-z(*@;hSS$%Cwil z#&Z&^GZ}O>6KU4o58S`4QvK0}WMHw3Wwo1P61_3;;v(hKHEHrFwB=-n{~do*+cka< z;88-)>NNvU*lx6Sdr0ZJ(+SBPxIG7VZ@4Z>&X1re;4?qgY0=q^a0%st-f0{D35*iP zNxs22E~?0k!8}`HhbboYL?%TfujL!mP|QpZN`Kr|gJ~rA6P&n@*DQXtW*~;>#JXAL zX*Vuyt!B%q0liglxH(H!RS#Na@-o}U@!zPk>M`$$dqZVTf*yBh!bj**vp+i|VVKs3 z6hq&YKbE=^iv_0(rN6`rwTM=Czz(kUV`>GrqHV3C*m6;ae=$eE_Y@ zH%??cND}9$!q~=rL2%O+&U5n0JQ8rKG23L59UNZoynfIYBE4|g%^378XE(^dyn9Q+ zPw=dw92-EGFdyby5_uf;jdYz~P(a=;S6mjJ?9u*UGWTQ-fBt9}b4U+6zV%(`cG3&O zI2$N7h&dTWvJg5rMmIcEV786W|Jl%T@d$VrmUjJazHrxhgl=BDfUCA{orpeR&uJVo&wfc;w9d=hdcepPc zprP~JCXY#EA?0BC8>;BI~ z7L|yXOR?8iK?fw}&o$Guu7cjjJ;@A5@b&+(?RWMglzOnwCU3&b^ePyi66}RJR`_>8 z50m+;fHqVC@_#Qh*5x@#3{)fQ{5WAU)v=sB5Z2b68 zWT5-BS+kd_FFHuOHAB`^8ar|FLGFY5;6)RFz_6jLUUe4KYJ2MDj~)TJ`IElK$Bc)u zBUwwbl+C`4IafhVwxiqDiXF7wrm#ikdp3@d51vkRL>5tk(VwJgJL7Y)-<~_O{(-F- z=%5^mdj#`<|=(gL1#UgS^`qAf|Fn zJzse#@!p%2{6R@szpw}*v6pt0`P#z^T7zVR6^msPb$F*k4ssZK;geU@$U;5WF#!CZc~Sf5I2`k%xYqZ^7_q0WA(OUe{|eo@6Wo|UkZ#Pv}1$689eMV zdH5KTV{Bf3Rx<>=CG>O+u|4oYSRb4V?K;NSPUyFM{rjr`z~Rln!cX(}s4vW*zK_Al zHk#aZ+(!JMG-*s6k?b@F_VaOPg9d28OZIaq#2hIggK(FK|1qg7t9kDe*J1$IEiAg1xcKu3d$fv^qi=Gmn!7ex=QZA z_TrJ>l|vHrT@$h1Df1Mtv+_BOSontH8sBk|zBCTXRz9c4GC6_fj}yOG#{WKisGuq! zAW6#t94LAfxq$x9LC|g6Jtr@gjJ=_-*Xc~BtPa)tLO*F`M zSi+1utlH!JMSfXPRl;S){lVm){|gueDdQ{4Qp3Iv>V7?}(WIFf;^Qtv;bcm5zFP>+ zo^>DTwIh+>=0jGUZ}w-F@={n9e2<0Q2gkW|#sXsYpfjDlmz-uJOntlQ5Y0^ATQ?_ z2wV>cj+|G2gsTjx>8tWpY+f3oc*o7Nb?uSoOg|SvJKDNx9vPb7^FD;9I{J2CqK!W7 zOhMOlX6Igzb27jw4^Xw1ywKR?lLI}b)1bo_gU71kLzYVBp2Q~P*5`Zso)*6|eJ^>x zucLiaGk$&JGp#`UO8lm)tJ7q^HQFGNW&gHSgG)|9LeVSsF|#<6OsDzArO@Cx0$m}K zP?_r+?{EZqh!?q6LBmN-VBz;He5d@uqOoIg_pMs|6)x-VxS$JUqXn$1Kj;z@(x?(9 z4HUAVvw-iP*{p+_q530_kpG5-d zfrIhbwMKh*P=?&}lDNZN?oRZmtA~-D?5lh+f?pkFfwWwV{>rf=ZZq2>9JZOsd#kxK z-0DgPPW?;shBDnx00Zaoutx{}fc@ph(s^;nk@Hb=XS?+Jwpb+>Rs~{6nStXG!oCQ& z84rr?swR5gXi*C5dKA{N0oXjG++6`m$G&!Gk0Q~#J%YCIVwb3*1X&g9s)+;ZzWX9D z4~-K@8#aFW8_kj??(~p~YBJg$!M!ldJ&5dO_1wtDmx;x(TZ>mR9O2{=Fwy~fp{}*G zp0Zi%!}&#P!TWMmYcWd__mfcdwF-=0*_KPJX}Bq9$f60MFJ-8CEY-VTGLTw0YA_d5 z6^oG=9gG$K(@{vcPXAtgyE%^bdG;>i%h&A9cjS zt{GimqYn^wZz*?0g}mI`z(Cc*SDf$Z9?{cLL@veD#rXj-oTZ)k>l*ufGjT z@Ob5kD>)c19ZWcS&-LI?z1&pBpxmyEpzE$IJQ;Q9qHZ9|1|;qX*{}Q&jq#vj1^aystFHy11D0$ae@KFjkZl_>&#f6+`$SMr#qeggmqfH52sZGo8hft zhu;}+xQ(Y9pWCg}Qy=ai=I+*yyl`v6yR&$cO@U3*Upc#Kol4rH ziE&WD6Jjcf0lwlHV*Zf#Yk?cUPBrYb+Ia)@HXMd@_`TreH?Cor}nYR`X z@is#0ydXqbRa+F6=)zx>1V71f@Z>?sJ2C@Ri*-hAr`~5G8upZMLex58mMQ>fvzpa|9 z(#+Fh+ehTi)l25xNA&}Q5FvIt3rLU&ItGt22~=M6*!q>?PA6O&C)8)4)m|Z9hOJ1C%Yx3-=gQMHf?K6K$k#;n~MamWi0m+5D9| zrQ-=2^i9|1^w$Z7$K1V?nBtr(Ghf@e&e^c3Wz5qcfi*MTiOyAix1wP#g#S`Pp(P9! zT6e`LxZaXfHgOJ7{CFoqy_flZ2!VeE$p0%5l-mGx=QqB#JgEFSt&zmS)0)w-@r(&% z!K@1h|8`LPoCrC~4S*LARa1qoMnq~8*~Nds4R&><7bS>>FD_SH>pD#+Ah(utkW~7G zR*c5I$m8k%u|tYyL4FZheY?n&;2D52Grq|#8W0%ScD*uidO~>#umOKsEVC+J99+G? zD(XM2$^_UTBF{d&!2K6>0#)(gV7yOLzZ5UJ?w;WLE(D(7r}vXvUyS5GZ0J(8@5j7zgXtHjND?c2k7OsCT2|3qlzT0XIfV4Oyfpc$>q-5q zUH=DzP(3jXY_KYv72wnY<+e8P+oas9Wh%Pe4}~f1X{ljcWl8{}2}*LJPgg*1Ao-w= zW4{!2usn3XSRPXSF!xd|4*L2CL(y@}JwKIYH_2Dx9euPbAg=2L_v)bQm4n^o87mG8 zCj^E#geU#&K12s_qI9@)dt%SB!9A8?BUirgF+O23L7UX{j>qaWc=fUzv#R9bI%=Ny z2ODOdrme$M?_g=#`B#BuLqkrp=z8wk((GRRG70TF&*&sV`&k6VaiG)CKwvMF^~Us6 zm%zrk3aC~O;#e>_cI{I_co@$ak9Gn)j|a`2@ivm5+2PQ419m6;C0~KiF5^4O-l63% z1RI#XfWv!25&1p%i<{vL`UVVaZn#$&QxGsNFuSvlzy0z`j*;X{xQbLX$RZr)xwDmU zrgB%b-S?v)0IN&JUU))f09bZ`s!QP;${Ebd(lqTW_ttIBBBGfNBuqpIWhLZLGn%{) z!3PBrQUaJw2YcLHEF%&9I}74?e)BnC5Z`jTgW%~iaO>pcl%j+l)$DNG?BQqpI^HJfeT%9sBuUe>D2mwMN&)f4rtkTkR$1Z@giY!IpAu_}`MW1s-FR zLdj3*MBR0L*PTm{77{Jzd#T)tHkjc5rNK#T>AVQS#s*KT0KB`vVpoB5x88YPGb*Tq zApYpfgY)%Q<3Zwi{SyhAMgZ;IGQKnWy*wg$?F1P|ofwFwT-I?)$Z^y^Hx9Y(tk(4Q zc5KNRIF<4OYVY%B?nk)`{lK%sENKa{60zy`XuHXiFYGFDvJ(O*L_B2XTL-ik9%ZbS z&>a$JB|`BLin__Lc}>k~o3L84cF9=T%-ToGoTxF*n`O6U#vsJq(sudaIY8u7E_F?2 z-FR-6j^z4Xc)@I;FSLpW_x&R84ev*R3%0&1VK%T!7rU4We4aBuG-FOx@nH}T6`uWf z3F-b^ByVHhYU&bsb&;O*P^?^u08>goh*qP4&<(c^^zpGePiTT-m%eh$YMeq0li4{I zi}O-%9^5au*9c_$39Fy*_Hiah%dRs6BB~b~UlcPSx3~XAZnxBR1_+Q?)fe~n{fMtI zcxZ{MH1}ftwDq2oug-ZHyyVDg099qnh+BJ?`O4@BW^%|0#W~^VG{PX$# z;1old#lgs8sCZ(?bbN^Dw0^Dl?89ZMS1P;`p*yXx9$olmuyDdqknIVW4X%jWvLDjF z0C^nM#jpz2SG3~}7fGe3RQ5)I^r8pxOaR1)Y%(U%9^NM>b)6L#F4FkPh>JnYx2(az zk{#XBP8RPwq>;b8Jfe)Bk{&xSE>#oZk5g2y7KpLj#pi8PZavTsWhs%88o_l@$=s_6 zRt#Y+Kl#YR$4-a9PFY2Y9P1ef-{i9(6iZ<{`}|fz1Zalwfxds){9_tyJw5~qw|&;z zCe#}_5p+Zgbo%9~<2~tGZe>506uw|U759wBW6`C~Qvan}BeAIHVbq1tKU@W8Z>!ar zUjfCFyBy0Cb+gh8SlB+f9DE`Ox(yxrl`KxCoBSC+p9!zEX7d%p=P zgBL0uXQyqsEAiIE+`{N$tm8qf{{iGT8D1JFMB7*E=8n$==& z8HKazSRDbP{rKNkuP86ejFisfLwTC;2Hfh`RIV?Z`4_%dkn6?zLq-J46h~0tMx(Sm zB>2FkO$CzSHh)1&Ay$n0I>?egy?TnzSg7e;(j9{yTvQ$tE7QNA{G$_U19=fbQQ$pk zTlhqC4n-z8)Z+hd&jg^dkaQWWvD*9lIjsTqd_{E$p9>91m6 zPQ!@HLv`_^m9c;7q$6aE*3S1iSdU0T(XvvMw{jct6Q$DYOfRL3$B>kGLP}Xf0{7;r zqfYh9s@-f18c_5W{7>hkERj1(mpb0Ny~`j?m_-s(4qaqUHkVD5L3>(ACCyJa!V6hu zJY>AbDIV?dvj6RH_)oFNI$tL8hYfjiA6rj*O8o9M1BXmSe9Vo~$kV0(lx15qOdIYl zwVKuro;)cqF|U6F$$_qqJ12Ah7Do0&ms;G4YfRfRHfaf;_B)3H2LCu*0LL`*A5td( zDJc8c(0*k472g7t5Lt>^h=d*GZ*T7stdxa_u%<>1x}hQQ!D$Xe+SVAX~=qT###c4al`U8C;d&U@R{q zKjjpH(Cy4fFN5PAHQ?VuJvR#LH)Tqpn+44iO6-G7p2{)&_c*j%M%aJ}$dUpA1Kld`d=8#GP5o}G40_vbs zwTQj3KP7@Uye8F8P8H=~>KXT~(korh{M=hXVG_c5u%4KNu<1FZgKVFnr;qlEE1cms zDm28zR!ba_R@yi|$kb!P!@{$HG# z9n(N7+*Q~5suX#VE_iN+ z15jW=Fg}uoSsNBSX7kb-K%%v^djhoW$fBy4GW5AVWRP&KQknzKdw=q+oh%!O){X3d zdF{<$@{jyjrJmUY$1OZU@2s+&7ad)h%NjU)D^g$m zcV_1x?<(}1)l)?El)-BJE$>e90BFK8?J>c_U*iHD4Js1Xt4ep3K{I&+6LHDcW?vhY zRiDdW-bzHEUW0Z9;lb;-B9eJ`1$~G4g+aZ}h)w`V7)??G>-2PjJA&Qy0HV82O1LSF zsl7&`Ze#-U{W6$np&qrFGd$rw5uSH8=sY=9baB|jqp*Qgna!ensb;1U)(6J$O)n}K z190xwMKQyhw+pEe+Y=?uR}C!GR2VPls7^@Khr!Dye}q@5bl+A1`fK?YX%n$3j=m0$ z$uT#KuJE3HZ;Bu-g7y#j7y9_r?7x>DZ&hXba_`2)dYd{Rd6yC1antJcj+-C1Jmf>Y zK|4L6Kc)o^>yF+i4Qkd`F7$zfSebFvF&`Q`7}5-#=-2JrmtB^7b#SAJe-j!PTuNc6 zms_Fc&dh;$p2IwqNTK66b|uTT$1c9@5#pvD z#i zB=i(Sk{%npb&Os0K-?*9KXc=CqzHWr-8gzB@6Y5oiNTtp)+YK-m}RWR0C!4I#*>yp zoY+#rd?QGjLC8EUg!WlA@+~#}`r*6AKDnVe&(fJoYk$`Gq~B#^Co#uIhx;}5hWf)0x-kZ5=Q z&7K*md~{oFKGXcsV-fV^<;|~jzD=gDwqLDBE^bUtUsZkZWf@GV|B6T-l!jlLa?e<{ z|Gurl6OFGY;^sf}g;$Ha;U2N`zT0K5HfB0skV(oZar$cn%@65t#LO6?T~0m2z!I8a zPfL&!tuF~N3HbAuX?EP1HaEVwl`two96kQ1ET#F?#7_j6>!J(DJxVL?kACT6BxLtMV+)U1O!4X+m!tPfw<~=5s`M;IK2f$xHSp2(QEjqB{eAK72 zb-QHt{r4w7-}WkAE;KS&%QtL%VVL)8QASwx@em*nJ21MdvQS4~!Zh~NBe6X3HVHBa zv8)wWYo5u6AEmbc-Xw1!um}MCAyP~UzL&ydEsh#!fGZBhl92C> zJog6tk%tML0Y;TLkXTG!iCO1&A?M-&$+))>s#EvO7XLNP(jMF5-@4Pa4uXM@m%qPy z*va3MovV1u(_(9WbV|oVEXoCNfHNROw&(YlW=}!O{}T+I&-=4WSJu)fm}^9Ao|o;% zGsaty@aMkFE*1}V9j_tA2OIsu(@3uA3cOPN6 ztq=F+IN~aXrNtw$+A&hx;ody?6X5Ob5m7H5<1K zM6@ge6`;Jr9J9Jb9D+(MZrA5>-1-=qoG1#}PA>nwKOHss3rsq%1is^&{^=s$bpI;vo78;KGG^qA$`a z%3J`zH)fUANa2~LGAWx^zYMuu$ml|NQRvnAS>xOID&ELf#v9`@5dI__=iP zj(}w%bo&Qy+2ya!4Vc#58V}lb;(9N%AC!P2QJKI0mjA#Iv@_NxOA{jJ1RH{OiMe@w za{E)=p)22kfxUmC7e9*1e?}E1&F%1HyJlGZ1)zCz=@WqM5H8BG4mpRyRmu%QZV!Ae z%^>N&v;Din-*I_bt2M{^LnOEcrZe9U72XFI9Dq$%bOW^s*$jS}h*R5Ja@T$8vGw7? zV5%PHiI-OUEAf;U{nDtpddB`chod*$s*yt#c=LlJ+XUf?`(Hm0CH@B-J6K>Xv^lAF ziS``M7F)c=Bmz-4vTOYWxu4MECc|31%~Rg%37=bb2nR<;u7;5#I;r7A77)^_?wFF& zdNc4!n8%LWX(02!m@)7UzoVOQjZ1SvVP1`U4aQvb=C02N33B7Gb$ep91y2J`88rgFlK0Vno7+m5G0FdCB6|^E08(_tHH7Fh6xy z0)%gf5_YEufSto)Ktl8XX_sJU>ho(UJVBS}Y8ml8LaVkHnk;>YeoS=o%?^W?Udyol z?KLw(uz#9`N7++ll#m@8&YF^DC4yd@H=KaK$$f&^K z)|u$fTco=OaS8w;p61DarM?-3#saCnKh-`dY+$Le8|5TXclAzT5G{9W;57>;$(rKk z4hpAbc@H=~oIQMYy5<++z7O{H%Iyz)PUjb%+XGAAxG3R*4yDKV6tK_TT6TN9?hvOx zn8Hd~&e>it=C<*vBw}m_JVTyRaC{3P1<|4RIbJ{Nsn>WP(IU*$+ z--ERy9qN>!=jOe|)P=K> z^VUL!$FloI!du^Xg(rO8J(5e8+!2uXSD0PiN|ZNAdjD>hJtW&T!g54V#z>WJBNaq<@+*dnKbH!vc?{_!Uo_)w+1jom8xT*tOcs$PC*1 z=emXu0ad|n^EndD=dTJuhazU6s6p@pF@C!nAUq1b#ww%d$i-)IteWiu5XX1aW^hFO z(6-3butWLEJ?*1|33>T)nm0eaE81K+DiC!8G_n(d=J!hEXoT=cS$!zY{$EUI|7{MI z)*LV&59_#@qpdPY&c!U&d@9+r^+P~HZqkgm>w6P;euERd^4fb=X{s1i2O)S;>jvK; zbbDOU#x98kSoQ}|Pbn-L>ThZE+tW2JQs#qWIIR<8=l0(_Iy6J*@)1cA=n{6y#g~rR zFhFy-K~=!GqS_^+IlG1&!v@XEHKBK&A2Nh9(iGym?NPGBDPk*R@8eLRJ1oVltg6Qy zt~Qg;H+m%2#Sk4NqjQ)KU}m}8k;M^cL$f`W2~1@5w??OKw@!?ro~y$=z*Jtf<}dFN z<0n;LtGk=o3DP5Bf|hLPbUptVaUZb=9sePK?U?|d&4BUU-57GsIgpvjyMyVAFb~UE z#fP^GH7ULBiE#yG^n_$$wr|IK!$4J)EgW6nby^016%sb>V7c!g(BQ(}${n~o+vJDV z2M-C(FwN#keU>@S)!R=6KgkR%6;2VI8;nE$Lh*HDU$PU`!+{4JGZ~?jXa4zlqandH zmZxb33`v?gx(IetsQRP$DzZgt^o5J~b6HOK41EeF1` zgP(z#9n#V=mm|KQyG38pcTKTO#CB}Fr+|X=D#`0FE$VtU0;z*4p$_Ikd$wB_Vi56^ zfaPvrr4fLjx&3tfqO`TUghUO}Gz_en@m40%lfTmeFj@ z)Ot;1vkN|8EwE?GUP5i29`QdRPdk=}kmwS5#e>{nd!)%{vSW#<+!Ve$LpjW8gP#9` z^#s?sgdV4f>Dg!XhYkPDLZjz9mm~rJ&9m>YM&pq=VS5v%ioEUdPJCCbYeXk$cu_sY zAnpMi6VHDUo<|%X$FHSq_L|rdyd8GP#3~33iE^{z^zTRH_?fE#IY{Dm*E2_XnjsP@ zsdCu*brjSd-ki`+a?R{#1SB4mL1Z_d$+q;^GPivajZ|NqvzW9t*ikH9sNp$VES$`* z*g+6xm@%=7tz^WQfz?(kx;SD^dJR3I&sWb=iq))N_w=gy0^)L@qUSgyZuIY&XO{S=%A7W D~k&kn>JDp>w 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

V))9Wds1aCz}?a1SzY6VPtG;ftx<2l((?UP{E6& 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

ELa&1 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

  • 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 Date: Sat, 21 Sep 2019 15:14:59 +0100 Subject: [PATCH 012/106] Update 01 Setup.md --- 01 Setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/01 Setup.md b/01 Setup.md index e01bad88..a1a4e284 100644 --- a/01 Setup.md +++ b/01 Setup.md @@ -19,7 +19,7 @@ On some versions of Windows 10, some extra configuration is required before Bash To start, we need to make sure Developer Mode is enabled in the Update and Security section of Windows 10. Press **WIN+R** (Windows Key and R simultaneosly) to open a Run dialog. In the dialog enter **ms-settings:developers** followed by the enter key. The window shown below should appear on screen. -![Enabling Windows 10 Developer Mode](exercises/.images/developerMode.png) +![Enabling Windows 10 Developer Mode](exercises/.images/developerMode.PNG) Select the **Developer mode** radio button and **yes** on any succeeding dialog boxes. Wait for any neccessary installations to complete. From 2c5dcaa25c4e52345ac62f3bd1b75acae6a4a27a Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Sun, 22 Sep 2019 08:31:45 +0100 Subject: [PATCH 013/106] improved clarity of task --- 05 JavaScript.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/05 JavaScript.md b/05 JavaScript.md index 0cf27839..83177f67 100644 --- a/05 JavaScript.md +++ b/05 JavaScript.md @@ -98,8 +98,9 @@ const sqr = num => num * num 1. Refactor the `remainder2` function expression to take advantage of the implicit return (you will need to reduce it to a single line of code). 2. Compare this to the original version: which is more _readable_? 3. Create a function expression that takes two string parameters and returns the longest string and assign this to a constant called `longest. check this works correctly. -4. Modify the function expression so that it can handle any number of string parameters (use a _rest parameter_). -5. Can you reduce this function expression to a single line (hint: explore using the [reduce function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce) combined with the [ternary operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator))? +4. Modify the function expression so that it can handle any number of string parameters (use a _rest parameter_). (hint: you will need to use a [`for...in`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in) statement to loop through the strings. How does this differ from a [`for...of`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of) statement?) +5. Use a [ternary operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator) instead of the `if` statement in the loop. +6. Finally use the [`reduce()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce) method to replace the `for...in` loop to reduce the function to a single line. ## 2 Callbacks From 1c192061f87ea3b7bf150781fca5f8c4f5ac5f22 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Tue, 24 Sep 2019 07:31:18 +0100 Subject: [PATCH 014/106] updated extensions list --- 07 Unit Testing.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/07 Unit Testing.md b/07 Unit Testing.md index be7530a9..fa89b612 100644 --- a/07 Unit Testing.md +++ b/07 Unit Testing.md @@ -114,7 +114,7 @@ In the previous section you learned how to run a test suite and check code cover ### 1.5 Visual Studio Code Extensions -One of the powerful features of VS Code is its support for **Extensions** which allow you to add additional capabilities to the editor. +One of the powerful features of VS Code is its support for **Extensions** which allow you to add additional capabilities to the editor. Make sure you are running the _latest_ version of VS Code (1.38.1 at the time of writing). ![The Extensions Tab](exercises/.images/extensions_tab.png) @@ -122,9 +122,10 @@ You should start by opening the tab and checking for the extensions already inst In this lab you will need: -1. coverage-gutters -2. jest -3. test-explorer +1. Coverage Gutters +2. Jest +3. Jest Test Explorer +4. Test Explorer ### 1.6 Running a Test Suite From 83c9e2ddf4ece2995a23c27378f0f0a1b2b14feb Mon Sep 17 00:00:00 2001 From: Anir Nathwani Date: Tue, 24 Sep 2019 13:07:44 +0100 Subject: [PATCH 015/106] update --- exercises/02_http/01_url/index.js | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/exercises/02_http/01_url/index.js b/exercises/02_http/01_url/index.js index 30eac127..912dc44a 100644 --- a/exercises/02_http/01_url/index.js +++ b/exercises/02_http/01_url/index.js @@ -41,12 +41,21 @@ router.get('/books/:index/:index2', ctx => { const books = ['The Hobbit', 'Alice in Wonderland', 'The Secret Garden','Animal Farm'] const parameters = ctx.params console.log(parameters) - if (parameters.index > 3) { + + + if (parameters.index > 3 || parameters.index2 > 3) { ctx.body = "Number cannot be greater than 3" - }else{ + } + else if (isNaN(parameters.index) || isNaN(parameters.index2)){ + ctx.body = "A number must be entered" + } + else if (Number.isInteger(parameters.index)){ + ctx.body = "A whole number must be entered" + } + else{ const title = books[parameters.index] const title2 = books[parameters.index2] - ctx.body = title + title2 + parameters.index + ctx.body = title + title2 } }) @@ -55,8 +64,19 @@ router.get('/name', ctx => ctx.body = JSON.stringify(ctx.query)) router.get('/hello/:name', ctx => { let myname = ctx.params.name if(ctx.query.format === 'upper') myname = myname.toUpperCase() + else if (ctx.query.format === 'lower') myname = myname.toLowerCase() + else if (ctx.query.format === 'reverse'){ + var array1 = myname.split("") + console.log(array1) + var array2 = array1.reverse() + console.log(array2) + var array3 = array1.join("") + console.log(array3) + ctx.body = `hello ${array3}` + //myname = join(Array.reverse(myname.split())) + } // only applies uppercase if formatting query exists - ctx.body = `hello ${myname}` + //ctx.body = `hello ${myname}` }) router.post('/form', ctx => { From 847df4b9e8bd2d7c2781112653c9d3b7b4ce7690 Mon Sep 17 00:00:00 2001 From: Anir Nathwani Date: Tue, 24 Sep 2019 14:46:15 +0100 Subject: [PATCH 016/106] update --- exercises/07_unit_testing/todo/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/07_unit_testing/todo/package.json b/exercises/07_unit_testing/todo/package.json index 8b83c896..ace21014 100644 --- a/exercises/07_unit_testing/todo/package.json +++ b/exercises/07_unit_testing/todo/package.json @@ -10,7 +10,7 @@ "author": "", "license": "ISC", "dependencies": { - "handlebars": "^4.2.0", + "handlebars": "^4.3.0", "http-status-codes": "^1.3.2", "koa": "^2.8.1", "koa-bodyparser": "^4.2.1", From 2456d1c83b7cc8f99d72106e0aa3f0873eba941b Mon Sep 17 00:00:00 2001 From: "Luke Charles (charle44)" Date: Wed, 25 Sep 2019 00:12:49 +0100 Subject: [PATCH 017/106] minor spelling amendment --- 05 JavaScript.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/05 JavaScript.md b/05 JavaScript.md index 83177f67..ec1833e6 100644 --- a/05 JavaScript.md +++ b/05 JavaScript.md @@ -28,7 +28,7 @@ const biggest = largestNumber(5, 8) 1. The function is declared using the `function` keyword and the function is given a name which must be a valid variable name. - If the name comprises more than one word these should be written using camel casing as shown above. This is known as a **Function Declaration** 2. The function above takes two parameters, `a` and `b`. - - These are variables with local scope (they can't ba accessed outside the function) + - These are variables with local scope (they can't be accessed outside the function) - When the function is called, you need to pass two **values** which get assigned to the two parameters. - If you pass too many values the extra ones get _ignored_. - If you don't pass enough values the remainder are assigned a value of `null`. `Null` is an assignment value (means a value of no value). From c78e77d9b3d8dfa96d646e4043e6f529493195ea Mon Sep 17 00:00:00 2001 From: "Mark Tyers (aa7401)" Date: Thu, 26 Sep 2019 07:40:05 +0100 Subject: [PATCH 018/106] updated name of extension --- 07 Unit Testing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/07 Unit Testing.md b/07 Unit Testing.md index fa89b612..93e81448 100644 --- a/07 Unit Testing.md +++ b/07 Unit Testing.md @@ -125,7 +125,7 @@ In this lab you will need: 1. Coverage Gutters 2. Jest 3. Jest Test Explorer -4. Test Explorer +4. Test Explorer UI ### 1.6 Running a Test Suite From fd6f91d059757cd4226639318a35affa08708587 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Thu, 26 Sep 2019 07:59:21 +0100 Subject: [PATCH 019/106] added notes on debugging the test explorer --- 07 Unit Testing.md | 12 ++++++++++-- exercises/.images/extension_icons.png | Bin 0 -> 37921 bytes 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 exercises/.images/extension_icons.png diff --git a/07 Unit Testing.md b/07 Unit Testing.md index fa89b612..968eaff6 100644 --- a/07 Unit Testing.md +++ b/07 Unit Testing.md @@ -122,16 +122,24 @@ You should start by opening the tab and checking for the extensions already inst In this lab you will need: +![Extensions](exercises/.images/extension_icons.png) + 1. Coverage Gutters 2. Jest 3. Jest Test Explorer 4. Test Explorer +Once installed you will need to _completely shutdown and restart_ the VS Code editor before continuing. + ### 1.6 Running a Test Suite -After reloading the editor you should see an additional tab, directly under the **Extensions** tab. This is called the **Test** tab and has an icon that looks like a conical flask from your chemistry lesson. +After restarting the editor you should see an additional tab, directly under the **Extensions** tab. This is called the **Test** tab and has an icon that looks like a conical flask from your chemistry lesson. This was added by the **Test Explorer** extension. + +If you open this tab you will see the **Test Explorer** which should eventually locate your unit test suites, run them and display them. The first time you will need to expand the tree nodes to see them. There are a number of button along the top. The most prominent of these is the _play_ button. If you click this it will run the entire suite of tests in your project. -If you open this tab you will see the **Test Explorer** which has a number of button along the top. The most prominent of these is the _play_ button. If you click this it will run the entire suite of tests in your project. +If the tests don't load, check at the bottom of the editor to see if Jest has stopped working. There are two main reasons this happens: +1. If there is a space in the path to your project directory. If this happens, close down the editor, move the entire `foundation/` directory to a more suitable location and open the `todo/` directory again using VS Code. +2. If you have opened the `foundation/` directory in VS Code instead of just the `todo/` directory. ![The Test Explorer](exercises/.images/test_explorer.png) diff --git a/exercises/.images/extension_icons.png b/exercises/.images/extension_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..ee926bd2d52d79f9907062c1f9569f03110d531c GIT binary patch literal 37921 zcmZ^~19YX!wl=(0Y}@GAwv$fMv2EMv*tTtU$F^;Ctd4D?^JnjK?!Egz<9ut3wMM|ssYZCxKB0M<-QXO>#WB5|qqYyk!_NcQNpeSq(OwzRp`VuEEEDc5JYT^LC6c7QG z0*)?(rkzX@2@i{b0fePI2?&d5qs6c;>i`lMJa%4oK6bKfWj{}*J5BQ)`Z#r8A_AUi zw7z@`MF)%^nTC^sc$qs~L$j_E`Nc^g%=pt~k|Hzp^$7zES*E+!LOmsD4Vx>;o!(y` zKP)4(bAmttXd(6}YJH=EPpr&2j-orX0C}>oEg}jj)=@ern#gz%TMnq|V|6=M9LWEwI3x3Rx~R0>5TI$J+)xZWOIBnzpr z6Dj_;g|4KmGGYhR`BwS9k!PuLjMNoxL4r7m*tB$Y6 zC3Zsh9gY6zf$4Q2h)HL?+36uPc0CuFL)~f%uU_{`nz=>?<+ylL3MHR3#dtd@umb2P4`)icaa1Hz! zNbxp+6Y58ggFOms0ERuXHaLe6MGNeUpa2#~br0neV2Bv1PY5jxrd*^g4%ryEBH}!P zdJ`y|2SrKnEl81w_)D;=Fm9f385DK!Sia>E<`JATavOq+&|^N(9LodN+h2hZTQ#K7 zz-Sqwq#uqGD<%N5m+DH96LTuCxrfXi+zZaukD-s_ce}m78w`O65DmIGVopRO|A>;D z8ZFuH+t+Y~p9hzU};0s z3APo~`?~cNF;9GUiwP|XV+dq7#K2&Oktz*On!f}~DZG4GyLWvM&VXOPR$Zk6dJ!Bq zEPA-aP)(o1=+WS`2D3(IS?CN4AyjEtW1H7LpOc*)HZ^uFkSByE_H+pTH~()*cbyKt zO~PD1%$=p($ZPTI!>f&_!zYITklwKEuTW(6(Bsfr(4kP1L0Un?eVhvM=E8SGUy+r< zPs7LtG0^NRS?dR2MVzEM4E z-BhDP!3@DjgE#eA1~Uhzl-B;O<WdY=q{$ng^Q5nludvmW@`?7N_Qr=8+AL=6Z8J zm4!ccD-(azD;;J{)zGUfDXHbPD?N5xNM*o83rUqG&(P0*y>GY!xi9kA_rUkqeIb9D zeL1~9y(7d%fsiuSz}ey& z+gfKMNAuxw>dKZw9_JHJg@d`H`>y%#5vTRbs>*URYd+Z|F_1rH^NNnqTCFc0sNc zt`}}49;6>V*PC^x=3uV<>^lu__UBk?pL^x%kBT4T9KyP;y+?jsc=a-FV^U*ccq;G$ z^@8={c}sdLc>nfJ@Ot`M`n2>E3&9Cq0o8&O1`UU>PO#iRXX>E-t74WYHBUt-HE^^y zzPGqnPIy9OfOztD`@7Js>x3ugmU)-Gj}ax5N$>@fH<~F*6YJTMy|uf#yT(&JRC`!5 zvQ7NL2wA*1setISs7>@qBzttq*XE&-VcMwjm}jh0TrIRULNnB6>I>73uN_2PRKQfE zMEP{arXIWADsU0lY>Wejj^+{L**dW$Oer2N!z?x4iCR9fzX?qhg~BioA-hMR2#BPlInuASHRqSLAGr_kt(G z4Kod-7O2Oy$1d1UQ3Fvd!ej;+SB@pJ2Xzzl@xhdO3*8Gg$5q9JJNgdAU0@=i`&9cA9^9mjoWKVD4b1A{LW9XqGDR)Cbj7 zx^OhJ8`@l=dow!NM65s;RVzuWq_iH_Jl5{TPPgpBHfFL)vzyuNu0s6?EpPU32A}zG zH#i8MklzcphhtxsHZBcF8 zn>VaHRpJd5Y-hJ)zVqO?&beZod39TjR-F#U3_`l1x=Fb`rUoUko-?i2+e|Mh`W$aC z=hn4#YI<^{{ro_bhN4VGz%fM_NEz zr(8ip{rNoXO2St~^w+*+>d8r=rg-yW58GVEZzI@P7lKE=O=T+;E!|R0HFuD#xE%Lq zsU3z#S%_R~J~06m&()*5O%F?NA<%`I4ugjHt>rDWtpykIBWbI8Pp9|l#cl$NSt}}@ zpN_7lTsy5DPN;`Y)3G{8I_};~`#bul35#7)4yhN~2;J)rWKUy_KmVvPG%~GD>D{(0 zI&Pf5q~qS`3=zelDReEgnDh1EsqMCruw&Hf18A@mfN7MJ}v zem8qHUq70`z0M48&fF^R=DFFt_C8f#UfxB-CL9vL@KXFxzEA(tdM2RRuujEZ}{gE zABnlMvpqKhgPWThy&DU?oue586Bid310yp7Gc(<%2A$J)TW14zI$I~we--jS<%pU% z897?mJ6qV<68%-KfuWs?Gam`bUqt`=`By!iElmH9$=2!LW_=pS@K+846Fnote}kF0 zTl_y@f93o?Va7)PYn8o=qxIi585=Q}Sew|G*g89X;+Xy`-KTH=7x@3Hq`QIrzsUY} z;=gR;{j28OiY88W)-Hd!K*iR=nV*^WZ-f3*{C^(#7fQs=#@^Ay$>|fu&-ic1KV|=^ zul|2D{2c$o@lWA@0^}SmJ}ou)t6uy}|0ejS>_7E2{u{wRh5rEj<$7*;3wIN1by15? zhyHB^8yhDt!+*{BPo#*QwVk7qy@8R*Up4z1@(2#pf7RywYzy2ncE%Q_-$f0aP57A^nYg$axwx6x zi5NNlN-(nXGW>_mKWgw-j)?dpRE5g2Jpiq@*f5P0D=HXQ6Xh_;F&k1KHlKUgJ<(BlElU%L6bait*$gV5QKHRiS7 zW7!6}iBY_R^UJ0|^Wd7;4%eG${5P%oLPcxEWAi$dZ}o-38P?(%8DF+$iJl)!NA1eu z-#&w5%*Wp2x)9?@KQ_?pO#iTniHVM@tE+g|b{%g)@?q0@vYmc6sgC~NVZ(d`M)o>^ za%5994&8OFt*t0a`eJ-H;6^b&5($hsDT3CZQwi=xW4P4?xSJnpg0s zda+Xb4R|1k>Sq-$-Al`-YOAU`jspt{3V!G}n9Meq_GI|aWccTcgc3j^F$>VrS_5NP zYMGFVg3>pnW^6zvI|0nO+w};!ZV%^c%`0cFv>tpMpxD^h!(yVM6XJ*%`taqAL2T$D zPQOE;mrly6zYnb1Z!8`1G9QyJMxNpvTGIXAq!`g&nwhzp`egBV*F1^tA+t8uT@==; zIA5rt90u_WGWrolr_EPx`{BsS&avEW{v+8X250#6)%9F2lHNXFeKZ4T1>x}ww?|?C zB~|N>R5sB+6u+t@(l_J;mO0bDJyP+ry4n{xb2=yIB=VQ-uo*y*3^S{>SX~5G-jiTa ziP|5k7g~T9(Uhc&IPbT3H5uNL0pI;tBii~3^R=XL>;ykQNy)RYXT!T!=0>~$iN(AG zR|bA)hLwqmNUOKW@0`9^8B%NHy1%?-n+~+MpEooznub&}!N$poh9}$Gj9<3LTlV9( zwzTvpXlimrZ|MqcH*u`^%FPO@Ew%k43sJugF4mfTF-ay6jlh#RUjSx6AKrn>JM8`r ztc9u5lrDIku=uqf%!-|XHvjn5pti{beB(Ss80-is1m#-e?d;#JoU8Job3sSWAsTVJ1 zV@gd)nzmuCALX4OaRp&-DKx+oe$jWNx;PGuKAkIFsUX3IW7P=nPjIsn&7>f+qM_kVGG*Z+N-vB+Cli;DG;+@p-~RqSachb&OpBn~{@xW@>ns6r zq~|WEUG?-Nd|lgh+B$?z8rymDxy|G7`b&I1@!}e{?S1nk_VUZP2JwB2d3`-_b7E?0 zDk37H4Z&|8Mp+W7MzfkK1ilo+`omWrw5`3S#@@I3*qz~watTH7(&b6p|2}C3w}r-E zmPL@Ul@a~v4b+OdXi-t3BPj$9msx;h&>@s>j)`wZ@_ceX;}k!aO*!bjgQ$Budy^O8 zu}iCG(3|~b>bo8Y{Q_55Y-~3+?gW{;aJ=^+)iVJ!dyWUCUX>rggdH6p)|S)4igp#5 z-&Ur=2TDb$1mz}#PH$7a_qipXA4V_tk6{l@1vNEH6svM^wxBT8TXM7NsBd<74HEw8VC~Qb~k2Xxk?56!N zedaLP-MD7s;B6}DW=e!0u3}XDe!!Orb18cNG8G3E%#ATjhL#iX?0s~OmnzvGnu|q% z@vsCFYNYL(Y7(&D4c(nq9YQ+UJgG(q_OAv zzFc!hXkxmV3FD-UkUEw8u&^}#l7aJF(WDxIi_60Z>s?xwc;5Y^t?ebFKNJ!3K06-V z?u&(m#qoB{x>fVa6d}^*7*4sNIz#yFD&q`238)RFuL^{7d(}LV-9|}ap+9~6eI2vq zcfTNzZ^<)`%#eI=V7Zp-YPZ~tC+3+<+P(><4JV%Hb)HuH<~@6zyfoGCwrLt0@F;A3 z-G;4hC+b0J|NOi+8Yw6B%>&L>!dnxD%@9~o`6D5fnz{%ESKe28MuYNmSYnbcQ+ph~ zhU7L43pS^`S$4#x>D(k4I~3aYPmhqUj7*w&S#ppD#P3eHRAo_QPP zPcEwLlaZ_YQ?x%NeiE?Zt+GYkH4t^45Y;adG;_)Zz|h_Q^hyCc_7R8}`sX(x>G=ch zG(PJ{(-&f3{)LxaDhATfj)k?e->V~T#d4bo-LntMA41d6OE}!@)`b*n&jH&+Ab!<) zE)8c&W$OEFTrQb^&l5 zWS`{@W7~0Rxt2?n>O0meaK; zK2^uRG~8sWoBBImG7#Fkiuu~4A3l_RZ(_m4CH*00bN{*@X!JFyF}v6?uS1rk{~YL` z>j7&2e4j+MrJj}6f^zn{XD`qlv2hsL9k((5YxjjgJZ5Aw1me-~{R9tJmI^Qt{JFzm z*^Se(q~B}u43T83HYF(`@rPejBpz5n;f8{N^i};fBt)^IG_R^yKYdsXE;H#}LOsgS z^X!jymje19UyM8;}Sy;FlM1n`&hDccVw+CCCGohlo!KCzkR3n13 zRhd~zIPUwiu(0rCkXWx*Cn!ZE#b3h=<$aaiQNF_9U<>-wAo(W8-?SrWhopZmF~D&} z#X1ZeO7n@h%%7xmm||T##|_(M((%t&Q}X3yj+^h>tX*N3_?7~~1lh0Q=9}2jO`}E> zG26&Tu=~E#SJSDE>!+X~U(|-T&LU9_m;hTwG4Bj(2K@31rvT?&`4-`8*TQ#W6cX!iV;hyFGiEcL={FZ#oO2 zbp_k#k`>IDD{G4(Kbe!G$pOTXT++|*v1RlI?$oFo>?y{o$VkOh>5Z&CZ| zIqZ4d+6)wvB(0y6f>@_lN3(VbqNFo3Q%kUCJqtJEi9Qhk)gl3H&{+CsbEi2pW|&UDvmwyu1}1FD*)^-Sr(V@c0)jnO~>@F0=7S_N?ox%TiJ4 z_){7du{kl)K?VuZAFjnP20qM3HZh_%mI|)P!FjQ-%M`TYI*IC#S0PiZS0TCqwa7w1j#(r~=|z!|G& zwDpoS3CaUUzfKM@UOu-An6zU0U8IqW4=VPQkNzPAn3=wTT|N6s4!lSBujoB$2yYH= z09x-yv`EbJmNH6>*yx`E6z<~5wMN6bp?Z_Y&(F`P`t&b9!ni>)Pa^ih!c3OTjLX;z zfCjf}{C-z1+g(MVP?=3B(#YuX^M-yHLfn0p@TguL^BPMsG`^q3Fy~uwXVlT`oqhz@%AmmFVkx2i>yZ(nWOkAoLL7V zm*>=pBIxia{z5HVc2-luS2^dK=`1>VVvn&|=#J_M8wJ;vQ{&uER{8D{PMYdwSc0%Z zGFgbzrHQo`T9RN0OU4Uj3gbxB2H*$%>gwKBh9edl@c@9Al4=SF9bOJZ--VSVr~zHT z870z%*8Jl2ET{ifT|B9HMpH`LghT#jFbbkZR!WS(tn4C@d-!BScfx9t$Ihn$HIHP; zmP%lf=&>7KRYmHfYx3A0Ef_=yG~#+)dF!^DiB6(dO{p|KsRcWnu?TO^!p>^pr_7IGrP&`%_ zf@P_I&-3A}fngFjD1u}{`>LRsQPc+1jhS82oD+P4qdeyapDp4*B43(b`fSJ-mw3EW zOlHIqo)WzmM&KtQ7 zlMPFz+2CjY$S**F)b$HGh^I4!8(#ZJyQ+|UI{Z5PCU%W5{x~t#j!i4G$)?6n>ZgW< zK;SfBdZ%YoCb-+YyFn#@nlPTRo=b6_$m&Llh(1ECfXFR*aWwsUY->FJhevoUoZ2FI ze%t<okWY%5-t>>t<^dg{7*@E}i9 z7gVU-VTsg5#Zn(#IPCb=hC%`dCCK8@U0>fJ3iIRi<5Ql>8;z^OkY<2%h0Mtg&vfinLl zaWA)Fw~Ltyyze*uA7g3p!_V~k`>x+1NFbI8e%Bu}=kv?@;bISp-5uBM+c#SCDi?pX zE;|xF19?X}>CB4D44T}$xbsA5OB4>?#aeb}z{;_9PB?;r7Eul-sRlKX#r*iHYWIvV z%ur7Opw0%}O~b1jmJ<}!%M0eF>lUs^Z=x0LpfD;WeA(Q8*<}+k-a9xTA08Uw_rG?_ z(AolZ5;rrK1JvkK$-7&AfrUCvKT0R{v%kp`3gm7~;fB%f!`jClivU7OXEC}K@V-}L z25%33>&*n7)q)nVTv_MEVt1&%K$tkHjYOB(nxl9mnvmov;6WeC-9aN^nvjY8U``6; zaqy$YrPe!R5EJCuMw*p+KQO^un37a4?Ur2CZe_%d!7uR{2FxwH^ZFiL3c3<(sxlm`+f-4 z*B=6(3IAS>P+g1wOf}f8^RbJqnS^%^t1rzZirr}b2JxlYy%esYN~LO-1t3+}%H{qQ zzj~$H(!QS}G`Q;Wcq@o}MpHZJU1tL~8HW^=c_&!~xfV{q^h^CwSr;IT=q+I)$QHI$ z6b%*GSYfr-9xM|*DMo*;XWW{J9VgfJPyn=MM%Qr#GNYLJA+GuR zkM>*)8{(a*@A=C|7Vc9na)Tq|)jyr4>!!RX0G#w7jP|5G^|snwpy2?CHZb zD^FQPhDW6p!Ah-SQ!T>ISg!b4(;Gm!)&+{I!&0$8%=5$Gs+CT@!#|jUCEoXXTSi+o z27#Bj-W*F1_Rm;3OGST0puszgttm6r!!?k#)%@)eL|(3j1vHv10z_vQrGuVy@ih>A zcgRJF;6eA&4cNYkuJyulm+b9-tj=W)R;g_YCg?gSauH&5_Z6ZEC`wV;+ z1l(To%yST)dm5MrlYm_0Ty)Bq;nGdsG4EIuqo)PKdQZ^p0RVlDQBh!9MG+;Jx&p;r zi`1f{8LHJBlQt`V;}!g_nI1wKZ>^k)cYTy>baJ`~stTW@MnhT{Q#k*+7P*U{xq|}o zHw_N`9X@qNV&dPr6Yv~(-Nz;azUc@bBpHFsSlz2WFjqIU72#OvOSz3B&gT(9PprbSsAx22}lZt?M5^t zq*46TcNPz;^CJlY_dEXQSJKCpADwjvzBhLtWsye3`cr^hm5a2qT=4qnF2PLwfK3O1 zAP_4tokEoAqv+h>>%d)Oudi7P{p&3>c(4IcCokmK33z1PI$1QMOvoo~G#(Vj;z(H& zAt+3Ry7k?A3UP^|RkJ05D)!uJ<($m4Yq%&CaIynmoqRmKixv01?RWJKO@X4Z&2VW) zhz;f$U<_|6X9$`{>SsbTyLg&ZSJ*^P5bj(8G&H9JJytGqk`K`DJh=s74=DbOOMbFA zP;!1w+-~uOUDdHTQ1js%)4;5arKHcdObhOFHlk^X+2R+Rh)%Hew$_vRNc(*$uz6hI zmCDga3x z5Ai)-B1|)?Yz&`}RVWYz*&tB|%3+~3aV}{PMWzzk9EzPgk>WY7?7>BK(CdG%7AauaN~D%aUY;VOG}<$Z6da(;j4 z{?Mq>^ND8NAwwP!KKZ7ls&fdpY~v6gxaVrcznTO5QMm{NH$Nrm*OHRLk1&9s5T&Y; zGDFusCZgw|((D4C>2rPv5*q8(L2qGb)^9{s7)%qD{1pv7z?&1hGQuCnacAF0;*Syd3xZV4gXhXNr$a;OlVH zZ;YrdQ$i}EZsI-R$G2J=H9a#-M>Ea^`X&TX666Kqpr9d>NK6m17K}`FG+;wAQ9vPR zEc!vO9CB_C;ti6@vK`}#<_FnV71^w|9 z=(kRyxaKo}ggR>(p^<&$lDENBtnK09fy17$pG~X^n7LjnAlavDUX^iPz^Ft4WDoaL z<`>W>Q&%oDV)xXOE}3xU8ZA+}bT-u^j`M(MI{(B#T4b567w2tvT~f@XO%K~E;o*MJ zgxBv`r)oG8#C`?45&iTcLTPr{F;lK^1E_|~h;5|guX(7KP3++5=7ym0TWoT;##31Ct-G|e*g978x?J(Q@VuPI|F@O zj!T!cm)F}QKvy!mSn&3UgN9}wUmaIrOCN>50q0v^$e3TmUEH^tI$XSzYJIUfeDdk+ zMuHP-!dDMIYj#QbkWTE~jt+|9F@AvP@7d<(%ym0VHY8oB<~uWz0~Mm$pDj&g6t}uA zE_TS{FZjNc>waMjRNUNclZ|_rEpU_L+$#iR^CAXBo8Fvs zUuU`S2@3hfn6jrGx2oQ)xV2kzm5DgZ1ExmXvLWnemotd`!+T8Z4U6#nrX=8)H-rKd z`W`us7yK{gb|EA${LH~+Nq`AZibv^>U(%Qa?)MGAjlGnvCditD{ZXW>a7^a5-LW$X zPHFYic$ChRb=N2_`;YNBZlOk!M$Tt`uryp?Z*X;7Y;OUV72>{_J;JGE9)heI~kZ} zUxLqb)|#h{3XHh!mCsfwkO=H9q@OKd&JjF_mp^bIiIBjIUmibun8*0a`*_ffhlUvhjp}v zKPmkMCJv^u2T7X(2}IEVb3g(nAd&moU9WXV-hQ4!LOxR<#wnCc zh`c_sgXAPomad#S&pblY9)8uJ z_S~4bK)JRfFHdjyyp=rkQL%MgYi2dDN?@dY^ArFG%AQGsB)N*N_oJP=hrM=1XBK-S z<>I99m+Y`9V0!LS^9EYGZ)Xn^--_gF?#;!#_#)T;=!@1&j>Ti_&>lwZF-snacV$QW zPi17apJ>lukkS-H81f#%L9Bjjv$`ba<-uX(f$J&95Y1u$MrURKq#yDhj4o*XL@;nI z>a~+5XRb%mUL-LAI5|e(dTuKbw>t{r zq!;7+Vk;Iuvy8a3w2{Nr%5a-H8!O-AMGHhrBd?sELjEO1nr#rJI$o`)EX)c5jTSO> zmNj-At%_Y<{&CryZc z%-P=9?e={}XJ^CYtD^f3DH{J4D58w|22@_HUM=m~Q|WOfq8uAnL}&*E2xrP4^JD=z3Ve1CZD z7O{YkxJ_A97Ax^QUVMh`g7ujC`HZ8xEc6o$Z=5|i?HU=A!5XER_ z;U=T}8I*elsWifGc1lRYTHp?CEB2&$!3#y6O-6%`?^+WTlM!Iar1nyd>TslMc&CqX zAtqb~vx$cXRCG~?X3OlZzRUV0Tz&3`tHiELi9woBZWgF0^WK@@5eS*G>(P0-QYmR8Hi|FHRDu>i8~1v(BEu}2e8BH(LofKU z>`$>h<-$)hwgaZNACeYEUf#c+k-&2{s2}ddk3z)R|FYyFzRI^9ZzeAp3lm~of#d^$ zn%l0$F`d@yS5B8bN_(mlMD7_+sNHUZlT@yHQ&>n=4^fq1i#l~jrh z-(1syk&TOyDT)X>!z}2@ft*2Sb#NX*=pb}~6C{Dl2WWoauzg2ZhFD`xuMndTGWENJ z;VimUm%8X7n;_WmF;h@|V|lrt@=q0B#9c@cSJN|zDDiaPIC7a;5l#|1*R z;#d$D;wcv5z6h<0+&keJW=9e2n<;Gdhu-0~uDkiiuIcQS~yPK%RV zP@tgJUk!VF{D+l`$gYpA^Be(WY4B?L^Ir|$+L1P1r2GoNG*N-zwF3DW5Qqd>fnCq4 z&al5^wcbw_-~h@KuKbs>zwD|}ECNxv*A&NW>`FX7ym^gc8~5fMY6n+k*>sZ+;BSU9 zeaXAq8*dTZe_H+Yb~QcB@k;kRa1M`+eEi;BZL+xd>zj^uwnaaT(zGV6T$?V-*n19u z1Y)P4ldQ4sT0S|Vry}y2U{I)m-ov)vzzttc9W+>kMoM3pmq;_-Zj{A*$?4D}lH0F?OaN$SS^fW|}qDgkI^}4#3 zWw@(se?~x6;~ogTfkMo)X>4OjiKgWQ`AN~z!ul5z^bmBhxQwHEV;dp&MQ@Y3GM_$o zVUuKdYQwwqFc#6DL;)Cd5$Sxi3gJQK9(Xbja47d`^aPne2iXpk_oL4AykLucOfl*# zK})Y7Yq}pGVN~pb$hN2-=HrFW->GI?B;#U{E4h(NrYm$n5hk+MIgcjY!@~tLAF+(W zN$4pS70!cCFxfM}^H({3>K#l0xQL&4wr>$&?1^n6*91mL@`4!U~8}epXl| z<dtb*hT(@XJ+a!nYdW3pq=AR{I_jV9+;!JINVvdWZ?I_7&~ zaQBivrF?sjgpMT4q2^)`ADYBV|zdTc^xAdcY2-Hqqnple#;M7x#qYNxX8gB zALv#&N1QLxqJxHsUvZPy*92u;7K;L;ha?3sg4}+t>`ibu$rc1=*HOD#(p9}YBqEMq z!PnD0YMfCD`;BjZQ-61ns%@J#EV2R(Gsr-kZea-}mjo9TMI$TrmttXCyNaqF%TH5K z%wte0cpH-E!jcJf4k)bIWuz$In3L>S=|k!J!pru#_{oo~qNvcqX~vml={d}fk9WxG zVn3D0SRPTl-%8VPrsK}%`Me?H6f9$pG{P6^ zLA1Wn%H?!xx)U<(DbK084pYx=JD1PWmSD+Q7-*Ml7llu$U=0d?in-4U2%inZY`B+* zc7$>pasXAyRZk@nK5asJ>HxEq0_lMff`27|=nBt;M8{qbzQ-}h40(`%HMTEB+HtDC(ESGOBfB0D z4abJZCwli=Ky`lYa|)k`QO+F*4p+SYo~+!VMm)(T$f^pn3diaH2ZZ&?Z#0^AMu0@R zNxDX=GdAc1o80k-(?SeXML0yQa)QzxNv3Apuz3fR-&U?F0tX zfYxixqez!4OlZO(%2R*6LUjmG~H$n?4Mxp??4>fZDI zdqP?gT##fq6#5Gv3Mk6~5&2w~Viaz8FSuHpAJc#EhuD!NJSE{L^qQaj^WY4^2RTe*u zn&bVFs&*gCbcaWJ$3*xDvNyLQuvZZnfLDJKua(EW*h4 zeI)5T0hfUb1`J^ZPMMPqzDohi1lz%PRbu!D?%p|m@eBnQrC!ge4Vs?}8hd?=^^SEW zH(3Kx0r+&V67wEwm>(216y-W9noX>A?E5Vex-& zw#JSU*rf_#!Y8CDgsg!)dM>tdvGllwdHiAbwD*(xx~l*E>EdG~4~Wk~LbTj^&*7HF z@-6aPCJP|^+l-)9CcNjyUX$!Bj2NN9vP25QX!2TWOx#2fAk^5=4i z4Zir)6Dk+%haOI_-q}ErMj0nzJZ~KoI@WYdK@FAJwc)RrowOm@d$&~!AGck((!}k4 zsazG)b6x{u!D>U%a#-)^05e_q7-$IE2(6wyHT1Nh|Q!&kUMP_ z9F~LdvC6wLC;OaWwUND~J^vJmWtft~LS=Gg_7)Gig?Dn1aAq#a2z(fY3PloJjNZz| zQ|;076GoU*PZyDb7UqBgF)vYEyd5CFt_%+7t=kOuCJqhv;8niEhXU+oFK>{G5t^*f zzwB7zK62U$;~T9*42Qw=`@Sxk?+-TP85YR{8J>czSBH|_6%A8`zOJm9IPT?>&Z%1- zF$9wZOTI<@`5nIInGOD$LDWBSD5q%(f(Z)+=?R`Dl{+oKOUujIv)>uJ6_08rns=Exxc#}7?678j4A zTPurni8r@eR341v;#=Jhk}fC$A8rAysgMLZE(S0zoV1#E`_dJ%HB%xn5De;d6nmsH zbJ-{eOfYUR+2$;EZF*mipCF2x+Jq0e_LD)8Sh-ag@u|0Ubl~;0OMa7* zA`=kUnsAFwZy2B@(rzzbY)oNAs(R{~TVnNurrsuTg*4`xYAy?>tMIx|`2M)ti1fNn z#Zo$vU{p-zc&&0c-juDSQ)#`~r4Ry-PY-LFdo(sr!6ot*DXMXZ9F|`PfjB$(dRP0S zP0=SZO^%_`r+3{UL~?k~{h+C;EM7}+aP{-pXP<(?xSZD(chArMmKm9V%N2s}Jdngh4?L$!F%KzFAaWjS=bVc;uxwx3)Q zr3E+M@VmKe%1(~?j4-d?8cc(=cqUww#CWmcUGifBfB;MST6BOeBRR8db>U#_n;Ilk zV9cJx+(?i>z8^5MX2e6Mj`H&wStpVecr_&hisqibF_Bp=P2{ZUboG)~_x z4a9uX&MzBDI-EvG#9(JodfCkNuc1O+1{ICL=Se}0X*Qa9Dg=Lhq^fbe{=Svi$>`z= zN$1g_b;I!tMn9`C+a~dIw;Z;6)=m%>k`NP@AvNm*^wvL8C*a{si;tBMdp*sn*CDSv z>2eycf)fjE9!r%eM3}mj<`L-3+u9{za|gzf;n^Gg$HYC?`(&J?6$S9Sul!gzmYlMH z-8)WLBR;ZsFn=F@vLq4tBNV1*K%@r{vG~iWo(uyI4Ftkbb2)^YeNDOD*SA~#`|Php z;dRcHhYb8-Ww?S{^5W5Z*icG@I0%M@DY8yNJOTAZYldX_s}&T;=C?gBqy}ZdAXY5F zh}{wkj$VjZmO_dMN z;Y<6>_wSfpx~`-itcPj4=jB0@8QqjQWj&kW`U-2C)0wz#0|JdHIc>S?t;#oQC^?o?NPhE3@pBcm( zcsFP;w!K^LXzey!p#pFT)x*r58!v>5Bx69QymTj`E@A(2)fAssln8k7iL z&+^0*_d4tor?HXfz%aoGtU*^IMEbBq>U)mUQ&T5W^Oe*FkY?j%`WY+#?2q#xSC^?e zaLr}eAo}sch_P8X#DC*ByaZr&`oo&Lqo7e zn(u%+bm!Uv#U+WujXHoY{$pYvdB!94dkBUe{j^BNrN=`*DBYlio4n6-;>Z-mk)m}~ zG^}PggdR#=UTcgwictf2|0yZrn$LDOjUb0Dnev$q`qgyW$~ z5Ij+lzX?f7NRnHBd#5a#f2z+SUu{}1>ppzj=RGUaycvMSjA<{E&h)AQTnBo>odQKx zCT{fPh;TDM48JB1K~xfseZ&AY22fBNvfh3X=nxPb0e9ko_xH;`FBqfDlzET9 zhMV;em&I?)8 z@Vole<+Vl~6!+AO=Tfq&MC$g`Nqs@R@}c1kJp74=e1R6y_HM(yy-+xZ^DQ}i_^_m< zrMbG}z~9WXm;Xv?j+MLey6Yr&?sPe2`E?%6efsIA($LW2Yfi0S6ZaYJS)|$3WC7u> z&S1~f2gd~-bMVgZ&gN<6{KBKJ`vol}rNwgn@@v!!ygU2VFWc(oXYVn`02AEYDf*$` z5v8AjeF<4Ay_sJk1rX6ttU~TdTkk2}Q&E>8mLWKxt9>Sd0Nx{QawkR%j8@ldf}#`# zH>9{pC6rTb<49#(Dz?VK(G9sj&Mq0{yuSGYB`xZZ?1U}}6?mEK2oIp^5e(gQO0GQr z{R#5OvaxWiH$m<{ca-F!KTK4_4ksGxOZLfppV07P@ zFVLh;3%N@KZHm6`kZP%Wzqr|SwZ-Nt13+pzrO%ft(8BA+l14fDpQF-L*`j@|I4w@= zAzeptTD-(V`W}z&_1*JB<(zBUTU=xZaLzr!H|ILo{mxr(e5)qh#YDWxHEbG}1oX_J z5Ex>33G#v#mCsU@q**di?j(FxUq2?*MWS4Yb{j}!)!oAW+nm= zxkXu4d2SE?}4Mqq$ zV3a1npz<$8UgW;;NI;=QNi5|oDq9Z2Y6`KD2zGRyLB;0g4dCL2T@vOccyLG*c;SWv@Y2x@Mh~2B+e1Bh0~hu;Z((Zy z5$th za!M5NFiHgUO;J+~^j+MOCQVvQ{N^T3PKRz@A9k4SA!Nco zocp3r6m4Smqw8nql?YYwl<~d(BX3($QQY#KB@3l=2xw_4 zYm&NxI$brSkKTGD>}=lr<2&AGtjjUqSlHou6cY_S-t)&O#Y7u7Zfr%1-gC`*{v>WD zEei;@dR!r&0k;5^;f`iorFntoTgFVCmfLT-N8;l=P32gkuD(ugxo5dN@!!YP#=^XF zPCs9U=ZxT~E4}dAv$B2HHrKU2sjCnDUq!mFW*s?aW+z9p-IUFwGyNjhgTUknyvNeP z8aG{XL^QADWSH^(6V^3{U_u-d5w5r+1R}l?!3j;0>D6{YUWyzCSN}}pn;7wpp!)*x z(Vh})dQKojGwglG>XbLyB@$> ztD)g`riEH>lHnVLgJN zn)*h>CW;o$8IuBAfGA|ZQ0%oI^Q-CWy4`&=>sK;8-Bx{GCGj&ob$tn527YIt6hB@p zn&YDUwD>T2_BZzOx1m_=$*l2Lv{k+zy^dDp%*r4@xccg=Wyp{rE|P;Mjgi;^$x>ZX z>dI^HWa!LEa>6y2NWrIHN!8I~?G<<3AA))jF`iCBUwiE}S-*b0tBgM3--ubypEOC! zNmDn`=_7$KP3dh!{?4R<@X?h=U293->#IOmkFPfz0fZ~V@rN1|2LNX*UMiEvPi-|1 z+<>qA#rF{oV4cUkB`2OHC!Vm#Bk$`iU-|?t&%gStoHTc_j2Je`qkLbzC@(KlTq)DX z*X#(&vk#=7d`(afH*_ku(h}xUcz*rE>${;qYi#r`0D*GuiIzun zWXI!GbF-9(S#1*Rz(z#HS+=vas2X62j^5a|U700+URWW+!QCO3f*XD#6i`U#Vg!18 z7gjpQ5TA%jy)=ntJ&%Mz5HL~XM6+o6Q5gl$LjXpR6^nD6RP_D+lUo3i>XqLY(xUP% zgFr5VgE*F_?-+7fNRMOq{K;}flYOZJ=SL+H(?oGf-4)IW=j;2&4>qD{lNQEHa73C^ z7N*4!=aoRJ)ff!QLI1`^Q;7}7ly)lKuaKDIVp{oaiOh&}ftT1xv8|lTwbeMyscSZS zilN#n-_!TFaT6%et-el5Tr_u@Y<_W#&T98K<)X7BEE1tJ&O1#$y#Mib%j*Jp3ufw5 z*OC44mDpE4e_!`HlV>I^3kY}S3G{3o#c=^}ITDO+Ec@ogKFQwokH546Ej|mjk$L!N zky7Msqlk4YkQrzS&a)4sY3#4cKMR#n--7FWMpNdV%#9U$wE_c|%*ap{LMzuFQrrjX zo)8LXQHb6K>0FJ$1^;mBFqw_mJxrQQp*QN!V5YpQ1g`H9V~9XQDdu7$eH9@CzBMt` zRXz-X3VDBKPNMvD;ZXVAYr7OzhEDE06IzEiT((;b|1k_J@IAQiXW|CUJz4=6fQa{Y zm%>!KT3Jw)0SJWwL>w$@koR_#flD$#aYNWoy|FU}(RK5O$e-TaD~YhUio-`I&XFE> zHQFYU}GuuU~!jRS)38&gLzc z6)K zeji&%-r&0=9I7Sx+z!l4bTBt<;tZc8&scnx%%8Qe)xEJJ$F<6{GJ-n;5IyGyw}rN; z6I_tPK>s5j?=6?(0TvAJxps(oz%jtR%y|!xS!v2Q~?sk`%xSW)Qg7_?+1Iz5x}rgdE3=MgMSa)!Y%>_ zg&>Ntl6FJP#Qqw9$7q`XhfeISLad;lEf}i6f#!7RO_0E5CA|L~ogegz{Un`aaDuKuIeP1DscR@5 zvuCHzX-OAo4MrTRnlLO(7kXQzk_9)aCcM?edIanp%isQYhm zAD=$oym_o2;tP$UAtu%bIeC3+iE=1Mu8H;yLsbTD_Egw?@WTW0kMl+=KP-0C zAwc0KPmuB*a5AQ4C(2uB`!k4@s3$|Zsqx`5AtOQN4Np?8`&m{8N+j%IebQg?=^^=~ z01o8j=~T#0DeGlnL}n*3ub!ZrQN zaC}r8o{$kIr;Hw;baB{UT?e-nc;omPReCG@!qCzQ**%?12gxuUD^(rk~wLt493Sj9e36u`D)e6 zQdi!#RA;ykpE2bA_)A=~NM=6&e2yKC$ow_g;d~1ScX-NrvO<2iz1h?Sr3RCnWGD&t z`qCCDA26S`LcE{=yth|!MeQJ3#J?E4B#kXx`|M6%kXDVC{* zj~8y%6rrSI6KCSa&7?t#1`#`;s_&q)D=4;5MJ1Qix^BXqkk(Sa56TzMp`FiC~KXBAEz|c>W2*Q}?`60Irf#-^D1Z z8YgH=L4Af6m^e6ImLak==YpfqK!gRSBP0PoRAQ!rF-s8i3_@MSdBU{@dTg6x(`gu7 z{WAz9!5PQjlL;G5P}W*QQG*oSUnFtU;>6n_oxkxml{ZPndlkw{i2$gin_7XP+XUKl)s&dpaWmoEdUl+*3(OiG2L=$L?7k=L9ZhK7TW5 zxp%a`17Y{M2<7v}#>V{ch8oEaTpAqMaE=rg1y;~1)uS`OXWye8K;r}t6l*lV;^v-p z1#tf#BlCwR8=En9VGSS%BCubp*hcPs*5HDhz23Ana41Lg=ik1%TSbp1mx93xbs0^A zmPdB5S#E(o34n8#O)}sen<%L#P#!=rRfZ-O{2IggtC~kRkj{;zez(FBBwyWAk9d(T|Dk8KPAkClyaS`T(P)UO)O`rIQ z^%h_rXCV6ZOPheZ|Liiuc`zy%-E-Zi8}n!!l@9S8?wPR*vNfXn{< z`-_KXXCJfK9Hy~J4i+7hg8lot+~1m->Mql;2>6}>{M{epv-f?s`*O(#Aoz#@2crmF zg?)%mq!Zsw1PsPTZiqk(o&-Sxzyu1?H;LvLlMc}XEohEH{B-T}JLFv`#?r+;V;Ql$ zcjD`hmOB*yIX{0fU;eaYxST$2pyKop)Ub{QC5pZxz+BQZbY7T6F%M}Gv}{7Gr0br~ zmz^+yCeZN)EiBJ*5g^4tKcgC=qn`uh+~ycAOU4Z3Z5Lo6aO1G3Y)krj3_R)}j>_i? zz>U7g`C$}T&5FXj~OYNemT5-a|Bqu zR~F+2{`%{$dvINBSc43H=#T3{OCod!#9GtZ+t>tMaBwWNNBLCY3OVWAIcAZw=mcQ~ z91XUOK_J^HlH8oBw=xULxhIcm!Oz^>Rl;V=ZJT>8H)SK~qXB4`t?uFY34EZC(?S4| z5)+{|ZD%E)2Lg+D1ZX^l7(v&+v_mPqo&Y~Cr(SV*SgVIp1KQn-PhJnT-)EckB`%^KiZ9@jIwr4`sKIKTo+qJM+{H=NGvV%qB-+Yf+W_ z9_GuJKCwmlFCl25E=hZd#U>@*q4PM^546ShTp!F8ff4}|t(IQf zS}ebLd6yKzp&pYVUNXi+r+9hz(BDfSeNhC0^o32#{|*vd-t95e^zox5 zZcxjQ0DW^RbX&M?+!I*u?w1mik|bkKKhYzP7ef(H(U+LWyS{rxa)j_P{kfASXbOwskNjyE=_fgbz$+g-}J93=-;Dls%u&o3NygXxD;ZV8L$eXGd3oI8L|!tT6j(_ z#^?LXWeM(2g`z6oSA6&C4Z0k$Y5pI$9RGvKb0rj5<0HeBqqjgn3)>@8r3Bm-_JI~m zaj*a)Z2}YB2LhuFFq@8mqAj^0^gnY9T%v7*oh044vNAqsBy%%D&w_r-XzOWpi#3l=&(=sF_N|mA6 zHvu3`ue0G**U=1bs;JwO3BY9?OrpQtlYQumZF2*sbdKowh#VLO*lknSL2lb3-{UjjXyh~R>245|DC-}boHlll zq$fl=EpiONfZNJr?H%j(!L+wT3cyjgAHc;B(HLb26Fw;@ljk-ZQGg~jE>dxDxWNaK z2o~ram$8v$89KHS^>bhvomR-mQQD>(oJ+m>zIzpq~;2ZV7$D7@-L| zj}O>og0ciS$>VYB;VK~@qTUSYvmYE6!vNF*pw*#o1X&bw(R1%km{z{`M8ZoaB)EJ%G4^1$`N}J=cmNl+M{$uma8Z^-MEq{)i6@?r7hZTlzWd$p%J}i) zU3cOJ4Ukbw=F67L`RMsk+#G{tcYh$#a+{%J82TMSir^g$oj>Jeuv<< zrZ7Z$Rda*wi+(Y3YmmZc&1c@zQ$fxIH-Ea^KNS`=O!~d56i)GueF|pE+hC!S2h-jx z1V3a_8?W2@w-B*-$YG$rl6q|Bfo{x^1TEmS3{8%bJK=txF^VWsp|uYa!2rR+2KbJ- z_q_r|n?R-tv4NUlZbZ>|Ni^kZ>jT17o0BkaASRuQ^U{z z?ukz40uU1&IdtgIX7_q#oRcQ{ZLK9UCbO5&;Pd7?gxz&+BJZ)&VFwIjF?= zL`h0A0?u`YL|Iv>lvn!q63yU^Daoy6xSeS$)a%sN*2s}!^ZrI1c-B2VW^S$&<&X=o zV0elOI7rb3K?6YxbyMlD<>{{uE8PxS1yQWzEAbuyOC+4qDZP_6c4%(sz$=F35kxMz zh>3LfH%BVxcN7N^05P#I1TFO4@`u-U%fa$GrRdB45*qNEr!=wV1-s_Eccj+2L~#|v z6p=Q?S>dV$r0tk0@{c4B7bKH)P6%X9=&})2daggj^G*HEY($wr$&F^yty9B8h|3 zWaOebvhB5ZByZs?SH3<8P)x+<9h3wR{4PG{XkE0RG-44AnHg}tJ5+yMz{OGRcwOS< z2D5s3(RtsKpI+X1a<~8e7J2Zozx(XYq;XT^vHMm@OmvLT`+Y5wFQwb=yICGu`43Zu z*2HJs!-*R%-TTvt+ai}Gkzr!Y&6)t>W%wVVKNKpiQg?;1d3+^uJm?FC8#DK69DF9; zCotmco8bfK`0chchRYOK-Vn5CgdR-7 zUC!h@F|l3mWPlducu|f)7gb_eo;vHW-#qo)wp7V(|H3bH>bY3JB?vRG^<3PQZ>g73 z@afl*=jH9TuC7iVdgvinF8~1Kfd?LtyY9NnmB*9G-#%0Jy#Iw{PoLnCfAr{4`SjCI zJ@ULSNE7d_b>8`AU6VFG)><-aLPMMm6mwl`$@MPVw`>1ec#%95;(b@$J7MPhegj%K zV7`b>TeQ@aM*|-Phxn{bA=U*V+(;XMP{wD(%S<>)Gn8Qs%NoV>Kmj^Vqv*!T1d&6C z@XW+LS#vpfIvipo<>bxR?#=>81TEw|F#7Xha9Zdu<^FR=dw>=K0iz#AoxiNvC(nF+ zM2Ujf9$}LP5=M#8_;!G`!Z{h>^dii;H73dEUwLhl0%4)h_xk$!7qQu>E*ib--`|4< z4U$QdCdt&PQzbh)+hxhtnOWJob*t>!wacSwI>bdMTytqFZp*XJJ}UP7616a#%={K#_qJ8N(sEM&wu{YqZ}^?L>_$b!B+V> zv!}MoJL{~om@2O z%A>iWBZuV0*Zl|j@+fRw1U>^zvWw3+@Cv~xNu^P80LUeo06i1MWx=M(BXwKor-T6t z2|;kFKnQhHN&#fv-BqgG*cwmbg`2?=uNop%b4Pd)XN-|{D& zbdubA@4X!|3yzPEH$bdL_ioh5jbXsVbIu7&b%X$hzy;6KLq7%^O%ud|PrH#0$|=mE zS3zg$ZhZRHS_;Z!hA2@0;3oJR@>okA92fSxxmtquYiRTKjY{Em<#Uh93$OoIPMW)@ z6=Fkek60}&Q-+;evsbea}KnAXUnk-yieBXcS>jJSoK1B23oBp z4~`4F-c%9xusxyimw3%}3BlF@fRt5~dCW!)%zBxK&L6z}-!fyerzb|rMSptJPvq+@ zUwPECF1kJg&y)}qftxEiE7M@jZZ>oyF)Vz}uiNFvY1;7S}t zaK~T1yi>W(r>lOVc~lQ+(84*PsH_wmrSm4G%EA#wL~U|ej43nbavgvkz5FI%Zk$ue zsy&|YgZy#42Ttknj&xH8xUpwtWwmOpc*kDZ`{5VTSl=KS<3}kcZxre2#CIjdO6Q(? zuIq0>-@EFntKf3N5Vh(&2i~FEUw>D2z4M7Q)YMA)*by?}yl+VC08iHx*IaXrP-Ik9 z)#A>H?NYynfXO{Ip>K?PRPfmb^(!L_Iy2+WTI`{)tLwi1{`*?L#e=o)PA>@Ok7MsR z#bUYyVP->sq_>!eU1|kf;NWG~@PS#+NR(XAl|IvS*Pr?BZ?64=%$hc*6?vNczWGj% zTk5vzS6|3zuCYDCXWP?b;VZcwsDWN`M-7Tq-Qj!M5N*IKEKHsm9Fd#^a#+YUVdADs zu7Tjk+^`Oqei1DZzgJ`RA@iVq#)s=~7QiLs*5%nm_$bcCBrZ1|Qn6P4eG- zPtLsicaoHq;i{jKlA^dd1qB6IGt>iX7WQ-E#EGslJYk^4m#+V_9Nx0Sm0t(|v-7PF z<;**OEA*(V)0i=1l=t1wKKrbQ&sXOM`^dI(a&m&VmV!M1i@x6(zz^3VSh}@ZORazl zDb$oWZi^jkYyFqzmwezi&OPJXa?!b$wyN;t^N-8JPqfx(Z&lFB=+q1}mpX3iR7I03 z>5VlL7BGyfL!dx05P=H01^Gv-AttI-8?V}hS-_dd1)zTs(zpW8FgQJ>PP^>G10mz1wiZ8 z(}!aoqZP-AV2sm+A}WzH#V`Pg2q8cYQ;4NnY?k)`xZGk^zakPxNo?j~iAtL<5edUU zR?h@Z9gR|7x=Csdt&`e=hCtvaaExP>C z{5|r;@ zjT||$Rf(;ytZkL2Gq%H1?eUi{69!7uY1F7u`cxfrb8|hed9nLl{|@2yf4NEODyk$Z zA+A-uwldnHxf|jrZ{Px7G|lDZ<@dKmGZ^>SW^!`!uK--Sw3gia7OFtly^nqTyaL$3 z=UQs{%kY|k#$#gYFZ9TWNcroZ{?SSqm(3C-Uw-kA<+Uf*%5SdwgG59`c=g8fvZ9Sp z0G=iL&Q(QaMW+YTRAw{vS$4W3sAz1&@HyhN?oqVVo@#73jJHz$D4FS5a@DUd_qlPg+A}XbC1Xb(C!>as@j<2U zWtEm4lmEN_)=mwqxz6#~zFh}G$AUwF6bAllS$b--cD@&=D9g>*j<`bqz@7*=K4xe@v#yaXXtp8M&8}Ul=XTkxrvNQ?!=mXL{P6AYTGAaQ5KfwS6S!S1 zx;y%wzoQ1itXurq4G>9g^jFl%4}1pd;VJiSf5lsN4<98OD#Lyr71g}X$E{9fJ+R`h z^3OXSZMW_z3%?=fFI^^2y|B_}*~+R4x$)+o`MhUkdd@&YY1q#_b3)@P0UQ%1BM=}r zSAJ|#QP<+0-rt@}4ub(+AT|O3dVO1oifMGoj0`y&j_9cPOaCSG1+ymq7(_#5DoA21 zqB-*(>oW4Q)`ej|f|WFEu%iL?oBA~bD9i^gQMx_YycLM52kVD`g`5@!c%(>dT6T;~ zg4y`=>_nL{G(iR+wiD;YP{1Ws4O+;du>+hPm3trtqtzDagt|$0VPWBZC|0h3XDI~z0;V}Pm(g#hTXR+>sz}eChN4?vep@#GZw>4X@wb4rk~wvp z%(}wUOnUONGlj~yv{rIY{M+F@@3e8_#ueUq-F3~iG<4|D6#&AQbw<~vw*cYpn$MnW z2hVT?pQpb*;1$|-%A1_M(jM(t)^@4D?sBo8zUVACo{N*X*m#*UW1h@K+#z3!Y&Q&G zPPt%yV1%twK4+l0+V;e*uM0ijL_SM)J#);hAGLl1`yk5&$AF3Vo;^~|2KT_=u5bf4 zL?gd~S@OTZF&Kmmnj)OG5^wYMPHQ77+tS1Bteiv{mmViyKrFNw)=7*o9ScQ|I4JS5 ze0PXVbhp_z>X#VSQ2-_AUu|QP;sUV@Eq{1F7JgXL5+dOJHcHar0XKI*l+t0L3;&@| zyd~Jui8?L>B-GzwA~4ZDTAuy-u-v?Quasdf;sMggQF0d3)jNFL`pa4Ez9TwJ)T;vg zk)*}N#chY8Za}2^z--R{NK(7|szig^GC`Iee!zOOT!)m`q z;3a6SLo;DIlXFkBD57PNyLe;B@snin@2~Z+Dq@{w%a(a4=Q5Apa=mq54t%vm-v0Cb zQgy`O$k?&=C!Tkj%=p3it$_M}e|(c1*|v+MR3ew>qE&yD@MzC@-Ld8adH=5~l#UDw zMuHnSo}hsy$#E-4<$XheC&LcNDnX4d8N)58(1^0GCGqTo^SP%m)QF z0_g}hbGp7K$3`jR0yPj2Fh-FEEIhWm-~(yQPZ>?$02T%(qzWL7;vNDNf{82zMqp8u z9Iejj$(O){5w0ov;)l_&-4nqb=Ysmm1VKy`0TF~LCw;hg_qzr1j}Hz=9e@o%n&Py$ z6Y1o6cK{c54ZoDHh2Dl=*06i`2Tc2mQxVraS7iUoGr&2Bl-TUkC1KR%05F3*3$$}p zzU^;PvE$$ElkRvKKOB2FO7Beh94K0LwlpmufP6U&N~mF%8NU5 z=9y>89e3Q(szc3i09Ukmhtg?D9W_j1Qd;lfpi+oZH57+s)ktS~}cCY_!xp@l3|H z9}Td<&DrZ6?OD{v6=NT^T_HB2eLxi8zJa6)ib1?ipic{awYia_gGC^4hke z5{2tHfFrX&i_wGb`Gzl!zrnA|W#GDuYpX?CdcS4U)fSYvG;km+ZL`jMS_WHf9AWoI7xhMo?1Xdcpsc9fV z04@R*(qvNQFcuy;ADkPOA@F+ykFo6@fFfFtciQe+n2vNh;VDrDF zp1Yr3Qvs6WZ!dKQz}O=aBr0{5)E-*f9{CR6r-#}%-gra4^BqtBENv0u`d}32{QP{M z#d!a&yY5nsI6CqBnkjx0LNa;IE8{_j^3mpZ^_nKm+GufP8K zp8>c~=F*d?5rFS%eBJ^OZnGb~6$rOEs9t;%0Y0zZv15mGbMQZqz<6nJA5mXsyBvQg z`aSEPqT8L+fvNKEdsfO5_dh4&$AAUuBmM9@SHO`{Yv96o7nYdF$Aq<$#b?xvXN6)t zCTDJ|i`3CVbWSA@haLGuFQlN#K497$fPm86G0aC~*GXAk~g}#h33al6$ z7p>E>^JtCS|G|Dacg03o{`wv{fQZ=?GZD`~rKMLVytLlN-+e1DneKz4bGeQr4Pc7i zI!j77+#*eN{>_j{Hzs{yN5}_UmK*4zMT-J1PoTpfi>p_!ZnI8JO^rPC&_fCYw^{ZytM*wn-y{M#1l`vAvZTSxxI41zR$J90F3;* zYb$jW2nV{3*ro=;ZMARRYncHCUqyh=w_9@jp9REmVfDftg==%7vi^i0CBO4e&hyUl zU;J5;lTu_dKF>Y;vV8var}EL~?<0U>k)$AR;Rz?p)Cto)D><(|`SK&FuCX{SJ}0M* zOo)j7v=`5+jUqjMi|>-cQUkcSgBEs-8$ESXs-RRGVK{T?@&4)#Xdp$-P7Ops1R`{~ zzjWLnITt|=dG4MRKvAHCxtfb&ILOn&AREo9_+Jqxd@&M_^hHw*vD5Bjw2&&3_jZ-Z z`u!DBjOf`^$fe~GL671zIqUWI1ERoQ14Z2hh|%LItKh)kJ0mOBA1E*qh&vSebNR_nexkT>?lhVqVrs@3r5~2V zTXzZ-Z1=qXc`NH6_d4$9RYyzYm0#Q@nNyCF(WlOr42Yf>?}+P^o_HBbVEgOu$cRNJ z$f#3VlyqZbW0PminspA?{SUj->xpx4@U8)1TmXF+&xv>IOlN^`d+SIyK_DCq4xXmp zSB?OfMO(IPxhBx@1PokAaPOx5%ONs45hA0x?KQCU)Njh-`Ab~I$o`!^X{P$PGTS(L z#B%@N#_agM1rgDEd$;Ug?)z@&LDB0+8nC<{i{pst8w#cfp<=qlSS)pAZ-fzygT z)!ka^Dd>9lw05PdEDBo$y3(y6QWVf4N^3+wFx+B7$c-cV86FOfqQTsgT$;S^5Jo#+Ve>4F_oJ5#^0m1`Xx~$Q zsTDby+F)GUEM=fYC4gLIW4oxx!5~N%9=@xKQWb+zH8G|O3x{IYK_d#s4sd~S<+}hc z>k!-J5qo==h)8RIL4ORd0hsnnCnR~+3ld?nYBwm}_jj2wV}=vBXsWs>#k)UniiJ{F zS0`9-`<(*m^1uTR$n4p(o$4NWbEnWP+TX<!r3F^*uP!YM;i8@ThTi_xV|dGx#fz{^2g&fDh`PW3pc^eU>44gzxC-E)NF=(F+6qtK6jMdJ1s@NF*yami*uqo za+fls)dT~YHxS!ejcB1#0_dq|Y*U$E-~u6ll-gWvZ=R01K&$sP@Gz6+52jfwwH=OD^UZA99*|KFackW!rTT*fKOO>S2=|+Gq z&_l_w;GLyAUJK?qyekziL1k1h6o7CrY3c8=VTW{Z*REZUdE2koz=Z>po+{sw8e_KMxUbm&o`2dAW>D%jm1Bx_+YgxIDl9Y1y;?9k=zuH=QZa-e`EL z^wjws&Uf^Ag$pv*;lG@_B#WXI^KT0T!MYLy}Td)})^CuVsx= zisX^a=$C3T+VI38FqjqK;Q25nr8evXe+r}!7%3uQV%_9XeGj9L4zt<37>jff#QaJe z(q*m#O`!S!sPnb-1z5EHy81ER)#`b=Pfbk~W^%SK%<-coS!})3DDkO10rQfQz-J~C zydhlM)-#wL)kCvp&9d)O9XD1~%bv%dhi%Ki)I&}kySd;hX`?6L%T1SoxTSar9T$PN zHpAgi1;T+KP>}kphX>JOjO{hU`uq)W_GsDa+-X@E##qa@`+Dd$bDM13`l`IKeS=IK zKUoT9UN0HxS&}qrw3wozrM{tF2yhM;9g-toeAZVt;p=WF(Ai>mqvTlGYByDMd5a4_ z7xXi*iFx_~$sH;76G!I^vDIX)laT}x_RLQ8=Bz|7OHNe7nD+CdYvfBh>*aWy1 z&jn!l=F~BA`=n$g1)=0ai(0Dz6wZ}kgYi_1fESb^9sa6O-aAz%`_I%v71XM1Vn!fl z3*DhkEsmL zZkoBg)gNHd8ky_7_oUI2O=mT_4Q9z1Bf zrX4^6C977g63|4uWZTnVcIP8cD#KaZ#X&eo${pu43f`M*Uu&nDgLgsWCAdf{UgF51 z2!scZVu2kAKg>GtPL{wRx5Sr`dVlUe#M?@+K3e`Pr3Zz)a*5;1kaX~u^?;R-sG5=23 zyDY10LQy znnHH?pf-oD#O$L1V5J$LB_qKkcOg0BoiMm%GQ)VNh*$_%I8S@P!gkCt#Bu>KRCa!G zQT_yboFe2#qCE?xD_U+LK0|A_aSB_gR@SDfefYyO3c%iF1Hel<#QbYpFT9K7ir-hE z{oS>WjLSscqNNg-y#U~}$A-mS8|Eu&t1WU@#jAUXiHVY%o7<~R?YUB6n18J>(ISBd zvo~vn5|x!JSISE-y(9!a4EOICaaXHL_0Zd^pA^Pk8SKL7x;X_`_Zk*CW~8X7=uf>a z>gYt{B>>^Ip$LR^L`t8h0v>q;K?*nc+yNR66u3xrb#;@`m_9!))A*q;k#z?$`Qh4@ zk#U>LyXKSjp-KY+0IE;U)HciSJ~}T?+;O>*x~Q-w01I5-X>YP}PPWRDyms$bQU%W& z<}jj1tS0q9l|BoG=yp8eky+ zVP8~bv6LbP&HqADv=b7R6P3*XI2Hw1#*9FICETZ4O9NMKrloaL%c!>%l~{@DLanUz%$5dqrkW-OlpXxz4IbjyHNdvKm0=h zEI6xR=aJS>{L123g#LF-qBwf`8h8oa3b0@Wpx%sXhNPvXe784E`mH-@Qcrvqt#ZZD zliHzef9wytC9iOnq)o}UUE=|bbX^q&m;3DZ|0jQaZM*Pz&+SnlCI46(FojLV7VN@W zuaC=!d^@Z*>XY6BxygIn5KQd-3NtVzJ570xwW0!9G~ z5(_ScjjGff{QlyU8(xPyaZj}3xXhk_m)^{PX#i^f_EUgV%FFy$90S9#=h}1UodzKI z*z=1QZzwZR^iq*Y$M5SNoy> z4RISw+wRt@dT8R>k9=lG0)RRgwEi7}yS?zO36ec3T7d!Dm*7uHJt$MrBqMZJ{sQq( zJ_2|-S=B73A^jluA%38GCml8`S&1e|N8Y2H(J?X&v0}2Zr)`SXhmxj%*p$j}3>JD0 z@mM=&FgOjc&_jp-DF)IYN`W|*&kt-JE+jrrJaVnyza#wc;0CCTo*9vP^@`Mjmyy}G z2fTROcSlQw)PAx;+8a-M+qB>M8#Zi^f`S5DJ;o_oKW}NDVfW*bN6Wl5D<$QMJX;&> zfVM2m-2CP41AVsF>IPzOijR|gg!iAm=uVf(7h(8X2G!W?lP6D>2V(pH_G#s%qzNk= zfv~S*5(rlxxUb*5SibfjYVF|3_1u{=XDDg$+gE0wzLcWiD*dWESLskAelX`tm*;Np zA>A6{4g|Q6wv>$2!JYW(%#rfUUE@`TWve8FK*Fl3p&-N_z_1dZQHiVl~-PAtIE7V8@~B{+qtU)BaG0e z0US(U^bLuOiB%hoY{A1P~)>OFVX1SEJ?}Fm9f(%Vw)t9(XLfj4Gj&S+;h)8 z{|ISIsDT#SDuuY5OBL@n&a2!L<$qA(-Pt4C#b}zh6l@A$}@I?b8l#W;oRw;~Y zCPs`ERfp|*+G^m3$$kuIuT)I9-wGR;FCo3zdZbEr9h-{P*jKJO8rP{Nax2P62LOc|9uRuVGP#WW(e&o*{9 z>LCGsYT?3#&%jHh)$V#o9+H;;gx3QIN9qv>hZs>2SiEZ)Y+5!1V&1O5^Zhtd_V|ni z(Mb`nN`xiJkKGRWuCVCVGK@c?6oaM-aMiUy~-O@z!5@l$cOO zqa-GFAVwiN4c399?U|aFt&$e2v;^45rY<5~YmjOAFjP)|I9jdjXX+vKi8n>696`fH z9psL`^bTA&ceoGVj<_6~V&W1;MUN?vn6yHP8ksK<(aFd`l&AuYbwVX%u0JlVRr{pv z;-_GSzyTJGo?EtTk?GTW;+(WMx5}#vmRT85t2Eeq{PUzv%#++3W=Zy}s{mHAoU&7U zFr`w|SqreT>86`*(!C+B2hU@xLS8aO$81WxeDNr~0b$!Db$)>F+j@lZUjlnHpX0Rj z_lWl2@%`2H`F=)5Ms`fPVN-;u|E$tJ4>E)r!U*?+)(Tk?3b}_gvik$LurCE(fG()^ zVIZBHBh?1$t-bv6%X0J0 zH}@L;)jPjui<;Z(Mu1P^l1IrEx6Q#;*slSwo2k&Ucon3STinzM`CA$<0SFi92?&P* zVIgHX*xcN_n30MDIbXkd6}g+FT7b*t#+*r+{~noO`571=OG&smQUFM`tE0*AM9H!8 z$8j(4KM5Ttpo4QtQ`#ZwpaE>k2$Ot%;cNNvj#Dxx6OQ)Tb>zBByJ2pp)Up>0W0EJNm7?8W!!Mu3+z&4wu$4|V+bai?Lku9-S0 zz$N|4D`dvE?~?49h_&LHr)iV&6*i=2moeCCu$AN2aybB(>Fn9FS0MpjC%lB7fAPf^ zpT@o6R-AZgxDmk9=f(e8C5&+I1JAtcX`6x8bIsBN?X~~*rpqQ~t%CIBQTU^d=)d|9 zu3@n>bu>jhaqd_d;~%(A2^#{B?=Mx6BGrfMe zu@1xZGxUCIJHqX=F3$0fr6f44&wz1si6$sw{1x^|z!EO5DG(~EBFEVyD{~q$DZc>e z%R&Gc$J>K)o|%~`d-v`IfAugJ-I{;D^vCcJ3XI?)ed-l*&C+j4=8P$Q0TwAz%rE7Db97|8f5O`S+kcnvO5o z71%D}7vi8k^XAQ)oyMDuaQUMz%W}Hz^#w373Elw!%OyPf3aAlh1PiqA>2>w}JuWZvAB+i> z)y5dZ+~B>Mz>VD5W_h>sl40FfXU_jQaH9mL=Riwb`gVR)A6>qDd6m10;d|aufV>1%}<3=S#qiz0VIZI2{v#Unp6$`Qw=5HqEVA7YJ9J(z=HE27M_uT1~7$%h4RWPuk^BY z;aob+?eggxZ^@CZJB3-I`zr}!Q)N8D?oXV5qr|5syQ|)aEWE$nxN+li04yP|hIaR$ z!M;ac0tj9KK6(&*G&0!p3BdS`04%?Sl<7G=X$N!(Tr}dtJ0Q=@zHMi zegE*o56iM;%Ut%`Qr95G?|vYqpL`~@XUn9up;3&OOYEow8I_YEv|q`Zd8Le*kn03~ z96GE7V0j)O={GA^t{hT<;T)b*cc&UJfrlOfka3?WQ+Km>o)A5S09c;K_8X|jbjM4& z1}^sG%*xN29U0rT#276L4Msz{{XM-LL$*@U*(O^$S|T=;6_*{-%e=z#2vZ~_y5ScuAz7d?|TVA%q^j$F#uSBkAr0oz{)1LHq-M=x4h)he}>N3#0XoM z8x66BdBzw^VMLVW8vK(7?x&L5hqrWewHy8lRnY#Zb3^9SNNLms%eA`1NNlOK*UH3qeh|_njoHS!U6V%M(L6!$W5v{JEb_H zU5YJTQrzAm#c+qasH%rQ!W0NoVAxRrl8wn&dzIB)9SH)7w2bAps&EGoq~E=F!Q8uPbf z3zy+T0mVy@#wcFu<|l#~@)7w-@e=nqkHx+Pd-Y=*Bx(Zh^x~zCj*en(LzS2Q9|~|p UpyYyMEC2ui07*qoM6N<$g4ix|i~s-t literal 0 HcmV?d00001 From b9fed75fec4288e33a429f39bb8d899c116da7ff Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Thu, 26 Sep 2019 08:11:41 +0100 Subject: [PATCH 020/106] added extra task to lab --- 07 Unit Testing.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/07 Unit Testing.md b/07 Unit Testing.md index e028ee61..6242a6e7 100644 --- a/07 Unit Testing.md +++ b/07 Unit Testing.md @@ -423,4 +423,6 @@ You will now complete a few more TDD iterations: 4. Can you write one or more tests for the `getAll()` function? 5. And for the `clear()` function as well. +As before, are you gettting 100% code coverage? If not, write more tests. Are you covering the edge cases and checking for correct handling of bad data? + Note that there appears to be a bug in the VS Code debugger when stepping through a function that returns a promise. If the debugger sends you to a script called `async_hooks.js` you can get stuck in an loop. When the debugger is highlighting the closing brace of an async function press the **Step Out** button a few times (typically) to return to the parent function. Remember you can add breakpoints to the test as well as the module code. From 6f04e7d7f1b69b0076b099454de1d8d7c38f0bbf Mon Sep 17 00:00:00 2001 From: Anir Nathwani Date: Fri, 27 Sep 2019 10:59:51 +0100 Subject: [PATCH 021/106] test --- exercises/01_setup/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/exercises/01_setup/index.js b/exercises/01_setup/index.js index ef00019f..af07c3e0 100644 --- a/exercises/01_setup/index.js +++ b/exercises/01_setup/index.js @@ -10,3 +10,4 @@ const port = 8080 app.use(async ctx => ctx.body = 'Hello World') module.exports = app.listen(port, () => console.log(`listening on port ${port}`)) +//aasd \ No newline at end of file From ddc5667066b898543ffc5fa09cc82679493adebd Mon Sep 17 00:00:00 2001 From: "Luke Charles (charle44)" Date: Sat, 28 Sep 2019 20:25:47 +0100 Subject: [PATCH 022/106] shortcut shortcut for reloading the page --- 02 HTTP.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02 HTTP.md b/02 HTTP.md index 68744dc5..338c6333 100644 --- a/02 HTTP.md +++ b/02 HTTP.md @@ -178,7 +178,7 @@ Make sure the server is still running and use the [Chrome web browser](https://w 1. Open the [Chrome Developer Tools](https://developers.google.com/web/tools/chrome-devtools/) by clicking on the _customise and control Google Chrome tools_ button (the three dots to the extreme right of the address bar). 2. Choose **More tools** from the menu and then **Developer tools** from the submenu. 3. Locate the **Network** tab in the Chrome developer tools. -4. Reload the web page. +4. Reload the web page. (Press F5) 5. You should now see the resource sent in the HTTP response together with some data dealing with response times. 6. Click on the file name (as shown) to display the HTTP headers. From c5881dde8ebb328e32a40da637beb1f77b4ccc7c Mon Sep 17 00:00:00 2001 From: "Luke Charles (charle44)" Date: Tue, 1 Oct 2019 17:44:46 +0100 Subject: [PATCH 023/106] 03_html/05_semantic change & video word change changed the path to the semantic directory and also an audio and video word change --- 03 HTML5.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/03 HTML5.md b/03 HTML5.md index d05d8c91..26d6eda5 100644 --- a/03 HTML5.md +++ b/03 HTML5.md @@ -213,7 +213,7 @@ Now we will learn how to embed audio in a website. There are a number of resourc 1. Add the `guitar` audio file to the `index.html` web page. The file has been provided in the two required formats. 1. Test that the audio plays in both Firefox and Chrome. - 2. Can you modify the `|Pox%APCJVfY}jWpS$u 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 T#XL}^TZE;ds;g3^WE=560vv@b literal 0 HcmV?d00001 diff --git a/exercises/06_code_quality/login/public/style.css b/exercises/06_code_quality/login/public/style.css new file mode 100644 index 00000000..d712b576 --- /dev/null +++ b/exercises/06_code_quality/login/public/style.css @@ -0,0 +1,11 @@ +body { + font-family: Arial, Helvetica, sans-serif; + } + + .msg { + border: 1px solid red; + font-weight: bold; + color: red; + padding: 1em; + } + \ No newline at end of file diff --git a/exercises/06_code_quality/login/views/error.handlebars b/exercises/06_code_quality/login/views/error.handlebars new file mode 100644 index 00000000..5d00fd37 --- /dev/null +++ b/exercises/06_code_quality/login/views/error.handlebars @@ -0,0 +1,15 @@ + + + + + + ERROR + + + + + +

    An Error Has Occurred

    +

    {{message}}

    + + diff --git a/exercises/06_code_quality/login/views/index.handlebars b/exercises/06_code_quality/login/views/index.handlebars new file mode 100644 index 00000000..681f382c --- /dev/null +++ b/exercises/06_code_quality/login/views/index.handlebars @@ -0,0 +1,14 @@ + + + + + + Home Page + + + + + +

    Home

    +

    This is a secure page. Users need to have a valid account and be logged in to see it.

    + diff --git a/exercises/06_code_quality/login/views/login.handlebars b/exercises/06_code_quality/login/views/login.handlebars new file mode 100644 index 00000000..d83f8b46 --- /dev/null +++ b/exercises/06_code_quality/login/views/login.handlebars @@ -0,0 +1,23 @@ + + + + + + + Log In + + + + + +

    Log In

    + {{#if msg}} +

    {{msg}}

    + {{/if}} +
    +

    Username:

    +

    Password:

    +

    +
    + + diff --git a/exercises/06_code_quality/login/views/register.handlebars b/exercises/06_code_quality/login/views/register.handlebars new file mode 100644 index 00000000..d39b8635 --- /dev/null +++ b/exercises/06_code_quality/login/views/register.handlebars @@ -0,0 +1,20 @@ + + + + + + Create an Account + + + + + +

    Create an Account

    +
    +

    Username:

    +

    Password:

    +

    Profile Picture:

    +

    +
    + + From 53fc0b6f10d1c83b51cde6d02f5a0573dd014a68 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Mon, 7 Oct 2019 19:41:37 +0100 Subject: [PATCH 028/106] updated lab sheet --- 06 Code Quality.md | 56 +++++++++------- exercises/06_code_quality/login/package.json | 58 ----------------- .../{ => shopping}/login/index.js | 0 .../shopping/login/modules/accounts.js | 28 ++++++++ .../login/modules/accounts.old.js} | 0 .../shopping/login/modules/user.js | 0 .../shopping/login/package.json | 57 ++++++++++++++++ .../login/public/avatars/avatar.png | Bin .../{ => shopping}/login/public/style.css | 0 .../login/views/error.handlebars | 0 .../login/views/index.handlebars | 0 .../login/views/login.handlebars | 0 .../login/views/register.handlebars | 0 exercises/06_code_quality/todo/index.js | 61 ++++++++++++++++++ .../06_code_quality/todo/modules/list.js | 27 ++++++++ exercises/06_code_quality/todo/package.json | 22 +++++++ .../06_code_quality/todo/views/empty.hbs | 19 ++++++ exercises/06_code_quality/todo/views/home.hbs | 33 ++++++++++ 18 files changed, 278 insertions(+), 83 deletions(-) delete mode 100644 exercises/06_code_quality/login/package.json rename exercises/06_code_quality/{ => shopping}/login/index.js (100%) create mode 100644 exercises/06_code_quality/shopping/login/modules/accounts.js rename exercises/06_code_quality/{login/modules/accounts.js => shopping/login/modules/accounts.old.js} (100%) create mode 100644 exercises/06_code_quality/shopping/login/modules/user.js create mode 100644 exercises/06_code_quality/shopping/login/package.json rename exercises/06_code_quality/{ => shopping}/login/public/avatars/avatar.png (100%) rename exercises/06_code_quality/{ => shopping}/login/public/style.css (100%) rename exercises/06_code_quality/{ => shopping}/login/views/error.handlebars (100%) rename exercises/06_code_quality/{ => shopping}/login/views/index.handlebars (100%) rename exercises/06_code_quality/{ => shopping}/login/views/login.handlebars (100%) rename exercises/06_code_quality/{ => shopping}/login/views/register.handlebars (100%) create mode 100644 exercises/06_code_quality/todo/index.js create mode 100644 exercises/06_code_quality/todo/modules/list.js create mode 100644 exercises/06_code_quality/todo/package.json create mode 100644 exercises/06_code_quality/todo/views/empty.hbs create mode 100644 exercises/06_code_quality/todo/views/home.hbs diff --git a/06 Code Quality.md b/06 Code Quality.md index 04066cd1..d816a195 100644 --- a/06 Code Quality.md +++ b/06 Code Quality.md @@ -10,43 +10,49 @@ In this worksheet you will be applying a range of techniques to improve the qual Before you start you need to pull any _upstream changes_. Detailed instructions can be found in the **Setup** lab. -## 1 Modularisation +## 1 The Package Manifest -The first step you will need to do is to split your code up to make it easier to understand. Take a look at the `06_code_quality/login` project. +Up until now you have needed to install each NodeJS package separately however most projects you will see from now onwards include a **package manifest** whick contains the project metadata. In a NodeJS project this file is named `package.json`. Locate the `06_code_quality/todo/` directory and open the `package.json` file it contains. This is a JSON file that contains a number of properties that are used by the application. -Notice the line where we import the module. +Locate the `dependencies` property, notice that this lists a number of packages that are needed by the application. Rather than install depndencies one by one we can tell the package manager to install all the packages listed here. -```javascript -const accounts = require('modules/accounts') +```bash +$ npm install ``` -This loads the module into a constant called `accounts`. +Notice that this has installed all these listed packages. The manifest also specifies which version of each package are installed. If you want to install additional packages you can get these added to the `package.json` file automatically. For example if we want to install the `http-status-codes` package this should be done like this: + +```bash +$ npm install --save http-status-codes +``` -Now locate the second `router.post('/login')` route (this is currently commented out). Comment out the one you have been using and uncomment this new shorter version. If you run your server and test it you will find the functionality is identical. Its time to understand how this new version works: +## 2 Modularisation -1. We start by storing the `request.body` data (the HTTP POST request body data) in an immutable variable called `body`. -2. Next we call the `checkCredentials()` function that we imported from the `accounts.js` module passing the username and password as parameters. -3. If this function does not throw an exception it means the credentials are valid so we set the cookie and redirect to the home page. -4. If either the username or password are invalid, the `checkCredentials()` function will throw an exception which will be handled by the `catch()` block. The error message will explain what us wrong so we pass this back to the login page. +Next you will need to do is to split your code up to make it easier to understand. Take a look at the `06_code_quality/todo/` project. If you run this you will see that it is a simple shopping list app where you can add multiple items and quantities. Currently all the functionality is contained in the `index.js` file. Locate the `modules/list.js` file. This declares a new Object Prototype called `List` which includes all the necessary functionality for the app. At the moment this is not being used by the app. -Now we need to look at the `accounts.js` module. This implements some very important concepts that you will need to understand and apply to your assignment. +Lets examine this module: -1. The `accounts` module contains two types of function: - 1. The [function declarations](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function) such as `runSQL()` have a private scope and are not visible outside the module. - 2. Any [function expressions](https://developer.mozilla.org/en-US/docs/web/JavaScript/Reference/Operators/function) stored as keys in the `module.exports` object such as `module.exports.checkCredentials` are available to any code that imports this module. -2. All the code in a function is wrapped in a [try-catch](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch) block to handle any exceptions. -3. The catch block simple propagates the [Error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error) object to the calling code. -4. Any non-valid code flow is handled by throwing an Error object which forces the code flow to jump directly to the catch block. -5. This means that if the program flow reaches the end of the try block everything was successful and data can be returned. +1. The `module.exports` object is used to define what functionality will be made available to our `index.js` file. In this case we are exporting the Object Prototype. Notice we are using the new `Class` constructor. +2. Lines 6-8 are the constructor where we define our array that can be accessed by the object. +3. The rest of the file defines a series of functions that form part of the object prototype. -### 1.1 Test Your Understanding +Now look at the top of the `index.js` file. Lines 22-23 import our module into the `ToDo` variable. This can then be used to create a new object using our `ToDo` object prototype. This object is called `todo` and provides access to all the functionality defined in the object prototype. Foe example to add an item we can use: + +```javascript +todo.add('bread', 42) +``` + +This will call the `add()` function that is part of our `todo` object prototype. + +### 2.1 Test Your Understanding -To check you understand how to use modules you are now expected to move more of the functionality from the `index.js` file into this separate module. To help you with this you will find stub functions that only require the functionality to be added! You will be modifying the functions below the `/* --- STUB FUNCTIONS --- */` line. +The custom object prototype defined in the `list.js` module already contains the functionality needed by your app. -1. Implement the `checkNoDuplicateUsername(username)` function to comply with the JSDoc comments, it should throw an exception if a duplicate user is found or `true` if not. -2. Implement the `saveImage()` function. This should check that the image is of the correct type then save it to the `avatars/` directory. -3. Now implement the `addUser()` function. This should make use of the functions you created in the first two tasks. It should check for duplicates before saving the image then it should encrypting the password and then saving the new record. -4. The final step is to comment out the `router.post('register')` route in `index.js` then create a replacement that makes use of the functions you added to the `accounts.js` module. +1. Uncomment lines 22-23 to import the module and create a custom object. +2. In the `router.post('/')` function call replace lines 41-42 with a call to `todo.add()`, passing the item name and quantity as parameters. +3. Now modify the `router.get('/')` function callback by replacing lines 29-30 with a call to the `todo.getAll()` function. +4. To test the functionality so far, comment out the array declaration on line 20 and try starting the web server. You should be able to add items, the data is now stored in the custom object. +5. Finally replace line 53 with a call to the appropriate function in the custom object. Now much of the business logic has been moved to the separate module, are there any module imports in `index.js` that are no longer needed? Locate these and delete. diff --git a/exercises/06_code_quality/login/package.json b/exercises/06_code_quality/login/package.json deleted file mode 100644 index 9c9aec4c..00000000 --- a/exercises/06_code_quality/login/package.json +++ /dev/null @@ -1,58 +0,0 @@ - -{ - "name": "10_auth", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "acceptance": "jest --coverage --detectOpenHandles", - "jsdoc": "node_modules/.bin/jsdoc -c jsdoc.conf", - "linter": "node_modules/.bin/eslint .", - "test": "jest --coverage --detectOpenHandles", - "unit": "node_modules/.bin/jest --coverage --runInBand tests/unit/" - }, - "jest": { - "testEnvironment": "node", - "verbose": true, - "collectCoverage": true, - "coverageDirectory": "docs/coverage/", - "coverageThreshold": { - "global": { - "branches": 0, - "functions": 0, - "lines": 0, - "statements": 0 - } - } - }, - "author": "", - "license": "ISC", - "dependencies": { - "bcrypt": "^3.0.3", - "bcrypt-promise": "^2.0.0", - "fs-extra": "^7.0.1", - "handlebars": "^4.1.2", - "jimp": "^0.6.0", - "koa": "^2.6.2", - "koa-body": "^4.0.8", - "koa-bodyparser": "^4.2.1", - "koa-router": "^7.4.0", - "koa-session": "^5.10.1", - "koa-static": "^5.0.0", - "koa-views": "^6.1.5", - "mime-types": "^2.1.22", - "sqlite-async": "^1.0.11" - }, - "devDependencies": { - "eslint": "^5.15.2", - "handlebars-validate": "^0.1.2", - "html-validator-cli": "^6.0.0", - "http-status-codes": "^1.3.2", - "jest": "^24.1.0", - "jsdoc": "^3.5.5", - "jsdoc-route-plugin": "^0.1.0", - "puppeteer": "^1.12.2", - "site-validator-cli": "^1.0.1", - "supertest": "^4.0.2" - } - } \ No newline at end of file diff --git a/exercises/06_code_quality/login/index.js b/exercises/06_code_quality/shopping/login/index.js similarity index 100% rename from exercises/06_code_quality/login/index.js rename to exercises/06_code_quality/shopping/login/index.js diff --git a/exercises/06_code_quality/shopping/login/modules/accounts.js b/exercises/06_code_quality/shopping/login/modules/accounts.js new file mode 100644 index 00000000..206b176b --- /dev/null +++ b/exercises/06_code_quality/shopping/login/modules/accounts.js @@ -0,0 +1,28 @@ + +'use strict' + +module.exports = class List { + + constructor() { + this.items = [] + } + + add(item, qty) { + const data = {item: item, qty: qty} + this.items.push(data) + } + + getAll() { + return this.items + } + + delete(name) { + const index = this.items.indexOf(name) + if(index !== -1) this.items.splice(index, 1) + } + + count() { + return this.items.count + } + +} diff --git a/exercises/06_code_quality/login/modules/accounts.js b/exercises/06_code_quality/shopping/login/modules/accounts.old.js similarity index 100% rename from exercises/06_code_quality/login/modules/accounts.js rename to exercises/06_code_quality/shopping/login/modules/accounts.old.js diff --git a/exercises/06_code_quality/shopping/login/modules/user.js b/exercises/06_code_quality/shopping/login/modules/user.js new file mode 100644 index 00000000..e69de29b diff --git a/exercises/06_code_quality/shopping/login/package.json b/exercises/06_code_quality/shopping/login/package.json new file mode 100644 index 00000000..d1885e7b --- /dev/null +++ b/exercises/06_code_quality/shopping/login/package.json @@ -0,0 +1,57 @@ +{ + "name": "10_auth", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "acceptance": "jest --coverage --detectOpenHandles", + "jsdoc": "node_modules/.bin/jsdoc -c jsdoc.conf", + "linter": "node_modules/.bin/eslint .", + "test": "jest --coverage --detectOpenHandles", + "unit": "node_modules/.bin/jest --coverage --runInBand tests/unit/" + }, + "jest": { + "testEnvironment": "node", + "verbose": true, + "collectCoverage": true, + "coverageDirectory": "docs/coverage/", + "coverageThreshold": { + "global": { + "branches": 0, + "functions": 0, + "lines": 0, + "statements": 0 + } + } + }, + "author": "", + "license": "ISC", + "dependencies": { + "bcrypt": "^3.0.3", + "bcrypt-promise": "^2.0.0", + "fs-extra": "^7.0.1", + "handlebars": "^4.1.2", + "jimp": "^0.6.0", + "koa": "^2.6.2", + "koa-body": "^4.0.8", + "koa-bodyparser": "^4.2.1", + "koa-router": "^7.4.0", + "koa-session": "^5.10.1", + "koa-static": "^5.0.0", + "koa-views": "^6.1.5", + "mime-types": "^2.1.22", + "sqlite-async": "^1.0.11" + }, + "devDependencies": { + "eslint": "^5.15.2", + "handlebars-validate": "^0.1.2", + "html-validator-cli": "^6.0.0", + "http-status-codes": "^1.3.2", + "jest": "^24.1.0", + "jsdoc": "^3.5.5", + "jsdoc-route-plugin": "^0.1.0", + "puppeteer": "^1.12.2", + "site-validator-cli": "^1.0.1", + "supertest": "^4.0.2" + } +} diff --git a/exercises/06_code_quality/login/public/avatars/avatar.png b/exercises/06_code_quality/shopping/login/public/avatars/avatar.png similarity index 100% rename from exercises/06_code_quality/login/public/avatars/avatar.png rename to exercises/06_code_quality/shopping/login/public/avatars/avatar.png diff --git a/exercises/06_code_quality/login/public/style.css b/exercises/06_code_quality/shopping/login/public/style.css similarity index 100% rename from exercises/06_code_quality/login/public/style.css rename to exercises/06_code_quality/shopping/login/public/style.css diff --git a/exercises/06_code_quality/login/views/error.handlebars b/exercises/06_code_quality/shopping/login/views/error.handlebars similarity index 100% rename from exercises/06_code_quality/login/views/error.handlebars rename to exercises/06_code_quality/shopping/login/views/error.handlebars diff --git a/exercises/06_code_quality/login/views/index.handlebars b/exercises/06_code_quality/shopping/login/views/index.handlebars similarity index 100% rename from exercises/06_code_quality/login/views/index.handlebars rename to exercises/06_code_quality/shopping/login/views/index.handlebars diff --git a/exercises/06_code_quality/login/views/login.handlebars b/exercises/06_code_quality/shopping/login/views/login.handlebars similarity index 100% rename from exercises/06_code_quality/login/views/login.handlebars rename to exercises/06_code_quality/shopping/login/views/login.handlebars diff --git a/exercises/06_code_quality/login/views/register.handlebars b/exercises/06_code_quality/shopping/login/views/register.handlebars similarity index 100% rename from exercises/06_code_quality/login/views/register.handlebars rename to exercises/06_code_quality/shopping/login/views/register.handlebars diff --git a/exercises/06_code_quality/todo/index.js b/exercises/06_code_quality/todo/index.js new file mode 100644 index 00000000..c936822f --- /dev/null +++ b/exercises/06_code_quality/todo/index.js @@ -0,0 +1,61 @@ +#!/usr/bin/env node + +'use strict' + +const Koa = require('koa') +const Router = require('koa-router') +const stat = require('koa-static') +const bodyParser = require('koa-bodyparser') +const handlebars = require('koa-hbs-renderer') + +const app = new Koa() +const router = new Router() +app.use(stat('public')) +app.use(bodyParser()) +app.use(handlebars({ paths: { views: `${__dirname}/views` } })) +app.use(router.routes()) + +const port = 8080 + +const items = [] + +// const ToDo = require('./modules/todo') +// const todo = new ToDo() + +router.get('/', async ctx => { + try { + const data = {} + if(ctx.query.msg) data.msg = ctx.query.msg + data.items = items.map( (element, index) => ({key: index, item: element.item, qty: element.qty})) + console.log(data.items) + ctx.render('home', data) + } catch(err) { + console.log(err.message) + ctx.render('home', {msg: err.message}) + } +}) + +router.post('/', ctx => { + try { + const body = ctx.request.body + const data = {item: body.item, qty: body.qty} + items.push(data) + ctx.redirect('/') + } catch(err) { + console.log(err.message) + ctx.redirect(`/?msg=${err.message}`) + } +}) + +router.get('/delete/:key', ctx => { + try { + console.log(`key: ${ctx.params.key}`) + items.splice(ctx.params.key, 1) + ctx.redirect('/msg=item deleted') + } catch(err) { + console.log(err.message) + ctx.redirect(`/${err.message}`) + } +}) + +module.exports = app.listen(port, () => console.log(`listening on port ${port}`)) diff --git a/exercises/06_code_quality/todo/modules/list.js b/exercises/06_code_quality/todo/modules/list.js new file mode 100644 index 00000000..0849e064 --- /dev/null +++ b/exercises/06_code_quality/todo/modules/list.js @@ -0,0 +1,27 @@ + +'use strict' + +module.exports = class List { + + constructor() { + this.items = [] + } + + add(item, qty) { + const data = {item: item, qty: qty} + this.items.push(data) + } + + getAll() { + return this.items.map( (element, index) => ({key: index, item: element.item, qty: element.qty})) + } + + delete(id) { + this.items.splice(id, 1) + } + + count() { + return this.items.count + } + +} diff --git a/exercises/06_code_quality/todo/package.json b/exercises/06_code_quality/todo/package.json new file mode 100644 index 00000000..e3637641 --- /dev/null +++ b/exercises/06_code_quality/todo/package.json @@ -0,0 +1,22 @@ +{ + "name": "todo", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "linter": "node_modules/.bin/eslint ." + }, + "author": "", + "license": "ISC", + "dependencies": { + "handlebars": "^4.2.0", + "koa": "^2.8.1", + "koa-bodyparser": "^4.2.1", + "koa-handlebars": "^1.0.0", + "koa-hbs-renderer": "^1.2.0", + "koa-router": "^7.4.0", + "koa-static": "^5.0.0", + "koa-views": "^6.2.1" + }, + "devDependencies": {} +} diff --git a/exercises/06_code_quality/todo/views/empty.hbs b/exercises/06_code_quality/todo/views/empty.hbs new file mode 100644 index 00000000..6be9593a --- /dev/null +++ b/exercises/06_code_quality/todo/views/empty.hbs @@ -0,0 +1,19 @@ + + + + + ToDo List + + + +

    ToDo List

    +

    Your list is empty, lets add some items...

    +
    + Item: + + Qty: + + +
    + + diff --git a/exercises/06_code_quality/todo/views/home.hbs b/exercises/06_code_quality/todo/views/home.hbs new file mode 100644 index 00000000..1a9495f0 --- /dev/null +++ b/exercises/06_code_quality/todo/views/home.hbs @@ -0,0 +1,33 @@ + + + + + ToDo List + + + +

    ToDo List

    +

    My List

    + {{#if msg}} +

    {{msg}}

    + {{/if}} + {{#if items.length}} + + + + {{#each items}} + + {{/each}} +
    Shopping List
    ItemQtyAction
    {{this.item}}{{this.qty}}delete
    + {{else}} +

    Your list is empty, lets add some items...

    + {{/if}} +
    + Item: + + Qty: + + +
    + + From c1649a0b5f9d18935fb45698cd4203a5a1bad71c Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Tue, 8 Oct 2019 12:58:53 +0100 Subject: [PATCH 029/106] fixed missing file --- 06 Code Quality.md | 2 +- .../otherScripts => 06_code_quality}/promises.js | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename exercises/{07_unit_testing/otherScripts => 06_code_quality}/promises.js (100%) diff --git a/06 Code Quality.md b/06 Code Quality.md index 04066cd1..62c316c8 100644 --- a/06 Code Quality.md +++ b/06 Code Quality.md @@ -244,7 +244,7 @@ In the example above we store the data returned from the `getData` promise in th ### 6.4 Test Your Knowledge -Run the `promises.js` script located in the otherScripts folder. Its functionality should be familiar to the `currency.js` script you worked with in chapter 3. +Run the `promises.js` script. Its functionality should be familiar to the `currency.js` script you worked with in chapter 3. Open the `promises.js` script and study the code carefully. Notice that it defines 5 promises and chains them together. You are going to extend the functionality by defining some additional promises and adding them to the promise chain. diff --git a/exercises/07_unit_testing/otherScripts/promises.js b/exercises/06_code_quality/promises.js similarity index 100% rename from exercises/07_unit_testing/otherScripts/promises.js rename to exercises/06_code_quality/promises.js From 15b4db61b1de3175ac439040a93e5020cade2fb9 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Tue, 8 Oct 2019 12:59:50 +0100 Subject: [PATCH 030/106] fixed issue --- 06 Code Quality.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/06 Code Quality.md b/06 Code Quality.md index 6a0d4155..b33ccae5 100644 --- a/06 Code Quality.md +++ b/06 Code Quality.md @@ -238,6 +238,7 @@ getData('http://api.fixer.io/latest?base=GBP') There are some situations where you can't simply pass the output from one promise to the input of the next one. Sometimes you need to store data for use further down the promise chain. This can be achieved by storing the data in the `this` object. + ```javascript getData('http://api.fixer.io/latest?base=GBP') .then( data => this.jsonData = data) @@ -246,13 +247,14 @@ getData('http://api.fixer.io/latest?base=GBP') .catch(err => console.error(`error: ${err.message}`)) .then(exit) ``` + In the example above we store the data returned from the `getData` promise in the `this` object. This is then used when we call the `printObject` promise. ### 6.4 Test Your Knowledge Run the `promises.js` script. Its functionality should be familiar to the `currency.js` script you worked with in chapter 3. -Open the `promises.js` script and study the code carefully. Notice that it defines 5 promises and chains them together. You are going to extend the functionality by defining some additional promises and adding them to the promise chain. +Study the code carefully. Notice that it defines 5 promises and chains them together. You are going to extend the functionality by defining some additional promises and adding them to the promise chain. 1. modify the script to ask for the currency to convert to and display only the one conversion rate. 2. instead of printing the exchange rate, ask for the amount to be converted and them return the equivalent in the chosen currency From 6340dc73282cf96889e2195b048b1c65ce7f089a Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Tue, 8 Oct 2019 14:02:36 +0100 Subject: [PATCH 031/106] fixed module name --- 06 Code Quality.md | 4 ++-- exercises/06_code_quality/todo/index.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/06 Code Quality.md b/06 Code Quality.md index b33ccae5..9ceb81ac 100644 --- a/06 Code Quality.md +++ b/06 Code Quality.md @@ -36,10 +36,10 @@ Lets examine this module: 2. Lines 6-8 are the constructor where we define our array that can be accessed by the object. 3. The rest of the file defines a series of functions that form part of the object prototype. -Now look at the top of the `index.js` file. Lines 22-23 import our module into the `ToDo` variable. This can then be used to create a new object using our `ToDo` object prototype. This object is called `todo` and provides access to all the functionality defined in the object prototype. Foe example to add an item we can use: +Now look at the top of the `index.js` file. Lines 22-23 import our module into the `List` variable. This can then be used to create a new object using our `List` object prototype. This object is called `list` and provides access to all the functionality defined in the object prototype. Foe example to add an item we can use: ```javascript -todo.add('bread', 42) +list.add('bread', 42) ``` This will call the `add()` function that is part of our `todo` object prototype. diff --git a/exercises/06_code_quality/todo/index.js b/exercises/06_code_quality/todo/index.js index c936822f..914ec5bf 100644 --- a/exercises/06_code_quality/todo/index.js +++ b/exercises/06_code_quality/todo/index.js @@ -19,8 +19,8 @@ const port = 8080 const items = [] -// const ToDo = require('./modules/todo') -// const todo = new ToDo() +// const List = require('./modules/list') +// const list = new List() router.get('/', async ctx => { try { From 8449b587dcf5f910d9b56dfac4c1ba2bdd2a1299 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Tue, 8 Oct 2019 14:22:36 +0100 Subject: [PATCH 032/106] another bug fixed --- 06 Code Quality.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/06 Code Quality.md b/06 Code Quality.md index 9ceb81ac..9e99995f 100644 --- a/06 Code Quality.md +++ b/06 Code Quality.md @@ -49,8 +49,8 @@ This will call the `add()` function that is part of our `todo` object prototype. The custom object prototype defined in the `list.js` module already contains the functionality needed by your app. 1. Uncomment lines 22-23 to import the module and create a custom object. -2. In the `router.post('/')` function call replace lines 41-42 with a call to `todo.add()`, passing the item name and quantity as parameters. -3. Now modify the `router.get('/')` function callback by replacing lines 29-30 with a call to the `todo.getAll()` function. +2. In the `router.post('/')` function call replace lines 41-42 with a call to `list.add()`, passing the item name and quantity as parameters. +3. Now modify the `router.get('/')` function callback by replacing lines 29-30 with a call to the `list.getAll()` function. 4. To test the functionality so far, comment out the array declaration on line 20 and try starting the web server. You should be able to add items, the data is now stored in the custom object. 5. Finally replace line 53 with a call to the appropriate function in the custom object. From cae34b63aaecffb72e83cbd0d94a54d460420d13 Mon Sep 17 00:00:00 2001 From: Anir Nathwani Date: Tue, 8 Oct 2019 14:25:37 +0100 Subject: [PATCH 033/106] push --- .../07_unit_testing/todo/modules/todo.js | 11 +++++++++- .../todo/unit tests/todo.spec.js | 20 ++++++++++++++++++- npm-debug.log | 19 ++++++++++++++++++ 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 npm-debug.log diff --git a/exercises/07_unit_testing/todo/modules/todo.js b/exercises/07_unit_testing/todo/modules/todo.js index 5a034683..c03b8174 100644 --- a/exercises/07_unit_testing/todo/modules/todo.js +++ b/exercises/07_unit_testing/todo/modules/todo.js @@ -10,7 +10,16 @@ module.exports.clear = () => { module.exports.add = (item, qty) => { qty = Number(qty) if(isNaN(qty)) throw new Error('the quantity must be a number') - data.push({item: item, qty: qty}) + let flag = false + for(let index in data) { + if (data[index].item === item) { + data[index].qty+= qty + flag = true + } + } + if(flag === false) { + data.push({item: item, qty: qty}) + } } module.exports.getAll = () => { diff --git a/exercises/07_unit_testing/todo/unit tests/todo.spec.js b/exercises/07_unit_testing/todo/unit tests/todo.spec.js index 55eb70db..2c46bac0 100644 --- a/exercises/07_unit_testing/todo/unit tests/todo.spec.js +++ b/exercises/07_unit_testing/todo/unit tests/todo.spec.js @@ -41,8 +41,26 @@ describe('add()', () => { done() } }) - + // New test goes HERE! + test('duplicates should increase qty', async done => { + expect.assertions(2) + try { + // ACT + todo.add('bread', 4) + todo.add('bread', 2) + // ASSERT + const count = todo.countItems() + expect(count).toBe(1) + const data = todo.getAll() + const qty = data[0].qty + expect(qty).toEqual(6) + } catch(err) { + done.fail('test failed') + } finally { + done() + } + }) }) diff --git a/npm-debug.log b/npm-debug.log new file mode 100644 index 00000000..74e9b8d4 --- /dev/null +++ b/npm-debug.log @@ -0,0 +1,19 @@ +0 info it worked if it ends with ok +1 verbose cli [ '/usr/bin/node', '/usr/bin/npm', 'run', 'test' ] +2 info using npm@3.5.2 +3 info using node@v8.10.0 +4 verbose stack Error: ENOENT: no such file or directory, open '/home/anir/foundation/package.json' +5 verbose cwd /home/anir/foundation +6 error Linux 5.0.0-23-generic +7 error argv "/usr/bin/node" "/usr/bin/npm" "run" "test" +8 error node v8.10.0 +9 error npm v3.5.2 +10 error path /home/anir/foundation/package.json +11 error code ENOENT +12 error errno -2 +13 error syscall open +14 error enoent ENOENT: no such file or directory, open '/home/anir/foundation/package.json' +15 error enoent ENOENT: no such file or directory, open '/home/anir/foundation/package.json' +15 error enoent This is most likely not a problem with npm itself +15 error enoent and is related to npm not being able to find a file. +16 verbose exit [ -2, true ] From 357f86f8321981ffac5fde9b64c529e5cf141700 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Tue, 8 Oct 2019 20:17:44 +0100 Subject: [PATCH 034/106] added open file debug option --- .vscode/launch.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.vscode/launch.json b/.vscode/launch.json index 5c075a55..2253084f 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -2,6 +2,12 @@ { "version": "0.2.0", "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Launch Current Opened File", + "program": "${file}" + }, { "type": "node", "request": "launch", From 21c2366e40c133db53a5f5f9158c897cbf8b768a Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Wed, 9 Oct 2019 07:38:48 +0100 Subject: [PATCH 035/106] replaced api used --- exercises/06_code_quality/list.js | 23 ++++++++++++++++++++ exercises/06_code_quality/nestedCallbacks.js | 4 ++-- exercises/06_code_quality/package.json | 2 ++ 3 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 exercises/06_code_quality/list.js diff --git a/exercises/06_code_quality/list.js b/exercises/06_code_quality/list.js new file mode 100644 index 00000000..69912d5b --- /dev/null +++ b/exercises/06_code_quality/list.js @@ -0,0 +1,23 @@ +#!/usr/bin/env node + +'use strict' + +const readline = require('readline-sync') +const items = [] +let action + +while(true) { + action = String(readline.question('enter a command (add, list, quit): ')) + switch(action) { + case 'add': + const item = String(readline.question('item name: ')) + const qty = Number(readline.question(`now many items of type "${item}": `)) + items.push({item, qty}) + case 'list': + items.forEach( item => console.log(`${item.item}: ${item.qty}`)) + case 'quit': + process.exit() + default: + console.log('command not recognised') + } +} diff --git a/exercises/06_code_quality/nestedCallbacks.js b/exercises/06_code_quality/nestedCallbacks.js index cd3fcc12..6d89b729 100644 --- a/exercises/06_code_quality/nestedCallbacks.js +++ b/exercises/06_code_quality/nestedCallbacks.js @@ -14,7 +14,7 @@ getInput('enter base currency', (err, base) => { console.log(err.message) process.exit() } - getData(`http://api.fixer.io/latest?base=${base}`, (err, data) => { + getData(`https://api.exchangeratesapi.io/latest?base=${base}`, (err, data) => { if (err) { console.log(err.message) process.exit() @@ -39,7 +39,7 @@ function getInput(prompt, callback) { function checkValidCurrencyCode(code, callback) { code = code.trim() - request('http://api.fixer.io/latest', (err, res, body) => { + request('https://api.exchangeratesapi.io/latest', (err, res, body) => { if (err) callback(new Error('invalid API call')) const rates = JSON.parse(body).rates if (!rates.hasOwnProperty(code)) callback(new Error(`invalid currency code ${code}`)) diff --git a/exercises/06_code_quality/package.json b/exercises/06_code_quality/package.json index 6c5393de..a4821bce 100644 --- a/exercises/06_code_quality/package.json +++ b/exercises/06_code_quality/package.json @@ -34,6 +34,8 @@ "koa-static": "^5.0.0", "koa-views": "^6.1.5", "mime-types": "^2.1.22", + "readline-sync": "^1.4.10", + "request": "^2.88.0", "sqlite-async": "^1.0.11" }, "devDependencies": { From 393a730fd2e2405c96f0815808197b0ae1336054 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Wed, 9 Oct 2019 08:01:24 +0100 Subject: [PATCH 036/106] added a currencies data file --- 06 Code Quality.md | 11 +- exercises/06_code_quality/currencies.json | 173 ++++++++++++++++++++++ 2 files changed, 183 insertions(+), 1 deletion(-) create mode 100644 exercises/06_code_quality/currencies.json diff --git a/06 Code Quality.md b/06 Code Quality.md index 9e99995f..feed4717 100644 --- a/06 Code Quality.md +++ b/06 Code Quality.md @@ -135,7 +135,16 @@ The callbacks are already nested 3 deep. To test your knowledge of deeply nested 1. modify the script to ask for the currency to convert to and display only the one conversion rate. 2. instead of printing the exchange rate, ask for the amount to be converted and them return the equivalent in the chosen currency -3. use the [OpenExchangeRates](https://openexchangerates.org/api/currencies.json) API to display the full name of the chosen currency. +3. The `currencies.json` file contains a map between the currency code and the country name. Load this file into the script using the [`fs`](https://nodejs.org/api/fs.html) module, convert to a JavaScript object using the [`JSON`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON) object and use it to display the full name of the chosen currency. Below is some code to get you started. + +You will need to import the `fs` module and use the `fs.readFile()` function which takes a callback! + +```javascript +fs.readFile('currencies.json', 'utf8', (err, contents) => { + if(err) console.log('you need to handle this properly') + console.log(contents) +}) +``` Even though the script is still simple you are probably already getting in a tangle! Imagine a more complex script with conditions, it would quickly get out of hand and become practically impossible to debug. diff --git a/exercises/06_code_quality/currencies.json b/exercises/06_code_quality/currencies.json new file mode 100644 index 00000000..08407277 --- /dev/null +++ b/exercises/06_code_quality/currencies.json @@ -0,0 +1,173 @@ +{ + "AED": "United Arab Emirates Dirham", + "AFN": "Afghan Afghani", + "ALL": "Albanian Lek", + "AMD": "Armenian Dram", + "ANG": "Netherlands Antillean Guilder", + "AOA": "Angolan Kwanza", + "ARS": "Argentine Peso", + "AUD": "Australian Dollar", + "AWG": "Aruban Florin", + "AZN": "Azerbaijani Manat", + "BAM": "Bosnia-Herzegovina Convertible Mark", + "BBD": "Barbadian Dollar", + "BDT": "Bangladeshi Taka", + "BGN": "Bulgarian Lev", + "BHD": "Bahraini Dinar", + "BIF": "Burundian Franc", + "BMD": "Bermudan Dollar", + "BND": "Brunei Dollar", + "BOB": "Bolivian Boliviano", + "BRL": "Brazilian Real", + "BSD": "Bahamian Dollar", + "BTC": "Bitcoin", + "BTN": "Bhutanese Ngultrum", + "BWP": "Botswanan Pula", + "BYN": "Belarusian Ruble", + "BZD": "Belize Dollar", + "CAD": "Canadian Dollar", + "CDF": "Congolese Franc", + "CHF": "Swiss Franc", + "CLF": "Chilean Unit of Account (UF)", + "CLP": "Chilean Peso", + "CNH": "Chinese Yuan (Offshore)", + "CNY": "Chinese Yuan", + "COP": "Colombian Peso", + "CRC": "Costa Rican Colón", + "CUC": "Cuban Convertible Peso", + "CUP": "Cuban Peso", + "CVE": "Cape Verdean Escudo", + "CZK": "Czech Republic Koruna", + "DJF": "Djiboutian Franc", + "DKK": "Danish Krone", + "DOP": "Dominican Peso", + "DZD": "Algerian Dinar", + "EGP": "Egyptian Pound", + "ERN": "Eritrean Nakfa", + "ETB": "Ethiopian Birr", + "EUR": "Euro", + "FJD": "Fijian Dollar", + "FKP": "Falkland Islands Pound", + "GBP": "British Pound Sterling", + "GEL": "Georgian Lari", + "GGP": "Guernsey Pound", + "GHS": "Ghanaian Cedi", + "GIP": "Gibraltar Pound", + "GMD": "Gambian Dalasi", + "GNF": "Guinean Franc", + "GTQ": "Guatemalan Quetzal", + "GYD": "Guyanaese Dollar", + "HKD": "Hong Kong Dollar", + "HNL": "Honduran Lempira", + "HRK": "Croatian Kuna", + "HTG": "Haitian Gourde", + "HUF": "Hungarian Forint", + "IDR": "Indonesian Rupiah", + "ILS": "Israeli New Sheqel", + "IMP": "Manx pound", + "INR": "Indian Rupee", + "IQD": "Iraqi Dinar", + "IRR": "Iranian Rial", + "ISK": "Icelandic Króna", + "JEP": "Jersey Pound", + "JMD": "Jamaican Dollar", + "JOD": "Jordanian Dinar", + "JPY": "Japanese Yen", + "KES": "Kenyan Shilling", + "KGS": "Kyrgystani Som", + "KHR": "Cambodian Riel", + "KMF": "Comorian Franc", + "KPW": "North Korean Won", + "KRW": "South Korean Won", + "KWD": "Kuwaiti Dinar", + "KYD": "Cayman Islands Dollar", + "KZT": "Kazakhstani Tenge", + "LAK": "Laotian Kip", + "LBP": "Lebanese Pound", + "LKR": "Sri Lankan Rupee", + "LRD": "Liberian Dollar", + "LSL": "Lesotho Loti", + "LYD": "Libyan Dinar", + "MAD": "Moroccan Dirham", + "MDL": "Moldovan Leu", + "MGA": "Malagasy Ariary", + "MKD": "Macedonian Denar", + "MMK": "Myanma Kyat", + "MNT": "Mongolian Tugrik", + "MOP": "Macanese Pataca", + "MRO": "Mauritanian Ouguiya (pre-2018)", + "MRU": "Mauritanian Ouguiya", + "MUR": "Mauritian Rupee", + "MVR": "Maldivian Rufiyaa", + "MWK": "Malawian Kwacha", + "MXN": "Mexican Peso", + "MYR": "Malaysian Ringgit", + "MZN": "Mozambican Metical", + "NAD": "Namibian Dollar", + "NGN": "Nigerian Naira", + "NIO": "Nicaraguan Córdoba", + "NOK": "Norwegian Krone", + "NPR": "Nepalese Rupee", + "NZD": "New Zealand Dollar", + "OMR": "Omani Rial", + "PAB": "Panamanian Balboa", + "PEN": "Peruvian Nuevo Sol", + "PGK": "Papua New Guinean Kina", + "PHP": "Philippine Peso", + "PKR": "Pakistani Rupee", + "PLN": "Polish Zloty", + "PYG": "Paraguayan Guarani", + "QAR": "Qatari Rial", + "RON": "Romanian Leu", + "RSD": "Serbian Dinar", + "RUB": "Russian Ruble", + "RWF": "Rwandan Franc", + "SAR": "Saudi Riyal", + "SBD": "Solomon Islands Dollar", + "SCR": "Seychellois Rupee", + "SDG": "Sudanese Pound", + "SEK": "Swedish Krona", + "SGD": "Singapore Dollar", + "SHP": "Saint Helena Pound", + "SLL": "Sierra Leonean Leone", + "SOS": "Somali Shilling", + "SRD": "Surinamese Dollar", + "SSP": "South Sudanese Pound", + "STD": "São Tomé and Príncipe Dobra (pre-2018)", + "STN": "São Tomé and Príncipe Dobra", + "SVC": "Salvadoran Colón", + "SYP": "Syrian Pound", + "SZL": "Swazi Lilangeni", + "THB": "Thai Baht", + "TJS": "Tajikistani Somoni", + "TMT": "Turkmenistani Manat", + "TND": "Tunisian Dinar", + "TOP": "Tongan Pa'anga", + "TRY": "Turkish Lira", + "TTD": "Trinidad and Tobago Dollar", + "TWD": "New Taiwan Dollar", + "TZS": "Tanzanian Shilling", + "UAH": "Ukrainian Hryvnia", + "UGX": "Ugandan Shilling", + "USD": "United States Dollar", + "UYU": "Uruguayan Peso", + "UZS": "Uzbekistan Som", + "VEF": "Venezuelan Bolívar Fuerte (Old)", + "VES": "Venezuelan Bolívar Soberano", + "VND": "Vietnamese Dong", + "VUV": "Vanuatu Vatu", + "WST": "Samoan Tala", + "XAF": "CFA Franc BEAC", + "XAG": "Silver Ounce", + "XAU": "Gold Ounce", + "XCD": "East Caribbean Dollar", + "XDR": "Special Drawing Rights", + "XOF": "CFA Franc BCEAO", + "XPD": "Palladium Ounce", + "XPF": "CFP Franc", + "XPT": "Platinum Ounce", + "YER": "Yemeni Rial", + "ZAR": "South African Rand", + "ZMW": "Zambian Kwacha", + "ZWL": "Zimbabwean Dollar" +} From ca82a7516f1fb27827b82368d2341cc6d1bb4d0d Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Wed, 9 Oct 2019 08:12:43 +0100 Subject: [PATCH 037/106] fixed all urls --- 06 Code Quality.md | 31 ++++++++++++++------------- exercises/06_code_quality/promises.js | 5 +++-- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/06 Code Quality.md b/06 Code Quality.md index feed4717..a65ca43d 100644 --- a/06 Code Quality.md +++ b/06 Code Quality.md @@ -164,6 +164,7 @@ A promise represents the result of an asynchronous operation. As such it can be Promises are created using the `new` keyword. This function is called immediately with two arguments. The first argument resolves the promise and the second one rejects it. Once the appropriate argument is called the promise state changes. ```javascript +const url = 'https://api.exchangeratesapi.io/latest?base=GBP' const getData = url => new Promise( (resolve, reject) => { request(url, (err, res, body) => { if (err) reject(new Error('invalid API call')) @@ -182,7 +183,7 @@ As you can see it it simple to wrap any async callbacks in promises but how are To use promises we need a mechanism that gets triggered as soon as a promise changes state. A promise includes a `then()` method which gets called if the state changes to _fulfilled_ and a `catch()` method that gets called if the state changes to _rejected_. ```javascript -const aPromise = getData('http://api.fixer.io/latest?base=GBP') +const aPromise = getData('https://api.exchangeratesapi.io/latest?base=GBP') aPromise.then( data => console.log(data)) @@ -194,7 +195,7 @@ If the state of the promise changes to _rejected_, the `catch()` method is calle This code can be written in a more concise way by _chaining_ the promise methods. ```javascript -getData('http://api.fixer.io/latest?base=GBP') +getData('https://api.exchangeratesapi.io/latest?base=GBP') .then( data => console.log(data)) .catch( err => console.error(`error: ${err.message}`)) ``` @@ -223,7 +224,7 @@ const exit = () => new Promise( () => { process.exit() }) -getData('http://api.fixer.io/latest?base=GBP') +getData('https://api.exchangeratesapi.io/latest?base=GBP') .then( data => printObject(data)) .then( () => exit()) .catch(err => console.error(`error: ${err.message}`)) @@ -238,7 +239,7 @@ Despite the code in the `printObject` promise being _synchronous_ it is better t If a promise only takes a single parameter and this matches the data passed back when the previous promise _fulfills_ there is a more concise way to write this. ```javascript -getData('http://api.fixer.io/latest?base=GBP') +getData('https://api.exchangeratesapi.io/latest?base=GBP') .then(printObject) .then(exit) .catch(err => console.error(`error: ${err.message}`)) @@ -249,7 +250,7 @@ getData('http://api.fixer.io/latest?base=GBP') There are some situations where you can't simply pass the output from one promise to the input of the next one. Sometimes you need to store data for use further down the promise chain. This can be achieved by storing the data in the `this` object. ```javascript -getData('http://api.fixer.io/latest?base=GBP') +getData('https://api.exchangeratesapi.io/latest?base=GBP') .then( data => this.jsonData = data) .then( () => printObject(this.jsonData)) .then(exit) @@ -265,9 +266,9 @@ Run the `promises.js` script. Its functionality should be familiar to the `curre Study the code carefully. Notice that it defines 5 promises and chains them together. You are going to extend the functionality by defining some additional promises and adding them to the promise chain. -1. modify the script to ask for the currency to convert to and display only the one conversion rate. -2. instead of printing the exchange rate, ask for the amount to be converted and them return the equivalent in the chosen currency -3. use the [OpenExchangeRates](https://openexchangerates.org/api/currencies.json) API to display the full name of the chosen currency +1. Modify the script to ask for the currency to convert to and display only the one conversion rate. +2. Instead of printing the exchange rate, ask for the amount to be converted and them return the equivalent in the chosen currency. +3. The `currencies.json` file contains a map between the currency code and the country name. Load this file into the script using the [`fs`](https://nodejs.org/api/fs.html) module, convert to a JavaScript object using the [`JSON`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON) object and use it to display the full name of the chosen currency. ### 6.5 Executing Code Concurrently @@ -290,7 +291,7 @@ const dataArray = ['USD', 'EUR'] const promiseArray = [] dataArray.forEach( curr => { promiseArray.push(new Promise( (resolve, reject) => { - const url = `http://api.fixer.io/latest?base=GBP&symbols=${curr}` + const url = `https://api.exchangeratesapi.io/latest?base=GBP&symbols=${curr}` request.get(url, (err, res, body) => { if (err) reject(new Error(`could not get conversion rate for ${curr}`)) resolve(body) @@ -356,7 +357,7 @@ const printObject = data => new Promise( resolve => { async function main() { try { - const data = await getData('http://api.fixer.io/latest?base=GBP') + const data = await getData('https://api.exchangeratesapi.io/latest?base=GBP') await printObject(data) process.exit() } catch (err) { @@ -395,8 +396,8 @@ both `printObjectPromise` and `printObjectAsync` behave in exactly the same mann Run the `asyncFunctions.js` script, located in the otherScripts folder. Note that it works in the same way as the previous ones. Open the script and study it carefully. -1. modify the script to ask for the currency to convert to and display only the one conversion rate. -2. instead of printing the exchange rate, ask for the amount to be converted and them return the equivalent in the chosen currency -3. use the [OpenExchangeRates](https://openexchangerates.org/api/currencies.json) API to display the full name of the chosen currency -4. rewrite the `printObject` promise as an _async function_. -5. rewrite another promise as an _async function_. +1. Modify the script to ask for the currency to convert to and display only the one conversion rate. +2. Instead of printing the exchange rate, ask for the amount to be converted and them return the equivalent in the chosen currency +3. The `currencies.json` file contains a map between the currency code and the country name. Load this file into the script using the [`fs`](https://nodejs.org/api/fs.html) module, convert to a JavaScript object using the [`JSON`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON) object and use it to display the full name of the chosen currency. +4. Rewrite the `printObject` promise as an _async function_. +5. Rewrite another promise as an _async function_. diff --git a/exercises/06_code_quality/promises.js b/exercises/06_code_quality/promises.js index 74c13396..64de978b 100644 --- a/exercises/06_code_quality/promises.js +++ b/exercises/06_code_quality/promises.js @@ -2,6 +2,7 @@ 'use strict' const request = require('request') +const baseURL = 'https://api.exchangeratesapi.io/latest' const getInput = prompt => new Promise( (resolve) => { process.stdin.resume() @@ -12,7 +13,7 @@ const getInput = prompt => new Promise( (resolve) => { const checkValidCurrencyCode = code => new Promise( (resolve, reject) => { code = code.trim() - request('http://api.fixer.io/latest', (err, res, body) => { + request(baseURL, (err, res, body) => { if (err) reject(new Error('invalid API call')) const rates = JSON.parse(body).rates if (!rates.hasOwnProperty(code)) reject(new Error(`invalid currency code ${code}`)) @@ -21,7 +22,7 @@ const checkValidCurrencyCode = code => new Promise( (resolve, reject) => { }) const getData = code => new Promise( (resolve, reject) => { - request(`http://api.fixer.io/latest?base=${code}`, (err, res, body) => { + request(`${baseURL}?base=${code}`, (err, res, body) => { if (err) reject(new Error('invalid API call')) resolve(body) }) From 7564ca2747dbe87e41bf7779853f4bba8809ebaa Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Wed, 9 Oct 2019 08:17:18 +0100 Subject: [PATCH 038/106] added async functions file --- exercises/06_code_quality/asyncFunctions.js | 51 +++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 exercises/06_code_quality/asyncFunctions.js diff --git a/exercises/06_code_quality/asyncFunctions.js b/exercises/06_code_quality/asyncFunctions.js new file mode 100644 index 00000000..6e483683 --- /dev/null +++ b/exercises/06_code_quality/asyncFunctions.js @@ -0,0 +1,51 @@ + +'use strict' + +const request = require('request') +const baseURL = 'https://api.exchangeratesapi.io/latest' + +async function main() { + try { + const base = await getInput('enter base currency') + await checkValidCurrencyCode(base) + const data = await getData(`${baseURL}?base=${base}`) + await printObject(data) + process.exit() + } catch (err) { + console.log(`error: ${err.message}`) + } +} + +const getInput = prompt => new Promise( (resolve) => { + process.stdin.resume() + process.stdin.setEncoding('utf8') + process.stdout.write(`${prompt}: `) + process.stdin.on('data', text => resolve(text)) +}) + +const checkValidCurrencyCode = code => new Promise( (resolve, reject) => { + code = code.trim() + request(baseURL, (err, res, body) => { + if (err) reject(new Error('invalid API call')) + const rates = JSON.parse(body).rates + if (!rates.hasOwnProperty(code)) it.throw(new Error(`invalid currency code ${code}`)) + resolve() + }) +}) + +const getData = url => new Promise( (resolve, reject) => { + request(url, (err, res, body) => { + if (err) reject(new Error('invalid API call')) + resolve(body) + }) +}) + +const printObject = data => new Promise( (resolve) => { + const indent = 2 + data = JSON.parse(data) + const str = JSON.stringify(data, null, indent) + console.log(str) + resolve() +}) + +main() From 053389aa39fb76e740172946b4a162f77a7f6e53 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Wed, 9 Oct 2019 08:19:04 +0100 Subject: [PATCH 039/106] deleted old readme file --- exercises/06_code_quality/README.md | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 exercises/06_code_quality/README.md diff --git a/exercises/06_code_quality/README.md b/exercises/06_code_quality/README.md deleted file mode 100644 index 19df846d..00000000 --- a/exercises/06_code_quality/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Assignment Template - -This repository contains the base files for the assignment. To make use of this carry out the following steps: - -1. Fork this repository but change its name (replace `xxx` with your university username): - 1. If this is your original assignment, `xxx-coursework`. - 2. If this is your resit assignment code, `xxx-resit`. -2. Replace the contents of this file with the details of the topic you have been assigned. From d4ddbc764b44c5b03d239ffeb1216a9a998cb8e4 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Wed, 9 Oct 2019 15:17:04 +0100 Subject: [PATCH 040/106] started mocking file system --- .../filesystem/modules/file.js | 35 +++++++++++++++++++ .../07_unit_testing/filesystem/package.json | 14 ++++++++ .../filesystem/unit tests/file.spec.js | 33 +++++++++++++++++ 3 files changed, 82 insertions(+) create mode 100644 exercises/07_unit_testing/filesystem/modules/file.js create mode 100644 exercises/07_unit_testing/filesystem/package.json create mode 100644 exercises/07_unit_testing/filesystem/unit tests/file.spec.js diff --git a/exercises/07_unit_testing/filesystem/modules/file.js b/exercises/07_unit_testing/filesystem/modules/file.js new file mode 100644 index 00000000..ec5e4202 --- /dev/null +++ b/exercises/07_unit_testing/filesystem/modules/file.js @@ -0,0 +1,35 @@ + +'use strict' + +const fs = require('fs') + +module.exports = class File { + + constructor(name) { + return async() => { + this.filename = name + } + } + + async add(item, qty) { + fs.readFile(this.filename, 'utf8', (err, data) => { + if (err) throw new Error('file not found') + data = JSON.parse(data) + data.append({ item, qty }) + data = JSON.stringify(data) + fs.writeFile(this.filename, data, 'utf8', (err) => { + if(err) throw err + } ) + }) + } + + get records() { + return async() => { + fs.readFile(this.filename, 'utf8', (err, data) => { + if (err) throw new Error('file not found') + return JSON.parse(data) + }) + } + } + +} diff --git a/exercises/07_unit_testing/filesystem/package.json b/exercises/07_unit_testing/filesystem/package.json new file mode 100644 index 00000000..2cc74c64 --- /dev/null +++ b/exercises/07_unit_testing/filesystem/package.json @@ -0,0 +1,14 @@ +{ + "name": "filesystem", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "devDependencies": { + "mock-fs": "^4.10.1" + } +} diff --git a/exercises/07_unit_testing/filesystem/unit tests/file.spec.js b/exercises/07_unit_testing/filesystem/unit tests/file.spec.js new file mode 100644 index 00000000..8bdf4f84 --- /dev/null +++ b/exercises/07_unit_testing/filesystem/unit tests/file.spec.js @@ -0,0 +1,33 @@ + +'use strict' + +const File = require('../modules/file.js') +const mock = require('mock-fs') + +beforeAll( async() => { + mock({ + 'data': { + 'test.json': '["item": "bread", "qty": 42]' + } + }) +}) + +describe('xxx', () => { + + beforeEach( async() => { + const file = new File() + }) + afterEach( async() => { + // runs after each test completes + }) + test('xxx', async done => { + expect.assertions(1) + try { + // XXX + } catch(err) { + // XXX + } finally { + done() + } + }) +}) From 87c1585d8dc97aa72724570a00de5e39e18f5365 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Fri, 11 Oct 2019 09:14:30 +0100 Subject: [PATCH 041/106] fixed text input issue --- exercises/06_code_quality/asyncFunctions.js | 16 +++++++++++----- exercises/06_code_quality/package.json | 1 + exercises/06_code_quality/promises.js | 14 +++++++++----- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/exercises/06_code_quality/asyncFunctions.js b/exercises/06_code_quality/asyncFunctions.js index 6e483683..35f1e2b4 100644 --- a/exercises/06_code_quality/asyncFunctions.js +++ b/exercises/06_code_quality/asyncFunctions.js @@ -2,6 +2,8 @@ 'use strict' const request = require('request') +const readline = require('readline') + const baseURL = 'https://api.exchangeratesapi.io/latest' async function main() { @@ -10,17 +12,21 @@ async function main() { await checkValidCurrencyCode(base) const data = await getData(`${baseURL}?base=${base}`) await printObject(data) + const to = await getInput('convert to') + console.log(to) process.exit() } catch (err) { console.log(`error: ${err.message}`) } } -const getInput = prompt => new Promise( (resolve) => { - process.stdin.resume() - process.stdin.setEncoding('utf8') - process.stdout.write(`${prompt}: `) - process.stdin.on('data', text => resolve(text)) +const getInput = prompt => new Promise(resolve => { + const read = readline.createInterface({ input: process.stdin, output: process.stdout }) + read.question(`${prompt}: `, value => { + console.log(`You entered ${value}`) + read.close() + resolve(value) + }) }) const checkValidCurrencyCode = code => new Promise( (resolve, reject) => { diff --git a/exercises/06_code_quality/package.json b/exercises/06_code_quality/package.json index a4821bce..6eb0a08d 100644 --- a/exercises/06_code_quality/package.json +++ b/exercises/06_code_quality/package.json @@ -34,6 +34,7 @@ "koa-static": "^5.0.0", "koa-views": "^6.1.5", "mime-types": "^2.1.22", + "readline": "^1.3.0", "readline-sync": "^1.4.10", "request": "^2.88.0", "sqlite-async": "^1.0.11" diff --git a/exercises/06_code_quality/promises.js b/exercises/06_code_quality/promises.js index 64de978b..30397aea 100644 --- a/exercises/06_code_quality/promises.js +++ b/exercises/06_code_quality/promises.js @@ -2,13 +2,17 @@ 'use strict' const request = require('request') +const readline = require('readline') + const baseURL = 'https://api.exchangeratesapi.io/latest' -const getInput = prompt => new Promise( (resolve) => { - process.stdin.resume() - process.stdin.setEncoding('utf8') - process.stdout.write(`${prompt}: `) - process.stdin.on('data', text => resolve(text)) +const getInput = prompt => new Promise(resolve => { + const read = readline.createInterface({ input: process.stdin, output: process.stdout }) + read.question(`${prompt}: `, value => { + console.log(`You entered ${value}`) + read.close() + resolve(value) + }) }) const checkValidCurrencyCode = code => new Promise( (resolve, reject) => { From 111e50081e594b741e9715acc073e5a9a1b3a34d Mon Sep 17 00:00:00 2001 From: "Mark Tyers (aa7401)" Date: Sat, 12 Oct 2019 07:53:17 +0100 Subject: [PATCH 042/106] Updated Git Installation Lab did not explain how to install git on different OS. Now covers how to install git on MacOS using either Xcode or HomeBrew. Covers apt command for Ubuntu and reminds not to install any GUI tools. --- 01 Setup.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/01 Setup.md b/01 Setup.md index a1a4e284..7f94b616 100644 --- a/01 Setup.md +++ b/01 Setup.md @@ -3,7 +3,9 @@ In this worksheet you will learn how to configure your work environment using VS Code. You should start by installing **Visual Studio Code** (NOT VISUAL STUDIO!) from the [website](https://code.visualstudio.com), note that it might already be installed. If you are using a Coventry University computer and the software is not installed you can do this using AppsAnywhere. -If you are using Windows 10 you will also need to install [Git](https://git-scm.com/download/win), this may already be installed on a Coventry University computer. +If you are using Windows 10 you will also need to install [Git](https://git-scm.com/download/win), this may already be installed on a Coventry University computer. If you are on MacOS you may already have it installed as it comes with the XCode IDE but if you have recently updated your OS you may need to run the `xcode-select --install` command to update the **Xcode Command-line Tools** but if you don't want to install XCode you can install git using [HomeBrew](http://brew.sh/) using the `brew install git` command. If you are running Ubuntu you can install it using the `sudo apt install git` command. + +DO NOT INSTALL THE GIT GUI TOOLS! Visual Studio Code comes with an integrated **Terminal** that can be used instead of the standard _Command Prompt_ or _Terminal_. If you are using Linux or MacOS this will give you a Bash prompt however on Windows 10 it defaults to the _Command Prompt_ and will need to be changed to the _Bash Shell_. From 23eca5013e87af5222bea83faafd337d3beb31c6 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Sat, 12 Oct 2019 07:58:01 +0100 Subject: [PATCH 043/106] Cleaned Up Files There were some files in the root of the codee quality lab. These have now been put in a directory called linting. --- exercises/06_code_quality/README.md | 8 -------- exercises/06_code_quality/{ => linter}/index.js | 0 exercises/06_code_quality/{ => linter}/jsdoc.conf | 0 .../06_code_quality/{ => linter}/modules/accounts.js | 0 exercises/06_code_quality/{ => linter}/package.json | 0 5 files changed, 8 deletions(-) delete mode 100644 exercises/06_code_quality/README.md rename exercises/06_code_quality/{ => linter}/index.js (100%) rename exercises/06_code_quality/{ => linter}/jsdoc.conf (100%) rename exercises/06_code_quality/{ => linter}/modules/accounts.js (100%) rename exercises/06_code_quality/{ => linter}/package.json (100%) diff --git a/exercises/06_code_quality/README.md b/exercises/06_code_quality/README.md deleted file mode 100644 index 19df846d..00000000 --- a/exercises/06_code_quality/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Assignment Template - -This repository contains the base files for the assignment. To make use of this carry out the following steps: - -1. Fork this repository but change its name (replace `xxx` with your university username): - 1. If this is your original assignment, `xxx-coursework`. - 2. If this is your resit assignment code, `xxx-resit`. -2. Replace the contents of this file with the details of the topic you have been assigned. diff --git a/exercises/06_code_quality/index.js b/exercises/06_code_quality/linter/index.js similarity index 100% rename from exercises/06_code_quality/index.js rename to exercises/06_code_quality/linter/index.js diff --git a/exercises/06_code_quality/jsdoc.conf b/exercises/06_code_quality/linter/jsdoc.conf similarity index 100% rename from exercises/06_code_quality/jsdoc.conf rename to exercises/06_code_quality/linter/jsdoc.conf diff --git a/exercises/06_code_quality/modules/accounts.js b/exercises/06_code_quality/linter/modules/accounts.js similarity index 100% rename from exercises/06_code_quality/modules/accounts.js rename to exercises/06_code_quality/linter/modules/accounts.js diff --git a/exercises/06_code_quality/package.json b/exercises/06_code_quality/linter/package.json similarity index 100% rename from exercises/06_code_quality/package.json rename to exercises/06_code_quality/linter/package.json From 9b23edb60ae797a6ec4ef3ea70ca1e2911982783 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Sat, 12 Oct 2019 09:21:11 +0100 Subject: [PATCH 044/106] Updated ESLint and JSDoc Exercise The exercise was unclear. Exercise is now based on the todo files which have been updated --- .eslintrc.json | 1 + .gitignore | 1 + 06 Code Quality.md | 34 +++--- exercises/06_code_quality/linter/index.js | 107 ++++-------------- .../linter/jest-test.config.js | 20 ++++ exercises/06_code_quality/linter/jsdoc.conf | 22 ---- .../linter/modules/accounts.js | 60 ---------- .../06_code_quality/linter/modules/todo.js | 26 +++++ exercises/06_code_quality/linter/package.json | 48 +++----- .../06_code_quality/linter/public/style.css | 11 ++ exercises/06_code_quality/linter/readme.md | 6 + .../linter/unit tests/todo.spec.js | 59 ++++++++++ .../06_code_quality/linter/views/empty.hbs | 19 ++++ .../06_code_quality/linter/views/home.hbs | 33 ++++++ exercises/06_code_quality/todo/index.js | 98 ++++++++-------- .../06_code_quality/todo/modules/list.js | 73 +++++++----- exercises/06_code_quality/todo/package.json | 5 +- .../06_code_quality/unit tests/user.spec.js | 76 ------------- .../06_code_quality/views/error.handlebars | 16 --- .../06_code_quality/views/index.handlebars | 16 --- .../06_code_quality/views/login.handlebars | 24 ---- .../06_code_quality/views/register.handlebars | 21 ---- 22 files changed, 330 insertions(+), 446 deletions(-) create mode 100644 exercises/06_code_quality/linter/jest-test.config.js delete mode 100644 exercises/06_code_quality/linter/jsdoc.conf delete mode 100644 exercises/06_code_quality/linter/modules/accounts.js create mode 100644 exercises/06_code_quality/linter/modules/todo.js create mode 100644 exercises/06_code_quality/linter/public/style.css create mode 100644 exercises/06_code_quality/linter/readme.md create mode 100644 exercises/06_code_quality/linter/unit tests/todo.spec.js create mode 100644 exercises/06_code_quality/linter/views/empty.hbs create mode 100644 exercises/06_code_quality/linter/views/home.hbs delete mode 100644 exercises/06_code_quality/unit tests/user.spec.js delete mode 100644 exercises/06_code_quality/views/error.handlebars delete mode 100644 exercises/06_code_quality/views/index.handlebars delete mode 100644 exercises/06_code_quality/views/login.handlebars delete mode 100644 exercises/06_code_quality/views/register.handlebars diff --git a/.eslintrc.json b/.eslintrc.json index 3fb6a540..fb7e68bd 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -53,6 +53,7 @@ "no-var": 2, "prefer-arrow-callback": 1, "prefer-const": 2, + "prefer-template": "error", "quotes": [1, "single"], "semi": [1, "never"], "space-before-blocks": ["error", { "functions": "always", "keywords": "always", "classes": "always" }], diff --git a/.gitignore b/.gitignore index 008f8e67..6dcdeeca 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ coverage/ docs/ sessions/ screenshots/* +out/ # sqlite databases # *.db diff --git a/06 Code Quality.md b/06 Code Quality.md index a65ca43d..5972de6a 100644 --- a/06 Code Quality.md +++ b/06 Code Quality.md @@ -56,7 +56,7 @@ The custom object prototype defined in the `list.js` module already contains the Now much of the business logic has been moved to the separate module, are there any module imports in `index.js` that are no longer needed? Locate these and delete. -## 2 Linting +## 3 Linting When using a language as flexible as JavaScript which contains so many legal (but terrible) features, it is important to use a linter. This will check your code against a set of rules. These ensure: @@ -64,14 +64,14 @@ When using a language as flexible as JavaScript which contains so many legal (bu 2. You are implementing optional syntax (such as indentation and semicolons) in a consistent manner. 3. You are writing code that is easy to maintain. -If you look over both your `index.js` and `accounts.js` files you should be feeling pretty comfortable that you are already writing clean, consistent and maintainable code, lets see how good your code really is! +Locate the `06_code_quality/todo/` directory and study the `index.js` file. You should be feeling pretty comfortable that you are looking at clean, consistent and maintainable code, lets see how good your code really is! -You should start by ensuring you have installed `eslint` which is considered the industry standard and that you have a copy of the approved configuration file `.eslintrc.json` in the root directory of your project. You can find this in the `TEACHING-MATERIALS` repository but make sure you take a copy of the latest version from the master repository! +You should start by ensuring you have installed `eslint` which is considered the industry standard and that you have a copy of the approved configuration file `.eslintrc.json` in the root directory of your project. -Try running the linter on your `index.js` routes file: +Now navigate to the `06_code_quality/` directory using terminal and run the linter on the `index.js` code in the `todo/` directory: ```shell -$ node_modules/.bin/eslint index.js +$ node_modules/.bin/eslint todo/index.js ``` You will see a list of issues that the linter has flagged in your code. Notice that some of these are flagged as errors (serious) and some as warnings (recommendations). Each message includes: @@ -85,38 +85,38 @@ The latter can be used to quickly look up the rules in the [comprehensive docume Instead of running separate checks on every file, we can specify the directory we want to check and it will automatically scan all the subdirectories. For example to scan all the files in the `modules/` directory we could run: ```shell -$ node_modules/.bin/eslint modules/ +$ node_modules/.bin/eslint todo/ ``` -### 2.1 Test Your Understanding +### 3.1 Test Your Understanding -1. How could you run the linter to scan _all_ the files in your project (HINT: you need to start scanning in the _current directory_)? -2. Now you should locate and fix all the errors and warnings in your code. -3. If you are using VS Code, install `eslint` globally and then install the [eslint extension](https://github.com/Microsoft/vscode-eslint). After restarting your editor you should see any errors and warnings flagged in the editor. +1. Locate and fix all the errors and warnings in the `index.js`. +2. Install `eslint` globally and then install the [eslint extension](https://github.com/Microsoft/vscode-eslint). After restarting your editor you should see any errors and warnings flagged in the editor. +3. Use the `eslint` plugin to locate and fix all the errors in the `modules/list.js` file. -## 3 Documentation +## 4 Documentation In this third and last topic we will be using the [JSDoc](http://usejsdoc.org) tool to build a detailed code documentation website by extracting special comments inserted into our source code. The default set of documentation tools provided in JSDoc are not suitable for documenting Koa routes and so we will be using a plugin called [jsdoc-route-plugin](https://www.npmjs.com/package/jsdoc-route-plugin). This should have been installed by the package manifest however you should check that you are using the current version of the `package.json` file and update if needed, rerunning the `npm install` command to ensure all packages are installed. You should also check that you have the latest version of the `jsdoc.conf` configuration file. -Now everything is installed we can run the `jsdoc` tool to generate our documentation. +Now everything is installed we can run the `jsdoc` tool on the project in the `todo/` directory which will generate our documentation. The `-d` destination flag tells the tool where to save the documentation. ```shell -$ node_modules/.bin/jsdoc +$ ./node_modules/.bin/jsdoc -d ./docs/jsdoc/ modules/* ``` If you run this command you should see a new directory called `docs/` which will contain a `jsdoc/` directory. Inside this you will see some website files, opening the `index.html` file in your browser you should see the documentation pages for your website! -### 3.1 Test Your Understanding +### 4.1 Test Your Understanding You will probably have noticed that only a couple of the functions include complete JSDoc comments and so the documentation website is incomplete. Your task is to use the existing comments for guidance and complete the task of documenting your code. You will find the [JSDoc](http://usejsdoc.org) and [jsdoc-route-plugin](https://www.npmjs.com/package/jsdoc-route-plugin) documentation helpful. -## 4 Improved Async Code +## 5 Improved Async Code Since NodeJS has a single thread that handles all incoming requests it is vital that we push long-running tasks into their own threads, typically through the use of _callback functions_. In this section of the lab you will learn about the limitations of callbacks and explore more powerful ways to handle multi-threading. -## 4.1 Nested Callbacks +## 5.1 Nested Callbacks Because the code to be run after a callback is run needs to be _inside_ the callback code it is very challenging to build a script that contains several long-running tasks you get into a situation where you nest callbacks inside callbacks (inside callbacks) which makes the code very difficult to write, debug and read and means its very difficult to split into separate functions, a situation commonly known as **Callback Hell**. @@ -129,7 +129,7 @@ Open the file `nestedCallbacks.js` which asks for a _base_ currency code then pr Callbacks are the simplest possible mechanism for asynchronous code in JavaScript. Unfortunately, raw callbacks sacrifice the control flow, exception handling, and function semantics familiar from synchronous code. -### 4.1 Test Your Knowledge +### 5.2 Test Your Knowledge The callbacks are already nested 3 deep. To test your knowledge of deeply nested callbacks you are going to create a script that has 6 levels of nested callbacks! diff --git a/exercises/06_code_quality/linter/index.js b/exercises/06_code_quality/linter/index.js index 43c2fcd1..86e1c6e0 100644 --- a/exercises/06_code_quality/linter/index.js +++ b/exercises/06_code_quality/linter/index.js @@ -1,115 +1,56 @@ #!/usr/bin/env node -/** - * Routes File - */ - 'use strict' -/* MODULE IMPORTS */ -const bcrypt = require('bcrypt-promise') const Koa = require('koa') const Router = require('koa-router') -const views = require('koa-views') -const staticDir = require('koa-static') +const stat = require('koa-static') const bodyParser = require('koa-bodyparser') -const koaBody = require('koa-body')({multipart: true, uploadDir: '.'}) -const session = require('koa-session') -const sqlite = require('sqlite-async') -const fs = require('fs-extra') -const mime = require('mime-types') -//const jimp = require('jimp') - -/* IMPORT CUSTOM MODULES */ -const User = require('./modules/accounts') +const handlebars = require('koa-hbs-renderer') const app = new Koa() const router = new Router() - -/* CONFIGURING THE MIDDLEWARE */ -app.keys = ['darkSecret'] -app.use(staticDir('public')) +app.use(stat('public')) app.use(bodyParser()) -app.use(session(app)) -app.use(views(`${__dirname}/views`, { extension: 'handlebars' }, {map: { handlebars: 'handlebars' }})) +app.use(handlebars({ paths: { views: `${__dirname}/views` } })) +app.use(router.routes()) + +const port = 8080 -const defaultPort = 8080 -const port = process.env.PORT || defaultPort -const dbName = 'website.db' -const saltRounds = 10 +const todo = require('./modules/todo') -/** - * The secure home page. - * - * @name Home Page - * @route {GET} / - * @authentication This route requires cookie-based authentication. - */ router.get('/', async ctx => { try { - if(ctx.session.authorised !== true) return ctx.redirect('/login?msg=you need to log in') const data = {} if(ctx.query.msg) data.msg = ctx.query.msg - await ctx.render('index') + data.items = todo.getAll() + ctx.render('home', data) } catch(err) { - await ctx.render('error', {message: err.message}) + console.log(err.message) + ctx.render('home', {msg: err.message}) } }) -/** - * The user registration page. - * - * @name Register Page - * @route {GET} /register - */ -router.get('/register', async ctx => await ctx.render('register')) - -/** - * The script to process new user registrations. - * - * @name Register Script - * @route {POST} /register - */ -router.post('/register', koaBody, async ctx => { +router.post('/', ctx => { try { - // extract the data from the request const body = ctx.request.body - console.log(body) - const {path, type} = ctx.request.files.avatar - // call the functions in the module - const user = await new User(dbName) - await user.register(body.user, body.pass) - // await user.uploadPicture(path, type) - // redirect to the home page - ctx.redirect(`/?msg=new user "${body.name}" added`) + todo.add(body.item, body.qty) + ctx.redirect('/') } catch(err) { - await ctx.render('error', {message: err.message}) + console.log(err.message) + ctx.redirect(`/?msg=${err.message}`) } }) -router.get('/login', async ctx => { - const data = {} - if(ctx.query.msg) data.msg = ctx.query.msg - if(ctx.query.user) data.user = ctx.query.user - await ctx.render('login', data) -}) - -router.post('/login', async ctx => { +router.get('/delete/:key', ctx => { try { - const body = ctx.request.body - const user = await new User(dbName) - await user.login(body.user, body.pass) - ctx.session.authorised = true - return ctx.redirect('/?msg=you are now logged in...') + console.log(`key: ${ctx.params.key}`) + todo.delete(ctx.params.key) + ctx.redirect('/msg=item deleted') } catch(err) { - await ctx.render('error', {message: err.message}) + console.log(err.message) + ctx.redirect(`/${err.message}`) } }) -router.get('/logout', async ctx => { - ctx.session.authorised = null - ctx.redirect('/?msg=you are now logged out') -}) - -app.use(router.routes()) -module.exports = app.listen(port, async() => console.log(`listening on port ${port}`)) +module.exports = app.listen(port, () => console.log(`listening on port ${port}`)) diff --git a/exercises/06_code_quality/linter/jest-test.config.js b/exercises/06_code_quality/linter/jest-test.config.js new file mode 100644 index 00000000..02243478 --- /dev/null +++ b/exercises/06_code_quality/linter/jest-test.config.js @@ -0,0 +1,20 @@ + +'use strict'; + +module.exports = { + displayName: 'test', + verbose: true, + collectCoverage: true, + coverageThreshold: { + global: { + branches: 0, + functions: 0, + lines: 0, + statements: 0 + } + }, + testPathIgnorePatterns: [ + '/node_modules/', + '/__tests__/fixtures/', + ] +} diff --git a/exercises/06_code_quality/linter/jsdoc.conf b/exercises/06_code_quality/linter/jsdoc.conf deleted file mode 100644 index 9fa536f2..00000000 --- a/exercises/06_code_quality/linter/jsdoc.conf +++ /dev/null @@ -1,22 +0,0 @@ - -{ - "tags": { - "allowUnknownTags": true, - "dictionaries": ["jsdoc","closure"] - }, - "source": { - "include": [ "." ], - "exclude": [ "node_modules" ], - "includePattern": ".+\\.js(doc|x)?$", - "excludePattern": "(^|\\/|\\\\)_" - }, - "plugins": ["jsdoc-route-plugin"], - "templates": { - "cleverLinks": false, - "monospaceLinks": false - }, - "opts": { - "destination": "docs/jsdoc", - "recurse": true - } -} diff --git a/exercises/06_code_quality/linter/modules/accounts.js b/exercises/06_code_quality/linter/modules/accounts.js deleted file mode 100644 index fd1c7ec4..00000000 --- a/exercises/06_code_quality/linter/modules/accounts.js +++ /dev/null @@ -1,60 +0,0 @@ - -'use strict' - -const bcrypt = require('bcrypt-promise') -const fs = require('fs-extra') -const mime = require('mime-types') -const sqlite = require('sqlite-async') -const saltRounds = 10 - -module.exports = class User { - - constructor(dbName = ':memory:') { - return (async() => { - this.db = await sqlite.open(dbName) - // we need this table to store the user accounts - const sql = 'CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, user TEXT, pass TEXT);' - await this.db.run(sql) - return this - })() - } - - async register(user, pass) { - try { - if(user.length === 0) throw new Error('missing username') - if(pass.length === 0) throw new Error('missing password') - let sql = `SELECT COUNT(id) as records FROM users WHERE user="${user}";` - const data = await this.db.get(sql) - if(data.records !== 0) throw new Error(`username "${user}" already in use`) - pass = await bcrypt.hash(pass, saltRounds) - sql = `INSERT INTO users(user, pass) VALUES("${user}", "${pass}")` - await this.db.run(sql) - return true - } catch(err) { - throw err - } - } - - async uploadPicture(path, mimeType) { - const extension = mime.extension(mimeType) - console.log(`path: ${path}`) - console.log(`extension: ${extension}`) - //await fs.copy(path, `public/avatars/${username}.${fileExtension}`) - } - - async login(username, password) { - try { - let sql = `SELECT count(id) AS count FROM users WHERE user="${username}";` - const records = await this.db.get(sql) - if(!records.count) throw new Error(`username "${username}" not found`) - sql = `SELECT pass FROM users WHERE user = "${username}";` - const record = await this.db.get(sql) - const valid = await bcrypt.compare(password, record.pass) - if(valid === false) throw new Error(`invalid password for account "${username}"`) - return true - } catch(err) { - throw err - } - } - -} \ No newline at end of file diff --git a/exercises/06_code_quality/linter/modules/todo.js b/exercises/06_code_quality/linter/modules/todo.js new file mode 100644 index 00000000..f4fdd7b8 --- /dev/null +++ b/exercises/06_code_quality/linter/modules/todo.js @@ -0,0 +1,26 @@ + +'use strict' + +let data = [] + +module.exports.clear = () => { + data = [] +} + +module.exports.add = (item, qty) => { + qty = Number(qty) + if(isNaN(qty)) throw new Error('qty must be a number') + data.push({item: item, qty: qty}) +} + +module.exports.getAll = () => { + for(const key in data) data[key].key = key + return data +} + +module.exports.delete = key => { + console.log(`delete key ${key}`) + return +} + +module.exports.countItems = () => data.length diff --git a/exercises/06_code_quality/linter/package.json b/exercises/06_code_quality/linter/package.json index 6eb0a08d..8b83c896 100644 --- a/exercises/06_code_quality/linter/package.json +++ b/exercises/06_code_quality/linter/package.json @@ -1,50 +1,32 @@ { - "name": "10_auth", + "name": "todo", "version": "1.0.0", "description": "", "main": "index.js", - "engines": { - "node": "12.x" - }, "scripts": { - "start": "node index.js", - "acceptance": "jest --coverage --detectOpenHandles", - "jsdoc": "node_modules/.bin/jsdoc -c jsdoc.conf", "linter": "node_modules/.bin/eslint .", - "test": "jest --coverage --detectOpenHandles", - "unit": "node_modules/.bin/jest --coverage --runInBand tests/unit/" - }, - "jest": { - "projects": [ - "/jest-test.config.js" - ] + "test": "node_modules/.bin/jest --coverage --runInBand" }, "author": "", "license": "ISC", "dependencies": { - "bcrypt": "^3.0.6", - "bcrypt-promise": "^2.0.0", - "fs-extra": "^7.0.1", - "handlebars": "^4.1.2", - "koa": "^2.6.2", - "koa-body": "^4.0.8", + "handlebars": "^4.2.0", + "http-status-codes": "^1.3.2", + "koa": "^2.8.1", "koa-bodyparser": "^4.2.1", + "koa-handlebars": "^1.0.0", + "koa-hbs-renderer": "^1.2.0", "koa-router": "^7.4.0", - "koa-session": "^5.10.1", "koa-static": "^5.0.0", - "koa-views": "^6.1.5", - "mime-types": "^2.1.22", - "readline": "^1.3.0", - "readline-sync": "^1.4.10", - "request": "^2.88.0", - "sqlite-async": "^1.0.11" + "koa-views": "^6.2.1" }, "devDependencies": { - "eslint": "^5.15.2", - "handlebars-validate": "^0.1.2", - "http-status-codes": "^1.3.2", - "jest": "^24.1.0", - "jsdoc": "^3.6.3", - "jsdoc-route-plugin": "^0.1.0" + "jest": "^24.9.0", + "supertest": "^4.0.2" + }, + "jest": { + "projects": [ + "/jest-test.config.js" + ] } } diff --git a/exercises/06_code_quality/linter/public/style.css b/exercises/06_code_quality/linter/public/style.css new file mode 100644 index 00000000..8a5442c3 --- /dev/null +++ b/exercises/06_code_quality/linter/public/style.css @@ -0,0 +1,11 @@ + +body { + font-family: Arial, Helvetica, sans-serif; +} + +.msg { + border: 1px solid red; + font-weight: bold; + color: red; + padding: 1em; +} diff --git a/exercises/06_code_quality/linter/readme.md b/exercises/06_code_quality/linter/readme.md new file mode 100644 index 00000000..915a7e3a --- /dev/null +++ b/exercises/06_code_quality/linter/readme.md @@ -0,0 +1,6 @@ + +# ToDo + +This project is designed to teach you how to write and debug unit tests and employ the Test-Driven Development (TDD) methodology in your software development. + +You should open this directory directly in VS Code, ensuring that this file is in the root of the file tree. diff --git a/exercises/06_code_quality/linter/unit tests/todo.spec.js b/exercises/06_code_quality/linter/unit tests/todo.spec.js new file mode 100644 index 00000000..55eb70db --- /dev/null +++ b/exercises/06_code_quality/linter/unit tests/todo.spec.js @@ -0,0 +1,59 @@ + +'use strict' + +const todo = require('../modules/todo.js') + +beforeAll( async() => { + // stuff to do before any of the tests run +}) + +afterAll( async() => { + // runs after all the tests have completed +}) + +describe('add()', () => { + // block of tests + beforeEach( async() => { + todo.clear() + }) + afterEach( async() => { + // runs after each test completes + }) + test('add a single item', async done => { + expect.assertions(1) + try { + todo.add('bread', 3) + expect(todo.countItems()).toBe(1) + } catch(err) { + done.fail(err) + } finally { + done() + } + }) + test('qty must be a number', async done => { + expect.assertions(1) + try { + todo.add('bread', 'three') + done.fail('test failed') + } catch(err) { + expect(err.message).toBe('qty must be a number') + } finally { + done() + } + }) + + // New test goes HERE! + +}) + +describe('delete()', () => { + // any tests for the delete() function should be written here +}) + +describe('getAll()', () => { + // any tests for the getAll() function should be written here +}) + +describe('clear()', () => { + // any tests for the clear() function should be written here +}) diff --git a/exercises/06_code_quality/linter/views/empty.hbs b/exercises/06_code_quality/linter/views/empty.hbs new file mode 100644 index 00000000..6be9593a --- /dev/null +++ b/exercises/06_code_quality/linter/views/empty.hbs @@ -0,0 +1,19 @@ + + + + + ToDo List + + + +

    ToDo List

    +

    Your list is empty, lets add some items...

    +
    + Item: + + Qty: + + +
    + + diff --git a/exercises/06_code_quality/linter/views/home.hbs b/exercises/06_code_quality/linter/views/home.hbs new file mode 100644 index 00000000..1a9495f0 --- /dev/null +++ b/exercises/06_code_quality/linter/views/home.hbs @@ -0,0 +1,33 @@ + + + + + ToDo List + + + +

    ToDo List

    +

    My List

    + {{#if msg}} +

    {{msg}}

    + {{/if}} + {{#if items.length}} + + + + {{#each items}} + + {{/each}} +
    Shopping List
    ItemQtyAction
    {{this.item}}{{this.qty}}delete
    + {{else}} +

    Your list is empty, lets add some items...

    + {{/if}} +
    + Item: + + Qty: + + +
    + + diff --git a/exercises/06_code_quality/todo/index.js b/exercises/06_code_quality/todo/index.js index 914ec5bf..111255db 100644 --- a/exercises/06_code_quality/todo/index.js +++ b/exercises/06_code_quality/todo/index.js @@ -1,61 +1,57 @@ #!/usr/bin/env node -'use strict' +var Koa = require("koa") +var Router = require("koa-router"); +var stat = require("koa-static"); +var bodyParser = require("koa-bodyparser"); +var handlebars = require("koa-hbs-renderer"); -const Koa = require('koa') -const Router = require('koa-router') -const stat = require('koa-static') -const bodyParser = require('koa-bodyparser') -const handlebars = require('koa-hbs-renderer') +var app = new Koa(); +var router = new Router(); +app.use(stat ("public")); +app.use(bodyParser()); +app.use(handlebars({ paths: { views: __dirname + "/views" } })); +app.use(router.routes()); -const app = new Koa() -const router = new Router() -app.use(stat('public')) -app.use(bodyParser()) -app.use(handlebars({ paths: { views: `${__dirname}/views` } })) -app.use(router.routes()) -const port = 8080 +var port = 8080 -const items = [] +var items = [] // const List = require('./modules/list') // const list = new List() -router.get('/', async ctx => { - try { - const data = {} - if(ctx.query.msg) data.msg = ctx.query.msg - data.items = items.map( (element, index) => ({key: index, item: element.item, qty: element.qty})) - console.log(data.items) - ctx.render('home', data) - } catch(err) { - console.log(err.message) - ctx.render('home', {msg: err.message}) - } -}) - -router.post('/', ctx => { - try { - const body = ctx.request.body - const data = {item: body.item, qty: body.qty} - items.push(data) - ctx.redirect('/') - } catch(err) { - console.log(err.message) - ctx.redirect(`/?msg=${err.message}`) - } -}) - -router.get('/delete/:key', ctx => { - try { - console.log(`key: ${ctx.params.key}`) - items.splice(ctx.params.key, 1) - ctx.redirect('/msg=item deleted') - } catch(err) { - console.log(err.message) - ctx.redirect(`/${err.message}`) - } -}) - -module.exports = app.listen(port, () => console.log(`listening on port ${port}`)) +router.get("/", async function(ctx) { + try { + var data = {} + } catch(err) { + console.log(err.message); + ctx.render('home', {msg: err.message}); + } +}); + +router.post("/", function(ctx) { + try { + var body = ctx.request.body; + var data = {item: body.item, qty: body.qty}; + items.push(data); + ctx.redirect("/"); + } catch(err) { + console.log(err.message); + ctx.redirect("/?msg=" + err.message); + } +}); + +router.get("/delete/:key", function(ctx) { + try { + console.log(`key: ${ctx.params.key}`); + items.splice(ctx.params.key, 1); + ctx.redirect('/msg=item deleted'); + } catch(err) { + console.log(err.message); + ctx.redirect("/" + err.message); + } +}); + +module.exports = app.listen(port, function() { +}); \ No newline at end of file diff --git a/exercises/06_code_quality/todo/modules/list.js b/exercises/06_code_quality/todo/modules/list.js index 0849e064..103f77e6 100644 --- a/exercises/06_code_quality/todo/modules/list.js +++ b/exercises/06_code_quality/todo/modules/list.js @@ -1,27 +1,48 @@ -'use strict' - -module.exports = class List { - - constructor() { - this.items = [] - } - - add(item, qty) { - const data = {item: item, qty: qty} - this.items.push(data) - } - - getAll() { - return this.items.map( (element, index) => ({key: index, item: element.item, qty: element.qty})) - } - - delete(id) { - this.items.splice(id, 1) - } - - count() { - return this.items.count - } - -} +/** + * Class representing a list of items. + * */ +module.exports = class List { + + /** + * Create a list. + */ + constructor(){ + this.items = []; + } + + /** + * Add an item to the list. + * @param {String} item - The name of the eitem. + * @param {Number} qty - The number of items to add. + */ + add(item, qty) { + var data = {item: item, qty: qty}; + this.items.push(data); + } + + /** + * Return the list of items. + * @return {Array.<{item: String, qty: Number}>} An array containing the items. + */ + getAll(){ + return this.items.map( (element, index) => ({key: index, item: element.item, qty: element.qty})); + } + + /** + * Delete a single item. + * @param {Number} id - The index to be deleted. + */ + delete(id){ + this.items.splice(id, 1); + } + + /** + * Return the number of items in the list. + * @return {Number} The number of items. + */ + count(){ + return this.items.count; + } + +} \ No newline at end of file diff --git a/exercises/06_code_quality/todo/package.json b/exercises/06_code_quality/todo/package.json index e3637641..f8b39ff3 100644 --- a/exercises/06_code_quality/todo/package.json +++ b/exercises/06_code_quality/todo/package.json @@ -18,5 +18,8 @@ "koa-static": "^5.0.0", "koa-views": "^6.2.1" }, - "devDependencies": {} + "devDependencies": { + "eslint": "^6.5.1", + "jsdoc": "^3.6.3" + } } diff --git a/exercises/06_code_quality/unit tests/user.spec.js b/exercises/06_code_quality/unit tests/user.spec.js deleted file mode 100644 index 886d3440..00000000 --- a/exercises/06_code_quality/unit tests/user.spec.js +++ /dev/null @@ -1,76 +0,0 @@ - -'use strict' - -const Accounts = require('../modules/user.js') - -describe('register()', () => { - - test('register a valid account', async done => { - expect.assertions(1) - const account = await new Accounts() - const register = await account.register('doej', 'password') - expect(register).toBe(true) - done() - }) - - test('register a duplicate username', async done => { - expect.assertions(1) - const account = await new Accounts() - await account.register('doej', 'password') - await expect( account.register('doej', 'password') ) - .rejects.toEqual( Error('username "doej" already in use') ) - done() - }) - - test('error if blank username', async done => { - expect.assertions(1) - const account = await new Accounts() - await expect( account.register('', 'password') ) - .rejects.toEqual( Error('missing username') ) - done() - }) - - test('error if blank password', async done => { - expect.assertions(1) - const account = await new Accounts() - await expect( account.register('doej', '') ) - .rejects.toEqual( Error('missing password') ) - done() - }) - -}) - -describe('uploadPicture()', () => { - // this would have to be done by mocking the file system - // perhaps using mock-fs? -}) - -describe('login()', () => { - test('log in with valid credentials', async done => { - expect.assertions(1) - const account = await new Accounts() - await account.register('doej', 'password') - const valid = await account.login('doej', 'password') - expect(valid).toBe(true) - done() - }) - - test('invalid username', async done => { - expect.assertions(1) - const account = await new Accounts() - await account.register('doej', 'password') - await expect( account.login('roej', 'password') ) - .rejects.toEqual( Error('username "roej" not found') ) - done() - }) - - test('invalid password', async done => { - expect.assertions(1) - const account = await new Accounts() - await account.register('doej', 'password') - await expect( account.login('doej', 'bad') ) - .rejects.toEqual( Error('invalid password for account "doej"') ) - done() - }) - -}) diff --git a/exercises/06_code_quality/views/error.handlebars b/exercises/06_code_quality/views/error.handlebars deleted file mode 100644 index 11fe16d0..00000000 --- a/exercises/06_code_quality/views/error.handlebars +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - ERROR - - - - - -

    An Error Has Occurred

    -

    {{message}}

    - - diff --git a/exercises/06_code_quality/views/index.handlebars b/exercises/06_code_quality/views/index.handlebars deleted file mode 100644 index 5d9be040..00000000 --- a/exercises/06_code_quality/views/index.handlebars +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - Home Page - - - - - -

    Home

    -

    This is a secure page. Users need to have a valid account and be logged in to see it.

    -

    log out

    - diff --git a/exercises/06_code_quality/views/login.handlebars b/exercises/06_code_quality/views/login.handlebars deleted file mode 100644 index e42e65bd..00000000 --- a/exercises/06_code_quality/views/login.handlebars +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - Log In - - - - - -

    Log In

    - {{#if msg}} -

    {{msg}}

    - {{/if}} -
    -

    Username:

    -

    Password:

    -

    -
    -

    register

    - - diff --git a/exercises/06_code_quality/views/register.handlebars b/exercises/06_code_quality/views/register.handlebars deleted file mode 100644 index 2e543b83..00000000 --- a/exercises/06_code_quality/views/register.handlebars +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - Create an Account - - - - - -

    Create an Account

    -
    -

    Username:

    -

    Password:

    -

    Profile Picture:

    -

    -
    - - From d1c17c9aa7f731e151244e4918ab7294b879ebed Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Sat, 12 Oct 2019 10:01:23 +0100 Subject: [PATCH 045/106] Fixed Callback Code There was an issue with the existing code (logical error) Code has been rewritten to allow for multiple input prompts. --- exercises/06_code_quality/nestedCallbacks.js | 76 ++++++++------------ 1 file changed, 30 insertions(+), 46 deletions(-) diff --git a/exercises/06_code_quality/nestedCallbacks.js b/exercises/06_code_quality/nestedCallbacks.js index 6d89b729..6624c19b 100644 --- a/exercises/06_code_quality/nestedCallbacks.js +++ b/exercises/06_code_quality/nestedCallbacks.js @@ -1,61 +1,45 @@ +#!/usr/bin/env node + +/* eslint max-lines-per-function: 0 */ 'use strict' const request = require('request') +const readline = require('readline') + +const io = { input: process.stdin, output: process.stdout } -getInput('enter base currency', (err, base) => { - if (err) { - console.log(err.message) - process.exit() - } +const read = readline.createInterface(io) +read.question('input base currency: ', base => { + console.log(`You entered ${base}`) + read.close() base = base.trim() - checkValidCurrencyCode(base, err => { + // now we need to check the code is valid + request('https://api.exchangeratesapi.io/latest', (err, res, body) => { if (err) { - console.log(err.message) + console.error(err.message) + process.exit() + } + const rates = JSON.parse(body).rates + if (!rates.hasOwnProperty(base)) { + console.error(`invalid currency code ${base}`) process.exit() } - getData(`https://api.exchangeratesapi.io/latest?base=${base}`, (err, data) => { + // now we can get the currency rates + request(`https://api.exchangeratesapi.io/latest?base=${base}`, (err, res, body) => { if (err) { - console.log(err.message) + console.error(err.message) process.exit() } - const obj = JSON.parse(data) - printObject(obj) - process.exit() + body = JSON.parse(body) + console.log(body) + // lets ask another question + const read = readline.createInterface(io) + read.question('convert to: ', curr => { + console.log(curr) + read.close() + process.exit + }) }) }) }) - -function getInput(prompt, callback) { - try { - process.stdin.resume() - process.stdin.setEncoding('utf8') - process.stdout.write(`${prompt}: `) - process.stdin.on('data', text => callback(null, text)) - } catch(err) { - callback(err) - } -} - -function checkValidCurrencyCode(code, callback) { - code = code.trim() - request('https://api.exchangeratesapi.io/latest', (err, res, body) => { - if (err) callback(new Error('invalid API call')) - const rates = JSON.parse(body).rates - if (!rates.hasOwnProperty(code)) callback(new Error(`invalid currency code ${code}`)) - callback(null, true) - }) -} - -function getData(url, callback) { - request(url, (err, res, body) => { - if (err) callback(new Error('invalid API call')) - callback(null, body) - }) -} - -function printObject(data) { - const indent = 2 - const str = JSON.stringify(data, null, indent) - console.log(str) -} From 9629baa4f1a6173590b2c97278d4bb785c965a8a Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Sat, 12 Oct 2019 10:18:15 +0100 Subject: [PATCH 046/106] Updated Lab Sheet The nested callback exercise did not match the updated code Lab exercise has now been revised to match --- 06 Code Quality.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/06 Code Quality.md b/06 Code Quality.md index 5972de6a..84d837d0 100644 --- a/06 Code Quality.md +++ b/06 Code Quality.md @@ -131,10 +131,10 @@ Callbacks are the simplest possible mechanism for asynchronous code in JavaScrip ### 5.2 Test Your Knowledge -The callbacks are already nested 3 deep. To test your knowledge of deeply nested callbacks you are going to create a script that has 6 levels of nested callbacks! +The callbacks are already nested 4 deep. You are now going to add some additional functionality and, in doing this, are going to have to make use of additional nested callbacks! -1. modify the script to ask for the currency to convert to and display only the one conversion rate. -2. instead of printing the exchange rate, ask for the amount to be converted and them return the equivalent in the chosen currency +1. The deepest callback is a prompt asking the user for the currency they want to convert into. Add the logic to retrieve the correct exchange rate from the data returned from the previous API call. +2. Instead of printing the exchange rate, ask for the amount to be converted and them return the equivalent in the chosen currency 3. The `currencies.json` file contains a map between the currency code and the country name. Load this file into the script using the [`fs`](https://nodejs.org/api/fs.html) module, convert to a JavaScript object using the [`JSON`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON) object and use it to display the full name of the chosen currency. Below is some code to get you started. You will need to import the `fs` module and use the `fs.readFile()` function which takes a callback! From c0aa4ed9f582fc3748e4f3bf7e75b9e14389ab86 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Sat, 12 Oct 2019 10:26:02 +0100 Subject: [PATCH 047/106] Completed Lab Sheet Minor amendments were needed --- 06 Code Quality.md | 2 + exercises/.images/jsdoc.png | Bin 0 -> 86935 bytes exercises/05_javascript/nestedcallbacks.js | 61 ------------------ .../06_code_quality/todo/modules/list.js | 15 ++--- 4 files changed, 8 insertions(+), 70 deletions(-) create mode 100644 exercises/.images/jsdoc.png delete mode 100644 exercises/05_javascript/nestedcallbacks.js diff --git a/06 Code Quality.md b/06 Code Quality.md index 84d837d0..4b36f4ad 100644 --- a/06 Code Quality.md +++ b/06 Code Quality.md @@ -108,6 +108,8 @@ $ ./node_modules/.bin/jsdoc -d ./docs/jsdoc/ modules/* If you run this command you should see a new directory called `docs/` which will contain a `jsdoc/` directory. Inside this you will see some website files, opening the `index.html` file in your browser you should see the documentation pages for your website! +![JSDoc Documentation](exercises/.images/jsdoc.png) + ### 4.1 Test Your Understanding You will probably have noticed that only a couple of the functions include complete JSDoc comments and so the documentation website is incomplete. Your task is to use the existing comments for guidance and complete the task of documenting your code. You will find the [JSDoc](http://usejsdoc.org) and [jsdoc-route-plugin](https://www.npmjs.com/package/jsdoc-route-plugin) documentation helpful. diff --git a/exercises/.images/jsdoc.png b/exercises/.images/jsdoc.png new file mode 100644 index 0000000000000000000000000000000000000000..0c066e007aad7378f538bf41e367dfff59bb3773 GIT binary patch literal 86935 zcmeFZby$>L*FFp=f}}wxEg_PFq;z+8mr_G_4d7u0Ej_?0xj$@cB_ceR(wa;~~bFJaMijp)g76}##3JR{QjD#8r3VJ>Y$}J_# zJHU}Gsu^h%6dYx+xVVa}xHy%Hvx5cL)*J;z=6!-ThC!S(X@`edY$clMS4^L~?6=Xr zVwy_ci)MHyCxdpE=F8g;OZoAPIt}jv^}ZLsliWthRT||BTdI%DCP1P3;OZa#t}N! zWBTXM@kAc`-546pp}gCIj2V7D8M?kq5^E(zVUHL}T1WjbgLP8+K$K$TdmDOH zfyT2Kv=7q3FC?heu%AS}_HVSmH5(=RxiC2Vi_%U8uZa&uQZ`|oH9A-g-~CLzgv)bYwhz+wOHqITyd2& z%WW*y(#KbWC?^DmG%ugj2fUEedqi0zKi4B zx29=K>&~^WQqP_1j1v$H=Aw+!{r>XIOSnfJ%!CEG;tJ>}If*hOOHamwCS_Ek$x5m^ zZRJ1Do|}?3vC9&62!67S;p8*ujxt~E%ZaT$t)~9$*sc?#(-k(cl=9L^E<9gok`>jM zyo2G>05t=>8&oRGS+%n{PTe z1yuv^SE%sc1+-{!2v8f&(F6^dsbKkq$lNBNS?(HZqgFvXp_HmkDd7LAd6rlxO%Nb` zkNCBY3Z_5PSWYg@{K&@&6`G3>57h9wd)%4}!fs@R?_t*Q-L1@Rrt&Xop9ek?52tSa zvF3?M@wTVa@{#TQ3sU??k*6S^E*dfV#V3n=Sz(SoDY**Qy37wnh*zRUEYgm^Um9sv zjz4!Fn0&=cc6w@$H+xVujE{jIlmW>~EQ!!h;NM%&_9@%yH?5HiI&nO*Dd;@O3{m%O}1)e)jKKzMQ_Ytb91hyTdk)rZf4xl(6L; zx$0sJ?{SGY9H9{LZ42hPac^56RMAMBKYOcI84xY0yw^XB|U#lb?**!r)M;Zn#dg});4qS zkuIJ^V3W!HLKICCbRBH&fB_Sx$-C{h;3C*BaFhZlJJB5<8(?_+xY|Tj78UkHzjOcg zlP9ikUqhdazq_>*>`7xwd;7h_QZy~?tzN0adkonUYt+V6nqL{sZdId$McSqDp3q0T z$k02JdIcO)`%~|$;N)dV71C|Jixi!Dh7lpDKFnZ6!FP*Avj4le6|P>?o>c1hha2d} zeA7Wfk{E0OnpWKB}>REeYKGe3hf3utKiUr(57H!!2xba&rB2l=Sy}57LA9xcGeB2Db!;z2rG^ zn?@RInNwox!|UI;r@5z|1}YWsk92P&AHTe0_r8UoMF=4xSj8vAlM0wd4L|6Y%#`{_ zo+VRA4v9wP@Mu{1~({pHCP{4nZ%ugEtvdG|2?*L6Wdp57RQh7N2G;&N?k~4N-aEgdvrod zN)pAT#F1fcVB`C#G3@Fh654A6Q_VNcr-sSF z1oI~p7m};KQ4e5!(@Lp>&T;e%7!J^<3~?@)`AxSv#D6dRpc<%}kaHSwIfYi|SSM2r zeN{EKl>Ip%FTuPv@0)Yms%*ayQ@$otvwe)DBuA@l9B2EU&HEFQ?N{R+RpGj1T2D%X z-9pD4UYS08l~X(Q5@yO_wQZJat#8rNbDBXu7HOAc)9|Hyu6$vB+Ak1c0GEPil0U<< z#i;7$3*o@4AWtWQk#{)TI{7Y{ZGCcKbhCDC-d6CybIVvX*!LX>+URm;aGct3o+5NR zaU*OQZ#HrkpSzl+wI`k9lYS_L5uO-XP6>gfuMIkZoE%*Je{>$dJ9>6xb>PYU#ZO@k zn(%5c{9n^_2{bJ&Um%+?!*RJ!sCG@iq9`BOAG|&dz zHtO1X>+@deJ;wuos7xC4MV0$f4sAtlldNUz<6c;-2VIBUU1i-2XZkT-&E)Bf{G`N$ z@#s@NL28Jm_eAdVxHZM*Xw!@*y;cLX=K1FKLu61gUa#Gi4CaN>&{9(MwES-=&i2I@ zqg_SP`J0N%$}^dYUzLXD6A&4hA1l`JSAIHgIbWh1bn9Yb*@zxh(W4UNnzOzv z-Arfa(G4oKk@^u{$8ot@b-0Tq@m%t|p6zY?9pZ$+K2QR_oS2-o{QNhC)F%JLPUg+h zuo^>4P%@&Cv-o(1_nfRV?X-#8g?IqM7RBMv?`!5acy)^Ij@?Im%p7ji=yKmpwKF@j zPoQ5bq3wzq5mxWqe;BknXDsDErIV%qq@wXcb67i-csYzNj6d<5S+`^5RbJ(xZ-S+! z+Za4AFmJu%^s;$vJIlPOpDz*4vQQh?DAv66rEfTaU;A+>qv2Sach}Y$S1DJ5jZt}e z{i(spwP;7?$f=&X~;#(yM4XX+0^{G_G>r=?-8PDnGJ)4E0`32XHiz0KPUpo6N za=qML{KFdaO1N_Bj)u?0ckM*&F#La>oA#KdcGpRVM==Y_3F`T|Zs=@Qy zxi%=_~DU48#8r zv1t-wEPX_GBVU$ui?zWma$CTg?zr!L$$f4A)-NsYi{4i!gQP_~_H*Bwr`+T{w|jTH zW`_J(FT8#ZcD1~1NjN*+*Ia05G`VH=6B;l-Dofx(8I2Fv-p4j+LRM}nJ>0gNPkJIYtW^W=;qB(Vpp zz9*_EZ*T_&(0>e(qYQJPm>2}FhxDfSWa!-+nA3>(=--vn@HJ5 z4INhfvZta1U&hGO*?Z}Qz}n8TYDEiPeJNmSMUMb$ipCN zs$ZA5+6YqXD5_A2J2;zDaj|l;vQZ0RQBhF|IGb7UsYyuvz8%;Tq_%Q(b>stqJUl#D zJvdk$oGn4md3kw3Z0sO*b{60Y78fsjS5r?Gdl#C&8u`O|{0k#9i z40wjnb52fffnPWLpHu&O$ud_}`EG zA7_5wDF8xt{eKL_U*r7iC@|1MSOTEGCrty>zJ+TK5s9d9s2=3p`(}{Tr+R&_`en)Ws zKA1cH>4$e80txak-#rTr)lp$CeD^Mp6J0{Y8<&grZS=iH7cHKtspL7^dh@67)U&u2 z4oi!{w2O?pXKh0nX$-Df`ft%uZ{HI^`A>gdv)v`2hT_F>CW-#X^T0ihnD-QpsHg%^ z&@lhgpSPL;CVZu{1~~tzdE~JGlN8H;YFmV=6zw+5ban0Je{381yxTB=TmN{{l#mLF z$HYS{{!b5}g04OO&pije8fFPfr>jm=)1&{~GvMi+oJ0T6ZK?nf9dyk6?!JM~|1h+u zw=wg*?)>A)E=CbHaxHt-;D3662-^V1KMgw7JuTG0%}QsN=l?XZsDa>&f0_}L*OgfJ z6habG!=C)p1Ar;V`A@U`>)3y%{2yoazf=C7R^oqG`F~gW|AD#x0{edg-~R&p|1V$u z@eUf3cDZY9wQSr|ZYvf=iC^&Zu?3~G)`Rkt`rk&_@b{nhzo>{|oxjhymU)JM7LSfcPeIv0V|- z?C!BMX*50O)lwdg`)@vZ8z4~n1t6=tNSYz?17I|-NvF&21cGPW9^*>=FT8wfk`nUk zzz3?kz)iV4LutG;^vW6WahsbDG;`m5`tn82)wPy@QRCSL3oR6nkAaZ-9_Q=QQs${P zpQz=9fWy^(^fDtxvA;Q%W0gvYY)#b1Esi1>Zm>1LEbEM5@PRXkwGwxIMb|E{H zP3n=9$}zRIoU#*W;4{gfk>}5!M+OwzPO+=4ru8`w@~&G6C*{Q>))0!F%q@nR%7|7w!4UxINWg3($KD*y6jHmALB7N>nK z!Yb2xCMn2dnwTz<0TazZDdVZJUz3Ul)5%skJt)dsRNEp5mrJeLB}rNW@_Mzo)_zXy z@^o`m?-SqO3{T`OKz*dGdR%6ZlYxrlkD@&pd~R~>dgl?oZ9ny=YCIe;%S}qvBFgP2 zD__q#BI=ws^9JY`8T&kk{poJQD8Q4dA8$WZOku|ExYqK}UeD0i{t`}6#8lJuVe zUp9}N@pohZEBv}?vqym3xee@4og5;KyJ0?s0eJaMJR&A$k_?pqAITBN!3vaZT$D2j zxGtwN^OVx354V_d6qM|LyTxuy`9A7r4kV*nasKtPt0DGe*=elrm9-#>^ ze<(4Cbs)uvnV9FhAFDMpogD3LM@^^je4_^YHfG~0wM3Bd6Ioddx03`0b-jE=h&U<4 zP(piemI~@F_fvNmeTP7y!l+Fv7>C?`anu9Vqa1I!AL^|N1(> z6rSc_2;D5nCv)2c)7<9fH;iz!h2_j)4Qsfb=TK_9|hVw zAo;TbfMH>}R2GJJJ=bolAsr1 zrNX>EVS~KL80IQF(GO=`ltXN%BLz6ewzF=-jJzgw18(m;QXr|! z7HvlvzQ^AMU^Fwe_6(5Pm=Sk9%>3O^{aUVj08WS;i}~+;=p5>wuJgArerLj$8c6uZ zY(8oLt}i}F?ALxO(4+McC-~WZQbyEC!nbb<-7$nrTJcV=q~&dGOHDHqurc$?X8CJb z{xUWkdqc~ij0E_MN9;p-B{OXWwsgf#tUqvU0t_VpZcmW=0g6C8?XuZ;9~2(D+OPd6 zl2I-99XHPwwzK^lUob=qLL zcJFUC&7pVm-N^n$0PdhNVZeN%Ec?15daDs%84O!UHNq2SNNDA%3V*c6ZT7G*9BvP4 z$o9X8gS3q}sXA+x-EL}>GjM)*nP6K_c^@exNn?5C`g>s8t zR6G;T%*>IF>a7KHnDq|HyW!G8$DRJ?(kUfV@NeFOwl;fqWDOLXtU?Fc zEysncg+ISoUCSF=HXmityedmP`n5W`o&l=?75?!xtyiOuvZ`q@oZadN3V6Kqy-$^0 zeK(;(iOAVmLWx;_qQ4m&U>q*%th{b=H@i*rwXt;aedxq#6^PNKMD4oh2Xqev$VqAs z<3}|vb|+R3w;h(iC8GcZn4I8#XYeiXe}dnhm^GSDp8o+zi96^oEAk*N-=0hZDx6=3`r2)z)Jq zJslVpH}ymyBZKm`{0QSSZS7R8BFQkOE54+-zZZTBK;G7m2|8UP(QS}MY6uvV;PLFY z2Fw0duOnO^fPKx>|OeOE!3nlE}mm?%k2n&Cik1mrG%!@(KzH86^$YaE;3I zU5|zSFA@Iz2P?~JSufFh+PLj!pADToDt@>_q!6;?!O@YC86K{1vDYFQxlkf}Z9u=d zxtXF2!${o}B=FZz=5{<||=(y4VAcYb>&?TKpWJo#*AnyqQ>F|5EU$LI|| zPonHYF+GBBCf?Ttnf+7HcdvDB<_X1Fk(a%6Bw6~l z?}YVRmvp{5a?mRc7wM7@b@8Xw-8y!Bc!XAze6Ew<2j5`e_lepWCL|A}Zcj%SYZia~ z^!}A$7|ynqL#Fl5@Z_46IAtM@+BsdeAIbEq)%~na_G>eiw0B@yUVeC#Le%Lku0tmt z)H?V*=1E4>x9$i$F5N1`_)VhjRpugXqv79e!~4ujtln>(D8DUV%9Ll=sBsdYdd@-PdyS1RV9VdII5;@W5tq2two?w%0yF)q z8>-7zJAea_pV7Bx=buxxI637d6#`JY+N@V?J%6#rCP~S8yR6|+U$@~sFo5V8nWLi* zo!7oShS~euTq;~FhJ0>@Y=wQu62G(6=R2oz)F3TQd~)I#`FEUY%OJv*4zs%r<0UFZ z3Zm`+Ub}De5IQARXm5;OgoEEcn#{9;2kLAZ)nr`%dv-ekrrmbjM}fiC#mGxhLlRiCi=3 z1?*hTdTj(ML8Bd3!q$4XP9F3$SSp>6xa+q;l-}NbI3MlMZn!eb>3fGgdrn0c1wDpH zVP^G0)sWBYkW=^Ps+i$^F@yc61`qQe&xeAx1`s@6*8kHJ+DKn;t$xu9skO+*f+H&S zJ%J_|Fj5}-*n$i{EfTI~mAys;chg3;l&JYsrD@J9q2)MwWs)sT|K^J8w+l(;CEQr; zQQRc+5LKF%Ouym|17}%|GegmtYiUwczbnsBZPJp4A;NBE4cEDa3S$TGSapz%YI~`) z8k=3gy0jpU#n8P@*Y>LvN7dh)qA~_)YnJ!_7Y>!J3tc&8v~s`&8`NTM=Ek-7Jp6`# zf7w2f2u|hEHDkQ7!!m9@k5+EE2?!YAf;g1ipV}r}eYR>JA6~3uBa!RF8K zJzkH^tZ!vWH5Z$Fhq0g5eOD{dQdDl~)}oN@tWD3LJV61t+3rLD_HPkf1oZ&`Je%Jf zZ^Lvg2m4}bVb%P+>Zi1pGS1$KpCkwq1|puP#SAwhY|FFHK5~z))TzNb=#TU z1!n8taeBY;<6PU-8?&87KkGcUv4i8k-Sf1+*GCXFfl7!sYY_`q|_s|50TmvqsrKyA4z14JH z-R+&G(c0R$K?k?^eFgYfv_M*J{+CBTcc@fz3g(g+;^^f7NlEEui8l>t%(gGSt;ffKxh0#d7-tSI}4s-YR8|?;G1E}MH z0WyX}hFG?&$mQ`m3oAcPjbpXHBX$+e0ssh6wDnZ&gk%tm#rku98F73pNnV(j;5ckB zUR{@cC$+8m;s*n72_jRk4}4PJ(HLG^9`|EXYgeak`)zB(Wo7ABZ8mY* z>x`3?g{!Sr7JX*FLWo)z5l6jQFtC7|!wx3I)Mg-L*(IUtJ6TUScGd0ZYp}LEH=9${ z&8}PA=w+^Oi)W#rE3;0D<_9Un_tANEgljXqQ=2>l7<)tH*3Bo5YOf=r2DR^NcQS}Z z?so=b2UmWK?5thVsq>D&A?NF&f;A|Ez;n%cS+i|FGJN>o!Ck4MT=yAy=3L*vvo5Ob zPEMP03Zwl;KJ^|ZaVOP#cc!QKw*fpMSAJdT0VU<+?9$%Ep$C6#Ah<T0`9{kFgNu~3YLtA?!B3mmbCd98zo12VHDJfYWa?;mhWmn8R zR;T*yHM2GC48JCQQm!2@0_VYmwhBpb(I(7}vCqxxk?sxyv|OEAYOk%ZHvG~rliM)l#!mgo zAymJF5AA55hcYRt_EHJmu|l%;X723k>gtNUokYEGe>Hg#yX#^`KwCc;<{REtmhy_T zL3sBE+3kB@{Q)CL5>i3cZ)w@{V7Tz$dj4FM^ts@eiv0vy%Nub=n|{r)O67LH7;M;dJt;LhR7~9PM}yg}g=i^o&3-p>v4^dX62j_Ip_V$7j2k zKi)VMSj&v`+m*;2S$n~4ran){lMmVC)V*<1?&HqVx&Ij6VXanB>JKYC9}y;dgMyaz z5b#P>ib_JPw46%2}6mEWYzf?U6Xko3Ysygh1?>7=X9v>qc z^O%Eln3-L{(a_gXdFCC{k2ek~T{sqm%I4dB-`xG#74tx0=HTK96z}Kan(J?LekX&Z zVfOe^Y>56-jmMQDHx$`vOe>{DMKp5O>QeFHEYu8}mMhRxXA$E&Y-e`5qSq5t&kLyW zZGfKQhwz7v$rC?Z&d&98HRUZ=6n9og&Ag~h@+ugUm8^3Sh-lS1D-@d_(MvC;;2Qh# z9_PrbAbq#Eu<+r%+Cv_yB);O3dm>THiD_ zWx;}eToR49SRNTFHlQf9xDH+;Fjf}#1P$e`4aGFmxDUNlrKilh=u@zp#90Zey{+}+0yGvDq|UV`JdzVuNI zX}ojyt=P%}ComRfp7zuc<9q9oXoV(Rmof6Lsk`GEkG)%N>rFmftETMZ97#iN7dO$B?GBk39oNuK98TN z`#9L?s-=}U>$KiB-H>-FEabgE*WdzKod5Bp+k7CUuGwDQg*xhykOT?0?FXizDBO|; zkgx(;n+4KKAjjwyq?woUj{x_JD^J|Q&CeWLi#KX!;VKYosEbtW?-SRP*-DIQCZ{`` zx_mV)e}yNL81lWZu8$zDVXtVjj=~tZG|n7!RW(qy?R2ZTB=1;*}PnPS{oLi!ZbefSdBuJd7DgM#DE98(^6{iE4c(ly5%pCL|jRpeymy!#(vZ1KD#nl z`MalA_Y~l84Ht^vdWJ-GfZ>}>jMM}|t~oI_V!}Hm!=sRL+1 z^IC?<+h4GGG-H@-)`YMoy#~MJx^8m#7l3_6pLaV5NS7BU{1BM^xhcA#9Gavn|t`21(X_a>uJ1A4oH*5GbQ0-8nB(zAk+dEyEN60Ac;U7cFEDyxDyt~C*e=i7_@Nyj zVLI8_**NenO_P(;p#CS&iTAlC)AmF7fKHX^y7fo=leu4M!$v-MeLx5Gb35?6a81A1 znCq`Kf#(?n+SS05FSkW|-Wk%l|vq0^2`9*`lG@%f~@g2pu`RQkt z4*jGaT1l6Lf>A2&!e>=p{1S@0i|vImea1q*<(~*o1nSnpS3}I!LdEwA`0DqqHS{Q2 zM&MK&6Ay2AedU^4I~0%o#S#1WKWAh029~e$t&O+~hPVOYW;qaU$}iZ?)f-+Odv)cl zER1Qf=*x8Ywc)P1vsC)9&DB^^PSxq(1cp|<>X9i+;d0)M^;qyR7CQey16#HpD`r5{ z`IQ&9?XY(Mp(d!q;Hu3YSTB7*nJ9i|ZHF?~`X8=I3!v8eJiG}Vw)NSMM|p;M^Jz|* z<}Ra%mZ-B4@kwlZi=|ymILsoZ=l^XWn=FH6oZ-@z~Y)zK}}4P2p~9@b>yW zyZLR(hTKLX^9uNk{}f?mAPO3?kj8ycNsjNCVatgl(z}3RPuV?(QGR(B3Wc-rc7e%! z$on77=OhXxyu~3x!eZm)2-wN-&Pldp7@!y|JoBh)F?{eq;HF6P^scB;l{Y-lx8+F% z>j=OIki6)L|5ei;9fCjv@G!IdTn#3d6}L7Ize>+2GFg9!pvowWpgr|?T%ZVI-&a0L z!ax0Pq~qx$ezZx`h7P;?IrM8m`nF8W?9&!^o8xqfE)%y&OgrlsBBOjFr;@&^A}MG| z%$h~N{@G|WpZTkA?(ZAG>U+Zi-ZrdWhOKpZGkL2kub-M9>d_%-wGa{uJ{IKVfscqi zT!Aj1Tpexq7A8qO>f6=3*V|dURRbtdUQ6#S%@%}?Zqzh;K7IZyJ5$fo3&)_7Zv zNGy24g4U*$3(RppE7IIQDD$k-{FQYSp+!oi^V`52Qa9O7#Zz*6cI6pTI^&S$Exw!T#mLyh=&siuiHqgj=P7`^%OgVv z*Y2qr%T@n|1r{J(P^48>tnlb2#U`d~qU@1ENlXU4Qm(Aj7lz(%0%Zs@x!_Y5J&1*w zSyItqvO@&~)Jv zkr$<=fJvwQg}G1h<_VE&8PmbE%uXvaDPCGU1?4WApm`cMLiQCtEHnJVsl&H@-dD)M zK|KI!w9z5vkW=Zh?eB0>jgNY}3k2ww7W3Dym11MFZ+co3l1JEIT@p0V?6xFRcGjjm zHD4c0uZHv}O;te($oO1k)RfbrA5Mp1sw?Npd0!R%Qu{ zcK;+;a~*?VNDhX%U_XU_TVN;NuWi@_5I$k-3ZZHS|bwI!gz-Q+!0X7xYdyTkcpa>;odP+G6nLvgK z!8A~zte`K#PS$1)mGR&AdguY0zkdK@X7XBye%MC=@*^e znM+oud;a}O5PrIcZ-c#r2Df(mk8p!FZwGGrXO*1;Qy#LJ6wv=W_bu}J zm(rjFOh`*z%s7UEl%6)Ls>T}NEUjtQi<>Ii&gX*J$9)|2ZjP^}}i zl8d6FW>2hqQhq|RZZ%zoUZ8>t^oUCfgnvFz9 zs&NG5%U=|u%{#6WEwQ*fJT^!2@+98hX3))k8~;pqq>6%+l6a5qdT=@@D z95M9Uu#Edha3EMZo#om2yIxiR@FVMA&q)=0_$u^X*0#F%{{Xd8BD(!9UW(5fog%xK zg$`q}1wu53FGRd4?tBHy2IJXvo9cm064HdR{WhQaT_!Z}Eb2ysP|%(b0FJoZ@V7Qm zrjcvfedn<2T~@F&KhbR_sE{L-Y;e@0qP9^-?Q$H=5-q3ObzC+Y#C1k>)|&6b!Uj$R zYHr!Lm8ECBAn2?;qP8Y^t2zB_Yo7=~)t_|3TA-YIlT>`cKQYcPRtOg1$%#hIiWobp5~{YDu zQs5l%Gi6l6CVYZ|0Fi{Ko$k$9dT+018Y}O$t+N6;>#%}(OlD{8Hm<|$dBZpOiu%QF z17R?T-5^Tc*kX2U56|nzYq&v}c)LA7r^!T+)l4^iS$;r25c{Nqzw13-e+4+(;HD4I z4{hT8B;|=@<+|sH`4qJlg{ri$^D1}PsG>9Va`@u6*yoZfHLPniZ?T=(1b@5CPH{qo z)|zI{!i@!EwNxz`AO$X-0+e@^qp zZB~{5JAdP^Qi&yCjB5}0T(C`uGb4WY=UJ@NojE3J`$IbUL~qZCei`(kSC@o*1@-Wlt@BIYLZ zX$x3fiY5!|EBi9*<_and7|f6V+5VN^MBLOMHxSystn;1fnnTBuQn-y0lH_eyX-ki}9jZ*Q*KY&Rh+F1kap@iRKB z`3fgLJz}aBT%(Y2m}ooS`dK#@u0d0f>9Yq0&zBaJ3m52%=|Y6Bs<8Iktal4 z@wZ{!<3%b3kX;A1woQ{}*VGn4pf_A6v7#r{qW($v6BIFbh3S(s=8JT7y$YKy2$BG! zGAbWvK;&}o*H1YotO*LBIMnbl0Er1708>(rCje0+7futE9O*~S=_oR}hRqGuQwc@8 zn-3(mKnpjOlf#iVwIY{JEKt0YYRe&`&4Z2Q;C`JaP_2l*zCIu{fr|)TpFf1HOAqi0 zzPdDf|Ni~+S@9QGrSt73q(By3n-hv8t&Z^E=|5r?atK{6rxr}~#vB*;Z@$hiC-WvC z8uBCPVs+0ZVy*MCapBHPFCc5BTKihEa$MsjgPJ*cV};8YH;nrXp!-5zLvxTY{xO2 z7Wnmh@md>X3!KxT3GfORHivoNwTB2?rq9T>WY4C(zw+;$+dk`#)rgoE|jG# zsum7HqpTXyZ@{bP--uhxr|^!v^0yNsVi-Io*dPpMM(}`TV7>bRGfZ*0gUn|G{uS3} z%oRudsd79PVIS$~RNlu06Yr_&1+x|T9NY%4qX8bdvyhfYed4N>uAA(SPY#)ai_3@< zO764^TxwoitQ+Ilm8q?gC38BZWeLop1BS&W02o%5m67xZWW3nKl=nAe@gO~Gx=7&W zz_crcp`gNgR@d^>u8nNo14$Rw#C|=Cab2&CH+I$AR>7Mw=^zFsd~UAHFXHJc!*4e0 zd|)dF%I+!CgbJ~#@Rt2ihti%) z$|bSdHAXoS0g`EFB~V=#ob5&a8cFZg%H#j8$DBu6nJZw(nk*o{2Icl^e%=DHq`FYO zXMzWjTWa;5@$y9%#aMY5kh-4bcRx0$gKEEzxY0hZf9Hj+2NuQ8AB#9Uw+gX+;W(1h zNsjw)HKxB`zUrBsP=WySX2HRtMkTyFDsDU5jrzI%|wkS$&yogoIO@w@2fM?=J4 zN5LF8(uJz9?hH!W2ogi9Ny`wx5I2!^a+!XoL5oDfmp=vHM@DkThh+b#GJ=?|D=mjT zECm84_|0K|(Baw&_)e%}@I`P~3jxqmR>c#W1e0kHccwDd%Efc+d=Maug!?){hbGoV z{?H?;5oE8u1pvpes*&jG>5)n%=*3r{mQ;rX==bAflHV8KR(K;4L3K}a*$g|UD%l2O0D6bK26 zKYgBZi1kA*$DrU8xo$V0+>3R;&4x^J*IS`-JT5LSPh9$lLA;bi;pS*aYjb9w;Z|py z@^JzYOF3J7NXtin(T@UaQAKor9pmr{iVhnq)*QPwgbctXr^5b3{t}f)$X~|*Vy2Wt zTg8~y(^i%aVJVc&x^+v_*q1NsREJcNUdvWNF3H#xW!ykq ziDXc6u|%g(e096KPHb2{VNU)hsHqG?_FWmB2C7vzVCW+86cI~%gWEjNBobf)WOBZ4 z)NAIwKkn_tjS4@q<%UY4SBc5cEk#=6+k9USmg0X z=5AtuylUX`?hbJvxZrjs<|Hys32C3Mw`)1}UwX_7nSOB=kEN2~U7gA4F#jzirPS$N zM`vxp_hlMsyd>&ad}P%xYK@-x=nXWQQb4PcU1NRJ&Q%Jv4Vxy@~tu|Z6{8>cwU zNq)`xIR{(*tiMlw23t;cQJ}RO1jtyc@F?!}<85K`Xf7Yv)#`YF_$8B<0BvTkRI+|{t=-@Y9ZjI-|%d|Ee*vhVVj1U)X@R8*h zd*|hdi56lEJ0GAl>TpGUh$O$;u`NLJ&E|r?F++E7l&f9wE5rcL7x~q`1f11H)=F;5m20QtYe(Pj=8ezL|8^LPw~@tMM;_I!AKEa7Aq=_bwJsEe zED5zg*r4(Syfb8`)jsKE+q71oVg8=B$#pwI=%9h0OrpK=30R_{FO$jYh^mCGc`oSv z1NGX`;Tsu^z~Z9t%&cax$uWkaw?1ZUh$K4 zuzJ#Y4FJ(<7G*D(0TBaCGd{FZ6k7c`XJxCIZbfULU9M^Pz8i7M5 zU!96SGf6_ zFBXv6REl?(qfOMAHz1|tM`Q^^2LjcU@4Oe6E>B3E%f5tm9@A&~KIO0=k)CR3TYb7Y zUglDMMzD1Y%`P+L4F0BxviD0w>Wb%~Q_%;-j^R?>hfRx@HZ1p>nS=v3hXo}82W{=0 z+OqE@GKx)LnAF&)ll&YK3jErjnW*OP;xVcZ04qIu^h?Abpalqtz^R4Wi0ET>*T$Wx znu+CPMxCak$eGpp8T;=>OXh9D^angpEuO0_n~MG@;cK%-4?^k)e*_`G%3Dn{h0*!l zcjAeq+nM2~yA$btK#l$CknltpR+%BOL+9~=zeB87rf)HN{)FuE7vf+#PD7yNC7I8y zIgR(#m3r>;9O=HM_3;7w_OY3yIh7oXmjx$q?#0E%9(VjTSC$s0} zLE!LQw~~@vnV8{ga1;ro5eW5)jN0_dCjf3a5B%;zV7#OP{KFflQab$f5OT}gDcQSo zrD1{9Ih<2TSvYUm4)`6xtG?*fRrQJj5Ru@RwqZu^0Qf04-9z_dOz8k zv&~y}B`PebksIXGwyMdJ>whypHDmo5$WL;ec0>ToxNqZmMe^$r zu48H;A}KL8yPox)DM*HqwO+d~ub1hkqeRc(G`rQm6*WNR@2n;Ce$D-B{%!+BuhYuC z>IF)G;%!WLa#%4-#1+`AnuDDu8yB{UEJB=OH+SZzn?T6Q%IdMT>vCH!He!7pD-7H1Zy5_FVpvWEI=H*BMJ+jfoD#iHm&cuKOiQy^bXfGm68hfJpvMG z4)X=h8$V6EpSW#}jt3TJMY4JAOdcE}@Wb4CfRqBivf8fg@DDU_xuW3rRxen9ly?b( zQv40|uDLx>i%@1}X2u7~0a9)9%1}0~2TRLttL2^9E+Gli>$Y**>$MFQeU_P!MZH{o z|E*p>=hcLyU!H&&S`O&lKz{0la7r9x-~pW+)bI7m(0)E(7xbTiB+g3K;2bW@s}OPb z?m?vg5DAa{ia?t3-;8YuV8}Gr_fe2i?K2g?I8a>+Qb^tU;v38sCl*4n=plxqg==?+ zN0UB{yjN4hE|jx6QcYr39eEC_OSz7X z2W?kH0)?xexB4-;Dh}U21Xp|P3+-N?eH~11F&o>eTe6#Xa$_MJ!KXMb9j!1PLX0%u zhXtqK5UyClzfB)+l`IQHVrlmX14WOse(*Ajg5bJu%uqa=TLK29`V%3wAV+)d9b7H8 zU8Ab849ba9Md;69-yB53+o^1+g_5Kv+@tLh#kw`k@htk|jyl!c9T)by9!_WFbIy8j zo{P0qdp0uhU*+0JlBl8ruw-mGWoOD?zDy3#fiZ_V6IpJ)hCi-Z8FJfxqoQx3`4-?% zEVCUq0Rk7JD5_a1Mnr_IB_`7oc|h9g(6fRfRe-Ac+8BFJ3N2>7eLoKptGB=&FsHe^Trc% z^V7UvZlcGfG{A#6+|V`$=z(9|*o-V7Vvgj=(>Gl=+u(#0fjLIyVFpOJtTy(CNf|`B z3kuk7Tl0mnrt^bM^}taRKmqtS5+O<8-+K@n`-1EHRZk^ugq+7TwY`yj10o8b_`_-6 z|3sT=2;WCkO-*giV-=ig!l!IN7XF*Ea|4QGy=lRBvtO$MS;|8JzM63YDl9LwQvEOV z?b=uVAA4^ZR@Jxl4cmoc0wNL$iim_DAPtIi2q?V)MVbvrH)5gEAstFeOE-ujNOx|+ z05-6JE#2^pwT&a(=XtO9(|f%i?l0&1%UOG^ImaA5eq+prUh(k~>FIBSB%AyxzMM~Q zH+)(XUrblXH>J$DyUc#MP4StLz%V(xe$B^cgCUJ4abtXD!({D(S`LdY^*^Le$wl!o zEcRi9m7nEnt5FshFPbh}RNScUYad^`%>sF|rmK;+N*%B(Rt$hMT))_EV8~(AYa-wD zJ?`a?p$N;%;giJ1s&sqW4z-&$`Sjd;52=vJ_$-#%GUwF>o7Fp_gjTiRrPoJDO8~mh z{u;q8|3Cw%UYdiNZeb($=f^o_R%`EiHwlUDF3OW$mnaS^FH}kkYaRXgyw`(-rFG;T z^O(bn>iKgw-Hj(zQ!tz6`HdEJOk88NGg)sp4sTkb_oO+vy$z$~&F~1@y_ig@d|k6o zC0ox+L(cWRqB6I`+@O6PrSK>n(}A=I$79Ji46X652D56L)78=5@`Ht%_0_xE`@Sh_ zJ}mqZ4}gX&fa?X^C^eXEi7KU3EV^D75p5KgbLJ}gneNJ5zAm7j)!#A{an9Mrh4JwA$0Kt)l1^4e5>Q#Pu=a%|mhz=_*w=|$ovzMx=cl$u^+$oGeWynp=ooyCxs z!IbVd6eM&@AaLsx(F0u_;^Q*md0(ItZ%D-=OUHC%NTx$Ten-vcs4~TMeSCyk>I#W3e)&A-%SHW^ctWomRIpI7IRl#w*bT~_5_^w@`|b1ISgF#9yQNkf z9P>|4F>8o__o$YdUiuDQ7x*RHxTpoZnDZnH)7tutFY4;ue^7k~R3yN9N|p+%6X>`L z^035rd}sgDkoJqb2cCe)pY|=>gV0u}8`Rn-(S~P#N&nl({M3SXx$^$X>b{4BXwLk~ zQ_|ne`X_3p(LP2K!s&aPP+8X20cV-QmP+PN1@ZTr{%7}}_^9sG@!tyQ_jf-mfB@&= zZdZw>%VFcBcGs& zgBPD0jK@7+pTMKsht578{xY!!)j;+r;dPE5i zO*TvA5XkdE87Qh1f1R+AKQsV>xjBLEYZP;0_CkJs%nE$oHvtNSZl!#zzeG~)&GO$PvwA*ojNrR68LxyKKPbvbSvTAUVub+FNy8g0e^oZ1Yak6H#MZUjaG+}VIjhks#8ep z^+FnU`(?s*>dZEMrHAYg#~Mb+Aa2nT|GaLiT0tt{JlDP30oU}01cd(*5(l2SSt~V6 z`0G8OJ2Ct9;Ja)!wQ|u{MIJ9)|DjJMlNs_J_21x z>jm}GSHIL1s2OyfX>7|DdcvNN&Tm8h#&u*Rd(}Z9YcI0c{hysYDN`H3S_PGOFl&c$3RN6lnc!sdVf4Jd55p1woBIy`HJsN1g zPnbO(EwxQU(tJg{oeYJugw<;AhgBiXwSOJ1axttS!4(XS4(tLyuZaVKky4*0I_^m7Ee%`woCm;L#_{LN7RoKy^Qsjpn zS~;ZKet2W=AxYLWQC?~RClz8Uo-0WVN&ddRH1Sfw{tEFYE?i7dNiQw_UFIwLvG3>^ z8tCzBd7VjUe%40A4vZI%ru`3oKBwKK&BHVqcSUn8U~R6gDa&@yh1+H##55<{c(Dp5 zN+3y&hd)FuhDn0!ma)=NBsyr*qE z{;8$ln#zD9ezy;8td}jekWQeiK-$$hzGo#L|Jnd(%9CU{ULCkMJo76U3A9@8^7Ut~M))xn97Y8hr7hL|fVygoqVTx7_ z__i)fDDHp?e~7Gvgdg-tHD2AHqZ-}*P9BwBGGk$wP#SkTt+M<_P@ zKlf_1Lx%d{o#SL=iC#f2itUM(=a3-+FOg+~bo36ai{Z8}Tjaxd#T+DI{NS9)9b&D< zT3a)991Z)&FQZPQuQ$hQ;|H8)+We#AO?t8{8amQY3kO&P+YJeQyWPt0(lTeUy6rC& z|4>^o_dPo33uA^S`F4pWc{?qD`o1-`h1Nvf%Ae>yl zeh<`&IW}b!#$PDNXGJC8|B+VoDJgdfBH$ z+BNDFgF+?N_-V3c$BvG&`QEdGxD5>!cb~JzIqH{wJ%|8$CAt z&$@xS7!V*#dYu95Hcq8Gq;fT60DAZM*tOrJ^R_#+vM0y|K|T&;|DJQ^j5IaBgS4je zr1kO-A3^6s9{rf4ks2y)ivlFYi*H4jbK8eGEkjG8swSrcf9K8g(gmYW3~!T_Q3g;I zW;0px@FtTy!#wf!&F!~0EUGE<4d1Ri7kV!c>tgt?`P>HrLPKAU7mr86b^@jY0mo|8 zP8WY*@+^hCV5=sD;o0O185MIcPtp%n$oA9G(tg5U?6;_snSpScs%cYuN^AxaT8@3u z81Imf)1lltukHy<-R?-~1$AXge*LFC1kwhk4eb4{NXGTM$0vSS+Y_~U;hZmEM8W$= zSjc3N=e}*~UL*!th#C5-m`;Srv#_ire>?63@E^3|;0AqTp?e!{b-;LiTyVK_R zj?)a2*Z-x?n-=yb8_-awqon#eZURk2|wv+xOyOb}!cS+xCZ+ zPHG&~#YA>}g|zMjI05KQfg$2;Qg>eH1C#?IC#M4H>+4ONIc65uxwGTUzkTe{ta5L3V9l4JUb>!jUjei<%1!e6lzFf@~BtDOQWt7BGiUZDzkw0FY9c?$Ou!0{K9;uj={rQHlaO|M&k!n%bcF2YUK7_WfF~-B(ZjXmaJ**M@`1!r>sSpSgZ*d z@CyR+2`^ zoVsH4kuIN}9~pXf{HC>T#lTP43|d@HaQJ|Nvtg4Ttr&t?9ZT4}&9X*u)#=5zIeC`y z^HRagb7zp zGz&`gJr|U2W_!J-kv86PRG_mOq$-Bf49)b+c$K3ZR#bZm9tKz{J|>ZNPafDyROVl! zI8bYvp*FT*PFA=)LSe0|M?p>=+Pdx+^_{2VW!T0|FMnHS?g#IBO*=2vLZzY%{KSPx zUbX*JXFwA}xFozwi725fRh99H`{Ay6A%Lq(<)i%C6h($H)j;N2lO!dH2BPL#_dZ8#w+w3U}zG$<2$H1Tw48`_f z7zR;5%AGK6E|~tH#-9y3*yCN+9g1{jv+mif3*q=JM?BxzS46U)?o1X=SK;ETY5Sc_ z!@|fMD~V#Qss&rheKf2)Uiav}HE^^UPDSD>2yU5KQ8ixM{NGa#cBbrY)7z;l99H|u zM5I8K6|v#{R4(mT-E(oXiJ~f60G2IWcg>f8oMX|{j3NK2d8+HaLk20vyH|`9Gjci; zw5P4FhJPF`Tb&A8ohs!mesw#Czt{rC#k~0dPB&Rd`jF^0sXUbRsN?b2Ja`E^ckdhf z(sAHhu&8(Q>%ES&&BxouFTB9yp#$Qc>>vJGanpizY_RE5FVRtUS=}#5p3qhdJ;@D; zfI8q9yb_|cKUJ$-7#XW@F2W{Cqtt<;aH_}{3RFQSsI~f3BXIifaj4>jqvY4@LZ*u3 z<>l?eY=(wv0%9KPcg6oMDy82#$KHZ^3gznexu7o7ihZiKtIJogT*GX?Y;a0~LfI3Z z=12iU=bH_l(_&f^C1u%=00_xShp1ddPO?dV(GfP20<5_jrDCeeRYPQg5Y!-%TE^W# z+=+SzGUhddKB!d6J{ZLWvxb@`E$j#I3?WJ+ds8OuO;6E-M?MTLJJaB; zYlMj5p9Ij(MNDB!cNGjjBYDD?Jya`*Yt)^s=!9D%l8o%^r26EZI; zCU^!is*6fqxcKU_M~f&Yq<48#%f8$8+e0fzL*`Lqz^xZ#KWBg~|>`QTphzfo6gqGrm>yeuh)w<lrshmUH zce}@sx{%UY&i?uCLC zCa;cuRO169T<=6TljVOc1jaeYAYlKlr@>;SG%#f@k#RO> zx++|8I3=U3bCQ@Y#6~HuUXxl-qTRWGIZX|9VSPnlN-Z$aT5BA&fHPyW7&1VWF7~y_ z_71vcq+jWyD9hpRLw|PwMeP8DX{NCJJ1guD*X<&Gf1fqYG}$(qUc}4E8ak>@JQxp@ zfO;xU?QEd6)|0VD6qVmicVbE8P^M^SMgp~JevscwB$kV(vk zs?JmtI{Y7iv(tmwNF7o#v#`jr8tuNNYz?Zdwk}q){q=CQs42S1hw~x0!CNwYe-;Fa z3{r!Dx7irM++w@;`0CHn9}Ac`#YAG^LfbA$r-KP?t*t`?t8Nh z1w#Rg1X~qBPmFsXR00uocI-4+Uiz`zGan4@?LgRq-a=kEV`0atLDN8%<02JmUQVz> zE4|=58%ov1WTx zUuZLz?P)V2#uiVRvLvG$}NOW2fLR>t%{orA`K!O-<6r=@Qt6UKK^ zRfH3yqe4n2@sg(Vjp1BcdS(3T%FfF(!@3~v=fcS}Y_GCV6z2BVB~1Xnlmf}?y>ByM z+vbH29YkPB{Fx7bT(sBwAOxb}`Bq0Q*W}z$fo|d2Kn8R-R?dwDRAxT7jJhz}s3-Wv zONNUl={-+!u=QY&ktXE)BOGlv>mQGmIxb2~fBzi+pyosZHiSe^Pp>vWj@UPiS@BIy z!OWqwRI`O|;Glb5#P`J)-@9g)ttS)LrNbY0CrP0P{RMsDS3#qjRafd=Z85RxcRo;%kPJJ7nW7pP*H@NaW?2jyq3p4ZM{74tjl)r- z5E$(xy|N^EQO=%mRjrYPgKG(izFsS9G9w8JQk=l+wv2M-VBOxPXxH=r;|xPuAAw$! zt@I^Kdhs!&0ooWcBI>r(Ufb&=r*@|7Z!=o)wAE|!^AV^Gjry2s)=qSs5yHp|Qh~k@ zpGp`RC7*5EHTI+0$0H2WW1Xa!m{+n=d#UUEG)IVLwqDv{DmD$<^xhXQU;1&P)oQq3 zGfF`61E3Oq{f-N@0LlTA8^IlaH)M*31=;Lrr3ycAA<_)4JSNqqi5vK%RQ`uNK7I z`0B?(98hG98*MZ{nqbZA-2L-T#_S!EA|FaFVV8|%GJQX-Xn5E@?RtJ5HdnwKNN)_n zqMof~K(bX>cI@Ioaz4o|M&93g@Qn{WzgSbEQi{(}bM68Q@M07}1{uxeWJn>ybY5 z&#&7~RriigTXmrXG6o;6qFa*`_xDeKGbo;V4D;O{F@f1f_n@zxaofzcrPfwBiQZAI z#n9?#w(Gv|s}~0(<&S52ygL8lkU|_8!>(4x{d)}+;?;#s-ncC6QxFk3E*~~`Sq$%D zAFFD!=-)rlKQJ&kDcCeySX2LiZCU03HNLTNtM8e4@tBO8VTzg6!*VmP&wIMgxP4=) zy7AQXaeFA6u78$pdVs}no#bbV%i@rzNgc0mf>>4DBM9w0eun44qd*p|#>9w4w|(CF zr954SLmU$w@wk{5`GYRu*WPW0aDRR=!o>MFFB@CWpS>M$A;BsOa42JM(Juj;>UYAqcu+-xR{NvfncK6rQhm{ltY= z;phydNm2%-RD+W9ekP739s%HH$kPgG^B5JqdcG~#ugnstxug$J;#}y67ElV?){4TEhSFjf{qs(nZl|Tb@~nW@6W#gio@P&j?S|T!J@~|Cj2E z>D~j<#jj(|BC;fO?ZB}R@8_B^UfVu-l?8r1LcMbbV!H2KfPdVzrsqO(r~j~{uNu56 zu`_D840)>i6f7(JcV+dT$3#M5@t6LTUyj`ddI?dnZMVeYtFV;gu_HGKR6KqRKDqM&^R~Rf zBcc01eR`$epaBJcSU_MqMb3X-x8q6XQ<6tCHeq3nA)*ohbrGABCAfThHkKHykZ-@jXn$RLynBHCaOkO!OBk z6H{)evpp!#m@1hiPFhq!RpXe|azq5y=iq9%1<#?zNcBUcS7^FkmnmIVE|ZwSHev0k z$hT}y=mtXbJJ3>!oUB3&Li29M9EO@b%$g;aV31=_e4Rj$O!$T`Oh4<@#3h7ZmMAad zN6%h+_|x|rGBFafCLPLFliQ_9yV&oT-{)kh3uDK<(A+1s2!tCT*reTKZmAOZB#;@{ zJbv-mB$0=ZMxVSrzVztur}(E3J4)7+v~l~$M3pC2ZVYkz%V_?tUUyd#;5H>${K z`DoTq{~{!?(vZo2)fP77Fb`S``o!v(?oMP$Y%PhI02^Skd2kou();Q%le~CeZ%Rzh$Y-PPT!T*ZI$CF0ikk1e zmwB=Z$b7%cug&}~-!=7zk)Zo{FKBL5+;p$sOJXhm8TQt3y2XW4lYDaz>R6@}*4qMu z=2*+VzIE>Ve_PVfA!!yDEGm@WF$yhJ7s$Xw`}}BTgU9Den7Mr8qIAfW&9zy%518_a zthym6nFUpOMFn0_&DwK?LUN=gfL^z;@7YX?7b#=ZK>*!g3-s!IuPoQ!rz->Df@u0z9 z<`Bu{ORCw=Sq@CNx>7T*i^J4Y@@q6skyqy>R~ORaRa#;;?mnHg!#1K|h|Z~=pO~sQ z)_F!f8dP>)%iauM`eQ>03(8~y8Od9XE=D|cg>VqeV-D8}ceM>V=WB?1pE1U?x>Gsa zjzSMqaJ?rG=v}^sck;1eR`|}(mS-Cyj|!+yqHhAfZ@06%`G)B zo$Fvh^V@y#`;Sb}^UO=chsKx%RjXdzK{qT zW5Nv(+{>d!QXrVjZ*x>&74yA3`ZHl1#=67F9To#2XJSjPJ`?LuHx2S6XE(5Ug&C=j zWbq(nnl@Bc*qh)uKc&BCl50t$Zk5J)WsdEQs~OSx9iW+ zt^4x+?e1IHa=onrvIYXO>S0a*fF5fg2uSJBVQKf~`cv{bs8!i4oodN8T|bDsA3G{MgrtVJZRzJpZSjj(<
    lZuF{Qf5H-Y6_v@YeXudzeIxfdM#HKe{nQJ6xifV&9EixU;={y$_JQNODx+|JEZ%jPo zJG_@4{A(_SOh9D38(gsIh;z|?8F=_{_Pxpq|Q+5!dVNu{CagciFb1Oc89Uw)(~g zwK;S0P33`>Ro^{r)WfbB(%pW~o9356w8IA1*)wGoog?79zqUy*V^LyOz@Tqb z0-8kS@o}ee%a}ez}Yh$6d>$K;R!+FuY$xoE=;^uO2c6C z+9%J};#`;Sjx?y#z@*Zwv}*MI#t81=PW6Pg4#+|9J-JU$>;l#RpQWmSs{#W(v z*aeIeh9y{L8V)d;#BaG`ud=SgRKl8q>64$>!g^v_m&5hTd1N3zbYl9$-101TcuZ7g zc&J8E$SkoFfZ)7&hHnIwS~8RLrcSN5(1tb!hKP zfr2xc=dwjWRdF^TA?N1IbM_{1nRFX4A3JS8HI}NHE$Ozld?EaJbH^l%?LA>j*BIg2 zYnX0;_bVy-@~y9sNVjXMpQ`4Q`%%okkJd(BXSprxYM1eGGT}<;*;rIS)v#$abk|c z_7yC#@-cxyxO;cCfstnJ)hnJ1GfofUOj8$6Qc&*I4L5}HNpQTBV9+q5k~nx->@s8` z5qyRvqaQtF)w{4-zJeP|?3y;eHT87sO^Far=OCw_6>welz9SQiTz$7It_sHMuC3tq zjrF8N>tutO5`a0jg*pOTbu=%qgHB>bp(0{4NfDLRT-QPx;*#Drn`Mp5v$Ius`*FTC z!>q|S;YD|@asJxctOHnM+ver)05;bC7+v+Ad^6V)$JVDNJyvIY$YW?TVs(i)BgI^F zuC02G1;h^97|{RgmeaizGCC@aW3jV#hFbDbiS-p9iDe7jfZGAd1mW>lM~oFeBo@Yy zZl04zC@``~S3&7RmF(5IK6`^(0hd`R$;jxv&hYwBmEqEP<8Q8VzUAQD8%WF<>AnwR zIZ_|GOHK0Rf7k1!vbCl2QYs)Rm^r0yfafL}$?y6({Ot z$g(Vn{q(k3`cuxil=LE$Ai1`vWQyt7vK>IG~fHknO@tQ zaFmLN4yGH<7?xY##%C6_7ECL4-s=_w60J`;Qh%ur&8Ecg8V%iMK&_}%uLXu>!tB^F zNU-Y6hH;>;`0&m6Zf6LJT}k{XeyT`-wv6*{#4WSJ%>O%3 zUL~VAN@|M$f#?DdX8sz>z?wEVC!mz^R-?fD+yJFseTe+?qZFsizkRZ!f9C6Z$8C&3 zF`*{QN8q7Jjpvvmo$H1ZLbRJ$dE>SEZ109*Y*cX^N_~}u{H)yhEwZB!iLea4t^4s1 z*(s{8D^P7fLd2V+(*}p6ap)tIoC=6TJxQ4$72J511BIe z-eT;mHs=lb$zx87cZxUO$QkI3D4f-8iMb$*XM^EP&}K_AJni6fX7-xa$sDIQyCg_LrUqhzP5KII z7FsVzo(c}G_Q`GVcwUJuo(}}m{2o1ygn6-IN3t7ew;*Nji_zo)Kc}i1uhrVdqxVC{ zxU6YuZV@_4@q2GB?!j1=&x6G&{+QXj(QvB}0GZ&vol`+Ew_b%rL#8f;Tc|FbcvqXv z~V5^lKiqUI|z&24UQ3zmQR<_3n3_yX&Cr@Dvkz}mAY=%~qv_tJ_YWl$6Grsic{ zUBJWDQOkF|sRhq%xQ%h5d1}-9i}|rdJxFEJ$|1cpJSLEUbUlFN?sj;)DqY*3Ft0hM zJ``W2wU)u;bklot(d+#te=j92LIXzZ297j@6`T={1ab6>t*W&hWXd;=;Wq33ek;S> z`J5QWhcXcVdq*v+DmE|%A4=M>2#CpuD!16hn_Z-YC=d_Dp-*e(OXlgTbn+(OX^RBOtd6>wWJYvcL4;HPTxc??IUs#=mkF4sVC) z{M?QUgTgm>s;$EFC>s=b#vMj|U7rkXBtprk=3$i4X4Y9kmg+j>Cv5Uw1_!9^Y8&86 zXcH?bHOPe9jFi1;ZA$ABWx_@G5sxxH?P@D}5z9O>nlr{%&qHmQ1C?EL zuy+%;&kIw;m(;%^S+m7)L_)>hvdwBwN_s8V^|a7XL05sX?ziXUs*tO3h~_js$^@GBT-(*qw&csk4En zz3DGnR!wlv>P~;Z;GGu2F-uYt&Xw`s78SW_U*o^{VB>KYUz>%>1(@Xx1+P9jpH63$ zbPiIH!#T%8h~sV|qim14ARb{z)eY_5@68>rpb9SExslT-IkSA_?zp5ShfZ|mCb9oz z*0c`6wjos=k;UW1b&^y%E`~?GkKgxd$;mb8kVR%*VTRyxj@mwMc9U80f0ILQ-6tR& zR8a17mis)uwERvGqz`1H_{J1fHY1n5?p~CL6_t~y@(d;woMRTz?p1$+ijnj9GbrkHAK>N$;F{lf>)GcLO)p9aiI1 z_x}l5+`b?g?h5YCU2T%F!rDjnt(qCO#`$q)CrUxFVJ#c5wpzY2u508hrBI@;O0L@d zJ>K14o69z2aT&?-!F-EKUWQwE+1xX|sB~{YS_CjX`|P;SAnl3<0yX*7cyj zD4L(%hnh=NGU&=T?mQc2jRG2LYP2@hNK>?yo^-T{?lj_B(D?2_ETE9r=MQsWi{dsP zRpd#^T2db+=TT5f*C4^4MN!&U%`FK}+3np;H_A0A$7OWFY=9LP2#KpN_2ez=kz#KQ z`C1d@Scpc-jn?X~#9BK#{afV`I*gF^9=W56adg2+zi_^DJnuDs%ll03 zBjS*t8=CJLdDSTYE9mouYtRyIn!~Dcm}?U~W_!?PWtksrOw&OS>tKZ2G5o2>Hsgx5 z9*C5K?Cjstm0UA@>@@vZ**g(hx5aCNn0|yrE3m=MH+21ua~3AD4Pp5b!HtxZvo(K1 z8t`6!u~m7wHEYK!62UJ|tfzwS-}0zp(T+3FF0#a$X6fQM*~{gk$>Jo3!%gaJ00)t0 zwpmw?>z(H=T+dVg@w$y8^u#K@*Y34HlAfx3gE(qD{9(J=U<7CYl3scUwC(p^Yt`yOxn(Vdz(AgN8Sccde2)%O~@wVSgE9V2@( zrtR5vw6d1-Yfp0iKAR2WM9cG$>6_K>s)W(_&3n(oQ4ZkzWXX=>9-=w*3y-E8BAJudCDo+>3% zf2yHQ>;Ogmtj$!P;bH$3wKDLIRSUH99@GZbT&Z>?gbF7vBFZaY$Zd=n#Utr={@KlU zOfD@shOLr72|E482!YTur%gMGO69_=zh2uv{r0ANykT~b($y9QX2ADS!IXevI>!Z* zD67Os06Wxv5dOp`Xg$NS`1Q%6R2^x(yp>W=of8*SqM&5EA3rV>fx#0RD4ng7z69IP?&X?2sy6>!1-WZld(%d>dE4{ z$@woDd7US^A1+(YlCn2zfJ0>;Q}LrJ=2Z{B?xal+%cd|4gG2}GCg`%4$#iYD`JZsr zwEkXs@Q259VhiY_tzK9hZMh4z-tiE*Ex}b~l#nEmG%lh6-CGpx@-xbD%HIa9&TZ4T z0yl3$`VBKe#-t{4QSJ;i3;x|S<2}lyY#0yn;3$~Y5wm2Cy4B@L*Kly{hw=049coxd_GxBA5#k*B8wCnj5bPeLwt22%vBYL-Tr zJ9h-gm}yt$sG=PIxg+CUmi1kpavO`G(h(u=pAq-V-n;tcbW5p2gOB%Q^YQO!wS4n> zx%9)4BO-~s4|@UlZ{U5|ww9jI1V~7sAn990BydzzV;QA+!|%9Q^X-%SaLDoZonyD= zx<2t-mlD%(FM_c=6{kybQ8p9Z3}jwor)RNs`qKG!xuZAcf2D$6B6Zrw=iCha#HgJ` z!uV#bZgWK5EDXpjsO;P%4L;!TSb1l@+t~W*A_XI(En8WI0M2?L9z{thU{Q%gk6}_T zYf2VZ@!_6@@vGNeJThh@Wx}pEo^6S$ml>YfqUk?^FP-@Q+fa?ujvef^5+cHPh~IJ( zo_I;%GcAZ)=fl6dtnaU*uDap&tvj7HVbv~Sx=o?b;zC!)Bu812%XECO*WL{mTW4=l zD~gcLERR8ZWxb}T#Nxbg*_Ui4qcnvxwf=d_e$wqU&KU#iLzOQByo2xlsHSqP-0lUU z!0=>Z7W=pndvb;l+NTVptUotb6TdZ2FHAIoJ5)i=kEH}}B+5C@Yw{AtZTCtT<59;$ ztCOSWpHsUm`8iDwckRSpTi|WrYd>BMzMkwE4hPBf!j;R#=hIsSHrJ#=dC<=zc&vF0 z>?743y59?X&nmAfzY$Cu2dJkBrmP=QN2zTwo~H#=UXhi53?LngoWyMUN0qMBPXC}k z%aS%pvDj)b!eDvo-^kak8%pq$nDwT9#OF(r0hiAR*Ro^L5~A}S(>><4_yIS+osuxzCFt}t^^c-*F=vrBE$vBI~g&z+G~&ofcgt$cAVefNOuJRKbh ze>V|-9h$9vj4?dyJzibqzoimfgE)Yy-GzkaR-qG+{gXYflI)fGNEZ9H&0$Y3B(#}# z@0;^WkwlTdQ&E}agp1AA_a8pUqgDzbL!4ni)xA>A*Z-yyg~owrB8yf6iV2kr6wn}5 zaA(r!24F^%0pG#$m2&LMP+0!p#fC6`S{}5x0{Y=YG2M~Wo|*Wo&m`YZ`nlsmCJ!ok zJ8g+zkQhI+f3uGtVTxXaVe_cGrdL(p|FnktPxGH#)_@`&_^L;S-nvsA#zi#pVCNn2 zu9t{NOPB#ad!*NU-#o4cWc+x}*}eZ}ns&g8`F{0HCP^R%HZC*u`IJhI!OQwk-oe+; zy~EPwV~g6~Y2JmNlrs{+%#kUxB}9>eu9}?a6_``H;J941qy?9!+UEUm`5`JNS?b`! zGZL_c%73Iy$cO}Jqvpt2g~vTP8dN(+p0Q8kSWC2c;_{aOdLO{oC`}bFnj*QM&GS(| zyeM3Q!3`AY%-HPE5MgWn=n)lAVxz`~xij8w|AFxt>R$@|bwuv}N?cmk_m4ra7<}+# z;upyO-7H%SH%+EnUs%G|MLF+R91FAX!?{Oywk7(9t+fyh34EM;qsgpOEvkL5^RVzdi0;)X#N z9O7Vj9dG#@?*P|PC)8W}g9B1+xy2X!n@XnX1PxZba`MAEArAbvenX%xw9q3;wnz{L?$1BzO;uMhqv2PF5L<$i+p)N<(f#iyL{xyX zPb&%uu%18P{b#AiaPS44^@CqG{_6pQ>w5s)a&OlE+06Wh3GV+^1bu`-AOGzW_dpPj z@55UB5tePw2&E!ln5TcVx(!YFmp%S(c%DB;@xmI>Asc(lH~(*+cnU`)b~>W&Uw!uP zGBObdqBDBO)Sr82wiEotdpN2CPb|6r(*DoKf35O=nSnsD|78Y*E&i7o{+Aj4s)zq& zhX0S5p>x=qQjqzkySK0F#xmD%q4y-TsNPWGj7B^j>4QII4{O;{b6bdzmd{3+43?p6 z)^ZgaBlu}=d62&Tu6!y0+6BKjFZQ1-^N>IJ+fe^Cm)GjI)PF|D^f?KtFNCABH)RUU4inEFN zxEU`=>o)83@f=t$w^zJ2Q-LrI^G?~)cPW^{VD~{y@^z7d(VdKo97cBnAZHM++rRJL zE+uK`SP~Ht+APU8?y9j&b8&Wr#`C)~XR`zBc5>lGR?fYjg`k9qNi8n`5C9H`5+njd z=Ui7VB%8_!^aw>6{4AgsY$hIXv-+|X+;dDk6-jIDm5UajJxMR)2LlB;E7@<=1{KOa zKT2&9g}r#-YjRZ31=Ls`&@Y zFNbA5H1J;KUO5+trOV+Zb{%8LkPZgtkdv_tkZEx>>|R4|`=Obgz01R;9VP2ZNsyvP;ERQ8Gj*le5OANI zSzlxvV$`vkhg8pl`q6JOvE5ddC!bCyd4h|4ApC=xaJ66Xl|VR*pn1Xb5PuH55#HU!*^J47UB(r9}R# z2K=R7U9!W}SJfa@RH4YDQ{_p(0wEXSs$JqWeZu;-T>@aL=Jf9kT26$r+m@+zqhXLz zL!jh4AxS5C(KgGN@}V&(Rk^!{ zo&AvS#;a4z6B0z$^cVKtL#i7sn`2gVFMB@TmAiy)HXhgW60x;Rm(4&Rs$92F!4k=i za*eA*i~JX!72DjtF+MqcgBnRV>1~SgutxeW@bJGVdIQkbv52hL%lt`$FAv&B1^nPH zw407u79bjqOrR{?2-b?X#cxCjMDyxDAF2;+vy2Gj{bq9r8+{yCmMgo?+n8p2BMKVn zHln|!)|H!jZ*iyH3=jl=%wmzi=HoRO$rt6{bj?ML%5ma&)59A!H;#NnMu#A`h1Nue z=ZDOGpTgwJL80+pqalQ&0t_ynNfh#@Zu$$lZoFyWwj1>YcnKRjtL@hh!YxG{r~TRW zi7n4vk7QgOx%@g_A)exb<%qQR{Ie9QM558PgdbW_boVQxtdj%jqfN9)J8)&$ODNUc z6|w9|9=w_N*`9c794S(S`f)ek63Yzty$@&E*O4yIHZhG{yNsk8{V#Y()ttC6w6Ti6 zisv18xp~1ZKlbTESqSUGxdGkmujSICEkF^TZ^E%V?sLYai^@So3h9i_Y20A~w~tj8 z4-AzE;>tetN8ht%xmUoo)`i+#i*wOrDc>xUfLOb2$)MXW+^rE6bz6AqR z4a~%`R*#Z%u9{aqiZ5GqGwE9@rbl64F)QV~!>ZV}#>qg>mi6?W%#u~f*>Da=(L<+x zu4j*+5=2h-rgTjY=JZPiyU-Qe;IAf-_88aGJ81wa@$z0z!NtNOPjWc5m{CC^Y-6p3 zIweWZ*KjsG(9~Bwb|!3UBytp;itV0%0+%#2W4W(3)s!m}PnP#KLU)i_p4qBY9(s^@ z1$)tX#j1)|Zcy&Cm;TD-BuOnKeATe~U~C9YzXAtu;L5dUZ;ZeDMf804|VV zeatt;Z+Nih;mM~h4%SnR+?Hft!Z-w1uEZJGHo$~>sr71VWV(3|Af0%eEBr6u_oqn_ z;l%4Jo~**0-mcFnEE@BbDcy_}81dctD{XVst{RNAqTVEtaviP|_hF(Su5Oji_=EmT zV3O!EyTI7M{+=w|0B_1(2hxPO#x`fX&8f?GZdZAeGw47Ytzi0kP5HZ~%zgYtHqNqH zx((w2rj&MF;Sr08lLu{GpJVtlj$1`SX}M&5;eIIBCWqzI^5N0V&1D>>(9NrCu)v66Wvx?_cXS2;5F{CO+cbFd%5mzunRli^UDV-PJL5B7A+OYvkW zj&d!_K2F0lq-avh*ft#NBXDpDTfrkNM#N%|mBBT4=)Vy-7_6vJ!l>8ibPGVr4Af_| zzVGQpZsM6Gk~t#O6f&J$vRTn8^ce>1u#J!@6({cxw zz;FbyRdR6tpjyb+4>_IT-3t!+4X)mfM?7B_PVv;3t`#A#B4+ewz9!lO?R$~Cfa%7nf2&$ zI}87OXy@^ofp7s_leGy;hnHV*=g6jp%9u^`N_v+*PaxCn=%=3;k_JfbdTOnWvZ$rX z46d%&CNSTaDCaO65CISHroi%`zJThA@mqkpRTHh?M(1TCd6oimiBGIfsLm7SEd9p> zR=xs9hlZaY5N6S?UmMv(?;C!g&s2Zo`g66bf4VSz|+%x60 zd9o4L&z<3Og|3PyS0Sx?()3p!ev}gEF!(z4^0}AiqX};I^;$+L$yvQ7ahT}A-$pVj z*lV5ai!ax@Cu@HjbKryEy45GTr0PTk_ua0v>j(2>8Q-YCuH}+|nq|#hWfTMCuz~@{ zR|}ZOpY1tLpO3OREg3XrE~rxIB>R9qAm91waEze*W@pF%m}}Ljmi99R_PVuo(<@!& zluGfC!#yVxEp!lEt;`)oKDiuRjf1OwZ6P}v!Q%osG!`OpRBX= z*2hxqipL|_j=5LSVvsm%*bybWm({V+Nww6$tK*bq+~&`3Pxz|`c$==-caFx=>M3}T zHpDePS#;E|#w_9)xr7x{{44Vo0SO(@Qgy)DxXte?Qxw{0UvKKQNFJfx&v8$|0DgJJ`HaY)_Li9Lq5;%l$ACGiNeY^3@ z)3%peN6n{vD8OeEdy=(7d#qjgVyGh7vX=4sidLL$^vAZo zzx5sUw)~A@-x5P%jLOy7(hR%->YaSzY>R#LI#*;~tggq%NU+b!=hTf>z2zAa1WnOW zZfxB~vnW*+thutWIPh_O!oI6PU`x;6i1`fEA5C+lvJ)#NwwNIPf@ z`QGr!sLT5dM{;O|Uhy+*&e|iln++~)IKyyyD8=FRmu%)mS2jNOMEjWo2FTyavCM<~ z!3!WHFtZr;fC`t^|21za&SwId5&%SDA_Oo8@k3tu%9{^ z&=aKic3i&UY6L(us;*#K4-^QVru%A2diZCwd5Pn$JNSTMJhrO4T>5&nK3d~l)61qK z+-D7%RaXr+H`etIqG;ckMMnw5u9nJm$ag>pG+h#l4N(Ex7hx@;NbuA=S8GyO#R(>I2=nd08me=P6WNWOH1tmQ?ly-i2RP z-^_9dWw<#QQwW&&a&x`2p4j9zg_%%&Dk`nLYfnNqCY#@U%}ENVH$0JQxhB|^wyL_a zKrti%K}`_1PcD5$_jHEx?0IL`Zxc;%HeFbonW1TgN|hJ&hHak*9Tvv1HJxL8b6q<( z)Ze*X+bo+o`od^^L-%9HfXyUtXn9Dp@#wBMa@XuMY|;4}yZ6-re51ak*vqeD5|f|F zMAlfTji<`*npw2enb5iz(UhIX+YTDGl-YjKS*L7{J1PcM#7ECzR^DN0lFtrd+v`C4sskSA<8k< zU*lfG*EO!<%azsg9Xff{L0XpYG;VEu^_7G~?fy{}%ByRmI&yX+*E(B#c(RzzhKJKg zU+QXE*2Qtz^;*8lQ^XjfdC+eAR8uF3b)xDQCe^}cnbZwU1wP&N2{&G*fSG)4Ax1j? zhrRcTYjRoJhpiwYVn;wg7Xl*En{*Tf=}qZPkX{8sqy$t{L@Cm1i1ZH9I}t^C5duL< zh)5>{qy_>B|B0*YwU+Mp_nmzw`wR>4WM-b3d#?K`Pw__#mWlP*=6&05MIW8DL)|_` zeeC=PD zAXo0YvB+07rt>M=GbqgT*1-#CJ)rNf*FvTk_P99g%TM03tzK9u9@_hYy)(NXz5O`Q z8879zsg^!rb7&PXB0~`^=7|SK0uH4INHK}~=qwESiWmq_g^G{I9;P)H?;Pfpo-ucI z$Cy_Wg>x~G#x-KN+_?c$toM8D2q^~w9S8y*KFxK-%SzL4`? z#oiwMohtoJIuuk3HMu zr%4XJ(x~}n<2Wm7N!V}I?81XQSqC`f8Vk_pn7hp6mO`VdH~~|&U?9+hLrcvoMd==;o zqYv)T$J3JG*B|y9T)`F8fgi7eL+5BKWa_*-6coJVNbQTVM*<+f> zZ~px`3s}ie=EY4?sHfRIXREjBaFIJ+n~R2;f~FVwKWBL~vPyY%={5({9@_KTqArr* zBI5t#siX{edqB*VRpodI#o{$f{1-@!Gz5*_ia5~H^O1&oc{Z1aC8K#I4x%O;Txa<( z)@3DEa$TM%-f;YG6zE+0KFP)9sfSI|#l5~p^~E}_HjXZ*Jvn->8@A%sA6BG|@pMoN zBVM-rAuZ2TX$(cS1BiZKYE9m2lI{hOYZa=1)neQG{V-UElB$K|spX^M%XZ8BNB)#O zglF$H0Wy5|?bD(Sp7V|&5ZZ5hr?`@PQ}#9_{wZD5N&m4OOH#IbS@=NKb{_Ew9+FvikD*hE9sMs{G6~gZIfG#J%2*MosCPso(>*fEu#T>~`8W&pM+jzhaqF zpwRl`#-icSf09^!^rG%ibajF2MO4p31Rgk-nZr4o6u%l-AB5G?d;mgN9iNRQ*RaUV zA|8NvL~?1mP*|N)Vv16>9npQsJj9QgY~HUV4rdh}klU*_E8hhYM;Q-0V{c+EdlaxB z{Y~=l?YE!~`C|GpG-A&?fK;KdZuZbFi&1{0 zlK^qK|E3?%^TYxpinZh!^J3GBJz%Eb8P#&jj+e{jqS8!hR{DIExu4jJljgG;Bu~}q z&brvV?_A)4m(|~Vj^oG{JYXKMzrZ2XckGpp~(_2JhaUj8B>KFe(Ra>yEk)QUWAEg1r++ zwc#gCq93EmDqQaz@w{N+HDWka)#wz$m54Tnzc)FnjaylijHMT9UnW^$OCGGTWi}3t5HEee#`2 z$eu3kRM7#g+(W$Cem*<50ms#^8T!^FUjQO&4y;>=@GIBti zj^`&GSOK(0o3#ZrtSy;#tf-J|KkgAaly^^eomOa>7tqs3W}?3ry}WBNvXHI?MoRkE zBjs@M#=!%C*0T}qWF7JWcCjnnjT9IO>{@H;!DV1Jak4cu0(2uDg^{3o#oO9cbhYK@ zb#s6`UY3*q0dRnH)BMg-ozh6T%YExQ@-ZbD8oHbF3^c^&PhEa+K}Bc0G`eQ6VMZ0- zsGlz`uvvt-Rh;8NSxl_k#}RcqcZP6#$G!~a+D|mfW#b-Y*Uk63Rq>?C0xElhO}7z9 z-+IRQc|hJX9E3Ul05GV5lJxsh-mPV>p}JP}fI99;s`uS%1sl(#1PUQu3+wex!?o&A z7KT1y;RdqD;?_fZpiZ1K`Bp2l5iJP9jDHQyV2|yOI;3(B&;_n(ShH+2Aon_gM<`STeH!#-wZQ>o>AnoyuK} zD3MRA;1CfgoJIb@@U^)&n13&ZRi@Tx@Wpz<7oVq$5~4Q55dCQqL2ms4!7nxGZlO=v z?DYYbJukb9Zs>yCNM1+1);z%5v+scvnmf&T>1Hx#nj_6*r%5;nbNq1vX-4byUsKw#IwYPcrVGq~@+GEXe*F><4pkn9$wF8i;Nc@jpE}rB9zcN|BeueEC}HSM*WL5M zg`-4`KawR8SOUZBw{F4mU-r&^dd*ppqtoz!@lZSl5$KjE3n zbZ1NqnY7bvEdE}S02*;E#a^}Ted(=T8Tmz5t;t851CFmy#N`XoV8yjF#vk8YoR6ER zRlK1+xx5Q%AzjDleKRt6P9f!@3u*di<6aC(?w`hCGy;YV9m$*|cyG7n> zQzenznsgy9fWYsx3yVsY@z6{0uTABWGk825XD)UJP#~qJdG20urAiXE?wC?W$(M&k zrii;f0V?wkQAJYZC-#M|04%k+*pPKnjo_M}lKvzTiY3XL!DaO6ySwF%oGbDvARdHK z2_N-b`u0in!De#6EEMeyU{&G9JCF20KkuBYb~P{(X=k#!8oeA>{07{*;%Pa3hVa;0x)npq`Y*hKUzPh3qUq zR?|P*Q1T8G66;OZ1vGm~T}vEp_HDHjMKOTrw%U7NPPi~2 z*}wFP=N04YjI#m^D!}o#5VUGeZqH{ULdDnwdx!Syk|6#-!z%3C|KVPE_J@5^O(6%8 z9sHks&UB<7u7xCN3bM?b6&Pp>3lzgVf#Yc3$zZhQgBTwD$VQl-QZKPe;o#%hUW7Pq z@G&&_oBsLNy=S9gJA}?<2zmZgG^2Uo(@#xJLljIK=#Ds&s zr5|{o8kUWVGXpq1YvaahJUS1jyFwSoxIy@2q_nrYV`YA$id{gh{W6dU@>{ip2_vP2 zn9oef5sMyeO-Qb4!Kp(CH|_Q>P)bvg!613fUC6bUF_LUp@dTZcJG$0-#p4nikd(xR5~EYt|?K}^)#vUv&-Knvb^esWl96R zoC&9HcK5nxi7W#xL)W=w{!E#K#s2`Rl&`cY9IWQ!yMU1HAv-I#H+G>vA(bkt!o5L} zz}g^lLo1usL8}%BrYLrPeTWI%Ier0WHH9=(L^Z~9>ie9w!en=PAu8cnI;%MT$hl`n z^@9AL2tdbgZi8!_Y!h657IZ)9S%lu7hsmmY;YV0`j~UHo zX(G&+7?IU|{LCVA_Ej9V7Dl5{C$gvf^qx z67f&Zor@e4-HgTZHFI(xFj^lf?b*uR0K8BZ$M!_g*NpM?H7eG*07=Roqcru^6D!vb zshRscjE)xa@4+MS;|)qS!1L{hWbtaR&;dlvR4uM3hO<{h=s?@yu3VaRuEE;*o4&PQ zQ!4CFOugnuMiw^`jeuU}0Y~f3K<+-)JP+g;j9}VwXI>Tc!r(Btwcay-t68P^WZ|5t++>{G^bS}jB(U2<_7`v90wRDV-6MT# z4QidrMM!_1wMSXFpHRbboev}q>i|x)OsZ@s!W%8TinMC=(%I>esvqFTr^xtfjQg!Q z8$M9mNlO=R5GQRk0h=A~#`uS*bK=(Z#rN^l4$Abg8gV;)j7-H2_M3vDvr;M|Cu%#&j2rPNm#!))}KpK1-;ZzK#PyP zdQT_Cez#mAa-`@u555X3rV`FTj1OX}Hxme`oWsfm4?p$x9fF_Fo_eHDaYd!5f$9%$ zz!poC>Rq|U8#U-MQQ>oXl}?O|029F5aYlEn?a`egPDg4^UjK{#_@lzs z$pN?FTV5el`I}zqMi@0(un|rlEGs~=0xa0J0Egk;#^1O23vz~2yRi-e+1qQ z4C8}O0dZiZR^IpML3!fD$ABc=&}NpMo>n0LSak!)!MV%M$KMi7tM*wIt!!0eG;vx zW!OctYo{ihhGL(~dXn27)uMXe>bS4?Xh=fYbOS+F;PpZr@b)|ULyi1*jwqm~M^fnN z8RKtxxphFl?$u)KUF;ROn0z+Wt!*%xHdTCQ#GkEUdQ_~=*^S~u1Pb`X{mxahTK`T^0|WXp z8hq;=We<1`Wdtis=r`(Q^Gao2NyvREK1fUqNfpQAy zJ|rG2g6xaCz&hnOpsJ4^Yx(xFR^BpKhl2ws)N&_Z)X@GkS9b=%ROvzp?jAo6$dB=n z@1VFvt^OjW@6YkeHTt@@Z{NPXJ@IyH{eAo7_fb?mix^1#nQ7M66*k!1@%{GPx9`3= zC3v#A`t4(#pf_)#qcv#e-@I8m186*_?;a9dx-GAK`1l=`+L|@yFAuG}dQ&{Slt4cX zW(u827$bCT&(_f+x!Oh3Y5rmD^5;GO_u&dU6nR2T>TJ zR{{>HEYmZV|79fh0T=T6f2Usk=l_NQ>sP6c?oWUHxWE14AAffw%bWVY{^JEoR$O$_ z>;Favr)1?F|7pqoxq`2Q2t)i8afW}f-~O{*gFH2s|NQA+U%62N?6h6@{<&5C?U%_5 zbW8m?+yD8%e|+^7By5$ZkC`0%W6}Qf5g%J5LjT%g{`ITn-)n<8QL3pq|Bn{s-+x(? z$nu{b^KXyz`~P?hT-{J%?jC~w9_zmz;;H@ke|xTd`~NrL|7FzwH{m}mbFkq4_lEzM z*X)09_+R_Y-$v;F?=4;O*w|2!X%xl(E%LJRWq@$suRf6di!$TK!@HP*jD}ml2%GwN z8;H;5por%H)4Ltq+opla*?qpB16RPLk$oq^BrPrNvgwFtq@XSpx7J0Z^sd%fZnOG$ zMl)lnvcK=#f8ShgJq9s_(rl$KddveFZp0QpGA3_L_C8|8*Z3|Byf3_-{7myZCLu~ zJ9WuFY{mZi{v#LNXu&Z}z4FL|DJ^aJ|EW-*F={Oy1nU4R4XL}fEPdf3QzV&=@( zVN7!G^Ewc_@VA8oe(;kv5b(3PRv`K^MH2GDZ@1k+&i9d*ZF{8QQe$0o^c6D`_t|!i z1R5X>Bm6u&oLRJh zA26b5s*4>bDe?n26dOm!+!zCZzC;ZDJ#VdAPw!6^w1}#g@5j7pAAEXsj}@vafNy$; zD*C?YGNSbHN3`!hwp)2%imf&(ZO5WMT&8bc0oVSN76Y8wUdOJyy$M$}vJQQ(Z9%t26EF6sl`9x9+YL)O+RIZL34XOT!Jehzm0Achk~zf@5#C$1QtN zTwV;8aiC%3{@!i4!ZAGgy8q4oOjXBN^S)Ep<^i<+xdL(*hG;z4t#fUh%S|XAJzEsz zu!Iee*Jy50ai47Hg71id0jk=@kk#cVxlH#cR6+{3;QXYyaC6GbnCM)c4!rl;9WwA$ z1Q|g$NCxYgvUN$MWs%5nu4SY#`X6j`%4&b_4Jtu#50?G;>D+juS7*3El1l_l5w|n6 zr+J+PsAJFtB(+AOLj$9lgBwGRb#IFL)w@^tK}$t_0D2up3<+Tp?K$ED4bDGMrLk+U zvu#AN48WZexdz({44-nGBwK2xloJ~m$}gw@VtvMg_HX@fn_eq^j(?YkDOv-heSgE! z2MGXQ>vbn~G15$>H5JMN>$5T@f|+)nEIEFvBL)Szis(g>C4cK2H@XCp1^7VB{OWKK z3vkA!JO7AFxDxAat2~b`jA~u+Dgr+()~JH~!|J-C7|m&pBr_)L0 zzJG2fl<~f32li6tyG-9j?MM30d;5)@TYk>qpc+WzA93+0T?2-jr4|#G+v_ONhg1;q zQoiM<)&4YZU60EZNZ9TM?g&PYziMrGcaEK2S;Rk%a9OH@?Hp&6a45JSyBpV9;>B~A_S~D5Nkwlb zqtbO=!*aV^B?Ryde#Jpkl(4j1&qORXX#4^Rek*4c+J{}6;RlvGXpW9LaM(;|#w9)@ z4G+Ugk~Wq_qL-sEge>}h?YZEOM?i`a@x=h(+3Wid7%gyFnNl|0$yb4uPbp^U?rbct zT>Izy?6*2~FIUdrnch?^TvQ5?myqo?f1GEn!6fc-8Sv60gj?=RH@eXe%uLYy+YQ&EGJUcc|t%8!%}j7GJTd0;>a;xn44Q_?CU z*y%*k(AY###75O{Hr8CA@J1C?QRl>{wlD!n{NV;*Pn^i5qa+hZx+;70# z`&2mp>E>5d#B2?Omq>i$@ScXkw(Q}RBVT?B3OID)I}gZ%{A_mu{Z3oB?AUYo0ATk_ zkNc{QI=g3RDn%S;-StTx>eo3B+QR~5gqa5O6BDP!_P0-+c+aNpHOs}%@W&tbEEw0n zdpBC*n~4H8O0nCX7xJ}OqYP(qn3fou?&gf@rJRwVd3L~Gsn8rQtaM!2HQo+Iv+ns# zx=;?kOkA2iz8=pa=p}VJuQM%x@j!5rCyLwbEr|U`p)C(s;ru#jDNB*&J9fuRT(;$bRChrUnce>f{@@XQYs= zlroQ^kl0?uEJ4|Zr~>xqIo9oD$I8xcsrYi6)c_a17wom9s9!RwA;&X(EL?zz)@oe8>gih9@ES1-fG<5G!||i!V~KO)0f|S zb!u}QW7VKK#0t{akiP5l9S37VPBCF*RPDAFAD||B?=348)+bSsB%91Z^yV#Oewe_} zThixL1si#|u&u^g>psGy3);d+feiSijB;69{QJ|RBxLpTv$PW@L2e3Hc0|zz z!*Q$I6iE}XNR$1@l_$$dvCG^eqTO>4@RTjRZ7I6xod-`!e^JCgtemPO`XnB;xebF&92w`6>f)ShzIQlWe#B)qT+WOaG?>1hzlUoye{x{k z8XRY=PY^p^L#4=lgB6$!!@(m|kf*olv<`~0G>ugl^IP3SeypsM*>yWRKb9Mauhf_H ziow(oww!oOi7xX)RoRSaqSHF61cXIw1Jkw3j_7MTMPnrYO=6wYz=X}aA|Gl>ktEwt zry6_BkldJhF&2!9&%2f4{hs9|NG~jmpfbeA5}0^GH(=^>-*m1{rig0k7r5|1uSW61 zd@_8YfomPsZ)N|B9RtKkWYN_uBeB{1@?kmQFdD1vOWeNZ2%WE7Z1Jk!nE>PWq2xCHJ6(*3q5)qeH9Xi$$GQ# zTyiX=^Pa1T(o>{Zj`>sM$L{lLns7-4*{$zZqsyMHEVsL$?Os;DNh**QT|Oaor&Sks zqF*Y#PyKlw9-mNS=5PAO(fMHIn{{Qe0+26EC1g8(aiO)%)_4FYU**`oZl;TlZ!TcZ zF*EaYoB0ecHwQ#{~}!9 zTo}w>^~3vAik4LrZM;hjJfPt>_ptO(!84(;flg}oL42?DTD0K@g}BorE|nINTFy|o zpAJ{*Ks)g!=H~W~(cU=rY3Izs?1$~2YjMh@Cv;ZEWsJFWsf^zVv73*PR0UT$r>f^= zYoIanW?tB4)GSRkPJb%(D*cEHZI-as5u;2MYmYREfLR((Cs2ZizW2*PDjeLT#8LtN z(8W<0k$~g1?$|oQXU*xk#JJTCk zZjY+P+}LFRGeA^Gf7Y6$$W32|2C>`TrNq--NvALjU=Db|94x?8)&svD`e_nQ^Z}T( zWs+XxX*H}4ty8gJ6^6W=t{5H#3Y(G5S|Gi7^V@UUVetHGBNdK1bsDfycMzC8^@b6} zwIiecc3*{2MP7epD9oD<$yHx+AB42`H!9eUVu%|!4(rab*)lvJYD55z9dW%5Y8MZ* z)4aJW4@8wgiuz90E#4q78_YCQiQ=xT9_wytE?=&1+0bSkBwZAt_=kbKElXr6ekIk< ztLhupK4+ZE*hKQD>%qP!7b#m%&T~Mk>(A_T2Cd{Dbx8&0Tu;w9jEWMKHne#Pc)&-4 zpa?J*m1Q7R;neBVlVx>bS$@9LItYJ#CGb(~qd;;e&wag}P0}U&2-MxQWfBGI8mVr0 zmAqbo!E^}{^UA*%u-Nn$2K+TVA3!aQuY6Q*h?6fm%M%?35*au)V_j=4YF&{}R#BSB zFaE`bWmzhf1%}R59F@Y+y-Rw#Qgnkm(O+iYulzg{AO-@}vSz-~<16HdHW?M4cwSop zG8-A3!ICPoYAq@S(c1`ByWm%6I~llYH(lP!I}i6CR)o)8K{z^69$y`&rvvU=qm$nj z)a(Qb(~+}XrWe6&QNtweT_tGq3>TCbW6n>&`Ak1_SW#XBX4)yE>>iK)ock~w`E;#Y zS!n#y*!I0`*eoBSIQ{fmp-IWDb>R!Ve?9q`Fx!t3KaKxIcgo9P+hBvY6}tc7@@O{M zVwyU`SbQgwENa~b6ML?z+g~IatJ7vm7<dzZ7RocBDXiCKn`3jz+XNLo}JC6Ld3A;T&812pN52L(pp#N4$)1Glvw$CuSW!Z z^YE?Q8Fy;(?9_7()!qs6Te_#Df_pjdR-q+ZXS}j3a(7v`I)#4rM>^Ku8w^j{PF#!^ zOIageU1Nu+=*wW=0Dkdi9<@7UQYmxg5S)%lECSqHc9OY^m_Ex=Z_UTc*ro_}Y?&eo zfj3l)p>Q_E4BoHOo-**Z;VwEQmfk-G-igBMbDw_Yx7Ej0`lwGw0yd*&5?5Zyr5t&S z6}EogJJ&Gkt&-O7>weB5dgb#fZLqVru>j_swyuQtYIN^V?PS<*LOugHSyJl4k?FEJ z4p8o{%RXQ5c4PhNuJ)4BxSFhClk+!W61Sfq(8bHS#%iM^0M zIeaS(jv9~Flrx?5@W+3?Xm-%M?p)D6(KBGg{fo^Su7Yrh$jr{zPK_j;lSQO@IY?Tw zS%X=O4iq!r&~7UeJ&~0nZBn!(&RS$KVjjAAhFd4z+IDQY2_{kd&|~!E62MBL#5qGA zVns7L!Rs2a31#Z1ZfgH|=LB8aELUlATq5#X0148(X?>^bj>YI{s=i_Tpjj!n#UW(U z({$QPGihPO$x%UzuP3%Af_N)~c+EugMKUTJCyr_BtA|r)S8oy=?lnM&0O#%U?%8^AW< ztA_~?1%L~`_aCGEx*S}LWe)cIOWRMW`%b7~A5klYUEnc?HH>eDUeTQ~o5vPc;Va!B z$63T~Hj=#3@$(G4$;_VZG^3}_!@(AEiY~ArDYn93V^atj#q)wko=#r?PxNQtGkF7C z4cd)6^%L2rOi5md8uyv#;M1)tARQGimIO;ZCcg1(!X2`AVB%;NHvamjccwUhZVw5{ z;OFF1^P38p>tt)-J$ke}pREqx9sx!Ft_1bZ#m!r=r-+XqWLe2&m%}H%sF0j^i(EbD z)q1(owIc~N&7N*nYMLbAUw-Dw8?1}&XBa=)@iOqKTN{>Bc(Gn;L3X0-jMWDQ+^A7S zJ4gVx3HlH{5?`n>3Xp`v?yYqYhHj zMRX_OmGGL0*EL*_GQ~UiASa3FUcP>^hQj8F>nDGD;#>9mn$|=0zf$Us4>`C3P+(MK zr}*d?Rrs~L=o%2meH=5p%-^+bjy3o~;#Q}Zt1#!(W&w#I!#}X4vToeh)xIqHIbJbc z*kpg6E?C^YxlL^mRu4MEEiNtWT=m3G4RFn0(1+C zm6@B)>Ne^C#7w` zed)o4jTa~GH;G;&q=hB2imi(R{CNutzi-m7ydw$mAKX0p$EiU%U4=i-efQx<$M|e4 z5M|V>58TZTv?o0UT)Vg;jL%4{NS_d^E3fffRfh796UVJ)p~e&sxI8h#9*d6R;fyjS z02W&u5uNKj&86{D!_sc(+tI8ISM|M_#gT*bccYhzy-G%-=NiGbcxOjST|}1a@4Mk2 z@P-Rm;&ly2_ja&)l=Khd@Y%H3)kjtz4Ekt}!0iCi8519`ARE{J#&0!ag`&nlI6s8U zz5Gsb7>QutJT0@(93bg1Vot07n5cOOMP#WED@EVgbO9JxOpQmDYD)-XgLncZmi-M2 zlC)G-csIB1LEG2;vZRNQXPtwjS_BgolGY6!gaOps@Tz{%RHLs}C!62*2sOAE$_rcl z)Sje&6y#Qv%IINN#Ix%!RbgT~y?iYx-WVXlnB9C5y`*LY4TfnaN{O88d3f9FBBNd4DEt)7N zXfJT_=t|tqx~v-8jLG&kpv?xZ!sb#@?{4D+E4AiK4_2beIdRQE{C|+>-yE8D*O8vPgNwnAQ=h z;Ty}J76$WFlEgNfHn6^*0=U5qCX%c%S=@c{-=7LZV>N*5d|ams`(@O-Zu3HWj42nZ zpR<-6GTpvGBjM|yX`Pp9tHvgW6qqVLV6X6U=vfFrB_od)ds66YU&f;}HnaCzzXj*O z2I6QIXm0>74!(D!j?P%Vbty@}6qQ&F6TF`VMMX4%n@j}ouJLg_TFuI*Pk7CG-A&8P z1vB2zX{3=PR;Y#$lQ1KY+PU(rL2m;sQP1#{h7u0Jb$UF05tdU^)Edq#B{UUv@da`C zc0V>3ADH$ld;)ZW%IOj{+OkfU9d^*x);@*FX_Vf6Q1O^OE~)g}$aKMrX7_~8lwdBxbM2i7fDw6yKC>t+SZQU~zHTM)s8rGMbc?8Aj?3xd53nR47H}zfz7Sr_!a6#xkEcoiCkNfvv>z!W=%0;nK~f=1Bc6O z=B(@mO>fqF%ZU3F0=wQDl`a@g=EiOG*6v^q8;jLq#4T14haIm)JGsb>^?Bj`EN5zo zhrgk5PDA>_5AN_gkJev1%M)9LDS{g%J{SY}($HmDj6>Qh-aKWaos9SD zgMOsBD=-Rm8O3|SC)_t0(TCDQI+@t-ZVu(?!PLwg(9N#7iC?}LteN&Nv+2`v#-lwb ztvT-=`B~qU=aQ@6UPEp<28@c57>*lP?p|XHSPcgJ>;R72ucG@aoq76#Z#EcH5EwZf zvPJ{1;V(=VPf-XiN=v)jw5voM`*aYm9C7$#m9Y}kL95XEf{s#V?CTc0eqqITelv@P z5&`6TI|1h*PZ2xBI0i440K@v%^?T_N@D?LX}q@uW6AKy~=2;wn-yR}!^jY6be>P?B|Ac4KSWdm zT|sW9@`bu@4&d;IV>fc;G$^S*6%IQIk`RZQ(fH;Pi>3pSm}&wr7)p?HS=?KDd_m*@ zj0MJ~Mk@vemyS)=2<^JX`PDv(Q{A$06d-5-u3M9F-IZYx<xXR*;@I_yYSjZo?lVlEWy$|c*Nne=x|PI-AGO#bI&<_fx;m($~|TD3jepO zq?36&HI$MS1k@-a_)N93kLf>V%CnHn;Xm1`LC18yq7p|{R8g3{<+)*$a9xmmnq{Gc zUFld12pC^T8~!l8Ac@?WWp0rv7F&|Js~&LdoiG37X*Jx-N#N>Egx?XoL|EVlAMN?- za1C}8Nm?Et)s_AT<@+ZXcUkeVh2#;y-rhBs0b4qtB+^?hZ!Mov6DYLBl-rj9|EH1j z-Y`KjLy5#Ua;bHOFM%&@BQww$RFtl<7Q~ua2bHK6y1;Lr1@ySG2WW&RN6GCLM!1`V z1&n#6EA}K75X$8wYo7pk{;>zDRanr72nSe`tc*OHa0QcZllH-pq&Uha_m z=@h#7MvKy+o?b`nAuD#B`+`pf@>-vm%I%h{mhttXb%4^jLDEEdX(K)ZohOsM)3e~g zyn7qQWkc8+%F}@^W`FUXBLxQCsT+K>F)Q2w6A5#J$H8q&9U(F)}mv^eu4HfddoNp zW^wy(V zXOV16e*vjBnIvi$-LwMHIi)RE^iMC+^GSpfa$0l;r@5_4)rRbLz{xJm$+n(+O$0BKEAw-b#zLbl`i|ll7(G#jsoE3K0?MWG?*nv7e)mO7uo*YN@)JG9SshF72qygfg^Mz?AK zTOeIp z(U0rEg>&Er@P8QiM(}}mX5Mul_P-hUx*33$!vEpL{J%i}W&QsK;eUhh`zHIpmGHln z@V}MtS2g_q`E@X{I|LkOIQK|cz4rJ^fm5AOUpoyVzhtL*087L{>f;?4D3(Jx@^VSz zFeoIZzE6ClWElp(dR0m^`~`djh+4|v?B%Mc(Ytd9xJ3TOBIy|+N8UwAn^O{J)syrt zNe~KsPE{C`*}xaaYK*;>$9XAo9Arm7#~KG@VE{d3^hf(cxS$bVX<{P}vu!^`=}LiE z`Kyj{=YD~<0V+;5C<(4Z*uRfan5om9*vdw4Kz7UU*~mltTscP}hJ{=ZMN8fT>X!$^ za^*;X*W~l-oU^pFe6SK(MTvDj!*Y8GvwIjdz5`G#T`&2 zD0H;9%kF*S0Xft4hgY5no~kmfLsNbwx^Ty&B@|%?S5dvEmLg)dI@RvHK|)bj4x*~| zbFj^{}_H->CI?`h`ml{^0077BuhZ}Gcx7UBr>l) zdcwFjb;93w(i;OX&N|)xU*3~aRbYk*r3u24Zi7*Qy z#dq`mM@64{>t5NNa*=@CU?uaL`heZTDdW2VB6X|^bf?-POgS3`d(t&3Dk2X5)Uu(x zIj643Q>?jW4*w<_j}D$1bHrt7z()?=;~E(S$(V~flk@-)(kr#??E&5x4iHf* zs}F#arzUk?gNvFV;cTuMGL8qlv$Trf3JTB_$*I23pxTC3U{Ny%4ajxILk>jvMjclc z*Z>SRmqxjiLTx?P+q5Mh#PST~C?gQ8=ZY>t&rZ1t-KfL8kc>}}wW_Qqj8mgCf!6&} z6j!M5cyP3ydCs|V|BbIr#m3nvpC8)Jr-x|`VAuWy@BaSBH|L+cq|b^2>~Rp4ZpRqL zEUt3&>@|x+AM^q5cs!~~zk#QugsTu=^!yaZt4>O{9%RLsm{uYv)YPij;%NTHEftZA zm5vlzfQTa#UYEW4586>uP&9u4a(!tKGwDWGgcE-$_H+Z6x)vD2_QnMx>AjfF1IRql z^s-xRivgJm#@;|T>$gdBPbnvGo?dp>0L;b7@0%Slb>_tN&2pMYk4IbJQqY9nSzsk8 ze1PoeV(iC&%1~y9;H0^FW%Nur>j1cD$e~S+x>zH<-~rFo(Xset2EU+o6HaV;t<^=DkR#R!aRqlhP^%?6>252^Z>TJ;Kv@#U^VBMqt|V<5;bNC^uV@>9@s>|k1GI}Pel zXbTh&?f}BOMVE*bKbBR)I0iOA#_Mm3cP1{Gqa#R#qxF{0CnSG^k?Rv$uB?h&LZ0LL zm6YM7G&r1!EkIuDjg}*mj1(L+yy`}v1k1{zOx`9%VgS-5v2TI7<( zPY=##c=OkPX_LN8$zZgbFd3S-zkLiMP$);0EVdxyTQ%3xU0C$&5Q;6J-iT8(!2zzI zge1%jtFL?eiu2+?f7rG3(<3tpkLl>v29?xj!trPw0sbl%SB%cxyH~C5?k>I?h^^#v zx4MrX>3y*KOj)mr{54h1@ALmP0{G)2fC54B9k{F<*}Q;$TSa001ImIP;za`!v3BGT zdzZ1*GoPZY`&F^K?~-yf9GU5TNy`zXOX*pJ#bL*=1qfWpQO&W?-WhaHMHf`XPr@&J zZm|C@1KjoVaRe+>WtMLU$M5*HunBtII496PfMA5HVJPUEqoK)aaFllpbpYVbn=I^h zS+6YNy5~?4hP9%7xxOp|KNV9HxH{9#!<#4$DKtWiXR3k5*aNg!mDiEU50u8Iwx@8X z;ok9BKEsPlVgF^OL%>WUENTtQT6EUrdcTY~G?*9e;2d1l&a;EYy|BKhfXf+Dq)DwO z?B-3nHN~*=SB(@#%zZPh^oJXK!z;X3(rVH+(jYn?B_TNDX$2-F@#t9uQg&q=U~T*g zFOG|cgQ_qRi)0~p)72n1Th3E3=ej0|{LUnvN@S?-p92=(zrXtZl1sfUQh zhX|e3eD+T5IrKZ8H2EAdas8Z4Pcr**{Z3q>dRvFGD(RDNhh-!FT)siipX>FocGum~hqcru5 zTh-3X867>-=2}z*FvSbf=dJkUHovg1ssvTel=@yLn-uP~0X<7enCtz4djFOjSfM(X z*8mM`#o?o)-7Gi1BaAuXQ-p0BgA&juTnFBz4CJglcpuT-bn5xlcy!;oWZw87aee+0 zD7$b*bUU+v3=RTy#f^p-1>S~_L6>FFlC(cVgrMTMd<%RSp7b=C)XE?bk6@fzb z0Vyw#N}ve!egOQkf$zVz$9j1qEsb;P(X5JNuVbwqR!|O;h!4+A^6&2r5KOR8eMex1 zc~^Mcp6O@U8(d3*DGH^dS%HiZ#9YCvK53&lbN(bBM zSMo~MgWi;GBYMJzKd6&vYrq`j*)S_`Ec~@(P5vgRu^XPwTPSAu#Npi7CdLX3c_iG| z?QW(#hp2&VN7*x-I76)MZF~b7mG3I;kB}xck!|sULtNKE76M>K4Qb3=ab_vRI{@Hc zSXFi)cT}FwywQm&U-BV*=T=w|Okvxb=P-)c5U{(#l^_eN++CU7=$rLAM+}tTaL{ZE z2uYljOp}a1muF$bH8NHQML?7ZJ~Mi@=Nal9O{zpXnx$dsYHH{CJ9B@9agwJ20($>= z)^crrhW5G3_v+2k!R@LuJzV+$Yr6G?^5npLI%df`=pvFD`uyGyx)R^1gAZ=K&1LHJ z`CTq33_mS`2UE)2T&tLxM&r9TJ}7Pnl_)a4bgMGvjn@lz94cxjB#CtbGsXuvw6lM( zkZsRpxKzV$nW}NCb>YLjUh98)0XQn;Je|K$Oc$lz(omC#5=~JGxxfx&fK3qZc~o6p zG!GP6(R1LJi;4y;s^bp@@TMJBBLl&aAlc!WH1k?KCF_QkU#zr4-7eG|-u1m085Tc^ z>BZLd?gOFbdx<2bv`Tx7%8O$xE=6*HPtAT8Z^0L|CRb%CfL{U$=VseeDA6=)?VepkZqMP9ksgtW-nnp*aKs7cFI zxBJxtANkQtYi?TSLKMU*M`auJX8c)h%3Pv7NOe4d&Hu|cj~uFA7RmAoqNuzxhPbTV zCs|7XFVD=TnT&bN(X$W`h0PGj@uCPM=Dd%`(q&X6p32GRtpx= zRY>>iYrqLjaOVUgZG@AkT~P%gy&P-WfViQi7<%EH?R=1YZ@2FO$)QH0LFey@OgN5Ows%xw2-x+yQ5F-H~QQp0k17MG_<1HrZhemj~>eGs8+k3Ah?~Ce_Kgh02f<_-u_h`Dt|E*ynmODXKmbg zG{k_8$YSEOX?r94)uaFWN_x0l1XoD=v9&3()GhMB6&k_5D|8c>nXVL0AYOfuZq%Wm z>Qh|>dR=1U&V$=TdkACMbZ&M^G$4nnn(z_X6;L+3(?D3nX$~~B)_~r& zUy0XODw@|=k+?ZOK{(GcyySXl^TTb`2lM^Y=yVhl%E(bNSv|nQep81hKST-0g1bru zf!8GMthI#rFJ8bOO3a{3@v`7fSME5Z3=&{m8WaJEQhT2F4=7w6GR=IIMQ#<<$I=?KV~aww{u9&+jyVdeo1)v|mgI9yi0 zq|?`7!?4ppW=Cb}l7aT%Zv#eTT^=z2m5^-g@0qO!Mked;yzpOLqPweYLYW4qB9vGw zS@y%G+D;~{&Uj7^J9)A2WvXB}z`6MjjX$@}@-oc7y;cd6trFAG55R=*i@Sg^u{xif zKTV>SjkQrv&vc(wkr1<|@>Z`rM=-d0cRv9=$$35z+_oA0Db)fh$0fMkekHR$QnF#H4a*_RoIRk>l2-e?- z-cZ4Nd4^T3&h<5@yC?!=Kp;G${2L`R6ods~Wm3Xld^kuXMEEZA;{9{*tMMiOue~pi zhqC?ueTtH@R4PTNkV^I~yHeT7o}FyjWz8}?;vvbBeU~uG*mr}Glzkrz#@P44$j&t8 zT=V@t-`_dE()sh8*Lj_%|I)mg+kId6b$veX&wHWkq`ZI;fhs5UpNc&rAG~#CcCzuZ zsPp>!?FhG}jW-fnbN6>K1#^H5yLqZ5jGpHvpwinj))`Q+JDc^S*Y}rbibUctEtgk~ z)(%T4C0Ij_^dp%hiJYOP`bnVrqrb9qa0{%6x4GVbl0YrStQQmq1KEya*)@E}@j>p{ zC%YK#p)1a@wzQ&5oQj3(_Z~2jG%|LQsb{Jl@Di{^=xiSlWb*8_TG|}g*Hc(ALW|VU z6Q`lHEQd;?6}VdqJtoDfU`+1nmG{`)PV&MT{mN`zoL{MVi__539i3Y|;D9X~IvT6I zR&x9ti!z80P@L~HG8I+*yBaJ&b1eori}9txsIT^-aHsSO7z^m8Acx-)hJs!f&KPFs z8$6Ypl(LPDxn*+b*QZ`FUZ6G+VAWed5VQ4c{Gk^uRS)U1#o@6-6)_TflVsz$R2}e> z(+qDpvTYP-m`+?(hG|v>7*?-)%G-H%#@=oYigc`iV|Ibqw#r^mG1q>qTA_TtJpKvg zK>1@gk{%8y1;|$C%Txl#zbVBt#GLZ8dHY#vzRXCR-?H680v|FfP4vktn~u>(qg-bTEZW)DKJ#cPBeAmlkoX-^NHDN$6fV>(mQ+5@p_&>+M)9n3a_{3g zW~_JefDM~nWqvef&tEmG92BY}bdc?=W>-}IHF3{Xeh#q#8MtY{agFll=Njl(;3irf zJMgR&ncgIFDi1i;dwuj=UrU1OO0q298G;aIEQNngdO2W>2Ch`lHw3uITopbp}K~ zxnbZT{n1@T5b(Yc%T7(D3Rpk0_<9YHQQCltU4r}4#W+RV!5@*aoVq%vFWo)se4%nk zk~ny|kvK)c(gE#~ewiu<1Oi?l>^mQaR6Bx|3rgZlKtHGX>&Al2XR`p3KK4B-xNT=u z+`j1Q#f$797(?i>?yjJ1d~Wg12%xTXrd2)JS;aS17FNcev>67?h94r{o$BZYB1j)x z_rQl#+G8Q)ZeN;T1JG8G=%WClx3Yn@9mIc0VekEK z@p^Eq(41MkwG23=k7erRXqex=1I)U27Qnf{vxJoGH9@RYYy>IFV7Y*3V|_cuqkrFf z?0^6kD~KWmeIME7^8%>e>)et5M8abKZ<}%a##$;l{0cyMC z`*yk?VPw}solnR*9`I@jjPxEfNBA_=HJqe2j-_87I+Vl3g&jTIYy&5vNctfH;@?Wb z_JE}~Gfo!Bci4bt@&l_Qk72c`1MF#L-PX!TmwtoxC6Bc+c9H;o5GH*+QhKMgzy*CD zWBuOrAUDJB9Vjl67nXW69a<5!`fI@3Cb&WB-bWt`j-yYsv)2=a$B$EIiM#u0cc+P4 zBk2An%a1`kZkvsS0+Ziwj^#BM(@dZwu0c(Gz+jUl5VqUJxRIX^UxI67lw7Mlb zN-@IWv2d)a9i}2G(Z?;VX(Bg52GxHfgoY&^u(B1j@@@eO&WtgD%w+j0p7amdU!@g% zHoEv^9WI{jC0fl@JFnpPQn>x^PLFP`f%vQBUi%>t!vYPOQiBtO`2dYbvVx>^bVA^V&g@xIM1p?vxVjx zmVA|%Smc`lfBRd1RF<8l5#J-b}SGx|vQ4CiXLa*|KINT_OWwf)Fx zJ!|E8&*>lndAKJC+cSdK-5|NTM-pcurE}zZ5Y2?t4bco3tJ>NaXhg_SdHYGdK3n%f zyV_}`?cb5+t(t8x`{Kpy_#~}wzmqlLn@`-($&l8tzLu=$vqCX(;Wkak7 zb>`-L7i-d6-oy8N2R_6AvU#%uf*cjgGw}oTgcl}5*7wy?oKpkox2RI}K|9nu4D_Zx zB<{I3*reUn2`Bo z-RZ8yb#x}Vc4~7$`pc|EP|$nQ;C>W0mLJ~h%eFbw7tKzZz5?C?+Y&OTtT2cDi7+E; zo!aFb$@KigpuwUuYpl7S_*U;Xo&L3U0>{I#6F0;X4-c@^{Lf}D(=CFLZ{qbAGF;M( z7&3Lt-2Q@{qB(19rJV_+!uT;mV_D_NZIf7fq zP!aKQaO7nN$F=eLu;*Mhy2x{%8_7X}gdB>nhqp%|V)R_aO%Q0yX+~7Rk5%kA?(pg> zYUnn_tBAD1kO>EL`NrP6&xA3L4sxW&ovkC$l(SVb4=IqidSWIB*yzwwd=9aZ9F{!W zs3q>GYGo2;D&A z#ZNFQha4~y#(#uU1Mi;Bv+bAn293eWP6!*a7;qkG#Y2w>57jiFgLLtl@WA&N8hMnrNllP5cR#5j)$% zQ_YGGfEEOkg&|ZQfT7M^eePML8me_1g75SmEp%AR5X&12HPz2(SwClPG1H7I=&&nT zCk5lA`{f1if5MK3n~oX;xgYr!zoL7+XnL^NXWkD|g*5ZrmTKoJ?xSRvCl?RLJ0uf# zm_Olnjc>;el>N?m)HkyO5?#1q#8*`kNhp)cPlZU|p;;vD)^{~=j zj}4H*K4jv6Vb#*jvhE7}t##AK$|2LtU19kB9*`}O9l|$dq1<`hE>h5@|1xW9S@Hy{ zyH>0{8X-%Xi0q)W2gM(a?KHMvtgP|2;Z*ixIRmOm6QH_U?G$mB>-qRx+ z^lQ%pUeiF`-JH|l)Sc%qGemSJN<9LUG)BR6yB5hLsZy=Mgp^c?}3b)i5{Wfk7ir_ zAP1X?P9E@=NQ|LhE{)(G;uS$~4V&uspi98m+>*SE#IFGc5Y1SP{}^gWSbbf;t^sT* zGiLk`maLc1PEjKnQKtH|%AJx2V^IbzfMk;Gj-|2cf$Wa662e1It}0r%;ritK2<~X< zOUkv5dRUK0Mrn1D`M8JVuAz!e{~m5P&~%jj+tId`-|1fOnR?f%3x7bv>Xj>i|6lu8 zk!A*VMwezKKB>lXRppP{aTVKGlu~GBmBOsH6hQ~Gw^~y8 zND8F4t6T(g+$FBjME5#Qox1>$bt_xjC$3_=Qp4wnE#D*4N+QfwY8MS`Wb>T-CKPWM zRF*!v^X`1#s|R7iO7iSnHKXQrR)#Iuj3JK-Khl37d;_`qPs8VJ5vSBMY}Pg zMKC$n?iw5xfdfhHA=2Zn`(sWKesYK(8~!_+LEmu-->1LT;a?uPZT)dP;KT>1M4eK=IS`VF9++T~a}9%|wY40hLO+uXwozpuHDXG5XwA`_kQq-oGLN+cQ-Ok%Y!e=)uw z)d$yX0V38lVE6o^S&5W$j}0}$KoxC0Oh2czfG0JoSdNqinNnq60*m+AUgnOw0}Xl0 z0R(ybatL8XtFD6~V@111RSrl+TU4RtGJQ*XV_@iqW1FQJe(|Jav#iLSC^7m}Cwzn- z)@Xk^tZ2mtGxWhypq7V^Pdz@_g>I%rt-J+IGaus5TYzR+8&@JFbkvsH_bEFfYC`MR z)-aUkSxiP9Q7pM)k8zZxFSBS(>S|{Q!m+3j;pM!g4xR>Ou)kafI@EJUs|C9&5sLj#+dT#0Kti3|;)X@jvEC$LL%ckSqtWiVc&H*(8dtpXEfy1Tov zvLVsOnR8(t#HWY{AjB)ll6RFcR*a)B>YfS0ccU*>q5G!jAfLC|*~zZzU5@s0n+)>d zl*6dT=5WR~Fth4ze`7fGsQbRR2c83QKUQHOEGn(=Z&?^}G zgp}Ml7CdTJL-`6XCHi@16^ZAo*=X+&U`iM~NgbN&Ct(D%hmLla@jHEk9lFLZY6PA9 zYQej)f~4R;Z0=mvLrkk#$8hbcLzS<9gagL8Ap<92OR2~0V_uu9Z!Cyn-3*m}Vl%G5 z=80CNE%E|R^vxx%JHVc5+s|V>wf%CMd71Yhujj#*n#xo0E(4c`_=|V6%VUl6*L$T3ED0r)?O>Os*R$4<#|QU$Q*(KJfT}p!-#r0XKW=)E z_cPd{`Xn={awK7Qg0pJeCC12suq8mY`Xa&DJ5<7)c~AZby(4&gM#0+?=u0M8K2`|{ z$31J^32smmwrB8Ytl*D; zk95}(BjC3ef`9jcb%5D~pg?o^8%#%?156p+HM^;Q_kk(k!9i0bt@}HL-Un4MBUy%~ zG9G!00Q~R;xJWV?`xhQb{s%zT!!)2d7*G)vIYNm1FZ?M;7koqAp&`@J4cXb(Vt}ad zF~!C4@^3zHstA0;OG3@B63Bn!TW8(DV^SBH8{<8)*Ex0VtTFh8^#j+VYf12&|5*sf z$p2Xg|F0~BhYq~;ju<%A#vn|$XFZAbH=7R_t&-S=)#sH%=Fc?i{bq+b<_}K0$Wx8w zMBTui-~3N9&%s71SxAn|+<)~#=Qo?>XA@8dus#4e$Agmszk3lGNMFX;==L08ntJg! zulqVZxa!xSyY?5_`|X}W;&oc_r}snZT#PS{Wcrthf3&iJ80;NH%zJw_77xij!R3sQ)8AomBID+=Y#gMv@BR_ z0&1BwP~supiNqn=C~uR&4Hc zS`Mc*LYY@wBwS##Rn4y>VAg!2A&z3UT49vu(^=MvnKSc?Yz8~I?L}ysjyGv-A8@eP zPN(_1&FNWMQ+1+Z6lp)Bp7#vE@yNXNo021uJzRR^C+89~3%w`T5J${l&k zo4*J<>*s!Y@dMUD8RfGgdr`S3osd>1wn2@f0-hxXit%@E16u}=gSXROV!m`g)??Al zM6PDF(x49F1v=Pw>}T&9)}!;Gd=s6SRpzis=j5*a$J#rs=-g4bjJliYnY0X0E zN|TEJs;J$075U`DGZhp>CY}Or?j=B|gV0zlKwqTOw3biowtd8TCS6?S_%fGDj)eF7 z?Ts;2#)cZ31TMC-Z*)K*pQ2Me#%L58)WCy^;>^1sns(jg?$7(2wK7;MvRB@iiiwKq ziH$)r*f?^BVdakQA%YIxu&-ag4)^Gf%j&B0=$AkAGlXj$?09{N-@RvE))5LcquR$C zzYG>oXw2cML$cHL2K6NiKVP}B8&+1?LDXT2nx}78j11;z7}e9A=r&5Z_37rV`kmBg z(L}1Cxm<7a#+5O_Zq1s8*{qgTp0id&cV6Vw$O)vkeOZa!Y_ZoM6b3^ZF>rWw@kk3z zGB*e|{%B}fL%J}tV2m_7xqsoSn~}C*<@>i@Edc}h_Q~r_D;FK%OOL(YE9Dle-6I2W z8|#$hXLNhEK9+xwMeZJ+FVOYPYurj=MlPk|>_^kO@2TxP<(k-7FITDDsb)6#66?I= z=oh*^hC;7=Dm?>j;IH^-l3b73sb4brma|(ix8gIw(&JyIg3wE2_HJ-e zUPk`+`TtpF(jnplE=-<-^q=pc2Q2kuzQnP!zzSCr#zgPX>A zUd+i)KR%hHh$d`w6h%iz-+A$ZJ;$nx;aE|FBjMzTLw5>~zf{dubeO=FL4|F_3dnE( z$`UqUVq1aVS;KGwr|1|5bd^%(gA;Smn<9z;L*c)gYd&t;UEBE9t0f{03<) zNY&KL(-Lf)qWx0Sj^9`+TkUzIg}+Pk1)&*KT#Zm?9*$G_kGzbYhi9zl?Nhs@Dr~&e zy>Ca)K_fQbq{+>yZ8j91EP5i*z~sbg9&1Dy2a$_tQ!|L3EyA=xx8Cg6YU3)jj@1lE zWEb1E#h5G=qHtpFf%yvZ?~-#)kLvfr`)e@S?(tl;rf~e0%1%JY=srdq)-IYOAbsn* z+9vN;icX<&Bkh9Mby#de?2`T30g0L(x@o zGpxvBW%zq^a&q$0-iJqF@>L=5lT`IMTmQ(b5{b6}tOqiu53Iz-N8Zm2d~g1GA)1y$ z%~=?YLa5P1&2{Lurg@e}4He*`?gyIiWo~KoX|Sm>;>Xd#KZbhXkois?%P~A%+10Wg zFq%#y0W=fd={I=Us(T-#I!@_ni$`m<673VcFwR`|noA91ud=3pwc#ivbM z*C^=|E#q0|K=6QthNX-yiu;bM_LWix=8)BUzRbCw=3L&EY8j_V!i!)Kg^@Zb8O!vg0ybk)N)7A0D)Pq`Q&scxIl?J{1hE zg&S9^*(pnVW0l+Tv<2OhCR$m-o}iE^{Ed8U`fsi#H(8o`*E2(=s2WmE?`x(mG#u$QczIv&;*G@ zoy#jORyjLbel-{KbsYnlQJjj!N&wRKmVqV+-%<8M)v8?Yqp9&>%|i`0XVl%Zw6k=Rb> zgQf45UAEhS^L`?$(%+Suh7w|93w4|E%-;PtcL`BSsQX0%7w*uq$KSo{!^R5r#pA}X zi3Ed3EWw{v!|-+rW@WbNKPO1Z+#{9D2brg!+XDm&366%tgOqwjUtgQ0v3;qUd_Tz^ z?ZAdk6H^^SS_P9A1?+<5S6@3(zMb&HWAa;>&5loyeaKvmy3V7(rFpZdDh+ss6=gQM z+S})E`DUjWzBFTMOB1gW5gfuE6rPU^=el0+?NLS8dg`FxKSNt~Z~%Xd8tyre?HMUU z(E&4C@3sV<3^xSPxMnICTaWiY06c129XA%SSc{Io>VyucYfI5fy+y>b50^;hZo0-- z*g(*YyT|u8f5ON?B@?i-EfO#-q4s{5c(75)7UE_ijRXse}p1+))eEV1gcsQO*S4eC+irt#8hy(T|pHd-%3WMOu$B@pgSdXOM?jNO- zg3a`c4E8^RH-k`==<=-@QJXi(IKg9Zkk^!mhFqa>TROx z<8Sk-uIe5Ew=S-nw(O{DdFZ3EYbWiX!o%B8hgZ9@upZ;rWy4Dd`-H8@)_du{1ypw!=e>PBIW)((!5kkxIZpfiu zDegJ7O#!=#>}1AGQ0P*Zt2Jp*t5nz&SQ%YR!H^x4JKYMjDbOAp7`Quh$>3HbmA!`g za%{)dolzR=MY(G%k`UEE8|rMK#O}QP!sAXZjxUywA5*JR;x+Uvb+oY!_}25mD{?wr(`P)IZ^>f42?qs?P){AL-)P-g(mFD$Osu*s<5-Z-ic)5oNy2 z^fQ`pFObw^bb=JzfJvFe%zty~_H?RL6SfY7qAhZ=u2do* zED4<4PElt5?`h%f-W~A;!cTA`n^Q8F?1tMTFMjO3Fvv6i`a1I%zJ%;p)#-n4;Myhi zQkc6f65qlrDoYAm9iBa~g#Zm3NbIs(eq&=KTA)IP=7e1=naQ(OwAhPhC}HaU90^`@ z+lfDis%Bpk5vFt8G>Q6sRpAP>=psH#iS+NEQ2Fku73pP_Ek$i`!(i1OPS<{2!zQbLwI{ee^%k@x;4p8z*~Rd~PYHow=#1-##0aU&S0y5pr_EFJL# zd*-W&#$RR{3yt{6$E^PqC{zuUy*FXkhaEJf4xWP8B>M?kfr@myq5N~jMP;&BrK-BD z0xqLz`;IkjrR2B%M9d1jgyk5DbnpePreq1dwRYH)`a|7GnWY=m8`Q|f{Wk7Q*J&f- zrDfm-$-OJ&p5#C7eXl8JJK#?h?ALaOg@k)qw8LlSW00o$N=A$A)A`9#U)P83zOtF1 zpt5o|)IpbbZ>su#bSex8xI+l`V4*4JLYd>HSRc3VP7qB+wDX_de_a0#p{TFq-vT^o4&yBJss?5q?&; ztQ1|fWV<$wiWfI$XMMFlE10-rqOvMJF4MR*Px$15%H9f*wKn( zlHF-Y+?4L#Peqz~M|wRq-z>3PF%wC~$(Uqpuy)s^q5>xDWAtFOqmi1O!|jPC*M5=w zlYD~8<)p7RmK*EqQb`Z2o-=5FAZ>TczG;f+#|CVsO)zXc4O?}op5rw;5FP1qkL`}Y zekFsg4 zwKj4%!t}+D{IG=7+?wKjo$hT9Pw=D3-)j1!Iqc4>#*+89d7%;^TVr*ONs*X);Hr%w+%ER=gygq-TM*{Psps z1D`%%iN-Uvr8q^zo}TOIAWe}`#{Ni0?0##LOP3I_1Xp&z2RWd+BJNm+5pru)(tr(# zjytOILfY8rLB&Z<0}=OJvg&w~s>(|sd||QZeXqMxK_GL%{aN~Qvz0Zn4Zh8ot!0>6 zw`=TOuyPk(LK)y+_pfz>kP#__$j|r&GOaPbK?%{yUiC1@F~zu+^CYSjzc`6r@R^dyktpvmpT8d|?ajP3yqfp2 z&$~O*9+Vi7c)t71+zQ1_S9+`K1jTZnLNf_YgU2+pd}}f3MqJCv6lFj22m{WN&?-~V z;^5F#YFhyTHLljijq{zkLyl|GlcEYrN*!8FHBJ+UrM}-XDq*<5b7|(=?nC)bma}$Q zE6~T`h3}X#EE^aup1OPTmv|2Qf`>pj{X1ZGZZ%xQ5=_l<8}O9M&}tlsLv#{5FHQ97 z4|seE{nWPOJGfy^6BPIo+d*3cRs&h!n%|z%&rVigpwsf4g?bW#2C;|0Sz$rGB2RmE z)UGIA!fRu1ZC>(t;kkd6U%8x7N*CJcinqS>ii*#c&EZ!i5mt(#_h=tT*fXmR&#n%7 z_%znlSO)8<7+iB|mKKM*?wC+m&Sy|$2jAB0%QQ~Cz~wyMqxSyEZlazyOsI%#@b(ad ztEHf1j)%M8GHa7lk$p?1baP||n_NU<^!fRo7x>!I(f&u{Y4^v;H~M6chYQp~5D8~4 zDf5iPvPJq=j(G4q^9>%?zisMuUNUk=H0{wKiC&?&HbgfxI@qg^^3e*rb7kHV-I%p8 zIY3>CllL}q;d=CeUEvq4c8~!Hr6mKcO9o`^1julEcL3N7V(#3X3qN0par2Z&zNYT*%c|oqyB`)ixA3!m05Kq`Dy9-c6W=MI+ z;vJV<_qC0v+p?udzZFzbq@hkjdRdq*xgiN5r7p+4Qxk3*mAvi2Zf``l5ziSvL7q|b zhz#qb!xE)Nl&8%JOA6UgsjsyPUa$F!GDL`N2rBf^srG%47JrVEM~Xv&*6Vj!P~+_a z^TTM?n_q{9Hl;1Imrj)I)E}O@u(upYQ>!*%p=*sjjj?4vBVXs0Xq+rM;iB2{a=KKq z^jrS$(9qnQ{{Ef*dw?(@Ix-OJ6ld0;HNfbNbIY9PPG#s_r^7PA!%XAx#DWmisjG`wF}sHat%t|1OMNj$w1ZynOT zPUQ%5&ADLr*;jZN%1`c7Z7PMW-b@{W!j{~%C4UhrivW$XkJWXp#&V}c#^+yzK0EY% zNOF5VA*`8DvpL_<`YvmBv2V-tx+XmgP!-U}z@5 zp?9Aa^AZ}v=8wHabb0YU%XxEgE?ngC-dg)cy%hP2>FhS)Cq1QsBYS)1k~wBg{yv@@ z%wlXs5igD6e^d|Da`mPJ^icC=?)>FZ1s{81EzVeu4X$)BP{8VVl8eQzo(j^w_OzPe zc?N**og}ZijlpRS+OX{kGo#-Gw(!FeZ=Gj z%+wt(rB2ZJrkReS`97!U=bUMO4UMaJk0kzZ&DmOuIShlHq+agORNJ9(wwUh<@GV~$ zIR)Llsv5JPvbvH{NuF_rsYgIWE6T3>8E*k?%F6CH9jBUeOo9I5B8c}?e4O>$^p}5O z1&v(;r$^FXPsouVVAc^`k|gos2K-+~a$B&=OBA&p=eTb3zij38=?1Js zQKJ>CCL#UZgg;R>PwUfN(6z>!nY^bJvoiWrKU62i`K6*LcyeJN|J-_dgMhK7bh@KX zkW1X0p^4twijiEVlQ7HchxkoqJ$psNd;wSuAw|lx=r78e zl)=#L;QrBtvL35;aa=?Nrp)Ifj3`RB|GeQZMjC~QB!iXfkU}mFl|%O%?`bQ0b{TAa zI%;7K3RKj48T|Jf{E>h72kT`@ZKLW-=VbDBGh%^k*(Gwa^6ei_h-+W_vGNQ2 zpbUJUeI9}%P&_6F7Eh}(@D$h;w={2dG30iYh#uV)-I6p zFrVv1#n|X0%<&OSr68X%RDhiyKzBa;AsHGb1(XG}y2{GRf;kV{NBEgUMc)mLjlTKig8P$yR9RH}uJC_Vo% zbFIMm};I!ozE=W z>}-8v-?p)q+>Gj3M)ZI|#_}4u<}!OX`5Z(1FWfTcEKqY>>pTF7O)sXe(1DsODosWe zNQJwnYKh}MwenxmCHt$tyZ5hVQuum)XZ~qO1_&CY*^Zc0Htb0 zORrQC4g~qx`MV|6Z?K{R31TbbY1ek$6=}18mf{8=32b5;<$i88&%VA1#wb1Zbjor_ zRJzZjKLS?BHTn-PLDr`M+7BW#Qncg4I$A6|pMECji};O}t7TW;HXArB?4e3EIEofM3|{s9sWBw| zRaK5OBaq{Th?%fPfL}@eth~Hp4Dql|xALld+~qPcIGB;TICMSJ5J#A@jWO^3Jna4B zIQMzd*z06tc^D#&>WENX(%0Moy7EzhdUE7Bg5<*dFLwfb0u1vW0YD_Z4cMReRYhn1 zcOl+?dJvh1X8@OjsjsZP>qyZ9xH@i6b3@?*|Yde*uu#zUs}TAAKkO zI7Uy39eU|<`Ii~v-#6lHD7eOV_h4hBx8m1Fa_ZXTGq6_a)o5gYo;UpKR+FBHI^dX{ zw~q69@SmUjbS;K=!J#zWX7)?n`1kk8uz|sa+;qN++R<0==bvHVMjJ_pQvFg${QYLV zeh5fr@~PTul)t>W|GpOI60iY;afD?4?pePBZ5LB$S-a%#KJd?CAT7~<7Q?@m=s%0$ ppT+QBo8>=?;h)9uzbuA5|FsYs+90#h*+0M^g-5Cn3m=%i`X6-xC)EG| literal 0 HcmV?d00001 diff --git a/exercises/05_javascript/nestedcallbacks.js b/exercises/05_javascript/nestedcallbacks.js deleted file mode 100644 index cd3fcc12..00000000 --- a/exercises/05_javascript/nestedcallbacks.js +++ /dev/null @@ -1,61 +0,0 @@ - -'use strict' - -const request = require('request') - -getInput('enter base currency', (err, base) => { - if (err) { - console.log(err.message) - process.exit() - } - base = base.trim() - checkValidCurrencyCode(base, err => { - if (err) { - console.log(err.message) - process.exit() - } - getData(`http://api.fixer.io/latest?base=${base}`, (err, data) => { - if (err) { - console.log(err.message) - process.exit() - } - const obj = JSON.parse(data) - printObject(obj) - process.exit() - }) - }) -}) - -function getInput(prompt, callback) { - try { - process.stdin.resume() - process.stdin.setEncoding('utf8') - process.stdout.write(`${prompt}: `) - process.stdin.on('data', text => callback(null, text)) - } catch(err) { - callback(err) - } -} - -function checkValidCurrencyCode(code, callback) { - code = code.trim() - request('http://api.fixer.io/latest', (err, res, body) => { - if (err) callback(new Error('invalid API call')) - const rates = JSON.parse(body).rates - if (!rates.hasOwnProperty(code)) callback(new Error(`invalid currency code ${code}`)) - callback(null, true) - }) -} - -function getData(url, callback) { - request(url, (err, res, body) => { - if (err) callback(new Error('invalid API call')) - callback(null, body) - }) -} - -function printObject(data) { - const indent = 2 - const str = JSON.stringify(data, null, indent) - console.log(str) -} diff --git a/exercises/06_code_quality/todo/modules/list.js b/exercises/06_code_quality/todo/modules/list.js index 103f77e6..330c7497 100644 --- a/exercises/06_code_quality/todo/modules/list.js +++ b/exercises/06_code_quality/todo/modules/list.js @@ -2,7 +2,7 @@ /** * Class representing a list of items. * */ -module.exports = class List { +class List { /** * Create a list. @@ -29,20 +29,17 @@ module.exports = class List { return this.items.map( (element, index) => ({key: index, item: element.item, qty: element.qty})); } - /** - * Delete a single item. - * @param {Number} id - The index to be deleted. - */ delete(id){ this.items.splice(id, 1); } - /** - * Return the number of items in the list. - * @return {Number} The number of items. - */ count(){ return this.items.count; } +} + +// exporting the class by name adds the name to the documentation +module.exports = { + List } \ No newline at end of file From 63ea40ebee002cc405b8a99f7b29c2e2cd79da02 Mon Sep 17 00:00:00 2001 From: "Luke Charles (charle44)" Date: Sat, 12 Oct 2019 15:58:23 +0100 Subject: [PATCH 048/106] grammatical change changed the wording of a specific section --- 04 CSS3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/04 CSS3.md b/04 CSS3.md index 153ca8e1..4630da37 100644 --- a/04 CSS3.md +++ b/04 CSS3.md @@ -536,7 +536,7 @@ body { The next task is to build a navigation menu bar to the website using CSS. Depending on the number of menu items, the menu bar can contain multi-level menus. -A menu bar is be defined as an HTML unordered list. Each menu in a menu bar is a list item. +A menu bar can be defined as a HTML unordered list. Each menu in a menu bar is a list item. The menus can contain submenus. A submenu is coded as a list that is within the parent menu's list item. From 54e75d85903c7b5643cf9c83ef121b6020edded1 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Tue, 15 Oct 2019 11:54:07 +0100 Subject: [PATCH 049/106] Updated the Nested Callback Lab The lab code was fixed in a previous commit however the exercise still referred to the old code. The lab notes have been updated to reflect the new, working, script. --- 06 Code Quality.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/06 Code Quality.md b/06 Code Quality.md index 4b36f4ad..b69860c5 100644 --- a/06 Code Quality.md +++ b/06 Code Quality.md @@ -124,10 +124,16 @@ Because the code to be run after a callback is run needs to be _inside_ the call Open the file `nestedCallbacks.js` which asks for a _base_ currency code then prints out all the exchange rates against other currencies. Notice that there are four functions defined, three of which include a callback. Our script is designed to capture user input using `stdin` (needing a callback), identify whether a currency code is valid (requiring a second callback) and then getting the currency conversion rates for the specified currency (requiring a third callback). -1. Notice that the `checkValidCurrencyCode()` function is called by the callback for the `getInput()` function and the `getData()` function is called by the callback for the `checkValidCurrencyCode()` function. -2. Each callback takes two parameters as normal. The first contains the error (if any) and this needs to be handled in each callback. -3. The data from the first callback is needed when calling the third function so needs to be stored in an immutable variable (constant). -4. The fourth, and final, function does not have a callback. +1. The script starts be calling the `read.question()` function (line 13) which takes a callback function as its second parameter. +2. We want the first `request()` function (line 18) to be run after the initial `read.question()` function has completed. + 1. To do this it needs to be called from inside the `read.question()` callback function. +3. The second `request()` function should run after the first one has completed and the data has been processed. + 1. To do this it needs to be called from inside the callback function of the first `request()` call. +4. The final step is to call the `read.question()` function again (line 38)) which should be run once the second request has completed. + 1. Therefore this needs to be in the callback function from the second `request()` function. + +As you can see, each step has to be nested inside the previous step's callback, creating an ever increasing level of nested code sometime referred to as [Callback Hell](http://callbackhell.com/) or the [Pyramid of Doom](https://en.wikipedia.org/wiki/Pyramid_of_doom_(programming)). + Callbacks are the simplest possible mechanism for asynchronous code in JavaScript. Unfortunately, raw callbacks sacrifice the control flow, exception handling, and function semantics familiar from synchronous code. From c3cc178217a629b36787b023f0ba9192412dc5f8 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Tue, 15 Oct 2019 12:53:11 +0100 Subject: [PATCH 050/106] Added Promise Working Example The existing promises lab does not work correctly. Added a simple working example that can be used to fix the issues with the lab exercise. --- exercises/06_code_quality/promises2.js | 46 ++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 exercises/06_code_quality/promises2.js diff --git a/exercises/06_code_quality/promises2.js b/exercises/06_code_quality/promises2.js new file mode 100644 index 00000000..0424d3c6 --- /dev/null +++ b/exercises/06_code_quality/promises2.js @@ -0,0 +1,46 @@ + +'use strict' + +const request = require('request') +const readline = require('readline') +let userDetails + +const getInput = prompt => new Promise( resolve => { + const io = { input: process.stdin, output: process.stdout } + const read = readline.createInterface(io) + read.question(`${prompt}: `, data => { + // console.log(data) + read.close() + return resolve(data) + }) +}) + +const getData = () => new Promise( (resolve, reject) => { + const options = { + url: 'https://api.github.com/users/marktyers', + headers: { + 'User-Agent': 'request' + } + } + // Do async job + request.get(options, (err, resp, body) => { + if (err) reject(err) + else return resolve(JSON.parse(body)) + }) +}) + +function main() { + getData() + .then(result => { + userDetails = result + console.log('Initialized user details') + console.log(userDetails) + }) + .then(() => getInput('enter base currency')) + .then(data => console.log(data)) + .then(() => getInput('convert to')) + .then(data => console.log(data)) + .catch(err => console.log(err)) +} + +main() From a7361248c896813688745bb8245f8b0d4dc89c12 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Tue, 15 Oct 2019 16:20:25 +0100 Subject: [PATCH 051/106] bug fix --- exercises/06_code_quality/todo/index.js | 8 +++----- exercises/07_unit_testing/todo/index.js | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/exercises/06_code_quality/todo/index.js b/exercises/06_code_quality/todo/index.js index 111255db..a84f62da 100644 --- a/exercises/06_code_quality/todo/index.js +++ b/exercises/06_code_quality/todo/index.js @@ -13,13 +13,11 @@ app.use(bodyParser()); app.use(handlebars({ paths: { views: __dirname + "/views" } })); app.use(router.routes()); - var port = 8080 - var items = [] -// const List = require('./modules/list') -// const list = new List() +const List = require('./modules/list') +const list = new List() router.get("/", async function(ctx) { try { @@ -46,7 +44,7 @@ router.get("/delete/:key", function(ctx) { try { console.log(`key: ${ctx.params.key}`); items.splice(ctx.params.key, 1); - ctx.redirect('/msg=item deleted'); + ctx.redirect('/?msg=item deleted'); } catch(err) { console.log(err.message); ctx.redirect("/" + err.message); diff --git a/exercises/07_unit_testing/todo/index.js b/exercises/07_unit_testing/todo/index.js index 86e1c6e0..429e15b2 100644 --- a/exercises/07_unit_testing/todo/index.js +++ b/exercises/07_unit_testing/todo/index.js @@ -46,7 +46,7 @@ router.get('/delete/:key', ctx => { try { console.log(`key: ${ctx.params.key}`) todo.delete(ctx.params.key) - ctx.redirect('/msg=item deleted') + ctx.redirect('/?msg=item deleted') } catch(err) { console.log(err.message) ctx.redirect(`/${err.message}`) From 6d5c6a9d08a32f014820dab6dc30e8455c29b95b Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Tue, 15 Oct 2019 19:43:40 +0100 Subject: [PATCH 052/106] Fixed Promise Bug Promises were not resolving in order due to missing returns on resolve. This has now been fixed. --- exercises/06_code_quality/promises.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/exercises/06_code_quality/promises.js b/exercises/06_code_quality/promises.js index 30397aea..00d9ca6d 100644 --- a/exercises/06_code_quality/promises.js +++ b/exercises/06_code_quality/promises.js @@ -11,7 +11,7 @@ const getInput = prompt => new Promise(resolve => { read.question(`${prompt}: `, value => { console.log(`You entered ${value}`) read.close() - resolve(value) + return resolve(value) }) }) @@ -21,14 +21,14 @@ const checkValidCurrencyCode = code => new Promise( (resolve, reject) => { if (err) reject(new Error('invalid API call')) const rates = JSON.parse(body).rates if (!rates.hasOwnProperty(code)) reject(new Error(`invalid currency code ${code}`)) - resolve(code) + return resolve(code) }) }) const getData = code => new Promise( (resolve, reject) => { request(`${baseURL}?base=${code}`, (err, res, body) => { if (err) reject(new Error('invalid API call')) - resolve(body) + return resolve(body) }) }) @@ -37,7 +37,7 @@ const printObject = data => new Promise( resolve => { data = JSON.parse(data) const str = JSON.stringify(data, null, indent) console.log(str) - resolve() + return resolve() }) const exit = () => new Promise( () => { @@ -50,4 +50,4 @@ getInput('enter base currency') .then(printObject) .then(exit) .catch( err => console.error(`error: ${err.message}`)) - .then(exit) + .then(exit) From edceed43818cd202eae3e14985d791d15136ce1c Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Fri, 18 Oct 2019 07:50:54 +0100 Subject: [PATCH 053/106] Modified the Modularity Exercise There was some confusion over the impelmentation and the existing import didn't work. The new version resolves the import issue and clarifies the task requirements --- 06 Code Quality.md | 29 +++++++++++++++---------- exercises/06_code_quality/todo/index.js | 15 ++++++++----- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/06 Code Quality.md b/06 Code Quality.md index b69860c5..19a20628 100644 --- a/06 Code Quality.md +++ b/06 Code Quality.md @@ -32,29 +32,34 @@ Next you will need to do is to split your code up to make it easier to understan Lets examine this module: -1. The `module.exports` object is used to define what functionality will be made available to our `index.js` file. In this case we are exporting the Object Prototype. Notice we are using the new `Class` constructor. -2. Lines 6-8 are the constructor where we define our array that can be accessed by the object. -3. The rest of the file defines a series of functions that form part of the object prototype. +1. We define an object prototype called `List`. +2. This contains an object prototype definition using the modern `class` syntax. If you are not familiar with the concept refer back to the **JavaScript** lab sheet. +3. On lines 43-45 we create an object containing all the functionality we want to export and pass this to the `module.exports` object. This uses the new **Object Property Value Shorthand** syntax (see below). -Now look at the top of the `index.js` file. Lines 22-23 import our module into the `List` variable. This can then be used to create a new object using our `List` object prototype. This object is called `list` and provides access to all the functionality defined in the object prototype. Foe example to add an item we can use: +The object property value shorthand notation is useful if the keys have the same name as the variables passed-in as properties. For example the code in the module could be written as: + +```javascript +module.exports = { + List: List +} +``` + +Now look at the top of the `index.js` file. Lines 18-19 import the module and create an instance of the List prototype. Notice that we are only importing the `List` prototype from the module. This `List` object prototype is then used to create a new object. This object is called `list` and provides access to all the functionality defined in the object prototype. Foe example to add an item we can use: ```javascript list.add('bread', 42) ``` -This will call the `add()` function that is part of our `todo` object prototype. +This will call the `add()` function that is part of our `todo` object prototype. If you try and run this you will find that there is no functionality at all! ### 2.1 Test Your Understanding The custom object prototype defined in the `list.js` module already contains the functionality needed by your app. -1. Uncomment lines 22-23 to import the module and create a custom object. -2. In the `router.post('/')` function call replace lines 41-42 with a call to `list.add()`, passing the item name and quantity as parameters. -3. Now modify the `router.get('/')` function callback by replacing lines 29-30 with a call to the `list.getAll()` function. -4. To test the functionality so far, comment out the array declaration on line 20 and try starting the web server. You should be able to add items, the data is now stored in the custom object. -5. Finally replace line 53 with a call to the appropriate function in the custom object. - -Now much of the business logic has been moved to the separate module, are there any module imports in `index.js` that are no longer needed? Locate these and delete. +1. Modify the callback function in the `router.post('/')` function, inserting a call to `list.add()`, passing the item name and quantity as parameters. +2. Now modify the callback function in the `router.get('/')` function, replacing the empty array declaration with a call to the `list.getAll()` function. +3. Test the base functionality so far, you should be able to add items to the list. +4. Finally implement the delete functionality. ## 3 Linting diff --git a/exercises/06_code_quality/todo/index.js b/exercises/06_code_quality/todo/index.js index a84f62da..fa386094 100644 --- a/exercises/06_code_quality/todo/index.js +++ b/exercises/06_code_quality/todo/index.js @@ -14,14 +14,17 @@ app.use(handlebars({ paths: { views: __dirname + "/views" } })); app.use(router.routes()); var port = 8080 -var items = [] -const List = require('./modules/list') +const List = require('./modules/list').List const list = new List() router.get("/", async function(ctx) { try { - var data = {} + var items = [] // you will need to add a call to the 'list' object!!! + const items = list.getAll() + console.log(items) + var data = {items} + ctx.render('home', data); } catch(err) { console.log(err.message); ctx.render('home', {msg: err.message}); @@ -31,8 +34,8 @@ router.get("/", async function(ctx) { router.post("/", function(ctx) { try { var body = ctx.request.body; - var data = {item: body.item, qty: body.qty}; - items.push(data); + console.log(body) + // you will need to add a call to the 'list' object!!! ctx.redirect("/"); } catch(err) { console.log(err.message); @@ -43,7 +46,7 @@ router.post("/", function(ctx) { router.get("/delete/:key", function(ctx) { try { console.log(`key: ${ctx.params.key}`); - items.splice(ctx.params.key, 1); + // you will need to add a call to the 'list' object!!! ctx.redirect('/?msg=item deleted'); } catch(err) { console.log(err.message); From dd1f05ffa1afd988969a08c0891bb76d7ed8350a Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Fri, 18 Oct 2019 07:55:24 +0100 Subject: [PATCH 054/106] Fixed Some Spelling Errors --- 06 Code Quality.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/06 Code Quality.md b/06 Code Quality.md index 19a20628..47d21c4b 100644 --- a/06 Code Quality.md +++ b/06 Code Quality.md @@ -50,7 +50,9 @@ Now look at the top of the `index.js` file. Lines 18-19 import the module and cr list.add('bread', 42) ``` -This will call the `add()` function that is part of our `todo` object prototype. If you try and run this you will find that there is no functionality at all! +This will call the `add()` function that is part of our `todo` object prototype. + +Try running the server and adding an item to the list. Currently there is no functionality implemented at all! All the functionality is in the module we have imported. ### 2.1 Test Your Understanding @@ -81,7 +83,7 @@ $ node_modules/.bin/eslint todo/index.js You will see a list of issues that the linter has flagged in your code. Notice that some of these are flagged as errors (serious) and some as warnings (recommendations). Each message includes: -1. The line and comumn number where the error was found. +1. The line and column number where the error was found. 2. A description of the error. 3. The rule that is being broken. @@ -96,7 +98,7 @@ $ node_modules/.bin/eslint todo/ ### 3.1 Test Your Understanding 1. Locate and fix all the errors and warnings in the `index.js`. -2. Install `eslint` globally and then install the [eslint extension](https://github.com/Microsoft/vscode-eslint). After restarting your editor you should see any errors and warnings flagged in the editor. +2. Install the [eslint extension](https://github.com/Microsoft/vscode-eslint). After restarting your editor you should see any errors and warnings flagged in the editor. 3. Use the `eslint` plugin to locate and fix all the errors in the `modules/list.js` file. ## 4 Documentation From 96e8e4bef57dfe918d74eee83018c52f248f100e Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Sun, 20 Oct 2019 10:28:25 +0100 Subject: [PATCH 055/106] Added More Exercises Some of the sections didn't have an exercise. Now all sections include one or more tasks to be complete. --- 05 JavaScript.md | 134 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 110 insertions(+), 24 deletions(-) diff --git a/05 JavaScript.md b/05 JavaScript.md index a52e42fb..27afe040 100644 --- a/05 JavaScript.md +++ b/05 JavaScript.md @@ -42,10 +42,7 @@ Start by running the `maths.js` script and map the output it generates against t 1. Create a new function called `multiply()` that takes two parameters, `a` and `b` and returns the _product_ of the two. - what happens if you call it with only a single parameter? -2. Modify the function so it uses a default parameter to multiply by 1 if the second parameter is missing. - - What happens if you don't supply _any_ parameters? - - Add a second default parameter to prevent this. -3. Write an _arrow function expression_ stored in a constant called `squareRoot` which calculates and returns the square root of the supplied number. You will need to use the `sqrt()` method which is part of the `Math` object. +2. Write an _arrow function expression_ stored in a constant called `squareRoot` which calculates and returns the square root of the supplied number. You will need to use the `sqrt()` method which is part of the `Math` object. Open the `contact.js` script, implement the `validateEmail()` function and thoroughly test it, you should avoid using regular expressions at this stage: @@ -53,6 +50,87 @@ Open the `contact.js` script, implement the `validateEmail()` function and thoro 2. Check that there is a `@` character and that it is not at the start of the string (HINT: use the [indexOf](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf) String prototype method. 3. Check that there is a period (.) character after the `@` character but before the end of the string. +#### 1.1.2 Function Parameters + +In the JavaScript language although we define a function with a set of specified _parameters_, when we call the function we don't need to pass these arguments: + +We can choose to pass fewer arguments than are specified in the function parameters. Any parameters that don't have a matching argument are set to `undefined`. For example, the following code will print `undefined`. + +```javascript +function sqr(num) { + return num * num +} +sql() // returns NaN (not a number) +``` + +This can cause issues in your code so to prevent this we provide [Default Parameters](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Default_parameters). If an arguement is missing when a function is called this specified a default value to use. For example consider this version of the function: + +```javascript +function sqr(num = null) { + return num * num +} +sqr() // returns 0 +``` + +In JavaScript: + +- A value of `undefined` means a value has not been assigned to a variable. +- A value of `null` is a value assigned to a variable and means _no value_. + +It is also possible to pass in more arguements than there are parameters in the function declaration. The following is quite valid: + +```javascript +function add(num1, num2) { + return num1 + num2 +} +add(4, 2, 1) // returns 6 +``` + +As you can see, if there are too many arguments, the extra ones are ignored however JavaScript provides a mechanism to access all the arguments passed to a function regardless of whether they match the parameter list by using the _array-like_ `arguments` object, for example: + +```javascript +function add() { + let total = 0 + for(arg of arguments) total += arg + return total +} +add(4, 2, 1) // returns 7 +``` + +Using _hidden_ or _magic_ variables that magically come into existence can make your code hard to understand so ECMA6 introduced [Rest Parameters](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters), parameters that can hold any arguments that don't match the parameters in the function declaration. Take the following code: + +```javascript +function add(num1, num2, ...others) { + let total = num1 + num2 + for(arg of others) total += arg + return total +} +add(4, 2,1) // returns 7 +``` + +This demonstrates how the rest parameter _mops up_ any surplus arguments and could be written as: + +```javascript +function add(...numbers) { + let total = 0 + for(arg of numbers) total += arg + return total +} + +console.log(add(4, 2, 1)) // returns 7 +``` + +#### 1.1.3 Test Your Understanding + +1. create a function called `divideThis()` that takes two arguments, a number to be divided, `dividend` and the number to divide by, `divisor`. The function should return the _quotient_. +2. What happens if you don't pass a parameter for the `divisor` parameter? Can you fix this by supplying a suitable _default parameter_? +3. Call the `multiply()` function from the previous task omitting the second parameter. Can you modify the function so it uses a default parameter to multiply by 1 if the second parameter is missing. + - What happens if you don't supply _any_ parameters? + - Add a second default parameter to prevent this. +4. Create a new function called `average()` that takes one or more numerical parameters to return the average of these: + - Write this to make use of the `arguments` construct. + - Rewrite this to use an ECMA6 rest parameter. + ### 1.2 Function Expressions Functions are a data type in JavaScript (they are objects but more on that later). As such they can be stored in variables for later execution. Prior to ECMA6 they were declared using the `function` keyword like this: @@ -99,7 +177,7 @@ const sqr = num => num * num 2. Compare this to the original version: which is more _readable_? 3. Create a function expression that takes two string parameters and returns the longest string and assign this to a constant called `longest. check this works correctly. 4. Modify the function expression so that it can handle any number of string parameters (use a _rest parameter_). (hint: you will need to use a [`for...in`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in) statement to loop through the strings. How does this differ from a [`for...of`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of) statement?) -5. Use a [ternary operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator) instead of the `if` statement in the loop. +5. Use a [ternary operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator) instead of the `if` statement in the loop. 6. Finally use the [`reduce()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce) method to replace the `for...in` loop to reduce the function to a single line. ## 2 Callbacks @@ -235,6 +313,13 @@ const grade = employee.grade || 'A' This will retrieve the value of the grade property if defined and store it in the `const` variable. If this property is missing the `const` variable will contain the string `'A'`. +#### 3.2.1 Test Your Understanding + +1. Create a new object called `university` which should contain three properties, `year1`, `year2` and `year3`. Each of these properties should store an object whos keys are the module codes and values the titles of the modules. +2. Create a variable called `study01` containing the `year1` object. +3. Use the `for...in` statement to iterate over this `study01` object printing out all of the _module codes_. +4. Use the `for...of` statement to print out all of the _module names_. + ### 3.3 JSON Data JSON (JavaScript Object Notation) is a standard text-based format to represent structured data. This is very useful as it means we can take any JavaScript object and convert it into a text string. This can then be saved to disk or posted to a web server, etc. It also means that you can take a JSON-formatted text string and convert it into a complex JavaScript object! @@ -289,10 +374,24 @@ Lets apply our knowledge of callbacks to implement a simple quotes tool. 3. The contents of the file is a utf8 string, use `JSON.parse()` to convert this into a JavaScript object (array) and print this to the terminal instead. 4. Create a loop to iterate through the array, printing the contents of each index. 5. Modify the code so that it only prints the quotes string (not the entire object). +6. Convert the `university` object from the previous exercise into a JSON string and save it to the filesystem as `university.json`. ### 3.3 ECMA6 Object Destructuring -In ECMA6 is is possible to extract multiple pieces of data into separate variables by destructuring using an _object pattern_. This is syntactically similar to creating object literals (see the example below). +There are situations where we want to retrieve multiple object properties and store then in different variables, for example: + +```javascript +const employee = { + firstName: 'Colin', + 'last name': 'Stephen', + 'department': 'Computing' +} +const first = employee.firstName +const last = employee['last name'] +console.log(`${first} ${last}`) +``` + +In ECMA6 is is possible to extract multiple pieces of data into separate variables by destructuring using a [Desctructuring Assignment](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Object_destructuring). This is syntactically similar to creating object literals (see the example below). ```javascript const employee = { @@ -301,11 +400,15 @@ const employee = { 'department': 'Computing' } -let {firstName: first, 'last name': last, department: dept} = employee +const {firstName: first, 'last name': last, department: dept} = employee console.log(first) // prints 'Colin' console.log(dept) // prints 'Computing' ``` +#### 3.3.1 Test Your Understanding + +1. Take the `university` object you created in an earlier exercise and use a single line destructuring assignment to create three variables, `year1`, `year2` and `year3`. + ### 3.4 Getters and Setters Most object properties are simple values and you can simply assign a value. Sometimes however properties need to be calculated. One solution is to store a function as one of the properties however we would need to call a function to retrieve the value: @@ -601,20 +704,3 @@ You should take time to understand the [pros and cons](https://2ality.com/2016/0 2. Use this to create a second **constructor function** class called `OldPickup` that includes `payload` and `seats` fields and use this to create two pickup objects. 3. Now use the same information to create a class called `NewVehicle` and extend this to create a class called `NewPickup` and use this to create two or more pickup objects. 4. Add a static member to capture the total value of all the pickup sales and print this to the terminal. - - - -Show how objects can be turned into strings and saved. text data loaded and converted into a JavaScript object. - -### 5.1.1 Test Your Understanding - -### 5.2 RESTful APIs - -Show how data can be retrieved from an API in JSON format. - -//TODO: use the OMDB API in this section - -OMDB key: 220d2590 - -First task is for students to get an OMDB API key and paste it into the provided script. - From b385bb0ffe06a79460eef52f44bb52af36c5f0c8 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Tue, 22 Oct 2019 09:17:01 +0100 Subject: [PATCH 056/106] Removed Module Call The todo script would not run because there was a conflict between the imported object and the local array. The object call was removed and added to the lab activity and the comment on the array clarified. --- exercises/06_code_quality/todo/index.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/exercises/06_code_quality/todo/index.js b/exercises/06_code_quality/todo/index.js index fa386094..ac002167 100644 --- a/exercises/06_code_quality/todo/index.js +++ b/exercises/06_code_quality/todo/index.js @@ -20,8 +20,7 @@ const list = new List() router.get("/", async function(ctx) { try { - var items = [] // you will need to add a call to the 'list' object!!! - const items = list.getAll() + var items = [] // you will need to REPLACE this with a call to the 'list' object!!! console.log(items) var data = {items} ctx.render('home', data); From 93cc6815377e803dc28da0b8c3cbd6158224618a Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Tue, 22 Oct 2019 09:26:44 +0100 Subject: [PATCH 057/106] Added Code to Callback Currently there is no message to state that the server is running. Added a message to the callback function to display the message with port number. --- exercises/06_code_quality/todo/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/exercises/06_code_quality/todo/index.js b/exercises/06_code_quality/todo/index.js index ac002167..ee1f2aaa 100644 --- a/exercises/06_code_quality/todo/index.js +++ b/exercises/06_code_quality/todo/index.js @@ -53,5 +53,6 @@ router.get("/delete/:key", function(ctx) { } }); -module.exports = app.listen(port, function() { +module.exports = app.listen(port, async function() { + console.log('listening on port ' + port); }); \ No newline at end of file From 648ead1fb7d520b43443a76a4bce92e97814c7c1 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Tue, 22 Oct 2019 21:04:03 +0100 Subject: [PATCH 058/106] added instructions for Win10 Users --- 01 Setup Win10.md | 58 ++++++++++++++++++++++++++++++++++++ exercises/.images/store.png | Bin 0 -> 317892 bytes 2 files changed, 58 insertions(+) create mode 100644 01 Setup Win10.md create mode 100644 exercises/.images/store.png diff --git a/01 Setup Win10.md b/01 Setup Win10.md new file mode 100644 index 00000000..33202f93 --- /dev/null +++ b/01 Setup Win10.md @@ -0,0 +1,58 @@ + +# Setup for Windows 10 Users + +The tools used in this module are designed to be used in a Unix or Linux environment. Whilst this will create challenges for Windows 10 user there are some steps you will need to take. Please read and follow the steps below carefully: + +Install the Windows Subsystem for Linux (WSL). Open PowerShell as Administrator and run: + +``` shell +Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux +``` + +Restart your computer when prompted. + +Now install Visual Studio Code and once launched install the **WSL** component by Microsoft. + +Now you need to install Ubuntu. This can be found by searching for `run linux on windows` in the Microsoft Store. You will be presented with the following screen. + +![Microsoft Store](exercises/.images/store.png) + +Choose the Ubuntu operating system (v18.04 LTS) and install. Once installed, click on the **Launch** button, this will open a console window and you will need to wait for a few minutes for the installation to complete. + +## Cloning the Forked Repository + +You will now need to fork the foundation lab by clicking on the Fork button. This will create a copy of the repository. See the standard setup instructions for more details. + +Now you can clone your forked repository by running the following command in the Ubuntu console, replacing xxx with the URL of your repository. + +```shell +git clone xxx +``` + +This will create a directory called `foundation` in the Ubuntu console. The final step is to launch VS Code from within the WSL environment by running the following command: + +```shell +code foundation +``` + +This will launch VS Code from within the WSL with the contents of the `foundation/` directory. If you open the integrated terminal (using the **Terminal** menu) you will see that you have the full ubuntu bash shell. You can now run all the remaining steps from this integrated terminal, just as you would for a standard Linux install. + +## Installing NodeJS + +These steps are identical to those used on a full Ubuntu installation. Start by installing the Node Version Manager (NVM) tool: + +```shell +curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash +nvm --version +nvm install node +``` + +If the `nvm` command is not found you will need to reload the shell: + +```shell +source ~/.profile +``` + +Now try to install again. + +Now you can go directly to step 4 in the standard setup instructions. diff --git a/exercises/.images/store.png b/exercises/.images/store.png new file mode 100644 index 0000000000000000000000000000000000000000..e34853d0c6327e8c46e9f4bbe64cfa3f6eb95f37 GIT binary patch literal 317892 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%0A) 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 literal 0 HcmV?d00001 From ba038cbaba7e1a7714fe8ee43f1e50c54a1d623f Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Wed, 23 Oct 2019 07:37:34 +0100 Subject: [PATCH 059/106] Added Component Notes --- 01 Setup Win10.md | 4 +++- exercises/.images/remote-wsl.png | Bin 0 -> 32798 bytes 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 exercises/.images/remote-wsl.png diff --git a/01 Setup Win10.md b/01 Setup Win10.md index 33202f93..b518f381 100644 --- a/01 Setup Win10.md +++ b/01 Setup Win10.md @@ -11,7 +11,9 @@ Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-L Restart your computer when prompted. -Now install Visual Studio Code and once launched install the **WSL** component by Microsoft. +Now install Visual Studio Code and once launched install the [remote-wsl](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl) component by Microsoft. + +![remote-wsl](exercises/.images/remote-wsl.png) Now you need to install Ubuntu. This can be found by searching for `run linux on windows` in the Microsoft Store. You will be presented with the following screen. diff --git a/exercises/.images/remote-wsl.png b/exercises/.images/remote-wsl.png new file mode 100644 index 0000000000000000000000000000000000000000..e6679da24c621af0f4ceec894caf2cadc477894f GIT binary patch literal 32798 zcmeFYbz2{ z`^U@k6t%jR^;$J+)|_LEj#5^XLW0MI2Ll5`l93iy1p|XD1C`4GFrfdGcc`dfVDN1= zVq(fNVq(O~u1=OV_7-4Z(ord?uIDkCyA%r;TY-q3w{3|?$G4zpEOcMh2MY*xk0?WrUd6*PIUX>+hkb56Z%2rwOttGNaq8fijS0uw$GEn@NX_&V&!seMxY z(96>=Uy50~W9ocnjjoG;3|5K!R9QKs2jzy8NEcKIpJ!Lv-Va=WPGiz(iWesE=18AI zNzK_@Em3AuBZhU-*_rG!q1Q$pW%lJl3raJ{Oep2q($26+jj{xp+%uD)!RdW+={4us zZ^+-i&e0pG3z#vNPzOAKYkP1ATyH%Qll(1LIkiGP>r&@`!5Z*m7jM zcQ;|d-E1!~!@g4qz+xkCxo*xFB24m&904^UrQ!4uny93up}nW4sR8k^9SNQ8>n`!5 zt!r2K|$CVqd&rooyYxIH?_Eahr42?&jydWxy%e%VD1b5br;U=1VoZSGQ)`br0>%hs2 zVz>r=3~DxyQ_mLI6B`R)9u^8BRfg6TM)?TtW{iX%gm4KaD4o(vj3^%LUH8!$jK~~} zMH}Y27grfd_J?I1fqGDvu}~SfRIkf4lx{DyGxQo*&Tm3*#81LP-jESL03Sn%0kA5> zv_;TIVw4G(yI?aUOv6O*;iUQA)M&E7VF@2bBNs&}lxft#&q8g#8RgGSLm%SKLkom` z`X+J+d5bC8Yp#vC7_MNVmyXQ#8H-ze3vunC$0A)4{vu{G>g-4kvG>BT z-wJ2&-6=m&e1dF;FbH)NHxk_xc_@gS-emdk1$hX5C(guVo0%rvBArworv%px-VMhM zWiB44*R=jvo2`nD6Mz@5Fv$4R@yGcPr}30oN1gw&2|jXZcw?W>cAvAoK2{B&1;Y!< z3)u^ADgNaP)z;k=@*|iZgyCnVA8A`CJ5$?EJFu5#P!u6>y*a3oztLUcvH-9EhA_Rb zfWD6^8P<}w%!AV!j>=l_6RTde}VmH9AB#x6a zk;{$XjYJL~jG&AV(R_%e8H`L69x1Rdnpb61%~cVkQ^vIapbf7dt^uC{9}C}txj}>e zLE!^VbPVRrhp`Vz)ElaPmEy{*8m6@MDVnqzv^ko`nz))Jw7=*gX{@N7lm)B&6rNJx z6$jM^jlwHc%NmUK3S@~eB{&LL%khtOkHL>EYJ^P{?&nvsGo>QD#(=GGb`s{yKi`$Nih?G0@DfUzBFWkb+Ms|O8pUlBbq|68Q z9^08F;P=_4W@`=`fdxrBJ=>`z!;&tkmxlXaIu(ulmM)fRa_p zD&&|L2&@Ymd_7lOk7;+ho4@nBRlRFI%2~jhFFp1>Lbz=?%9{&RP%C7yK5BAZrC3b} zjuS};o;S`DiR?}PmSNIl5^NH>rAAhOwobibou!gBlThD%rN861!@DCz35C%Pw`m?J z(=k$3o?%mU#5+ehr)8OGN#Drd$lFM@|G~}aM*fEOrUOeGp!TP^FFXU zpt~2?;~RCisxi)e5PO1t#(eR3tbCMu(Rvg@U`CXND?|7Q?~bfb=q(7q_<-I-QI=Ia zwq0kdBi38fOBccvo*+glMk|^dsT&b3rnlec7JA^A^J1Pm!oSs7!i+iu{|on?eT|-< z4Y>5Q{IqpLchK{tE`B)PI=)DfF^V6b2YnCkJI%36lTQO{}*xL+z%^H_}E4o|qbjMZ@gw$8q#Qic<TD<-G3_s-~aHd?c&ks~X;KK*xFjyuTL{65881t#2E`dVmN1{z{Do{Go0#xWmQ)>xcBuLXAob%u`3 zjPZ>9x<y zq_=cor|d+{0~03`-}OdumG<&eEUqOdKd(&4#?^I+=D2)YvW%t0r7UW5ehzUKw#c>TGvPNY`mm#pfTKvYH}|JPmqcC{a$o5yt|pgA)aZ-pwrjptvGIs zB(2sEuGO_ZXC~mh;$UIX?tDqnsMN@*eap4*s^n%ut%v8`v!cJa@GAABdS9_+GPQ=s zz{<&Yv)lRS#bioHRR`DkM8}ec(DPg9dHA{jN-K(?fPCQNo63D*{m;rg&!b^Z2u z$D7HjZ;=S3ey=~tdFn_CdCLE4-yKm)Bj9F&v<{^$$7 zN}wO!%Lyo!)wIx-u~bk1qXm@#VBnE9U{IhEIOxCy9iXr`F#-%0bVdgq;`tE&RSQ{` z5BXnZu<}0*MbyM(WI$&%Ggk`>M>lIH_hH&V&=}y0HtO2$+6wZ#W=;-_Cgx727L48w z&VRaq@q6=viVha;CdA$j_Kt46-U6h5wcrJn|6FDwCH||4yPW{3wt_OTn3JmoF$W_% zBQvQWJTWmbzpJ?=ud2A@Kixr}1W2vj-JN-vn7q8a7`@mSom{P$Sa^7Nn3!3aSXmiB zEg0N<9NkU4864fn{vPDN#u2x0Gjp|ZcDHeIB>pq5iK&x^y8tQapNana@9*zv;cfFj zGda5bvn2Q-Hu4;v@{U+w>`=6`1V zyQhYmg{zp81E{0B;Q#FJKb`-z^8a@HYf7E}nUaN*=U=D%mzsZi@-zKe`M>PM-`o7x zRnR^Q!t*oz_dOGYr=6o~0s|8UlMxqD_Xa=Bfz4K5xcfPE-ZxuJO-ubbpLiKO)>Qpe z^3=dIwrePafs_i<<%m8(Onnz7Mo4EKrExVn0xs|IZ2cWAH3Y+-3pS|GEB8V|)ln z}eg1TIvTdhKqKDA;mrpQ(2vcOWYP^(^3{$ZPQ|$FaSh#p-wEI( zI*$@&X#_kfr?~da_WxKI$Y6w%#Pf@MAI>!tSPm#A^yGAeCH35Y$&QBhxEHZ5ebm5M z9BH^cSt=$auBQACX2{L~m5DFn&}?aBvts8gEDOt1DM|9d z7aTV9hvyxwp63*O@2&9j=7IvzINswj=@4%7VN{;C$DN#xa0Kj8mY?`)q0XKsiwcab zzaez2ay-}%ahKZM4o2^mjF|HL?{#7i>}tE3*F1kYL|Ki@W;iEop$yX?FiOg^K}}|J z;Xn~ruvx+A>6#|04mpQYZp^A3w zC7m>*l|yubv2&ik)QbIbf*Y*Y1QcB3X))e6x_mo?06!p6_?00GhdkYuO(I8*D{Idi z?)ngzhL?;24W@N~*JDf;BZ(BV6&iGDicNVcP#%pFoN~K`I*pdIwMIfBe7IPE+R>jx zf%>7@jxFn+uFprMd`QLZa7Hsf41M-eT$c>I;2!tnrn7N*Ca_nrlvqfGU-EOta|QS` zuV=EcG8frtw~D?t89tdg$i-7X+>ih5`h|-?CYl#*v*5*K^L?dPp`CuL12%6I?kyF{ zvPX_mkWPaRi;I_^`5l+VRGic(-NAII?Pih>VU=k&KNQ*3(o{*{PQA~-?1ja8npi~c zvvGv(Ar$7#iIU)xc=M_)UD|%P|I6q}ZO?hY%e!C5=*)yW@iV#g1gYH5~1J=UFqK z!Zc~7IvJRX(~O;z&gH#B>^U*TJx&}BTZyKM5NIOT367=V2t3Eb4UsThHj!#*VKn|A zXzOb&*)45%?4rk_+gcu?TKb5&vSpGbos)-P$g*p`DTz6MnlAIaEE;Q~9 zI`UJ0p&kN?m$d1)!D&`j7%|koi&)WdoikY^31XEGpMsSRH?4^M9qR;Z13qAiSk%(& zjy07WjWt^sKYv-d=)|tIzx7q~FM!|)uM!s2nEs^if44B(?eFWK+=@)Vt6tM}zpA@m z)N$GngZPp8M;nl69x zqWK(ti|j0IdwqI+*zEAPphpzW))5cttfUs%OZYJE%JT^D;txEjZkg9X^7B8VLG~jZ zv-x3yUKLzN+-oF;u$wM{dJTTG^;TKiok$e$*qg!Sb-FyWX9Ik^f@AH4kclT0fKnjz zK)=~lr$TCs$0ps&V!?nJAOfy5BAI|!<^{g#EHjOh!inDb(Da&l0Z|eBc2IIi9N{TT`Nd zMEZb-*_Sk%=Mz<_#Nxc`qA6NXE`p$iI?uJ~H&@K)_{>3fTl$;DagF=o^R+R_=~>IB z;=B~rJT>g<9%YvO_FAL0v_NzP3a%$-jhs@C{AhOuxdymQ^>J$i`^%vL&CBl`URZ;L z`bKpQrZjZ2GLNBYevroqB1xcukZ6o5v@mX8H5vAhRAi$z`Ro@-5@>U~YDwAG&Ag&% zQsDEnmqs;AlSEEAcN!^{-kKBm_Vm?Uu|G(fn#Urs5+aKGe%Wk2&-MZMV6D&Cb*tK& z!-UF|m%SYsmGvARl4nATlVQ*&>-qTj8D1_mmw_HB{erZZy-gA-_b`#Jo6${t;ApA@ zIZ!Q7r*7u8KXdUC(-k@+B)RAP?S;{hLTf-m*XAObPn0i2T4cC4iStJR#?udhO#h7} z!LV?GYj8M915~wp(VYlE2{@Vo#I*$VD?Zqb9{IUE8v>b>0L3B7_0{(y2o=hsr7C5u zA7P(D>Hxw9GyT8HU{NiGX|&a*${Pnp3cx*>tyHn9+F;Eap2}d0fFmzOPdD*0gUubo zqe#yq4TY1*#n?a%O~eg7T3>r=xv6f+R73Ajb;Q*L3ab@3?9a(9&OJUozyypU*E5e| z*NGa{2J^27R!2`uaDgc&4#XPOzecacl&U;?COo3}_a*q1kJlQMG# zJ-6)_maI>Fzk?umTY6rrv(gP+M<`rJX-dUyU8ec@Z^qfK^WK3!6+X>a(wZzdd4Y(l z#_ItLC2rAyfZ+9CL-s;c)HRV@ z5{Lx*-I6Rv*@QSer_TDtZhgVt0-L_%Gz_~tb$QBP>7r~ZLj>ASx-8ftac?5jGyEj- z(Hg|cvcE|_T6dH{?a%r3&r_BCUM8DfCPCGf&S6T|Yb^Z`2p~VIsH|}{hrAvo!Z2^* zs$jTz<(hXICc^L;{T#)oHH!DmkGL3+b*^w?UuhJ)@GNpL%P&iHxtPauv~2>RuE z^8|JMv9`nCl`L7v*F~XR<~3+LJkw^&lQ1^49C?*xOZ{k4)_tJ~r0M`JuM$>Ym5+#cbVam>uU#6M6pPv`Yp?vionR0EfZU(4xIf z#*~Wt9P^d0R?=g7wTTtTl^w0L%}B>yW5-FOTF7f6qk@E4(xI>aWaz{A!Il}mBY7zI zSv8#A+DR{d@{FkaV8so{CnJ4cj!dI!0VD9h|Pq-8V1Ld$Do44<67if zn`r>ZKvy58OEQEKb$&T(p^^qm5;)I5W&1irfbjx)i%Eql`tBtgg+)4Ec0pf!TDBmS+!UaHu zjMOQ1ulN7X>v^HY*8M1OJJ3tgX1idZ$KdrRQEig(b!wi zWER;=tuW5BJ*rfKUR{M&t$)o`4R~j`n}~S&3v10EAyamaB*)>I@Xt|CgkKyamG@TU z-U=Jo{ESA1E@LG+K+aF!edP3LFz-)k&O92JZPhKw#($;pF1T{Je)3|zB!7dT6Vo?= zLPR>*OFQ!BH<5n9bj(Gr9zMb_pn|ffa$~rGQIe=k*<_vRzDb+OWrR?*MbW|fRkAYf zh<(4u`dFRW2+?l-&fuE?$u+9|Lc7SuO!EtFTN(Qe;f=9;HVL$@p|zUVroUGUAV}yK zX8^&EBsBpZs4Qe{WL!*nf+{^4H;6UcPa@X-o*)4uO;5F9+c7UNlPL%^s|LfNRFp=F zkrIs3XeqB52#-i_l@_ug(I4MV2`j!P3V>B9MKMMTuOqGuD-FYu|AB%p?bZHRuGj8Q zjF0_r1eAJ`xuZ9DzCxfGbk7AYPz7KmT*mvfB`U1q-a*7xEXoNM4hA@fv3~0cHDfHQ z&=5WhWnUmJ6%ltdI&Qi^S4mX>Dp#yFA>Ds7q!?4|QkTVIa=(xzuED!a*=KtFxo$S3 z$6C6o-u858Rb(336%v|Ile`B@NL74OfwEl*KkT#;_E7N(yOj(Cs*!ezhu!!8jh_&k zLBY$0+U~ONTvs;2Qj`xC$XKxMW|I~}33iDmHU;73gK~O=AtL6^Q09(psMz(!a zreQ-5DpCa@jQFFV$X@QPnJ2uBNg@J?*fJZQVq+rQ0rBHcaUR*}rba296F7|hx)ryjYR3+hOu(>vE`3wM#^s$V5Zedc>oNNrJnYs?Ag zD~u-&Og=$i>P%pLJ=!jnC%M(NYAxkYsoTy2s>GKC0{p!x5#%S;#sjmPeqBFjnt>Ve zkeBm6%1P(LIb2=fRVba_btgqXIiB3a%W~6Y2(T^7J!5+rv09}zbzW`j2I#)MHiW(G z2bb4H{f+1fd!kZ*3<2FNKIlvt>Oo1>*G`tJ!7z;x7`g|1)PVy;bs!uMEJ}D3(s{a{ zm~(<3s=EAsa(-e7^;KTwJ>{suBTkalwQw$TVazB~z%5v&-|mu9p{>wNbivtznm-A6 zw+wNBU*D*ei@F~}l^~gr_527|NSjxKe??I*HigDpqdsuab*7HQV+$HX&|w<^!~eCL z;b>og{L6D@mA(J_GoC7HT+FR7w+?Zzdf0<#A&FTai^~?L{NwWbDADrE{`r8+scb9mU7)VyhygkEn(ZJl>uGzqY>7!q3;<-B$dZ-tyKH(Evc_Ec}?`o zmg@!WBQGKY?`L19%v$Zh)`0+ zuXVM4GoBYzd9S_B`pp6&x{eCfK~I~TSo&tHMe~NiT3wy_OuT^d9Dlj+Wpkduu|LT) zS7Za&uMYxTxUD`7^BFO(@PmLV^!Oj}v7UkhLOjiaS1i3#Vc8`y2%@NzrQJl*kxH~c zFW~)&*`on(PwSMXp|n{=Q`lVUxuAiz38}{BZI4F2fI8M|Ri)LY~x-459vWBqPu`2?PcbRQvF!9#w1)KFWYU>CEc`Ogiz|OFXZW1fopwNUabG(RuE{Q;$NfH z^pF8C$4)Xh&PQ92Phe|_B>-P#f92R^Uno%i7|E2TFy^39iDxz+C{(BH;$l zL-F5~)D@bwa>%M};ihzDP(D`H>0D3aDM-$R(;9HcMU_+>s4J}gQ!$r`%rJv??qG54 zC3Rd$Oweh?i>W;Qrkeg`|1Lsaa>%6-`wm2nB;EWR$xq0PBr^0chNfyYWgRUq?$k07 zh2r_ct=Qsk7hJe`NECYg0k>zQh!{X~)ScPC>HX7BOQdii$9-XC+U}GU7BEwmPp*BrT68jtco0vKV{$8q8 zn8$hB0k8f_QdMd7b({?I%gwORs^)tT<;HB)uU2d8QehPfVzVggdiQNI2ck`KXv9UN5 z1;bNs#uhbDVCsgZ1GEq1aa9DxDgew(s$IdVjK7@tCpvJu};Rg0+Ig9{CMvy(T96yYIuNpFuF5y$vbXSM$dx zp-X%}@S%e=JBsKZ1-EYFT|b0E+x-V3)B)=HEhEFy?mi_I?@WV_0{Xeg?k5(jeJ!Dm z9D(jKBTgp3is2d&!c>UX!ou`F4A6}_OeeCZmjz-*7>s=|PJjYw6-3+_ap*9_LIX;L^?EvKHQvR2}$=la#)gi0y?eLB2BG|Bcq zO(}>vj3=@;zhU}PG#-c#@%^^6yK96@YCx(8xB9p3`Hnh_ATlW5^s!hejgv=?(^olWi`@u1 ze_}uKP^sfDnD~F|9}+O2TosjPazAQ z7Z=8U732}G&yHAafl6CiQ7>q<@+kzh0Y=Y8*Kr-Ld9v+Ty${N-w^>*VQvCsV5Kkh; zAedoHNgONYUukOSAYsKGk6HVPZi#XMq%?%x+kp>L;eiIK}lu z_Va@nmL?=-fy94XBD*M*YlVmdJ#Nbkh83S{1+EfBZh-$sj)0O53#X$Wzi-&vd)#-^ zaUgVJ6FnKm3J9@p8%=5EJeCZ!6nXYO=(tUAAmC1MN9mcxa+nV%khspuP|3t#t#Al% zo#|(zTW33Zp0tU3p0$AjyT-a>*uwAq&s$nXn-PKjXzcHQS)@63a5kEHcTUt$HOsJF z-b5-L%Bpa#U{4PsN)75HXz7#<5fLd?r!@YT;}g4a7@Vn*A#|H6drxI93%eX!TWLfI zE2bEuO;!D$d}Qt!J5EWJ_^-nLaCtO4AP6QY@cm_TlEEB#<3!5{j|kMpinzyK?rsfh)o1j0YL z!XLX9CbmK>Uw+6H<<%h0c)7heb$mdoL5a(tOe$f3Ybs(`i0TlP))<3-8fbbb`oZo! z`$d9d?MUGlDcjY8dz#m#Z0h){rjuL1x@DGw`S%6Qq^Fw$sUc87PbLzXz_t^Q!#3IP zZb9q%s5EcU+t8j1L{jEd>9?s)a_=DObb6;WpA3`5yRUA!P4bj3H<%wWfI;y#S0#fR zRKBz}@1-<2`>Zd~GE_lOE6auamw`=xMlE}(B1Zy%G#lKpF@1qZEE4SzpRF&x|ANX? zxp&f#>(E>%Y4;B~=%&`On6foX)WkbWSvt)pSqE|Zi9=B(O%)XtLob+gn!{mm82D|K zR|Uh4oXf_LPg{{hwh42lBM|$;E6g&W81%axgRptD2&GAr;@2`GdkZyWZACUAvL}EGNcRk-3UL zJbjDRjZ@%DmLCW$J!c6Ejp_ptti@gz8?0tSh&Vz4o&49sWN@Uupp0-7lt@!0Q7R<< z(FJg>Ig9a}R5k8`2>#?|hhL*0>Xs_YvAx{*6Q9erxDUwsEN%~HaH~65(RlXL&Ghl* zQt4e>I`3EQSbeT{!#dnezIM+k@+t6oozqWbawLHW-ix@fP4_tk*ZUQ#CGR-PJCwjj zG1AkBxBBPf%8n*A#<4V}G!U(>|MoN$II1K>Aq37xJ7FCk_|UQ0#!MWG>T#{46J`Ng z2zJwmvEPQz0fnIzI*jh~=KI@2!`t)8Sb;=L_Tn2T`c7!s4EPl;^(x{v5%AsTW*_d! z4-|9l8ofWK(d%he#|}(f{Ul=QdAqB%=na9MEmxxg2^O?=bA8Wc=Ih0`uW!u`OAsu2 z1Uag?Ke=l!P#M&%>+{&}gmb9g>=tpdUhgz>cC#YSujR-yjF@*om>pu7vup5zI!^iADF0pIs+@r_}ysBM$Qxha8EPYB0KXQ}k zPB(P;#B&^)5jT!}xU!M)teC0!>i5$KV2@_Ofp<35TR&Y*W+_909Ph3zs0KE(imH&fRj z{-1~8*YDoY92oFzcK>I0Dek#&Xz-AaXCUf+wnQNdN~Uj|2Z)cZ4G3vY7+JpD>fZx7 zxV$ycKE)*yIR5~z0WQnob5$o#fIJ7ImVrkKS?g}R%;O(X0f5?aiq@Jh9+YVLfXu1b zX|wxzImKy>`O+P3WrzF%V#XdL{pxLN$*uT9ij8!8lK~Bogbq?H%x?1-RYuWg zbH2a*q0sYsu7FjC@5jld0#?Z&!uU1CZLF5QOL$Bi1B!O4avBf4FmQ^SqBUMf-BKb!$OgB=4?^El zmC$_A2yW1?)qL{m#EU~Q9fxVcKlr?pJ0LA6p6L`DWA)~=kE`6VFXQT*7 z_Q_2HD#?9oE^hq8r``IPGc7(7aBqNoNR)a0pokr-^>n`O>V8<^bUZjDOsn&BcSXKP zDdNm{!IR{)b^*^Gb9J#?+9Gk8OaJtx(DNbL(`7%30ipMh04|OE2a=+&NXqO@fG#Z- zFERAPhHtI0=42nt(adWfJ#`V^?ih6HPM}wuo`T?OxxVD7fSjhCO0@-o6i=W|c{cDC zm(|kNbr&t)v&6F~XqIm3kJZC%zmjAVmnJKmP_U`PmI*fi*_^mwZ*!+6nEq zvvL>%S%dW;36kL-8tjkY>I{fED}=Q=jPXm68W!tUGl;ga+3fDZA|7?T5lFxkxq1Cn{$=l_ z+y#gggE#Is##@utvdcQnIwL|>+-DvRE*NJC&&D>Kq?8RfC@;-*#pM|;hEIaX%f7~k z7>gE4;x#(&c@OYvaLg0*Uo&Gb1=v`K23>xUNlC0|HQ||pev6MH!4<7DF^z$v$B=+( z)Nkqm3?MgJVZly|mS7B1zWLLDBo*3haB3oQ1G&mgr6y5$5zk_37g;1u%`29QJC!9X zsHzk3&m^(QY^733jK|s%65(@I8-6zvllWP1RwRG{w<*}g)bbmXhCzj!&HpbrP@UV-OHW!5=n2@n4Nl2-vqPDc$e3dsqSY8@^7#^jENG z;Q&&47}Glu0jm!1T?{tQRX$OpanntPmbL9?$kh?hOI7ay*$zv(Ux`zaY(764=UxMS2lH8@XUmi``xi{155qm-73 zaoHZWnGi5~Q$`aAvZQrcLAop2Q)qLr_|>E`$6I)r9|Rb9M$-u*!rDh#CbJ)~?kSGN zrviWGlCmQT_};t6vv5eBL`q)W|8nxG1ln)yv@gLL|D)gp8dB6F|lpm-^5 z?svldA8<**lO=HIbdf4U#YfC62upZ`p4|Cx`db|Hanyu-NIds8fNN{9%PTZe-ABN$sb0tIjd; zOjGT^6^G`|JA*OatrWOs50|lR0t7SQS>u#oU%)4C8nXpe^QXtLI3!t9F zt+mqk=1L0)y3U$^tp(U&eLLK=j;9wikwxs?6$rz6pLb&amY@VcC%^v|Nm!ABv@s)j z$YxD;n-d0}(bo=LO+$|5Wgn}&B_9NGAir$z>J^RoiSuYt%>j(BN+dCQFVrhu~w>fQi{(5dvQHSj%(a8oUG%wKlHMaPU)-6)7yq$X%pc!lp!Uf7z`nKc-=@~+% zCg=&hoD3Vlj!aY`Xa?so&cI4?E2`zv0QU(cY>>M69>ntSOJeCdsmpWX< z)pQ_BRG&LiEdB165uLRL67 zZ&^@5*_{5us-rn~>I}MRfS0Y@_K+ja)sOGSi~)r-R;EH8$Ldn*GGs4_D?2}TQ5^u8 zXaJr*aiVHe1Ui$mF1Lh(z%DH#l9L)uf8p80Xxoa_3Y`?+W|LBoCinEQ6q#$V?j8v_ zYqk4D^=P$5ly#79NkZY(tOFusC=nW$Jq~a&{ky)@U<5fVqP-@DioW^DSHs5c)<3?p;0?jGGWu+?sKEFw02nanMA+k*Z2e4tw9m_R30@j)t_5p)@nya z2nOw*XUC(x7meIbU~0Bu{ARKfTh6rf0e6QpVorAS$*lLvjP#i-Lv>4OSFqPH-%%nT z>%B{_DCypryQ79rBma7VBZUcT!r9tnaTHaF#lwusdKTV&&pM?-O0~2YsJx=uE`ovJ z1?D56m%c}+eU3--=|Ntv)!YP$H@W z3~WW6!LFhc_|Wt2;j1}=Y)px?C2j|4vd2uz-jt5pkcJ>K7OI)jrIVn81*sbTmEIAV zTa>OhfYXSqUmT^8m-1HrBaIuff1iBf2)75q%&RGINC-oU1N=ZoEIL5d@_NnEwNEX_ zK=pjptE7r3`*^HF9$>46jPU!GK8Eux+HCzuY>vH=U;;GyT|# z6FT-#?~(Ccdbowu#;>FPY3P6zuU#fGm!??IN6ApclTk;Navuo|yDGYt^e&1G5ZFto zswJOFj&#H%5webW_3Z(AUp%NJQz1Zo;YrZ1Qe?)AQ+o^h8%q-YMy#AU5ypNpPnOlo zVXe(~XV4`H6l*!z7UWUeF^SIF2!1*zpt8?S&aTixHm0?tL1`*`LZ>9h59;LIJ%8-BWNg>)UOw`jCc~aYRz|Y#avJ~$WE{N%oV~%ppL@mUBCe7 zT=Ym}$D@K$(zv*B5g*votqqy&_AW6r-;>~0CB_k5BA;|ZmA^c>~g3W+-HZk=`yTPW#rrSw{CX;?+(mzC^W7K15wxP z<^bjp?>%axv9NYJ(odTA)~zhQzc9z^U|~@APWhCoc?Pn-&C%V|J|E^igm!YyDr@T~5bLMEk!HruWug zPtv}F!j9wNLPF!B^M0-Flu_}xschrXh*Yo%oK4xiAVP{VR4UCHp6n1AfO%vT!~jx3 z_y7`JHq1Mr>M&F?dp?e%bnh3`B!1^XC_IQ!Dv$JWROy`P36Z724(c9Nk1h?~<4t&NfN^0&m zR6k}a?VWXMaLNl8!HT(@GSoueFv%0}$BkjbFJbq4yoBntK!Di@`TZ_vtfuYZ)zD|xkGt(yL@9e1xm4W;pd*wvuCkKmnPRA(jvhWH~6a{o|>dBlR` zOZVsQBnj|I)_fxcsxML6$%k7iw|ZZsZqr=GgbeWS|NhB=A4tl>!;Zkhd9h4}@QvLM zHT1>f%Y3RRr4fSS^}=>?5XA`6S)|VmikVqK8-B!v9sat_Y(CDz`MeKwSpKe z)ze;x9Ef#g)bl_TZ4rPlS(*Jr5DI{&JFM|z}WJ0-RmFM4#kSIfHQEHipi{j#{ zjgH~h)S5o7Vg!1_aQ~6^dK{1AX8bmb9`~gzLN#Qzw$5m5Qa^vI+waTDEAb6+@*BcL zpkt1o0IO|nwVWgH$5_PIjx|0;p4qz5y7i)eu1oLVPQ3TmF3Ue!nsPSDoczWM*oCWv z0IKC(iRE;Ibm!~7tAd+hLjxcB;Auo-a48aGumCGwGQW1%Oi+2SzFYHYlR6*!@FLNM zWw492mO^FzjKF&49Tc1EdlU`aLU?RI{gEyl7z&d)l{WLUz7A$zJM4GFTWHs_akAp_ zwdl$rm)23_Rq3vP!BZ*1<_6v$>1cuylq>{WP8EUg($RDvN3_y7zkk4c*!|7g3l$H< z%0Ze~(%%TJA5p@*MBjnAx1jOseZy1`hb`J%>CjZN%1)pw71$<@wT2qn62`@I6ZJ!Z zCWsAbB+~K77Zap&^4~U9?T4c3%%f6FPls>3j(u0}Gee8^imK?2)6(BaL@{OF26lI8!ey{`<2s%zU-x>GSbN_#?L&eN(g% zNNO-En80 z#~Y_%FmmM>tE4;xo}gm7C$5#8&T}o!{sSr!7o+MZV^xT_0a=<|KR|`=1p)fCPDotV z)puH}#^nYHbZL%IOlUk_v=d}^& zIMqy5ty%A<-*76B7Vwbs(~a=iZ-gWk1bNkjHgWl;!v24vDpVA37F~U?^^=Suca7B#j10#u zQnu2F50@1}EyFpOg0!mP;YZVy>UK!}hA%Uwh;c>>Q=pqqb*WD_NdbyEY@P<>t!A zG2wrHh|F2f>n}Cfg3LO=9|TA)=O?ZRzIG%;=os<1axgszP<^MUDteQOd7JIBkf)9H9j9#hw|_?A3{=YLHnZ&Wg&)d0 zOSPnrF^@2(S91e3eJS$1s-ZI^P!fW;2^#w}oVW?kBYykq(TB;T!X-(m9U(A&$dK}RL$2R+b(Ib>h<@Mgv(yB0qbq0?j^4@c;GXDL-MvHTq= zj1j#=v5il7!Bw0wwm%GHrKi7az>YX?gji4nV{&GNSVwKToVo`?Noh)ML>K?bLii7~ zj6?)Zho+<#MZ;sQbSJ_$6!YkuQ|1v< zJg!9gW7RVV#}~iH+d>#q`aEk9a|HQH67p48HPdAdiMn;!G@st=v>mf*BmI?h*0HxE%&bRD^&$VbxV;Hc`te*nP$p_sIO zgTf{Ixkb&GC(_e_1NxJ$DJW7Rb*$ZAweGi_5PduRoKfYRi}!znZvU*-Ogu*xZ|3as zD83Hk9^Y3@prT(MOFqISulim52${~>@;_FP|ETLpy=N+&Gl;9sRlKg|eJ>uw6_drc z?4S5`ZC*rBs%X@Jknt`c0BN?qq&9~``tR^(0SXuY=Pz>j;ZWuR_G|#Wv#HIOPr6(P zNd1@0=)WpMdl689I|Hmb=v(xNx#_5eIC$xKB*-O zfS)mw7wP?k%(?@O%l3?dN6ltS1%cxZerKdzN*wFH%Z(o(?PI?^A0O^5rWJTc2b4Ja z?J66RpJZZ#hP!v3Px`Jk-z$Z1gBD41{AE|CLa)v~61#yVyXwp#*~*Vjdy33TQrDk4 z@{KzE>Ht!lyp7FVNQVqZ<$qBb45kKyp3m_OS#(`D(d-aO~>v>mp13RN44%ho_7bbcO$(EX~On zqQK*1I6W$|r$@x?>pn^rP!T;vfT*Z^1?{wybM5ovWZk~i?--E`976r!>wHI?0Y1}B zlfbmCHf%S){>0#1=NxaXyN?h z00e9B{zLP62&%|a4w&XH9C!*rvuo2jei)z#TP$1qeE5=A(Nw1Ksuvf|81M_8z6z% z0{A{|o6(J^C{$Z@9lr4~LiLN(5+O1`X0&^vr=|b#34!|f(=A0G0G^%u$v+N6^R8;| z{^6QZKUDqsJLzQqNmjht*HOn7yaoswIW@C60YR$?R$xK8e?eJfE&g@n4;7Cj~bGl@RQ1g zN-CV$`Mm%I;1)0il7LkFkZpP84w9n`3WC|rNcY@Ie=pksRvkjPAke%P>)pZY^O%0) zK@C-P0ID~rByvw{EoF6NU2g2Om-mdexao&xIaR>C*_8X^N$dt`i7=6}h zSzdb#X>UF2GF+!*Wq&Z86M=cg1@@V~0Re&eRKeacqXccLIRHOkp8_xyp*f+m4t5>~ zhL}n2K0qgn^vayI!qh3o;@`r#0gyg=m)$WpUu3sz*?j=G)u+&@5#y9={q(79Vr|MV z?&rrf10YdM$`2@($S1cK0r-|K#lSr+!?7DRys`J}^$mcHn$K0})Ggb$4g%CNqHWsh z@d3_@L!c=K?b?D#bf`Du?GL=~FXqX=c>t1TyYH<)Og@}IC$BG5T~YCVLOAnM%75hg z6u6i9LWtDGdY9>Ko9Ee<$m31ySGiC69YB6xRYgUGhSlwx&Nt^myK1+SVGlqaPSk?< zen&rQ9LI`KxVi&oE5`5#PzcV^{cgL?b)XdTs=vEkdmOX%f$o_W#ou2xb-LX%_?qR) zcl7VRehchl=!-o>XRGRKJRfA7<#LTTh7D)bZO+lF0X_)FUSK!1Wm2T`^a7Ba74ZZx zQUm(xn`{yPjuim7jj5?4xd7UC7|@r~r)G2j%UeuaUBVCoW;7mzGiVmfMS(E_&eFbr zyxxrc*=h#QyaddS-{3GEopcV1h$s?nxx^7Z=~a<1Oi*rW*u*3bAykrTtiT44t~)XQ zG3$?UgP*xt^FKy`Ux(pu0m;|pcr<^!{+>S{J8v`5v7`IwvwdDQt$LMD-^FQylC574 zY!1ZJ6qc0@eY<$9l?z=Swv6< zEuP-bnERQIm0MI zX`?vD_@UXV>0&BIM1uPb^3D~Mib+B^aQc&4FgCytwY;M$go45-wHN7m;rvOC0v1mJ**7BrLsj7P)v9YuANbBHa(9wi8xND=8|)Ka6S0t{_zfwcdDAm4 zIAGI!Pq!aB)gaVunKz~%$R7BBKe_=Rm&KFs3@2lz8t)#w#xnSwp@k^|n3QHe8HzJD z?(%RccBVu)5t z`XjREpVVQIqD90hOAVJj*jHn3hcSV0$(hM*J2? zJ@@qxnADhR#B~LSgeLz2cmOg7?51@wo}}cQUv!a#!r(I%w10D@fv4CFoO%hW;CBtL z?%7fMz&j1|hAunoE9DI2ehXjo;BW&Ag3ku-0R{%^E(Sg|3L80@jpZj(oWKbjLUK)Q zNAwfXWw4b3GP2GIVx8hjoN^dKPo^sk_+4ra2deR(lflrCu3z%kGN9|)ZrMe#De5&j zVU$?eXEz{4Pz=U~Ov|ZDjNeT^Rj(xW2OKz56DmY_O^Ml_G*rQ*cVXlnDt@jDGG!c5 zfy@wl5I06qBIPyP%k`8yJl^hAB_yM@^EfXI6?i=mr!}f}d(jbF4emSbmjfl`L`FWf zdR&t}qAc12qJZ?+f?(xrqbh4j%obeFiWBNs! zGH@=rC8%Iu&6@YxDmSPX8Kzp_pz@g%^l7?C!R6x9WkMC@)ejX6?Yn1z>b}Ltv1{Nt zS;l)3H;r4u)mjvB@}8jpm||xkI;5?b2??7*zx;!k*Hod=W;jXc-sk?>=lm9@{($0M zAVH}`TV~of0=mR0;`0_(7P>X`;P;v0|+Syeu~s zKcL(O>}Q%AE4OC6w+HZ+WP>^adr1hlpe|{Q0il-~&?So&FL9&(x0nISQ&+|fV*c3i z5d!6(ZzwLrc3(tg&mfcU8yI(q_>bj{s~Y6*nYMhBskB&5ARN1!t9;qbrqbnPRIXEI8VH69#01cmn zB){r?Ru~1n$8`INa7nGMbYRpMzWOrt-D#xin%@$H|BA{a1Q+Wz%_A+0! z$7ZwdU6qQasPG9vY=cth+(0V12aWaCTzh?544)U6dgguc&DZfpQ{$q)mGX$yiGwDL zIh-snAOv8fOup^i;&@bkKU~lv_%{mCAtF4}65(3LOk&isRIGp5IT-D{CwYQMqOnnL;3oe-#lsZy zYRO^3VXENSMujBaK20;z>YF%+YeahlZtR&k2szlw(d36Qu))uW z7V%XEMdkENQKdBt??fcOy&5sHZZdh^U&1f7U{G`wM9e~iwII)(0-js7seX7V`O+y^ zAm77`zlU;&2xePfeU4tQl<8vI9Jgq`>E7bUWa~5Mc;;DYu;dm+j%ho4Dy6ErS`kW0+`o=$l#{1#{46q%eMo z#6KCRrD*Ws32Irj;<7Yb=DeC>)NK!YT#P2Jmv1@-u}*-2u+WW=G{{0u#25@NLP@Fr zT}HQlV=~FW9zZXQWI8n>88t{9`g|g{7xy$LGo*z+)^(wR1IC!0%Dk>Q$Z&M;Ghq{N z2tq5HEaaT7aZM=8{MwhYx3|kr;5XQ9j3=2^E*kgpJPw#8WDlp$1Ti z<4FM#z1UOI?WTFpYOPGS=Hb_ruA34>v&_(>h;b;K@@IR{0@mUzL3r96RCgf7J>J95 z!O!;iPb?FVhtgU$o79eMioft^_G?h_3gcRAL|>DjxRG`g*(tdJ`wd_B)!?4`g29YX zq?I+!#7@ql=D`npXrzzxkT*yI9G3QrqZUbij|lxWpeM>ff7NCTZ(`alu{fnUp;@~z zmPc|y6=N+RqxM3qaP=#WRBD{|#>p)iWwm3rc)Pl@oURP3?hDu=A6_wKF=o6lN(f$} zt8a0(<&>D9F_}ph#;L4Pr5WPI7aoNrjo-ydISE#Otf&b;4<&I-U+T|04e&9`oF#!$x0GCUd2Fm>~wt#fuoUVcg2PDH*Co?{^qg77LF(@V%grf34J4 z>?+PL@_2W~oqa1!_h}Jl;X-$5ci<&GN^voUIo3pl^hBS=4cqA z0mBHE)U{vIBt$RAJ*vBWcN8JS5;VFhT#PDlc3MA(JU`R0CXp8T@T6}rb6%PtF%r2a za4EWO(zzXtz{i9nwZG1#IoFbR6EC&5$+*kqHtv?&9WmE@O!Z-3)I?RfzLO1XS&y(m zWbDM?0dMHYYI4fC?S^hY?g#}X4!+$&J(SY_EGOLUi9j=&-#1FoYz3DGN3o?; z`wLA>QlbbVw*vYh`s1W}-N$kx#ZmPpR?W{(SKG+~um3v|_3Yp?a~#!@OnwBWv}@>z zfANpxtF52?>3pvRSL1p7I8}lZ6F>??Ur3O=SMiY~5ttEm+3Wu}frnEo#M-EfW@62Y zM3`2C==3|eMw|2PbEHhWkpk}eMIPeWa`Ujtx#6`cr_*)D8yk$ZbjKUii`|*!@(_2PAwk3Q&e}YhSM#KEB6>dsA0X~xe66yuf`;y45w9D^; zvoSXh9&$Xk;IHyIxWr*-V3fntBonQ1T{lUZ2*o=3A ziXvDsGeY$PZ=7xw-NqkO!6y^C5E1_kA`Rppp2kjZ%0BeUcE)A{H?U)*7F_K2!)=Q9 zXUw!axA02Hne07MtRvYTy-y*gsIInguWev&v^heO7ev-*uQ))MB$BYvP*nJ?J$apr zt~Ip8)O73;e#r!sje9zcr?LBEGpgu$)0W^J#fm2pVIL-nhd`G@^FeblIKG4nNUWFA zGmTA%eB$4^O@zPKl0bth0ZZoW>Sob0tIOT>J;llNG4y&Mi65Sj$Hf0yfyW*nYaO;O zIrX9L@9H_eqPjDfWM7l7TP_?!TG`cEq=NA!`GWO)62y7 zNLn;ZTpXz^HCBDRjAk`fQg~+~1O{n+QRtHzMj(VZ8IXzBvoKh=?F5Wvk)V=dNf)H` zCe^ox0CWsKXG=Hd=Cb7$e8V)r_k}mC5=%gCbueEM>10?al;+z0epY3}Vk+Pr?tAs` zfr^o{^ZMwFr%r_|+x?QC#4s^l`ry`BvOnjftM~Eir{raJs+pDTRI~(qJ-oQ-wK$DH znoQj}_d65t^u{9<*5fwKqt5hQVLM2ym0Imck_@@9u`9DS%VsrdyfmEE#lJV7;oBSb?w- zT>dU|SINH7>a6O8_LnZ#6M;i*%&gx}Uu3RdYY+6ys1Xe=SXFz|LsMkFvaWl>7zj%| z6mK`85NH))_m25~{k?&`@O@;2>}-PXO3I_Yy-BM#SfaR3Wj*Kq1?XZis4Z%v1Y&n| zmSZTZ9u()WRjyPUgoenYsge7rRql)W){XeBKEdbzM(0-2uQfETu4GLNjDemb4#J?W zX0eo@3$CAhTdh{qA%1~~qcx?kcb`pQ)okQs{5Zs_d}R?)V3(3MgWqkY5>u&jXCfqS zRQMtMY7l`ejUEP9RZuM~4l6BJagiNj*YKYAxDU>B6hM{efA4l|6rSyDx~{oTaI6*$ zQQ73NTq@o9L{hva{rjtr;ny-T1O8&KSE=I|J>hl_2^#QjiMQ^|n@Y*~ck|negRQPE zMeR;XM;Dtf1;3e$lHJv-->J9rj`$~6u4Nd?0Gy`y=OlFjNKq1IY^YQ1awL@LSHvUG zFusM)_^#9y6+N|ZLkQ7-sL;We5c0CzbtwZK%z{lCEX@Ue{qQbNxLNMAu9zk&e#D=O9pG&&RZRM8%fSUnIP4%OkrOAO*5l*oDr_Q(}qE?$%iv$g%p z@3N%ib^@jHH|)TgNklQyy!%b0R)MJVQJB0DjP^n=Ot>dLAnEiwD_riAtrA|bj2dNX z&n;AZIHoAeD@0VWq*VpNMhGqm1^cDFR|%PM10~w7j(l$%W@&BygA%E95)>?j2_ijE zleFs*MNuSU=@PaY`G`C4`k0Fu!!>oKRx1*<0WZeY6J;JAlu;1bsAw1->#=Ej(0wBd zWJkT_2(TC@6Tdzp3#Xw(!r_QqTCEeQ=?|#}yNi?O34cP4ba?P~>rbjF2{ieD;ug~Z zX~aHyvqa%heGh+J0_i~wFNjv9|1I&_4rWLIQuABAsf0tdP-8l2^Z{tZ1jR@C?iRUK=dKTkR1XCb$pG;dW-y%Cm01yDFp|wQJHg_# zq`R@M(DvxR)034i^Aq^Fuvttu1`P916!C88kHv9$U-JWj%Y{9)F}EtXvG?dXcaA?& zKWjofQ4*>QELD}XUv?)F99WB-a|`TT+r+{!W6q_l7oe0cv7uV~jHNrTpi6>I(^pgT z0p#KWiyNXpb7E9FRZ-0$h{S}K3)y2nDa=Hv;-Pf2&E&=LbM)KqI zRB_QH)VfAMq-T;aOfA8yI{JEk))N#e@I2QTFI;aA{mAVYq^pEAleba|n760PJCVGC z$5|4r2l*5jTw!fwwR@lheQwN$5N4?qcM()VS z*KRqLr5Zfg^J)cY(%fpQX(AQ}DbhAhy{6cI3jYIx)*gmG@X$;wx$78q^rdF!zF?RQ z?;G%e_2zoJRgkR6-n`VEXb^QFS&Njf>E{7)6bpFwH!AovKj+cD6=F%ELMX8`Olso? z`Jv)!1an@JH`~NZ;7b*DezUwjaSVDliHQ85KZ7(7!#{x-y@&nO2?yJ+DsjGoVTyaK z_bi$`sne6f+9=}I`)yWCIR^|Mr*@9J`Z61tg>b^GF33YUfR)@7M$Hv5qg5fMZLT(0 zaG2M-;pzg~+)5V!`&u!LO3EPnqR`5sswO_V-Yb_i_CKhM1U`AG&HGPdhj8bpI8A+Y z0zKPIw@3bL9WN~ug?kza!m4|oR%lu zo)yL&_UiDNvt*`4lq#lei+h@^kO`2fO>{!c9piY{i@W07jPn3({Y}YX@GLxn{--{z zhBy7&DFi6UAFXNdB`%uZH0HKK>M|pCEMsQpmeovs)dlui8`WS)*K>BIX!`QXX zA@3q6>;ETe^fTA&AsfS#`#tB{P|3-O(r#4JjR2o6aq88W?`59A^~eg~Pyu2E*ZG*r z$s9m`#RedJbd|wbd~LEZj37kzE^%3XJoN&b(wwY>xJ^@@NX|v!fncG657q4y`s=mm`25?T0*%{rGH@} zV*Nbz?K&u}WkOWgCJc`N&>Yx@wtjhIMeUHrXI$@upq+rvRC zyzt}ohedmKFVf!|0AJ^I-wp2ZZA*|xa_)po51Z276PvRPi8w)c9t~Rlxc~-mjJcBK zjjB;X*2S(%hgb|+M+&lVup?=3VBlaM&Q4jLEDMsXV__X)YXiC2)gNXQkpWw*khfEp zX(GKRkoPMf5h#pZq;hMNGSug-^GPd{Hal_F=qLGQ_v9VB8Kb1EXfBg?t^Jm>-Zdx= zfR5N1U=|FUJ>E{*Xv`n4l)d9hcef*IHj*$z?~rX_lg`c(%lDq6DA)9qZsQ<;cV71- zvze>_eCmi&6OsJ-xNAy}Pi-g%BaZX61~#|ofHc%Zf?M)I_^;Sm{*}U4Lawfham@&m zvFI+kBVV*VEfJZ0UWXm?%sL>|HD^i!9j=vu#iHT02a9RuOme*$@ z!sj&!LN$8h52jMX>48f!T z0$#Fisp&peD-QLUm0 zCh3$!%(BTW$Zr4&@Vnk*`*cpEop$i8TbVrW7X7sI>qBrcM)|cc*hP;)XxU*3VW|xa ztRe5hAWJAZqey*GkPk+>IC=>sh=w+CrVJ$N$iv|+bF7EJCufm}a9T+U;HpGWM)s}J zBt=>lI>u*ff!Wx7&lQ$V@m(xyYqD|9s7CVhK&NTJmQ|PmA=00coJSre@*EulWlgBQ z8?u3Vp`h?@a?B(?iaH+#1{JDK=U)7_HQL?7p?aLql#0hC=4Q z-DidK98=KG@ZjU z>EHe@M-osmz!l1_&72_iSS-%mrTW5Tdor$|XHAKK6g&rM9W14I;(yOM+i!Mjazcvd zVI^wl-M`XFa+!V5@o`?mTd6bE&=-xu{F+uega~ozXJG*J=&f{2sK|rH=L|dwPbW}U zCqfKQW3Kt)%oXVy+sOHUQtAGaa>W3rBh;(Ku6ud$`}@d8>GshZ0+%Po8o7f~P+Uj6 zgHlSondJJekvQP@+lDePN4HvDpQ3v=isx^q9CXHui=r zeLnqIJitHuIL2ok&Xq9lGaPXoowGyg5;^{t`mGO8%nbt3j0r>(63ezHi$yI-Csv=! zqC=+l;lC~bE&^+5oqf~}84>9tGD{x%DQ*LJUy9xpAq&(?kwFSEuV7OpQ-Km=g#YL!iv9_j0;HkXSOlxrJZ0I zg>Ij*Rrl>cKLX4HQQQw}_S87g_fCk@RW_~YxH@oLFV}X|lEEHK*^@f@f8%6LNa73- z17C4=^-5oJDCk`)zv{$d(pP=-%`#|n$OM$SAMt8}X`>H*itnCn%MSCtd$4|%H^*$H~fGeqLoq9K+)RMu}v zW*l4cSBkv|=dKMs9jkkGtyFKyk6U{^Ur)n|Chz{i`2C-@1o(HNPOswBJ`b75ew)i< z!N@e;2g*x%g^Di{wzbZygd+T?dP`cC79x^kbsIz^Os{4nwpre7)3NwK8xvBgg(aN_ z{+y?*`m`{)?^lw~Gd{$;o>~5SyKBIBPky2_KO_}cdL>jR$PAP!6&T&VSInGFVj2MqF-9YZ zo$G>_0h^#Yt;?0aOoAsmUj>!&v@j2&*c_H*L&@mep4P2}Q1_9ZLPl-WZ$#9{iPFUod z2n!O2QRUcv8RqP+KK>}psjxP2*fLPl?uFwkz7qbU+An+J6lA#dE7bRj3pqzO?r-HP zqX)D-`CJTA3s&+9Hfz4xJ2N(sF&pwz;mWQ?zGW{)q~G4zV9SFQ@TztG2sw|-4Q!!p z+lHj#F<4lx2`PMc5c%&e23}Exq5$Uf3897AB8<%5N3RP%2wE}ADOYN|6tozfw<+`;zZ6TS%9lgn` zlbZH+*SMe%KYO@Ger~18>0n6*opJv8Xp8r|s{EQif1x)9fC5ByZZ8i*cbSVBwPbn^ z7@qdY3Mqbzxdc(Q7BCFKTLls?n`QQ;)#l3B!TOQ=r_u2*2opfiO$e6HzpB`H2%+JX zBLUGmU3PDuO5q@ZT47qMs+kRhqY2p}4Q+WGhgm8kVX@05GM%m@J@4)*5j$@Z zZt|;Bh7hMu2@Ik=bR8xe`+TX_m>wKWsOiV2EdOE#^8yo&?q}=A>YV8+IY21aiO?O!nU)-U@+V zdb{g${?c~=uf%f1P;6yA?VvUDZaUl-3cLVZ`k~bic}shk5~F#Oj_0)?Sc{t!s$k6=Q-u<4eytEUpR%bFOQd~ z^{s-41+KB9b8%wrf_w_)NHII-ss4T$b1$@iTJ7sL_{5KRKX8=ls_3<*SMqHHK}LF- zG&~tSk58KdPwzB49-!%bVzZ8%)`1@^9M{M#x@ThT-eRwzG&_t%7}MOlm{_GS5W&P-xd)r#UI7dHynAkTN?S9Z^fxk4583@qTn`;6WZxYy{xn1Ny51T7Va>v=Zf2`q{qOCFl{Q?ORb()3Kj!9 zi@dDkNSA~mf7$u~y8ggELx)LCitkxVqMI%&{jJImC#j$LlUqtsS5cO*Ow|j@-JyoSXdHj}qvE5c6ybfD5k)V*cLtz=Ag5ub_WFlKh*dcn47{Dt6EoL+2)&XMQ7 zA-`p7zWH3Y&S`9lJ?14rECh3Ik1plt78$ze>3ib?qx}Z$)kC-nwf7CHf4{1l#ka4* zzZ0`2o6XX`UC>1@v&KR?$jeDT{O8e-4q~OqK#0PW`Pb&k7tawxeIvtyRbOHOC@Vdi zDoMz+M{I9~8**ev`?BWV7r6jIlZC9Pa-{5+6z-G;O+7VO#ZPG#k1bPv@2js{LFE3s zD0@1snbaa9X`td2-vHGtf;aqmQNDryT{qH{O z->j8yN8GbQrrr6a#{7ThnSSn?`s+zSTqFo2BR%udj_ZO=!$bUPchZ-Fu_%tOr}Eez zN6exYqxZT#QYI*MJgR4<|7m+)H`d4UhtW=Jo9KaQ z_)YR)0kM&cg+<|Xg<`g#ggdn9YhrSuT*{?ET{<87U&-uj2&Od3I0y~4H>PPKFr!?-FmI4ocel-SB)nKN-&CKb}R#N+FHCF84lq zWMpPel2-Irj#=1Y)1e?+X|UEgG5xhW40u5OcVF~Ih>GE;f8U&-4NHihxznJdD>hzR z*y`!(M=qvoiYw2CLGJdWA0eYHANJ~+jiIk}z8YBRv>)!-``cd4whnf#HS4|e{ZsGy zemb|d%lPK6Cxb0rkvpcCjJ{)DATIa}SrfqR@+%OVE4*u8b@g2u{2_@0>c(uK3 zg6cIUmV#~P^0w+yqf0JbrAk5Z%K<1!f0cnlg}j`cd4p#8U|a8*ZE!GyqlHGH_gIrg zN~LykbM-dgXrRu=ahc6-!@ssoh$z{UKWiB(aJ12@`1}1K{x!{XRbKJ0t8BU&8XECi zFFwjC-n5(FB#>Oa<^1cDV+7pMD90fXyre31$!=FpM$Q&tAH;(5k+WQl>=IrBi7I{# zOb!0K)7gz=4wZt>k7xBu2gWw!cWE=^0d)A;Nxhp#mEO;GrvK6cPw@*G%>+~bx)t3u z9X*S_IMbGc{rPmcWajMu?tS2uaskSVU?h#&h98g@ z;U4p*d>9OdiX%yXS#pd~xDXK{B64g4>M1zAxq+Z*f<;8M?7(*887S8BgFnWOl> z1Z>J4C@<*55c{5-=75uqzA8-y?Y+>Q27(+2a8_5y>O$q;>Ujwl94$JDr*6#5;K0lb zuTVywqi!%ri0ti_qUbYLUljavhso`4PZ5U@kOwOHLVsD*NZ}Dx|C>jdlDl+2f>Hz$ zY-Zmy-p^I4+BEW4=e20;fOlfb4cbHSfJfYSc7?tJBGZ=ZeCg2)EyhmWBiHbpVDo@!){m9>>G2dBHxa2;U6%LEZ0VnWCeyN^Sq9nMO z4YN@p%BK5=BJ-b-^FwEQtCbCHME5hFXp%{FmdKgZq6G-$T? zy_2-7#G0w5lX5~{SwrmbgZ$%qfCYfWr)SUM98i4rKf~(0y<_)I$ErChq%O)0G%~q2 zo&C>SxvWAhoV{Un37rTiI8>rfZwLOkc86m?vlVH$6rSz9_<4k!v=fs5P|DW-fx(yW zQH>(z>ZcJ2h#>HPKS1?o6%LAKOId%9_GfC&Q0KZq@xHpoerC6#W1L{_5)EqZqd~#?FvsCF zMKHa%*(?%c_H=XqzRLo9Wo4sqAHRm=ncgH_ZQfzydd*{_dmW^P`Y}wcz5RTS$7~~1 z`{CXCZ~Lomy7JcE7Ot9)*)goGyNSXE*S6qMt-{pCfXAI47k4cWVJfh%y1!G%1Rx|MS}af8YP3b_uY$VLQ<@Gf4jV QbY7{fl%iynxbf%z1J#d&c>n+a literal 0 HcmV?d00001 From 8b1f989b0c83fe7332bdd0897d0fafcc790354c6 Mon Sep 17 00:00:00 2001 From: "Luke Charles (charle44)" Date: Wed, 23 Oct 2019 15:06:47 +0100 Subject: [PATCH 060/106] fixed typo in 3.3 amended type "is is" in 3.3 --- 05 JavaScript.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/05 JavaScript.md b/05 JavaScript.md index 27afe040..9604dce5 100644 --- a/05 JavaScript.md +++ b/05 JavaScript.md @@ -391,7 +391,7 @@ const last = employee['last name'] console.log(`${first} ${last}`) ``` -In ECMA6 is is possible to extract multiple pieces of data into separate variables by destructuring using a [Desctructuring Assignment](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Object_destructuring). This is syntactically similar to creating object literals (see the example below). +In ECMA6 it is possible to extract multiple pieces of data into separate variables by destructuring using a [Desctructuring Assignment](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Object_destructuring). This is syntactically similar to creating object literals (see the example below). ```javascript const employee = { From 0e7ec413483c89b70724e3c805b647707c61b672 Mon Sep 17 00:00:00 2001 From: "Luke Charles (charle44)" Date: Wed, 23 Oct 2019 18:11:25 +0100 Subject: [PATCH 061/106] typo ammendment changed "vsriable" to "variable" --- 05 JavaScript.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/05 JavaScript.md b/05 JavaScript.md index 27afe040..440d30ea 100644 --- a/05 JavaScript.md +++ b/05 JavaScript.md @@ -685,7 +685,7 @@ const matt = new ECMA6Student('matt') console.log(ECMA6Student.studentCount()) // prints '2' ``` -Notice that the static vsriable `count` is public (so the `studentCount()` method is somewhat superfluous in this example!). This highlights one of the limitations of JavaScript, the lack of a simple way to define private attributes (variables and methods). The next section goes into this in more detail and explains some workarounds (hacks) to get around this. +Notice that the static variable `count` is public (so the `studentCount()` method is somewhat superfluous in this example!). This highlights one of the limitations of JavaScript, the lack of a simple way to define private attributes (variables and methods). The next section goes into this in more detail and explains some workarounds (hacks) to get around this. ### 4.5 Handling Data Encapsulation From 210ae9237f14c22395a2022f48754345f6159fdd Mon Sep 17 00:00:00 2001 From: "Mark Tyers (aa7401)" Date: Fri, 25 Oct 2019 08:56:42 +0100 Subject: [PATCH 062/106] Added Notes on Installing the Browser Preview --- 01 Setup Win10.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/01 Setup Win10.md b/01 Setup Win10.md index b518f381..5b478f49 100644 --- a/01 Setup Win10.md +++ b/01 Setup Win10.md @@ -11,7 +11,7 @@ Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-L Restart your computer when prompted. -Now install Visual Studio Code and once launched install the [remote-wsl](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl) component by Microsoft. +Now install Visual Studio Code and once launched install the [remote-wsl](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl) component by Microsoft. You should also install the [browser-preview](https://marketplace.visualstudio.com/items?itemName=auchenberg.vscode-browser-preview) component which will allow you to open html web pages. ![remote-wsl](exercises/.images/remote-wsl.png) From 48310c0c4da0ea6059619a57e781587cc89eb4b0 Mon Sep 17 00:00:00 2001 From: "Balazs Bordas (bordasb)" Date: Fri, 25 Oct 2019 12:03:20 +0100 Subject: [PATCH 063/106] resolved Issue #25 resolved Issue #25, promses.js now does the same as asyncFunctions.js and nestedCallbacks.js --- exercises/06_code_quality/promises.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/exercises/06_code_quality/promises.js b/exercises/06_code_quality/promises.js index 00d9ca6d..671a3dd0 100644 --- a/exercises/06_code_quality/promises.js +++ b/exercises/06_code_quality/promises.js @@ -48,6 +48,7 @@ getInput('enter base currency') .then(checkValidCurrencyCode) .then(getData) .then(printObject) + .then(() => getInput('convert to')) .then(exit) - .catch( err => console.error(`error: ${err.message}`)) + .catch(err => console.error(`error: ${err.message}`)) .then(exit) From a4ffe9c0608937ed09f3ec72b9e2eef69b96de7c Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Sat, 2 Nov 2019 19:52:58 +0000 Subject: [PATCH 064/106] Added Notes on Script Explorer --- 06 Code Quality.md | 58 ++++++++++++++++++++++--- exercises/.images/npm_scripts.png | Bin 0 -> 18576 bytes exercises/.images/scripts-explorer.png | Bin 0 -> 56986 bytes 3 files changed, 52 insertions(+), 6 deletions(-) create mode 100644 exercises/.images/npm_scripts.png create mode 100644 exercises/.images/scripts-explorer.png diff --git a/06 Code Quality.md b/06 Code Quality.md index 47d21c4b..81cdda6f 100644 --- a/06 Code Quality.md +++ b/06 Code Quality.md @@ -26,6 +26,36 @@ Notice that this has installed all these listed packages. The manifest also spec $ npm install --save http-status-codes ``` +### 1.1 Scripts + +As you continue your development in NodeJS you will need to run a number of scripts in the terminal. Many of these include a number of options and flags. Rather then trying to remember all of these you can store these scripts using easy to remember aliases. + +The package manifest includes a `scripts` object which can be used to store your custom scripts. Take a look at the `package.json` manifest file in the `exercises/06_code_quality/todo/` directory. The `scripts` object looks like this: + +```json +"scripts": { + "linter": "./node_modules/.bin/eslint ." + } +``` + +Don't wory about understanding what a linter is for the moment. Since you have already installed all the module dependencies in the previous section you can run the script using: + +```shell +$ npm run linter +``` + +This will execute the `eslint` command located in the `./node_modules/.bin/` directory. The `.` indicated it should run on the files in the current directory: + +```shell +./node_modules/.bin/eslint . +``` + +#### 1.1.1 Running Scripts in VS Code + +In the previous example you ran the script from the terminal. If you open a project directory in VS Code that includes a `package.json` file in its root directory you will see a section in the explorer sidebar listing all the script aliases. next to each is a _play_ button which can be clicked to run the script! + +![Scripts Explorer](exercises/.images/npm_scripts.png) + ## 2 Modularisation Next you will need to do is to split your code up to make it easier to understand. Take a look at the `06_code_quality/todo/` project. If you run this you will see that it is a simple shopping list app where you can add multiple items and quantities. Currently all the functionality is contained in the `index.js` file. Locate the `modules/list.js` file. This declares a new Object Prototype called `List` which includes all the necessary functionality for the app. At the moment this is not being used by the app. @@ -56,7 +86,7 @@ Try running the server and adding an item to the list. Currently there is no fun ### 2.1 Test Your Understanding -The custom object prototype defined in the `list.js` module already contains the functionality needed by your app. +The custom object prototype defined in the `list.js` module already contains the functionality needed by your app. 1. Modify the callback function in the `router.post('/')` function, inserting a call to `list.add()`, passing the item name and quantity as parameters. 2. Now modify the callback function in the `router.get('/')` function, replacing the empty array declaration with a call to the `list.getAll()` function. @@ -141,7 +171,6 @@ Open the file `nestedCallbacks.js` which asks for a _base_ currency code then pr As you can see, each step has to be nested inside the previous step's callback, creating an ever increasing level of nested code sometime referred to as [Callback Hell](http://callbackhell.com/) or the [Pyramid of Doom](https://en.wikipedia.org/wiki/Pyramid_of_doom_(programming)). - Callbacks are the simplest possible mechanism for asynchronous code in JavaScript. Unfortunately, raw callbacks sacrifice the control flow, exception handling, and function semantics familiar from synchronous code. ### 5.2 Test Your Knowledge @@ -178,6 +207,7 @@ A promise represents the result of an asynchronous operation. As such it can be ### 6.1 Creating a Promise Promises are created using the `new` keyword. This function is called immediately with two arguments. The first argument resolves the promise and the second one rejects it. Once the appropriate argument is called the promise state changes. + ```javascript const url = 'https://api.exchangeratesapi.io/latest?base=GBP' const getData = url => new Promise( (resolve, reject) => { @@ -187,6 +217,7 @@ const getData = url => new Promise( (resolve, reject) => { }) }) ``` + This example creates a `Promise` that wraps a standard callback used to handle an API call. Notice that there are two possible cases handled here. 1. If the API call throws an error we set the promise state to _rejected_. @@ -196,7 +227,8 @@ As you can see it it simple to wrap any async callbacks in promises but how are ### 6.2 Consuming a Promise -To use promises we need a mechanism that gets triggered as soon as a promise changes state. A promise includes a `then()` method which gets called if the state changes to _fulfilled_ and a `catch()` method that gets called if the state changes to _rejected_. +To use promises we need a mechanism that gets triggered as soon as a promise changes state. A promise includes a `then()` method which gets called if the state changes to _fulfilled_ and a `catch()` method that gets called if the state changes to _rejected_. + ```javascript const aPromise = getData('https://api.exchangeratesapi.io/latest?base=GBP') @@ -204,21 +236,25 @@ aPromise.then( data => console.log(data)) aPromise.catch( err => console.error(`error: ${err.message}`) ) ``` + In this example we create a _new Promise_ and store it in a variable. It get executed _immediately_. The second line calls its `then()` method which will get executed if the promise state becomes _fulfilled_ (the API call is successful). The parameter will be assigned the value passed when the `resolve()` function is called in the promise, in this case it will contain the JSON data returned by the API call. If the state of the promise changes to _rejected_, the `catch()` method is called. The parameter will be set to the value passed to the `reject()` function inside the promise. In this example it will contain an `Error` object. This code can be written in a more concise way by _chaining_ the promise methods. + ```javascript getData('https://api.exchangeratesapi.io/latest?base=GBP') .then( data => console.log(data)) .catch( err => console.error(`error: ${err.message}`)) ``` + Because the Promise is executed immediately we don't need to store it in a variable. The `.then()` and `.catch()` methods are simply chained onto the promise. This form is much more compact and allows us to chain multiple promises together to solve more complex tasks. ### 6.3 Chaining Promises The real power of promises comes from their ability to be _chained_. This allows the results from a promise to be passed to another promise. All you need to do is pass another promise to the `next()` method. + ```javascript const getData = url => new Promise( (resolve, reject) => { request(url, (err, res, body) => { @@ -245,11 +281,12 @@ getData('https://api.exchangeratesapi.io/latest?base=GBP') .catch(err => console.error(`error: ${err.message}`)) .then( () => exit()) ``` + Notice that we pass the `printObject` promise to the `then()` method. The data passed back from the `getData` promise is passed to the `printObject` promise. Because we can chain `then()` and `catch()` methods in any order we can add additional steps after the error has been handled. In the example above we want to exit the script whether or not an error has occurred. -Despite the code in the `printObject` promise being _synchronous_ it is better to wrap this in a promise object to allow the steps to be chained. +Despite the code in the `printObject` promise being _synchronous_ it is better to wrap this in a promise object to allow the steps to be chained. If a promise only takes a single parameter and this matches the data passed back when the previous promise _fulfills_ there is a more concise way to write this. @@ -261,7 +298,6 @@ getData('https://api.exchangeratesapi.io/latest?base=GBP') .then(exit) ``` - There are some situations where you can't simply pass the output from one promise to the input of the next one. Sometimes you need to store data for use further down the promise chain. This can be achieved by storing the data in the `this` object. ```javascript @@ -288,10 +324,12 @@ Study the code carefully. Notice that it defines 5 promises and chains them toge ### 6.5 Executing Code Concurrently In the async examples we have seen so far, each async function needs to complete before the next async call is run. The diagram below shows how this looks. + ``` - 1 2 3 + 1 2 3 ───⬤─────⬤─────⬤ ``` + The program flow is. 1. The first async call `getData` is executed. @@ -301,6 +339,7 @@ The program flow is. There are many situations where two steps can run at the _same time_. This would be impossible to build using standard callbacks but this can be written using promises. The first stage is to create an array of promises. Typically this is done by looping through an array of data and using this to return an array of promises. + ```javascript const dataArray = ['USD', 'EUR'] const promiseArray = [] @@ -314,6 +353,7 @@ dataArray.forEach( curr => { })) }) ``` + In the example above we loop through the `dataArray`, creating a new promise object that we push onto our `promiseArray`. Once we have an array of promises there are two possible scenarios. @@ -330,16 +370,19 @@ Promise.all(itemPromises) .then( results => results.forEach( item => console.log(item))) .catch( err => console.log(`error: ${err.message}`)) ``` + When the `Promise.all()` method fulfills it returns an array of results. In the example above we loop through these and print each to the terminal. #### 6.5.2 Promises Race The alternative is that once one of the promises in the array has fulfilled we want to take its returned value and continue the promise chain. In this scenario we use `Promise.race()`. + ```javascript Promise.race(promiseArray) .then( result => console.log(result)) .catch( err => console.log(`error: ${err.message}`)) ``` + As you can see, only a single value is returned by `Promise.race()`. In the example above you won't be able to predict which conversion rate will be returned but you will only get the one. A good application of this would be if you can get your data from multiple APIs but you don't know which ones are working. ## 7 Async Functions @@ -382,6 +425,7 @@ async function main() { } main() ``` + Async functions are declared using the `async` keyword in the function declaration, all errors are handled using the standard `try-catch` block. Because the main block of code needs to be in an _async function_, this has to be explicitly executed at the end of the script. The `getData()` function returns a _promise_. it is called using the `await` keyword, this pauses the execution of the `main()` function until `getData()` is either _fulfilled_ or _rejected_. If it is _fulfilled_, the data returned is stored in the `data` variable and control moves to the next line, if it is _rejected_ code execution jumps to the `catch()` block. @@ -389,6 +433,7 @@ The `getData()` function returns a _promise_. it is called using the `await` key ### 7.2 Simplified Promises Async functions are implicitly wrapped in a `Promise.resolve()` and any uncaught errors are wrapped in a `Promise.reject()`. This means that an _async function_ can be substituted for a _promise_. let's look at a simple example. + ```javascript const printObjectPromise = data => new Promise( (resolve) => { const indent = 2 @@ -405,6 +450,7 @@ const printObjectAsync = async data => { console.log(str) } ``` + both `printObjectPromise` and `printObjectAsync` behave in exactly the same manner. They both return a `Promise.resolve()` and so can be used in either a _promise chain_ or an _async function_. ### 7.3 Test Your Knowledge diff --git a/exercises/.images/npm_scripts.png b/exercises/.images/npm_scripts.png new file mode 100644 index 0000000000000000000000000000000000000000..7575a28af50b2201f9861e86fd455294eb130ab4 GIT binary patch literal 18576 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 Ls?t@G=3)OAX2e1- literal 0 HcmV?d00001 diff --git a/exercises/.images/scripts-explorer.png b/exercises/.images/scripts-explorer.png new file mode 100644 index 0000000000000000000000000000000000000000..34eb60bce75e3992a56d1aad474ed4fd08f342c2 GIT binary patch literal 56986 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 Date: Mon, 4 Nov 2019 04:20:28 +0000 Subject: [PATCH 065/106] #28 mock-fs example created I couldn't make mock-fs work properly, so the unit tests using it don't run. The web server also fails to receive the POST request with the image upload. --- .../07_unit_testing/file_system/index.js | 39 + .../file_system/jest-test.config.js | 20 + .../file_system/modules/file.js | 25 + .../file_system/package-lock.json | 5536 +++++++++++++++++ .../07_unit_testing/file_system/package.json | 24 + .../07_unit_testing/file_system/pictures.html | 22 + .../file_system/unit tests/file.spec.js | 131 + .../file_system/views/pictures.html | 20 + 8 files changed, 5817 insertions(+) create mode 100644 exercises/07_unit_testing/file_system/index.js create mode 100644 exercises/07_unit_testing/file_system/jest-test.config.js create mode 100644 exercises/07_unit_testing/file_system/modules/file.js create mode 100644 exercises/07_unit_testing/file_system/package-lock.json create mode 100644 exercises/07_unit_testing/file_system/package.json create mode 100644 exercises/07_unit_testing/file_system/pictures.html create mode 100644 exercises/07_unit_testing/file_system/unit tests/file.spec.js create mode 100644 exercises/07_unit_testing/file_system/views/pictures.html diff --git a/exercises/07_unit_testing/file_system/index.js b/exercises/07_unit_testing/file_system/index.js new file mode 100644 index 00000000..6677cf0b --- /dev/null +++ b/exercises/07_unit_testing/file_system/index.js @@ -0,0 +1,39 @@ +#!/usr/bin/env node + +'use strict' + +const File = require('./modules/file') + +const Koa = require('koa') +const Router = require('koa-router') +const BodyParser = require('koa-bodyparser') +const views = require('koa-views') +const status = require('http-status-codes') + +const port = 8080 +const file = new File() + +const app = new Koa() +app.use(views(`${__dirname}/views`, { extension: 'html' }, {map: { handlebars: 'handlebars' }})) +app.use(BodyParser({ + encoding: 'multipart/form-data' +})) + +const router = new Router() + +router.get('/', async ctx => { + await ctx.render('pictures.html') +}) +router.post('/', ctx => { + try { + console.log('processing the post request') + const body = ctx.request.body + console.log(body.fileUpload) + } catch(err) { + ctx.status = status.UNPROCESSABLE_ENTITY + ctx.body = err.message + } +}) + +app.use(router.routes()) +module.exports = app.listen(port, () => console.log(`listening on port ${port}`)) diff --git a/exercises/07_unit_testing/file_system/jest-test.config.js b/exercises/07_unit_testing/file_system/jest-test.config.js new file mode 100644 index 00000000..a758c709 --- /dev/null +++ b/exercises/07_unit_testing/file_system/jest-test.config.js @@ -0,0 +1,20 @@ + +'use strict'; + +module.exports = { + displayName: 'test', + verbose: true, + collectCoverage: true, + coverageThreshold: { + global: { + branches: 0, + functions: 0, + lines: 0, + statements: 0 + } + }, + testPathIgnorePatterns: [ + '/node_modules/', + '/__tests__/fixtures/', + ] +} diff --git a/exercises/07_unit_testing/file_system/modules/file.js b/exercises/07_unit_testing/file_system/modules/file.js new file mode 100644 index 00000000..7b18a962 --- /dev/null +++ b/exercises/07_unit_testing/file_system/modules/file.js @@ -0,0 +1,25 @@ +'use strict' + +const fs = require('fs') + +module.exports = class File { + constructor() {} + + async savePicture(filename, imageData) { + if (filename === undefined || filename === '') throw new Error(`filename can't be empty`) + if (imageData === undefined || imageData === '') throw new Error(`imageData can't be empty`) + fs.writeFile(filename, imageData, 'binary', (err) => { + if (err) throw new Error(err) + console.log('File saved.') + }) + } + + readPicture(filename) { + if (filename === undefined || filename === '') throw new Error(`filename can't be empty`) + try { + fs.readFileSync(filename, 'binary') + } catch(err) { + throw new Error(`file doesn't exist`) + } + } +} diff --git a/exercises/07_unit_testing/file_system/package-lock.json b/exercises/07_unit_testing/file_system/package-lock.json new file mode 100644 index 00000000..139ea16a --- /dev/null +++ b/exercises/07_unit_testing/file_system/package-lock.json @@ -0,0 +1,5536 @@ +{ + "name": "file_system", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/core": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.6.4.tgz", + "integrity": "sha512-Rm0HGw101GY8FTzpWSyRbki/jzq+/PkNQJ+nSulrdY6gFGOsNseCqD6KHRYe2E+EdzuBdr2pxCp6s4Uk6eJ+XQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.6.4", + "@babel/helpers": "^7.6.2", + "@babel/parser": "^7.6.4", + "@babel/template": "^7.6.0", + "@babel/traverse": "^7.6.3", + "@babel/types": "^7.6.3", + "convert-source-map": "^1.1.0", + "debug": "^4.1.0", + "json5": "^2.1.0", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.6.4.tgz", + "integrity": "sha512-jsBuXkFoZxk0yWLyGI9llT9oiQ2FeTASmRFE32U+aaDTfoE92t78eroO7PTpU/OrYq38hlcDM6vbfLDaOLy+7w==", + "dev": true, + "requires": { + "@babel/types": "^7.6.3", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-function-name": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", + "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", + "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", + "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", + "dev": true + }, + "@babel/helper-split-export-declaration": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", + "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@babel/helpers": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.6.2.tgz", + "integrity": "sha512-3/bAUL8zZxYs1cdX2ilEE0WobqbCmKWr/889lf2SS0PpDcpEIY8pb1CCyz0pEcX3pEb+MCbks1jIokz2xLtGTA==", + "dev": true, + "requires": { + "@babel/template": "^7.6.0", + "@babel/traverse": "^7.6.2", + "@babel/types": "^7.6.0" + } + }, + "@babel/highlight": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.6.4.tgz", + "integrity": "sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A==", + "dev": true + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", + "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/template": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.6.0.tgz", + "integrity": "sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.0" + } + }, + "@babel/traverse": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.6.3.tgz", + "integrity": "sha512-unn7P4LGsijIxaAJo/wpoU11zN+2IaClkQAxcJWBNCMS6cmVh802IyLHNkAjQ0iYnRS3nnxk5O3fuXW28IMxTw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.6.3", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/parser": "^7.6.3", + "@babel/types": "^7.6.3", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.3.tgz", + "integrity": "sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@cnakazawa/watch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", + "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", + "dev": true, + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "@jest/console": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", + "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", + "dev": true, + "requires": { + "@jest/source-map": "^24.9.0", + "chalk": "^2.0.1", + "slash": "^2.0.0" + } + }, + "@jest/core": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", + "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/reporters": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-changed-files": "^24.9.0", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-resolve-dependencies": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "jest-watcher": "^24.9.0", + "micromatch": "^3.1.10", + "p-each-series": "^1.0.0", + "realpath-native": "^1.1.0", + "rimraf": "^2.5.4", + "slash": "^2.0.0", + "strip-ansi": "^5.0.0" + } + }, + "@jest/environment": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", + "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", + "dev": true, + "requires": { + "@jest/fake-timers": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0" + } + }, + "@jest/fake-timers": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", + "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0" + } + }, + "@jest/reporters": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", + "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "istanbul-lib-coverage": "^2.0.2", + "istanbul-lib-instrument": "^3.0.1", + "istanbul-lib-report": "^2.0.4", + "istanbul-lib-source-maps": "^3.0.1", + "istanbul-reports": "^2.2.6", + "jest-haste-map": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.6.0", + "node-notifier": "^5.4.2", + "slash": "^2.0.0", + "source-map": "^0.6.0", + "string-length": "^2.0.0" + } + }, + "@jest/source-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", + "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", + "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", + "dev": true, + "requires": { + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/istanbul-lib-coverage": "^2.0.0" + } + }, + "@jest/test-sequencer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", + "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", + "dev": true, + "requires": { + "@jest/test-result": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0" + } + }, + "@jest/transform": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", + "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^24.9.0", + "babel-plugin-istanbul": "^5.1.0", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.15", + "jest-haste-map": "^24.9.0", + "jest-regex-util": "^24.9.0", + "jest-util": "^24.9.0", + "micromatch": "^3.1.10", + "pirates": "^4.0.1", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "2.4.1" + } + }, + "@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + } + }, + "@types/babel__core": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.3.tgz", + "integrity": "sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.0.tgz", + "integrity": "sha512-c1mZUu4up5cp9KROs/QAw0gTeHrw/x7m52LcnvMxxOZ03DmLwPV0MlGmlgzV3cnSdjhJOZsj7E7FHeioai+egw==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", + "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.7.tgz", + "integrity": "sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", + "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", + "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", + "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "@types/yargs": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.3.tgz", + "integrity": "sha512-K8/LfZq2duW33XW/tFwEAfnZlqIfVsoyRB3kfXdPXYhl0nfM8mmh7GS0jg7WrX2Dgq/0Ha/pR1PaR+BvmWwjiQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.1.0.tgz", + "integrity": "sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==", + "dev": true + }, + "abab": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.2.tgz", + "integrity": "sha512-2scffjvioEmNz0OyDSLGWDfKCVwaKc6l9Pm9kOIREU13ClXZvHpg/nRL5xyjSSSLhOnXqft2HpsAzNEEA8cFFg==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + }, + "acorn-globals": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", + "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", + "dev": true, + "requires": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + }, + "dependencies": { + "acorn": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", + "dev": true + } + } + }, + "acorn-walk": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", + "dev": true + }, + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true + }, + "babel-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", + "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", + "dev": true, + "requires": { + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/babel__core": "^7.1.0", + "babel-plugin-istanbul": "^5.1.0", + "babel-preset-jest": "^24.9.0", + "chalk": "^2.4.2", + "slash": "^2.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", + "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "find-up": "^3.0.0", + "istanbul-lib-instrument": "^3.3.0", + "test-exclude": "^5.2.3" + } + }, + "babel-plugin-jest-hoist": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", + "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", + "dev": true, + "requires": { + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", + "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", + "dev": true, + "requires": { + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "babel-plugin-jest-hoist": "^24.9.0" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bluebird": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", + "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "browser-process-hrtime": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", + "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", + "dev": true + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cache-content-type": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", + "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", + "requires": { + "mime-types": "^2.1.18", + "ylru": "^1.2.0" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "requires": { + "rsvp": "^4.8.4" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "condense-newlines": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/condense-newlines/-/condense-newlines-0.2.1.tgz", + "integrity": "sha1-PemFVTE5R10yUCyDsC9gaE0kxV8=", + "requires": { + "extend-shallow": "^2.0.1", + "is-whitespace": "^0.3.0", + "kind-of": "^3.0.2" + } + }, + "config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "requires": { + "bluebird": "^3.1.1" + } + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookiejar": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", + "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", + "dev": true + }, + "cookies": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", + "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", + "requires": { + "depd": "~2.0.0", + "keygrip": "~1.1.0" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + } + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-to": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz", + "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "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" + } + }, + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "cssstyle": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", + "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", + "dev": true, + "requires": { + "cssom": "0.3.x" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + }, + "dependencies": { + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + }, + "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 + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "dev": true + }, + "diff-sequences": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", + "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", + "dev": true + }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "requires": { + "webidl-conversions": "^4.0.2" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "editorconfig": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", + "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", + "requires": { + "commander": "^2.19.0", + "lru-cache": "^4.1.5", + "semver": "^5.6.0", + "sigmund": "^1.0.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "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" + } + }, + "error-inject": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/error-inject/-/error-inject-1.0.0.tgz", + "integrity": "sha1-4rPZG1Su1nLzCdlQ0VSFD6EdTzc=" + }, + "es-abstract": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz", + "integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.0", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-inspect": "^1.6.0", + "object-keys": "^1.1.1", + "string.prototype.trimleft": "^2.1.0", + "string.prototype.trimright": "^2.1.0" + } + }, + "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", + "is-symbol": "^1.0.2" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz", + "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==", + "dev": true, + "requires": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "exec-sh": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz", + "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==", + "dev": true + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "expect": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", + "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "ansi-styles": "^3.2.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.9.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "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 + }, + "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 + }, + "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 + }, + "fb-watchman": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", + "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "dev": true, + "requires": { + "bser": "^2.0.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "formidable": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz", + "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-paths": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/get-paths/-/get-paths-0.0.7.tgz", + "integrity": "sha512-0wdJt7C1XKQxuCgouqd+ZvLJ56FQixKoki9MrFaO4EriqzXOiH9gbukaDE1ou08S8Ns3/yDzoBAISNPqj6e6tA==", + "requires": { + "pify": "^4.0.1" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz", + "integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "handlebars": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.1.tgz", + "integrity": "sha512-C29UoFzHe9yM61lOsIlCE5/mQVGrnIOrOq7maQl76L7tYPCgC1og0Ajt6uWnX4ZTxBPnjw+CUvawphwCfJgUnA==", + "dev": true, + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hosted-git-info": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", + "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", + "dev": true + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, + "http-assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.4.1.tgz", + "integrity": "sha512-rdw7q6GTlibqVVbXr0CKelfV5iY8G2HqEUkhSk297BMbSpSL8crXC+9rjKoMcZZEsksX30le6f/4ul4E28gegw==", + "requires": { + "deep-equal": "~1.0.1", + "http-errors": "~1.7.2" + } + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "http-status-codes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-1.4.0.tgz", + "integrity": "sha512-JrT3ua+WgH8zBD3HEJYbeEgnuQaAnUeRRko/YojPAJjGmIfGD3KPU/asLdsLwKjfxOmQe5nXMQ0pt/7MyapVbQ==" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflation": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz", + "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "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-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "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 + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "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 + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-generator-function": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.7.tgz", + "integrity": "sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw==" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.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-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "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" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-whitespace": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-whitespace/-/is-whitespace-0.3.0.tgz", + "integrity": "sha1-Fjnssb4DauxppUy7QBz77XEUq38=" + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "dev": true, + "requires": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", + "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", + "dev": true, + "requires": { + "handlebars": "^4.1.2" + } + }, + "jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", + "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", + "dev": true, + "requires": { + "import-local": "^2.0.0", + "jest-cli": "^24.9.0" + }, + "dependencies": { + "jest-cli": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", + "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", + "dev": true, + "requires": { + "@jest/core": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "import-local": "^2.0.0", + "is-ci": "^2.0.0", + "jest-config": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "prompts": "^2.0.1", + "realpath-native": "^1.1.0", + "yargs": "^13.3.0" + } + } + } + }, + "jest-changed-files": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", + "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "execa": "^1.0.0", + "throat": "^4.0.0" + } + }, + "jest-config": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", + "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^24.9.0", + "@jest/types": "^24.9.0", + "babel-jest": "^24.9.0", + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^24.9.0", + "jest-environment-node": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "micromatch": "^3.1.10", + "pretty-format": "^24.9.0", + "realpath-native": "^1.1.0" + } + }, + "jest-diff": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", + "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "diff-sequences": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-docblock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", + "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", + "dev": true, + "requires": { + "detect-newline": "^2.1.0" + } + }, + "jest-each": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", + "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "jest-get-type": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-environment-jsdom": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", + "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0", + "jsdom": "^11.5.1" + } + }, + "jest-environment-node": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", + "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0" + } + }, + "jest-get-type": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", + "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", + "dev": true + }, + "jest-haste-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", + "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "anymatch": "^2.0.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.7", + "graceful-fs": "^4.1.15", + "invariant": "^2.2.4", + "jest-serializer": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.9.0", + "micromatch": "^3.1.10", + "sane": "^4.0.3", + "walker": "^1.0.7" + } + }, + "jest-jasmine2": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", + "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^24.9.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0", + "throat": "^4.0.0" + } + }, + "jest-leak-detector": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", + "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", + "dev": true, + "requires": { + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-matcher-utils": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", + "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-message-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", + "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^2.0.1", + "micromatch": "^3.1.10", + "slash": "^2.0.0", + "stack-utils": "^1.0.1" + } + }, + "jest-mock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", + "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0" + } + }, + "jest-pnp-resolver": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", + "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", + "dev": true + }, + "jest-regex-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", + "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==", + "dev": true + }, + "jest-resolve": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "jest-pnp-resolver": "^1.2.1", + "realpath-native": "^1.1.0" + } + }, + "jest-resolve-dependencies": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", + "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-snapshot": "^24.9.0" + } + }, + "jest-runner": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", + "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.4.2", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-config": "^24.9.0", + "jest-docblock": "^24.3.0", + "jest-haste-map": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-leak-detector": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.6.0", + "source-map-support": "^0.5.6", + "throat": "^4.0.0" + } + }, + "jest-runtime": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", + "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.9.0", + "@jest/source-map": "^24.3.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "strip-bom": "^3.0.0", + "yargs": "^13.3.0" + } + }, + "jest-serializer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", + "dev": true + }, + "jest-snapshot": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", + "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "expect": "^24.9.0", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^24.9.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "jest-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", + "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", + "dev": true, + "requires": { + "@jest/console": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/source-map": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "callsites": "^3.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.15", + "is-ci": "^2.0.0", + "mkdirp": "^0.5.1", + "slash": "^2.0.0", + "source-map": "^0.6.0" + } + }, + "jest-validate": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", + "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "camelcase": "^5.3.1", + "chalk": "^2.0.1", + "jest-get-type": "^24.9.0", + "leven": "^3.1.0", + "pretty-format": "^24.9.0" + } + }, + "jest-watcher": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", + "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", + "dev": true, + "requires": { + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "jest-util": "^24.9.0", + "string-length": "^2.0.0" + } + }, + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "js-beautify": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.10.2.tgz", + "integrity": "sha512-ZtBYyNUYJIsBWERnQP0rPN9KjkrDfJcMjuVGcvXOUJrD1zmOGwhRwQ4msG+HJ+Ni/FA7+sRQEMYVzdTQDvnzvQ==", + "requires": { + "config-chain": "^1.1.12", + "editorconfig": "^0.15.3", + "glob": "^7.1.3", + "mkdirp": "~0.5.1", + "nopt": "~4.0.1" + } + }, + "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 + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsdom": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", + "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "acorn": "^5.5.3", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": "^1.0.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.1", + "escodegen": "^1.9.1", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.3.0", + "nwsapi": "^2.0.7", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.4", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^5.2.0", + "xml-name-validator": "^3.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json5": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", + "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "keygrip": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", + "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", + "requires": { + "tsscmp": "1.0.6" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "koa": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/koa/-/koa-2.11.0.tgz", + "integrity": "sha512-EpR9dElBTDlaDgyhDMiLkXrPwp6ZqgAIBvhhmxQ9XN4TFgW+gEz6tkcsNI6BnUbUftrKDjVFj4lW2/J2aNBMMA==", + "requires": { + "accepts": "^1.3.5", + "cache-content-type": "^1.0.0", + "content-disposition": "~0.5.2", + "content-type": "^1.0.4", + "cookies": "~0.8.0", + "debug": "~3.1.0", + "delegates": "^1.0.0", + "depd": "^1.1.2", + "destroy": "^1.0.4", + "encodeurl": "^1.0.2", + "error-inject": "^1.0.0", + "escape-html": "^1.0.3", + "fresh": "~0.5.2", + "http-assert": "^1.3.0", + "http-errors": "^1.6.3", + "is-generator-function": "^1.0.7", + "koa-compose": "^4.1.0", + "koa-convert": "^1.2.0", + "on-finished": "^2.3.0", + "only": "~0.0.2", + "parseurl": "^1.3.2", + "statuses": "^1.5.0", + "type-is": "^1.6.16", + "vary": "^1.1.2" + } + }, + "koa-bodyparser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-4.2.1.tgz", + "integrity": "sha512-UIjPAlMZfNYDDe+4zBaOAUKYqkwAGcIU6r2ARf1UOXPAlfennQys5IiShaVeNf7KkVBlf88f2LeLvBFvKylttw==", + "requires": { + "co-body": "^6.0.0", + "copy-to": "^2.0.1" + }, + "dependencies": { + "co-body": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.0.0.tgz", + "integrity": "sha512-9ZIcixguuuKIptnY8yemEOuhb71L/lLf+Rl5JfJEUiDNJk0e02MBt7BPxR2GEh5mw8dPthQYR4jPI/BnS1MQgw==", + "requires": { + "inflation": "^2.0.0", + "qs": "^6.5.2", + "raw-body": "^2.3.3", + "type-is": "^1.6.16" + } + } + } + }, + "koa-compose": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", + "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==" + }, + "koa-convert": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz", + "integrity": "sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=", + "requires": { + "co": "^4.6.0", + "koa-compose": "^3.0.0" + }, + "dependencies": { + "koa-compose": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz", + "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", + "requires": { + "any-promise": "^1.1.0" + } + } + } + }, + "koa-router": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/koa-router/-/koa-router-7.4.0.tgz", + "integrity": "sha512-IWhaDXeAnfDBEpWS6hkGdZ1ablgr6Q6pGdXCyK38RbzuH4LkUOpPqPw+3f8l8aTDrQmBQ7xJc0bs2yV4dzcO+g==", + "requires": { + "debug": "^3.1.0", + "http-errors": "^1.3.1", + "koa-compose": "^3.0.0", + "methods": "^1.0.1", + "path-to-regexp": "^1.1.1", + "urijs": "^1.19.0" + }, + "dependencies": { + "koa-compose": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz", + "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", + "requires": { + "any-promise": "^1.1.0" + } + } + } + }, + "koa-send": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.0.tgz", + "integrity": "sha512-90ZotV7t0p3uN9sRwW2D484rAaKIsD8tAVtypw/aBU+ryfV+fR2xrcAwhI8Wl6WRkojLUs/cB9SBSCuIb+IanQ==", + "requires": { + "debug": "^3.1.0", + "http-errors": "^1.6.3", + "mz": "^2.7.0", + "resolve-path": "^1.4.0" + } + }, + "koa-views": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/koa-views/-/koa-views-6.2.1.tgz", + "integrity": "sha512-wU3tw48KuskaJg0x1JZmC73UWGgVmh6B54HuHDzTrkavig+dBI0NbFeGiWsaOCZREQkaTfIVXSPSByDant71ew==", + "requires": { + "consolidate": "0.15.1", + "debug": "^4.1.0", + "get-paths": "0.0.7", + "koa-send": "^5.0.0", + "mz": "^2.4.0", + "pretty": "^2.0.0" + }, + "dependencies": { + "debug": { + "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" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "dev": true + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "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" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "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" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "requires": { + "tmpl": "1.0.x" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "requires": { + "mime-db": "1.40.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "mock-fs": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.10.3.tgz", + "integrity": "sha512-bcukePBvuA3qovmq0Qtqu9+1APCIGkFHnsozrPIVromt5XFGGgkQSfaN0H6RI8gStHkO/hRgimvS3tooNes4pQ==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "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 + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, + "node-notifier": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", + "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^1.1.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" + } + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "normalize-package-data": { + "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==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "object-inspect": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", + "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "only": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", + "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=" + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "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", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + }, + "dependencies": { + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-each-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", + "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", + "dev": true, + "requires": { + "p-reduce": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "dev": true + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "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 + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-to-regexp": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", + "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "requires": { + "isarray": "0.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "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 + }, + "pretty": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz", + "integrity": "sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU=", + "requires": { + "condense-newlines": "^0.2.1", + "extend-shallow": "^2.0.1", + "js-beautify": "^1.6.12" + } + }, + "pretty-format": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "prompts": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.2.1.tgz", + "integrity": "sha512-VObPvJiWPhpZI6C5m60XOzTfnYg/xc/an+r9VYymj9WJW3B/DIH+REzjpAACPf8brwPeP+7vz3bIim3S+AaMjw==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.3" + } + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "psl": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", + "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.0.tgz", + "integrity": "sha512-27RP4UotQORTpmNQDX8BHPukOnBP3p1uUJY5UnDhaJB+rMt9iMsok724XL+UHU23bEFOHRMQ2ZhI99qOWUMGFA==" + }, + "raw-body": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.3", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "react-is": { + "version": "16.11.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.11.0.tgz", + "integrity": "sha512-gbBVYR2p8mnriqAwWx9LbuUrShnAuSCNnuPGyc7GJrMVQtPDAh8iLpv7FRuMPFb56KkaVZIYSz1PrjI9q0QPCw==", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "realpath-native": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", + "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", + "dev": true, + "requires": { + "util.promisify": "^1.0.0" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + } + } + }, + "request-promise-core": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", + "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "request-promise-native": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", + "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", + "dev": true, + "requires": { + "request-promise-core": "1.1.3", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "resolve": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "resolve-path": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", + "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=", + "requires": { + "http-errors": "~1.6.2", + "path-is-absolute": "1.0.1" + }, + "dependencies": { + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + } + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "dev": true, + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "sisteransi": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.3.tgz", + "integrity": "sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg==", + "dev": true + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", + "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "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 + }, + "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.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stack-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", + "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "string-length": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", + "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "dev": true, + "requires": { + "astral-regex": "^1.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "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==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "string.prototype.trimleft": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", + "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", + "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "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 + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "superagent": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", + "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", + "dev": true, + "requires": { + "component-emitter": "^1.2.0", + "cookiejar": "^2.1.0", + "debug": "^3.1.0", + "extend": "^3.0.0", + "form-data": "^2.3.1", + "formidable": "^1.2.0", + "methods": "^1.1.1", + "mime": "^1.4.1", + "qs": "^6.5.1", + "readable-stream": "^2.3.5" + } + }, + "supertest": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-4.0.2.tgz", + "integrity": "sha512-1BAbvrOZsGA3YTCWqbmh14L0YEq0EGICX/nBnfkfVJn7SrxQV1I3pMYjSzG9y/7ZU2V9dWqyqk2POwxlb09duQ==", + "dev": true, + "requires": { + "methods": "^1.1.2", + "superagent": "^3.8.3" + } + }, + "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" + } + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "test-exclude": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "dev": true, + "requires": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" + } + }, + "thenify": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", + "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", + "dev": true + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "tsscmp": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "uglify-js": { + "version": "3.6.7", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.7.tgz", + "integrity": "sha512-4sXQDzmdnoXiO+xvmTzQsfIiwrjUCSA95rSP4SEd8tDb51W2TiDOlL76Hl+Kw0Ie42PSItCW8/t6pBNCF2R48A==", + "dev": true, + "optional": true, + "requires": { + "commander": "~2.20.3", + "source-map": "~0.6.1" + } + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urijs": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.2.tgz", + "integrity": "sha512-s/UIq9ap4JPZ7H1EB5ULo/aOUbWqfDi7FKzMC2Nz+0Si8GiT1rIEaprt8hy3Vy2Ex2aJPpOQv4P4DuOZ+K1c6w==" + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "uuid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", + "dev": true + }, + "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" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "w3c-hr-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", + "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "dev": true, + "requires": { + "browser-process-hrtime": "^0.1.2" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "requires": { + "makeerror": "1.0.x" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", + "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "ws": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "ylru": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz", + "integrity": "sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==" + } + } +} diff --git a/exercises/07_unit_testing/file_system/package.json b/exercises/07_unit_testing/file_system/package.json new file mode 100644 index 00000000..30a36a62 --- /dev/null +++ b/exercises/07_unit_testing/file_system/package.json @@ -0,0 +1,24 @@ +{ + "name": "file_system", + "version": "1.0.0", + "description": "mock-fs", + "main": "index.js", + "dependencies": { + "fs": "^0.0.1-security", + "http-status-codes": "^1.4.0", + "koa": "^2.11.0", + "koa-bodyparser": "^4.2.1", + "koa-router": "^7.4.0", + "koa-views": "^6.2.1" + }, + "devDependencies": { + "mock-fs": "^4.10.3", + "jest": "^24.9.0", + "supertest": "^4.0.2" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC" +} diff --git a/exercises/07_unit_testing/file_system/pictures.html b/exercises/07_unit_testing/file_system/pictures.html new file mode 100644 index 00000000..f7e21603 --- /dev/null +++ b/exercises/07_unit_testing/file_system/pictures.html @@ -0,0 +1,22 @@ + + + + + + + Pictures + + +

    Save new pictures

    +
    + Image to be uploaded: +
    + +

    + +
    +

    Saved pictures

    + + + + \ No newline at end of file diff --git a/exercises/07_unit_testing/file_system/unit tests/file.spec.js b/exercises/07_unit_testing/file_system/unit tests/file.spec.js new file mode 100644 index 00000000..1e5f1a91 --- /dev/null +++ b/exercises/07_unit_testing/file_system/unit tests/file.spec.js @@ -0,0 +1,131 @@ + +'use strict' + +const mock = require('mock-fs') + +const File = require('../modules/file') +const fs = require('fs') + +beforeAll( async() => { +}) + +afterAll( async() => { +}) + +describe('savePicture()', () => { + beforeEach( async() => { + mock({ + 'test': { + 'foo': 'bar' + } + }); + }) + afterEach( async() => { + afterEach(mock.restore); + }) + test(`filename can't be empty string`, async done => { + expect.assertions(1) + try { + file.savePicture('', 'asd') + done.fail('test failed') + } catch(err) { + expect(err.message).toBe(`filename can't be empty`) + } finally { + done() + } + }) + test(`filename can't be undefined`, async done => { + expect.assertions(1) + try { + file.savePicture() + done.fail('test failed') + } catch(err) { + expect(err.message).toBe(`filename can't be empty`) + } finally { + done() + } + }) + test(`imageData can't be empty`, async done => { + expect.assertions(1) + try { + file.savePicture('foo.jpg') + done.fail('test failed') + } catch(err) { + expect(err.message).toBe(`imageData can't be empty`) + } finally { + done() + } + }) + test(`binary information has to be correctly saved`, async done => { + expect.assertions(1) + try { + const file = new File() + file.savePicture('test/foobar', 'raboof') + fs.readFile('test/foobar', 'binary', (err, data) => { + if (err) throw new Error(err) + expect(data).toBe('raboof') + }) + } catch(err) { + done.fail('test failed') + } finally { + done() + } + }) +}) + +describe('readPicture()', () => { + beforeEach( async() => { + mock({ + '/test': { + 'foo': 'bar' + } + }); + }) + afterEach( async() => { + afterEach(mock.restore); + }) + test(`filename can't be empty`, async done => { + expect.assertions(1) + try { + file.readPicture('') + done.fail('test failed') + } catch(err) { + expect(err.message).toBe(`filename can't be empty`) + } finally { + done() + } + }) + test(`filename can't be undefined`, async done => { + expect.assertions(1) + try { + file.readPicture() + done.fail('test failed') + } catch(err) { + expect(err.message).toBe(`filename can't be empty`) + } finally { + done() + } + }) + test('file has to exist', async done => { + expect.assertions(1) + try { + file.readPicture('nonExistent.txt') + done.fail('test failed') + } catch(err) { + expect(err.message).toBe(`file doesn't exist`) + } finally { + done() + } + }) + test(`binary information has to be correctly read`, async done => { + expect.assertions(1) + try { + const file = new File() + expect(file.readPicture('test/foo')).toBe('bar') + } catch(err) { + done.fail('test failed') + } finally { + done() + } + }) +}) \ No newline at end of file diff --git a/exercises/07_unit_testing/file_system/views/pictures.html b/exercises/07_unit_testing/file_system/views/pictures.html new file mode 100644 index 00000000..0bdc4ed5 --- /dev/null +++ b/exercises/07_unit_testing/file_system/views/pictures.html @@ -0,0 +1,20 @@ + + + + + + + Pictures + + +

    Save new pictures

    +
    + Image to be uploaded: +
    + +

    + +
    +

    Saved pictures

    + + \ No newline at end of file From b0d1c688d924f30beffde9da05ebd567fb3c48c3 Mon Sep 17 00:00:00 2001 From: Balazs Laszlo Bordas Date: Fri, 8 Nov 2019 02:32:36 +0000 Subject: [PATCH 066/106] fixes done to file_system unit test --- .../file_system/modules/file.js | 1 + .../file_system/package-lock.json | 5536 ----------------- .../07_unit_testing/file_system/package.json | 2 +- .../file_system/unit tests/file.spec.js | 32 +- 4 files changed, 18 insertions(+), 5553 deletions(-) delete mode 100644 exercises/07_unit_testing/file_system/package-lock.json diff --git a/exercises/07_unit_testing/file_system/modules/file.js b/exercises/07_unit_testing/file_system/modules/file.js index 7b18a962..644c4aa1 100644 --- a/exercises/07_unit_testing/file_system/modules/file.js +++ b/exercises/07_unit_testing/file_system/modules/file.js @@ -19,6 +19,7 @@ module.exports = class File { try { fs.readFileSync(filename, 'binary') } catch(err) { + console.log(err) throw new Error(`file doesn't exist`) } } diff --git a/exercises/07_unit_testing/file_system/package-lock.json b/exercises/07_unit_testing/file_system/package-lock.json deleted file mode 100644 index 139ea16a..00000000 --- a/exercises/07_unit_testing/file_system/package-lock.json +++ /dev/null @@ -1,5536 +0,0 @@ -{ - "name": "file_system", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/core": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.6.4.tgz", - "integrity": "sha512-Rm0HGw101GY8FTzpWSyRbki/jzq+/PkNQJ+nSulrdY6gFGOsNseCqD6KHRYe2E+EdzuBdr2pxCp6s4Uk6eJ+XQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.6.4", - "@babel/helpers": "^7.6.2", - "@babel/parser": "^7.6.4", - "@babel/template": "^7.6.0", - "@babel/traverse": "^7.6.3", - "@babel/types": "^7.6.3", - "convert-source-map": "^1.1.0", - "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.6.4.tgz", - "integrity": "sha512-jsBuXkFoZxk0yWLyGI9llT9oiQ2FeTASmRFE32U+aaDTfoE92t78eroO7PTpU/OrYq38hlcDM6vbfLDaOLy+7w==", - "dev": true, - "requires": { - "@babel/types": "^7.6.3", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", - "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", - "dev": true - }, - "@babel/helper-split-export-declaration": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", - "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4" - } - }, - "@babel/helpers": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.6.2.tgz", - "integrity": "sha512-3/bAUL8zZxYs1cdX2ilEE0WobqbCmKWr/889lf2SS0PpDcpEIY8pb1CCyz0pEcX3pEb+MCbks1jIokz2xLtGTA==", - "dev": true, - "requires": { - "@babel/template": "^7.6.0", - "@babel/traverse": "^7.6.2", - "@babel/types": "^7.6.0" - } - }, - "@babel/highlight": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", - "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.6.4.tgz", - "integrity": "sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A==", - "dev": true - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", - "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/template": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.6.0.tgz", - "integrity": "sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.0" - } - }, - "@babel/traverse": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.6.3.tgz", - "integrity": "sha512-unn7P4LGsijIxaAJo/wpoU11zN+2IaClkQAxcJWBNCMS6cmVh802IyLHNkAjQ0iYnRS3nnxk5O3fuXW28IMxTw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.6.3", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.6.3", - "@babel/types": "^7.6.3", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.3.tgz", - "integrity": "sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "@cnakazawa/watch": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", - "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", - "dev": true, - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "@jest/console": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", - "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", - "dev": true, - "requires": { - "@jest/source-map": "^24.9.0", - "chalk": "^2.0.1", - "slash": "^2.0.0" - } - }, - "@jest/core": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", - "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/reporters": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-changed-files": "^24.9.0", - "jest-config": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-resolve-dependencies": "^24.9.0", - "jest-runner": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "jest-watcher": "^24.9.0", - "micromatch": "^3.1.10", - "p-each-series": "^1.0.0", - "realpath-native": "^1.1.0", - "rimraf": "^2.5.4", - "slash": "^2.0.0", - "strip-ansi": "^5.0.0" - } - }, - "@jest/environment": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", - "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", - "dev": true, - "requires": { - "@jest/fake-timers": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0" - } - }, - "@jest/fake-timers": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", - "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0" - } - }, - "@jest/reporters": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", - "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", - "dev": true, - "requires": { - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.2", - "istanbul-lib-coverage": "^2.0.2", - "istanbul-lib-instrument": "^3.0.1", - "istanbul-lib-report": "^2.0.4", - "istanbul-lib-source-maps": "^3.0.1", - "istanbul-reports": "^2.2.6", - "jest-haste-map": "^24.9.0", - "jest-resolve": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.6.0", - "node-notifier": "^5.4.2", - "slash": "^2.0.0", - "source-map": "^0.6.0", - "string-length": "^2.0.0" - } - }, - "@jest/source-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", - "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.1.15", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", - "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", - "dev": true, - "requires": { - "@jest/console": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/istanbul-lib-coverage": "^2.0.0" - } - }, - "@jest/test-sequencer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", - "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", - "dev": true, - "requires": { - "@jest/test-result": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-runner": "^24.9.0", - "jest-runtime": "^24.9.0" - } - }, - "@jest/transform": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", - "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^24.9.0", - "babel-plugin-istanbul": "^5.1.0", - "chalk": "^2.0.1", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.9.0", - "jest-regex-util": "^24.9.0", - "jest-util": "^24.9.0", - "micromatch": "^3.1.10", - "pirates": "^4.0.1", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "2.4.1" - } - }, - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" - } - }, - "@types/babel__core": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.3.tgz", - "integrity": "sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.0.tgz", - "integrity": "sha512-c1mZUu4up5cp9KROs/QAw0gTeHrw/x7m52LcnvMxxOZ03DmLwPV0MlGmlgzV3cnSdjhJOZsj7E7FHeioai+egw==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", - "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.7.tgz", - "integrity": "sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", - "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", - "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", - "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", - "dev": true - }, - "@types/yargs": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.3.tgz", - "integrity": "sha512-K8/LfZq2duW33XW/tFwEAfnZlqIfVsoyRB3kfXdPXYhl0nfM8mmh7GS0jg7WrX2Dgq/0Ha/pR1PaR+BvmWwjiQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.1.0.tgz", - "integrity": "sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==", - "dev": true - }, - "abab": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.2.tgz", - "integrity": "sha512-2scffjvioEmNz0OyDSLGWDfKCVwaKc6l9Pm9kOIREU13ClXZvHpg/nRL5xyjSSSLhOnXqft2HpsAzNEEA8cFFg==", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", - "dev": true - }, - "acorn-globals": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", - "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", - "dev": true, - "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - }, - "dependencies": { - "acorn": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", - "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", - "dev": true - } - } - }, - "acorn-walk": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", - "dev": true - }, - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true - }, - "babel-jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", - "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", - "dev": true, - "requires": { - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/babel__core": "^7.1.0", - "babel-plugin-istanbul": "^5.1.0", - "babel-preset-jest": "^24.9.0", - "chalk": "^2.4.2", - "slash": "^2.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", - "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "find-up": "^3.0.0", - "istanbul-lib-instrument": "^3.3.0", - "test-exclude": "^5.2.3" - } - }, - "babel-plugin-jest-hoist": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", - "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", - "dev": true, - "requires": { - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", - "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", - "dev": true, - "requires": { - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^24.9.0" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bluebird": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", - "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - } - }, - "browser-process-hrtime": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", - "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", - "dev": true - }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "cache-content-type": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", - "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", - "requires": { - "mime-types": "^2.1.18", - "ylru": "^1.2.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "requires": { - "rsvp": "^4.8.4" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "condense-newlines": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/condense-newlines/-/condense-newlines-0.2.1.tgz", - "integrity": "sha1-PemFVTE5R10yUCyDsC9gaE0kxV8=", - "requires": { - "extend-shallow": "^2.0.1", - "is-whitespace": "^0.3.0", - "kind-of": "^3.0.2" - } - }, - "config-chain": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", - "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "consolidate": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", - "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", - "requires": { - "bluebird": "^3.1.1" - } - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", - "dev": true - }, - "cookies": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", - "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", - "requires": { - "depd": "~2.0.0", - "keygrip": "~1.1.0" - }, - "dependencies": { - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - } - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "copy-to": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz", - "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "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" - } - }, - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "cssstyle": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", - "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", - "dev": true, - "requires": { - "cssom": "0.3.x" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" - }, - "dependencies": { - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - } - } - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" - }, - "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 - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", - "dev": true - }, - "diff-sequences": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", - "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", - "dev": true - }, - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "dev": true, - "requires": { - "webidl-conversions": "^4.0.2" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "editorconfig": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", - "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", - "requires": { - "commander": "^2.19.0", - "lru-cache": "^4.1.5", - "semver": "^5.6.0", - "sigmund": "^1.0.1" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "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" - } - }, - "error-inject": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/error-inject/-/error-inject-1.0.0.tgz", - "integrity": "sha1-4rPZG1Su1nLzCdlQ0VSFD6EdTzc=" - }, - "es-abstract": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz", - "integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.0", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-inspect": "^1.6.0", - "object-keys": "^1.1.1", - "string.prototype.trimleft": "^2.1.0", - "string.prototype.trimright": "^2.1.0" - } - }, - "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", - "is-symbol": "^1.0.2" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escodegen": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz", - "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==", - "dev": true, - "requires": { - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "exec-sh": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz", - "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==", - "dev": true - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "expect": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", - "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "ansi-styles": "^3.2.0", - "jest-get-type": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-regex-util": "^24.9.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "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 - }, - "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 - }, - "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 - }, - "fb-watchman": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", - "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", - "dev": true, - "requires": { - "bser": "^2.0.0" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "formidable": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz", - "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs": { - "version": "0.0.1-security", - "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", - "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-paths": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/get-paths/-/get-paths-0.0.7.tgz", - "integrity": "sha512-0wdJt7C1XKQxuCgouqd+ZvLJ56FQixKoki9MrFaO4EriqzXOiH9gbukaDE1ou08S8Ns3/yDzoBAISNPqj6e6tA==", - "requires": { - "pify": "^4.0.1" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz", - "integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true - }, - "handlebars": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.1.tgz", - "integrity": "sha512-C29UoFzHe9yM61lOsIlCE5/mQVGrnIOrOq7maQl76L7tYPCgC1og0Ajt6uWnX4ZTxBPnjw+CUvawphwCfJgUnA==", - "dev": true, - "requires": { - "neo-async": "^2.6.0", - "optimist": "^0.6.1", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hosted-git-info": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", - "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.1" - } - }, - "http-assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.4.1.tgz", - "integrity": "sha512-rdw7q6GTlibqVVbXr0CKelfV5iY8G2HqEUkhSk297BMbSpSL8crXC+9rjKoMcZZEsksX30le6f/4ul4E28gegw==", - "requires": { - "deep-equal": "~1.0.1", - "http-errors": "~1.7.2" - } - }, - "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "http-status-codes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-1.4.0.tgz", - "integrity": "sha512-JrT3ua+WgH8zBD3HEJYbeEgnuQaAnUeRRko/YojPAJjGmIfGD3KPU/asLdsLwKjfxOmQe5nXMQ0pt/7MyapVbQ==" - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflation": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz", - "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "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-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "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 - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "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 - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-generator-function": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.7.tgz", - "integrity": "sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw==" - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.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-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "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" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-whitespace": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-whitespace/-/is-whitespace-0.3.0.tgz", - "integrity": "sha1-Fjnssb4DauxppUy7QBz77XEUq38=" - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", - "dev": true, - "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", - "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", - "dev": true, - "requires": { - "handlebars": "^4.1.2" - } - }, - "jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", - "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", - "dev": true, - "requires": { - "import-local": "^2.0.0", - "jest-cli": "^24.9.0" - }, - "dependencies": { - "jest-cli": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", - "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", - "dev": true, - "requires": { - "@jest/core": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "import-local": "^2.0.0", - "is-ci": "^2.0.0", - "jest-config": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "prompts": "^2.0.1", - "realpath-native": "^1.1.0", - "yargs": "^13.3.0" - } - } - } - }, - "jest-changed-files": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", - "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "execa": "^1.0.0", - "throat": "^4.0.0" - } - }, - "jest-config": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", - "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^24.9.0", - "@jest/types": "^24.9.0", - "babel-jest": "^24.9.0", - "chalk": "^2.0.1", - "glob": "^7.1.1", - "jest-environment-jsdom": "^24.9.0", - "jest-environment-node": "^24.9.0", - "jest-get-type": "^24.9.0", - "jest-jasmine2": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "micromatch": "^3.1.10", - "pretty-format": "^24.9.0", - "realpath-native": "^1.1.0" - } - }, - "jest-diff": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", - "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "diff-sequences": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-docblock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", - "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", - "dev": true, - "requires": { - "detect-newline": "^2.1.0" - } - }, - "jest-each": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", - "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", - "jest-util": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-environment-jsdom": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", - "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", - "dev": true, - "requires": { - "@jest/environment": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-util": "^24.9.0", - "jsdom": "^11.5.1" - } - }, - "jest-environment-node": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", - "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", - "dev": true, - "requires": { - "@jest/environment": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-util": "^24.9.0" - } - }, - "jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", - "dev": true - }, - "jest-haste-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", - "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "anymatch": "^2.0.0", - "fb-watchman": "^2.0.0", - "fsevents": "^1.2.7", - "graceful-fs": "^4.1.15", - "invariant": "^2.2.4", - "jest-serializer": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.9.0", - "micromatch": "^3.1.10", - "sane": "^4.0.3", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", - "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "co": "^4.6.0", - "expect": "^24.9.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "pretty-format": "^24.9.0", - "throat": "^4.0.0" - } - }, - "jest-leak-detector": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", - "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", - "dev": true, - "requires": { - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-matcher-utils": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", - "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "jest-diff": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-message-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", - "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^2.0.1", - "micromatch": "^3.1.10", - "slash": "^2.0.0", - "stack-utils": "^1.0.1" - } - }, - "jest-mock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", - "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0" - } - }, - "jest-pnp-resolver": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", - "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", - "dev": true - }, - "jest-regex-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", - "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==", - "dev": true - }, - "jest-resolve": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", - "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" - } - }, - "jest-resolve-dependencies": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", - "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-snapshot": "^24.9.0" - } - }, - "jest-runner": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", - "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.4.2", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-config": "^24.9.0", - "jest-docblock": "^24.3.0", - "jest-haste-map": "^24.9.0", - "jest-jasmine2": "^24.9.0", - "jest-leak-detector": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-resolve": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.6.0", - "source-map-support": "^0.5.6", - "throat": "^4.0.0" - } - }, - "jest-runtime": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", - "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.9.0", - "@jest/source-map": "^24.3.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/yargs": "^13.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.1.15", - "jest-config": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "strip-bom": "^3.0.0", - "yargs": "^13.3.0" - } - }, - "jest-serializer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", - "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", - "dev": true - }, - "jest-snapshot": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", - "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "expect": "^24.9.0", - "jest-diff": "^24.9.0", - "jest-get-type": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-resolve": "^24.9.0", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^24.9.0", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "jest-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", - "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", - "dev": true, - "requires": { - "@jest/console": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/source-map": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "callsites": "^3.0.0", - "chalk": "^2.0.1", - "graceful-fs": "^4.1.15", - "is-ci": "^2.0.0", - "mkdirp": "^0.5.1", - "slash": "^2.0.0", - "source-map": "^0.6.0" - } - }, - "jest-validate": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", - "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "camelcase": "^5.3.1", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", - "leven": "^3.1.0", - "pretty-format": "^24.9.0" - } - }, - "jest-watcher": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", - "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", - "dev": true, - "requires": { - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/yargs": "^13.0.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "jest-util": "^24.9.0", - "string-length": "^2.0.0" - } - }, - "jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "dev": true, - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "js-beautify": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.10.2.tgz", - "integrity": "sha512-ZtBYyNUYJIsBWERnQP0rPN9KjkrDfJcMjuVGcvXOUJrD1zmOGwhRwQ4msG+HJ+Ni/FA7+sRQEMYVzdTQDvnzvQ==", - "requires": { - "config-chain": "^1.1.12", - "editorconfig": "^0.15.3", - "glob": "^7.1.3", - "mkdirp": "~0.5.1", - "nopt": "~4.0.1" - } - }, - "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 - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsdom": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", - "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "acorn": "^5.5.3", - "acorn-globals": "^4.1.0", - "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": "^1.0.0", - "data-urls": "^1.0.0", - "domexception": "^1.0.1", - "escodegen": "^1.9.1", - "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.3.0", - "nwsapi": "^2.0.7", - "parse5": "4.0.0", - "pn": "^1.1.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.4", - "w3c-hr-time": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", - "ws": "^5.2.0", - "xml-name-validator": "^3.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", - "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "keygrip": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", - "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", - "requires": { - "tsscmp": "1.0.6" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "koa": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/koa/-/koa-2.11.0.tgz", - "integrity": "sha512-EpR9dElBTDlaDgyhDMiLkXrPwp6ZqgAIBvhhmxQ9XN4TFgW+gEz6tkcsNI6BnUbUftrKDjVFj4lW2/J2aNBMMA==", - "requires": { - "accepts": "^1.3.5", - "cache-content-type": "^1.0.0", - "content-disposition": "~0.5.2", - "content-type": "^1.0.4", - "cookies": "~0.8.0", - "debug": "~3.1.0", - "delegates": "^1.0.0", - "depd": "^1.1.2", - "destroy": "^1.0.4", - "encodeurl": "^1.0.2", - "error-inject": "^1.0.0", - "escape-html": "^1.0.3", - "fresh": "~0.5.2", - "http-assert": "^1.3.0", - "http-errors": "^1.6.3", - "is-generator-function": "^1.0.7", - "koa-compose": "^4.1.0", - "koa-convert": "^1.2.0", - "on-finished": "^2.3.0", - "only": "~0.0.2", - "parseurl": "^1.3.2", - "statuses": "^1.5.0", - "type-is": "^1.6.16", - "vary": "^1.1.2" - } - }, - "koa-bodyparser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-4.2.1.tgz", - "integrity": "sha512-UIjPAlMZfNYDDe+4zBaOAUKYqkwAGcIU6r2ARf1UOXPAlfennQys5IiShaVeNf7KkVBlf88f2LeLvBFvKylttw==", - "requires": { - "co-body": "^6.0.0", - "copy-to": "^2.0.1" - }, - "dependencies": { - "co-body": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.0.0.tgz", - "integrity": "sha512-9ZIcixguuuKIptnY8yemEOuhb71L/lLf+Rl5JfJEUiDNJk0e02MBt7BPxR2GEh5mw8dPthQYR4jPI/BnS1MQgw==", - "requires": { - "inflation": "^2.0.0", - "qs": "^6.5.2", - "raw-body": "^2.3.3", - "type-is": "^1.6.16" - } - } - } - }, - "koa-compose": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", - "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==" - }, - "koa-convert": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz", - "integrity": "sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=", - "requires": { - "co": "^4.6.0", - "koa-compose": "^3.0.0" - }, - "dependencies": { - "koa-compose": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz", - "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", - "requires": { - "any-promise": "^1.1.0" - } - } - } - }, - "koa-router": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/koa-router/-/koa-router-7.4.0.tgz", - "integrity": "sha512-IWhaDXeAnfDBEpWS6hkGdZ1ablgr6Q6pGdXCyK38RbzuH4LkUOpPqPw+3f8l8aTDrQmBQ7xJc0bs2yV4dzcO+g==", - "requires": { - "debug": "^3.1.0", - "http-errors": "^1.3.1", - "koa-compose": "^3.0.0", - "methods": "^1.0.1", - "path-to-regexp": "^1.1.1", - "urijs": "^1.19.0" - }, - "dependencies": { - "koa-compose": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz", - "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", - "requires": { - "any-promise": "^1.1.0" - } - } - } - }, - "koa-send": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.0.tgz", - "integrity": "sha512-90ZotV7t0p3uN9sRwW2D484rAaKIsD8tAVtypw/aBU+ryfV+fR2xrcAwhI8Wl6WRkojLUs/cB9SBSCuIb+IanQ==", - "requires": { - "debug": "^3.1.0", - "http-errors": "^1.6.3", - "mz": "^2.7.0", - "resolve-path": "^1.4.0" - } - }, - "koa-views": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/koa-views/-/koa-views-6.2.1.tgz", - "integrity": "sha512-wU3tw48KuskaJg0x1JZmC73UWGgVmh6B54HuHDzTrkavig+dBI0NbFeGiWsaOCZREQkaTfIVXSPSByDant71ew==", - "requires": { - "consolidate": "0.15.1", - "debug": "^4.1.0", - "get-paths": "0.0.7", - "koa-send": "^5.0.0", - "mz": "^2.4.0", - "pretty": "^2.0.0" - }, - "dependencies": { - "debug": { - "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" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "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" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, - "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" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "requires": { - "tmpl": "1.0.x" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" - }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "requires": { - "mime-db": "1.40.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } - }, - "mock-fs": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.10.3.tgz", - "integrity": "sha512-bcukePBvuA3qovmq0Qtqu9+1APCIGkFHnsozrPIVromt5XFGGgkQSfaN0H6RI8gStHkO/hRgimvS3tooNes4pQ==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "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 - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - }, - "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "node-notifier": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", - "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", - "dev": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^1.1.0", - "semver": "^5.5.0", - "shellwords": "^0.1.1", - "which": "^1.3.0" - } - }, - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "normalize-package-data": { - "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==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "object-inspect": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", - "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "only": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", - "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=" - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - } - }, - "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", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - }, - "dependencies": { - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - } - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "p-each-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", - "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", - "dev": true, - "requires": { - "p-reduce": "^1.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", - "dev": true - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "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 - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-to-regexp": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", - "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", - "requires": { - "isarray": "0.0.1" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "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 - }, - "pretty": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz", - "integrity": "sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU=", - "requires": { - "condense-newlines": "^0.2.1", - "extend-shallow": "^2.0.1", - "js-beautify": "^1.6.12" - } - }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "prompts": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.2.1.tgz", - "integrity": "sha512-VObPvJiWPhpZI6C5m60XOzTfnYg/xc/an+r9VYymj9WJW3B/DIH+REzjpAACPf8brwPeP+7vz3bIim3S+AaMjw==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.3" - } - }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "psl": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", - "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.0.tgz", - "integrity": "sha512-27RP4UotQORTpmNQDX8BHPukOnBP3p1uUJY5UnDhaJB+rMt9iMsok724XL+UHU23bEFOHRMQ2ZhI99qOWUMGFA==" - }, - "raw-body": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", - "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.3", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "react-is": { - "version": "16.11.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.11.0.tgz", - "integrity": "sha512-gbBVYR2p8mnriqAwWx9LbuUrShnAuSCNnuPGyc7GJrMVQtPDAh8iLpv7FRuMPFb56KkaVZIYSz1PrjI9q0QPCw==", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - } - } - }, - "realpath-native": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", - "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", - "dev": true, - "requires": { - "util.promisify": "^1.0.0" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - } - } - }, - "request-promise-core": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", - "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - } - }, - "request-promise-native": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", - "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", - "dev": true, - "requires": { - "request-promise-core": "1.1.3", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", - "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "resolve-path": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", - "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=", - "requires": { - "http-errors": "~1.6.2", - "path-is-absolute": "1.0.1" - }, - "dependencies": { - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - } - } - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "dev": true, - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - } - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true - }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "sisteransi": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.3.tgz", - "integrity": "sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg==", - "dev": true - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", - "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "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 - }, - "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.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", - "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, - "string-length": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", - "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", - "dev": true, - "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "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==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "string.prototype.trimleft": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", - "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - }, - "string.prototype.trimright": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", - "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "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 - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "superagent": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", - "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", - "dev": true, - "requires": { - "component-emitter": "^1.2.0", - "cookiejar": "^2.1.0", - "debug": "^3.1.0", - "extend": "^3.0.0", - "form-data": "^2.3.1", - "formidable": "^1.2.0", - "methods": "^1.1.1", - "mime": "^1.4.1", - "qs": "^6.5.1", - "readable-stream": "^2.3.5" - } - }, - "supertest": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-4.0.2.tgz", - "integrity": "sha512-1BAbvrOZsGA3YTCWqbmh14L0YEq0EGICX/nBnfkfVJn7SrxQV1I3pMYjSzG9y/7ZU2V9dWqyqk2POwxlb09duQ==", - "dev": true, - "requires": { - "methods": "^1.1.2", - "superagent": "^3.8.3" - } - }, - "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" - } - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", - "dev": true, - "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" - } - }, - "thenify": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", - "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", - "requires": { - "any-promise": "^1.0.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, - "throat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", - "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", - "dev": true - }, - "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "tsscmp": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", - "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==" - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "uglify-js": { - "version": "3.6.7", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.7.tgz", - "integrity": "sha512-4sXQDzmdnoXiO+xvmTzQsfIiwrjUCSA95rSP4SEd8tDb51W2TiDOlL76Hl+Kw0Ie42PSItCW8/t6pBNCF2R48A==", - "dev": true, - "optional": true, - "requires": { - "commander": "~2.20.3", - "source-map": "~0.6.1" - } - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - } - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urijs": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.2.tgz", - "integrity": "sha512-s/UIq9ap4JPZ7H1EB5ULo/aOUbWqfDi7FKzMC2Nz+0Si8GiT1rIEaprt8hy3Vy2Ex2aJPpOQv4P4DuOZ+K1c6w==" - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "uuid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", - "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", - "dev": true - }, - "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" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "w3c-hr-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", - "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", - "dev": true, - "requires": { - "browser-process-hrtime": "^0.1.2" - } - }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "requires": { - "makeerror": "1.0.x" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write-file-atomic": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", - "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, - "yargs": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", - "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.1" - } - }, - "yargs-parser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "ylru": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz", - "integrity": "sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==" - } - } -} diff --git a/exercises/07_unit_testing/file_system/package.json b/exercises/07_unit_testing/file_system/package.json index 30a36a62..82544822 100644 --- a/exercises/07_unit_testing/file_system/package.json +++ b/exercises/07_unit_testing/file_system/package.json @@ -12,8 +12,8 @@ "koa-views": "^6.2.1" }, "devDependencies": { - "mock-fs": "^4.10.3", "jest": "^24.9.0", + "mock-fs": "^4.10.3", "supertest": "^4.0.2" }, "scripts": { diff --git a/exercises/07_unit_testing/file_system/unit tests/file.spec.js b/exercises/07_unit_testing/file_system/unit tests/file.spec.js index 1e5f1a91..b67e52ef 100644 --- a/exercises/07_unit_testing/file_system/unit tests/file.spec.js +++ b/exercises/07_unit_testing/file_system/unit tests/file.spec.js @@ -18,15 +18,16 @@ describe('savePicture()', () => { 'test': { 'foo': 'bar' } - }); + }) + const file = new File() }) afterEach( async() => { - afterEach(mock.restore); + afterEach(mock.restore) }) test(`filename can't be empty string`, async done => { expect.assertions(1) try { - file.savePicture('', 'asd') + await file.savePicture('', 'asd') done.fail('test failed') } catch(err) { expect(err.message).toBe(`filename can't be empty`) @@ -37,7 +38,7 @@ describe('savePicture()', () => { test(`filename can't be undefined`, async done => { expect.assertions(1) try { - file.savePicture() + await file.savePicture() done.fail('test failed') } catch(err) { expect(err.message).toBe(`filename can't be empty`) @@ -48,7 +49,7 @@ describe('savePicture()', () => { test(`imageData can't be empty`, async done => { expect.assertions(1) try { - file.savePicture('foo.jpg') + await file.savePicture('foo.jpg') done.fail('test failed') } catch(err) { expect(err.message).toBe(`imageData can't be empty`) @@ -59,9 +60,8 @@ describe('savePicture()', () => { test(`binary information has to be correctly saved`, async done => { expect.assertions(1) try { - const file = new File() - file.savePicture('test/foobar', 'raboof') - fs.readFile('test/foobar', 'binary', (err, data) => { + await fs.savePicture('image', 'raboof') + fs.readFile('image', 'binary', (err, data) => { if (err) throw new Error(err) expect(data).toBe('raboof') }) @@ -76,18 +76,19 @@ describe('savePicture()', () => { describe('readPicture()', () => { beforeEach( async() => { mock({ - '/test': { + 'test': { 'foo': 'bar' } - }); + }) + const file = new File() }) afterEach( async() => { - afterEach(mock.restore); + afterEach(mock.restore) }) test(`filename can't be empty`, async done => { expect.assertions(1) try { - file.readPicture('') + await file.readPicture('') done.fail('test failed') } catch(err) { expect(err.message).toBe(`filename can't be empty`) @@ -98,7 +99,7 @@ describe('readPicture()', () => { test(`filename can't be undefined`, async done => { expect.assertions(1) try { - file.readPicture() + await file.readPicture() done.fail('test failed') } catch(err) { expect(err.message).toBe(`filename can't be empty`) @@ -109,7 +110,7 @@ describe('readPicture()', () => { test('file has to exist', async done => { expect.assertions(1) try { - file.readPicture('nonExistent.txt') + await file.readPicture('nonExistent.txt') done.fail('test failed') } catch(err) { expect(err.message).toBe(`file doesn't exist`) @@ -120,7 +121,6 @@ describe('readPicture()', () => { test(`binary information has to be correctly read`, async done => { expect.assertions(1) try { - const file = new File() expect(file.readPicture('test/foo')).toBe('bar') } catch(err) { done.fail('test failed') @@ -128,4 +128,4 @@ describe('readPicture()', () => { done() } }) -}) \ No newline at end of file +}) From 7cf77b6637eeeda05fc9bb486c10cc07a44df5a2 Mon Sep 17 00:00:00 2001 From: Balazs Laszlo Bordas Date: Fri, 8 Nov 2019 03:02:10 +0000 Subject: [PATCH 067/106] trying to fix file_system unit test --- .../file_system/unit tests/file.spec.js | 10 ++++---- .../file_system/unit tests/trymockfs.js | 24 +++++++++++++++++++ 2 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 exercises/07_unit_testing/file_system/unit tests/trymockfs.js diff --git a/exercises/07_unit_testing/file_system/unit tests/file.spec.js b/exercises/07_unit_testing/file_system/unit tests/file.spec.js index b67e52ef..0664087f 100644 --- a/exercises/07_unit_testing/file_system/unit tests/file.spec.js +++ b/exercises/07_unit_testing/file_system/unit tests/file.spec.js @@ -2,9 +2,11 @@ 'use strict' const mock = require('mock-fs') +const fs = require('fs') const File = require('../modules/file') -const fs = require('fs') + +const file = new File() beforeAll( async() => { }) @@ -19,10 +21,9 @@ describe('savePicture()', () => { 'foo': 'bar' } }) - const file = new File() }) afterEach( async() => { - afterEach(mock.restore) + mock.restore() }) test(`filename can't be empty string`, async done => { expect.assertions(1) @@ -80,10 +81,9 @@ describe('readPicture()', () => { 'foo': 'bar' } }) - const file = new File() }) afterEach( async() => { - afterEach(mock.restore) + mock.restore() }) test(`filename can't be empty`, async done => { expect.assertions(1) diff --git a/exercises/07_unit_testing/file_system/unit tests/trymockfs.js b/exercises/07_unit_testing/file_system/unit tests/trymockfs.js new file mode 100644 index 00000000..b0b29de2 --- /dev/null +++ b/exercises/07_unit_testing/file_system/unit tests/trymockfs.js @@ -0,0 +1,24 @@ + +'use strict' + +const mock = require('mock-fs') +const fs = require('fs') + +mock({ + 'test': { + 'foo': 'bar' + } +}) +fs.readFile('test/foo', 'UTF-8', (err, data) =>{ + if (err) throw new Error(err) + console.log(data) +}) +fs.writeFile('test/bar', 'foo', 'UTF-8', (err) => { + if (err) throw new Error(err) +}) +fs.readFile('test/bar', 'UTF-8', (err, data) =>{ + if (err) throw new Error(err) + console.log(data) +}) + +mock.restore() From 5b4ac41eaa21ae1b20416a85457d5d5f26ecb7b9 Mon Sep 17 00:00:00 2001 From: "Mark Tyers (aa7401)" Date: Fri, 8 Nov 2019 07:42:25 +0000 Subject: [PATCH 068/106] Removed Merge Conflict One of the modules retained a merge conflict. This has now been removed. --- exercises/07_unit_testing/todo/modules/todo.js | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/exercises/07_unit_testing/todo/modules/todo.js b/exercises/07_unit_testing/todo/modules/todo.js index 6ce40d22..f4fdd7b8 100644 --- a/exercises/07_unit_testing/todo/modules/todo.js +++ b/exercises/07_unit_testing/todo/modules/todo.js @@ -9,22 +9,8 @@ module.exports.clear = () => { module.exports.add = (item, qty) => { qty = Number(qty) -<<<<<<< HEAD - if(isNaN(qty)) throw new Error('the quantity must be a number') - let flag = false - for(let index in data) { - if (data[index].item === item) { - data[index].qty+= qty - flag = true - } - } - if(flag === false) { - data.push({item: item, qty: qty}) - } -======= if(isNaN(qty)) throw new Error('qty must be a number') data.push({item: item, qty: qty}) ->>>>>>> upstream/master } module.exports.getAll = () => { From c4d788d2d2458d1ac5410c7b73a94860bfa0585a Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Fri, 8 Nov 2019 08:05:51 +0000 Subject: [PATCH 069/106] Replaced Module Async functions can't use the standard readline module. This has been replaced with the sync version. --- exercises/06_code_quality/asyncFunctions.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/exercises/06_code_quality/asyncFunctions.js b/exercises/06_code_quality/asyncFunctions.js index 35f1e2b4..cca2bfda 100644 --- a/exercises/06_code_quality/asyncFunctions.js +++ b/exercises/06_code_quality/asyncFunctions.js @@ -2,7 +2,7 @@ 'use strict' const request = require('request') -const readline = require('readline') +const readline = require('readline-sync') const baseURL = 'https://api.exchangeratesapi.io/latest' @@ -21,12 +21,8 @@ async function main() { } const getInput = prompt => new Promise(resolve => { - const read = readline.createInterface({ input: process.stdin, output: process.stdout }) - read.question(`${prompt}: `, value => { - console.log(`You entered ${value}`) - read.close() - resolve(value) - }) + const response = readline.question(`${prompt}: `) + return resolve(response) }) const checkValidCurrencyCode = code => new Promise( (resolve, reject) => { From 54a02fa371267e8a54a5a56cb68911b1b8453c3f Mon Sep 17 00:00:00 2001 From: harjaus Date: Fri, 8 Nov 2019 10:39:04 +0000 Subject: [PATCH 070/106] Now we throw specific errors, not generic --- .../file_system/modules/file.js | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/exercises/07_unit_testing/file_system/modules/file.js b/exercises/07_unit_testing/file_system/modules/file.js index 644c4aa1..08fd2a37 100644 --- a/exercises/07_unit_testing/file_system/modules/file.js +++ b/exercises/07_unit_testing/file_system/modules/file.js @@ -1,26 +1,28 @@ 'use strict' -const fs = require('fs') - module.exports = class File { - constructor() {} + constructor() { } async savePicture(filename, imageData) { if (filename === undefined || filename === '') throw new Error(`filename can't be empty`) if (imageData === undefined || imageData === '') throw new Error(`imageData can't be empty`) - fs.writeFile(filename, imageData, 'binary', (err) => { - if (err) throw new Error(err) - console.log('File saved.') - }) + + const fs = require('fs') + try{ + fs.writeFile(filename, imageData, 'binary') + } catch(err) + { + throw err + } } readPicture(filename) { if (filename === undefined || filename === '') throw new Error(`filename can't be empty`) + const fs = require('fs') try { fs.readFileSync(filename, 'binary') } catch(err) { - console.log(err) - throw new Error(`file doesn't exist`) + throw err } } } From a69a9c844a5a6b14a0c38fbef2f1ad485c22e705 Mon Sep 17 00:00:00 2001 From: harjaus Date: Fri, 8 Nov 2019 10:39:17 +0000 Subject: [PATCH 071/106] Added dependency --- exercises/07_unit_testing/file_system/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/exercises/07_unit_testing/file_system/package.json b/exercises/07_unit_testing/file_system/package.json index 82544822..540d1f46 100644 --- a/exercises/07_unit_testing/file_system/package.json +++ b/exercises/07_unit_testing/file_system/package.json @@ -4,6 +4,7 @@ "description": "mock-fs", "main": "index.js", "dependencies": { + "callsites": "^3.1.0", "fs": "^0.0.1-security", "http-status-codes": "^1.4.0", "koa": "^2.11.0", From bc98b02df45bf86765bb7baf00ff9b8ae4b6fad5 Mon Sep 17 00:00:00 2001 From: harjaus Date: Fri, 8 Nov 2019 10:39:56 +0000 Subject: [PATCH 072/106] We no longer done.fail() on everything, we expect no errors on catch --- .../file_system/unit tests/file.spec.js | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/exercises/07_unit_testing/file_system/unit tests/file.spec.js b/exercises/07_unit_testing/file_system/unit tests/file.spec.js index 0664087f..3ff3fdce 100644 --- a/exercises/07_unit_testing/file_system/unit tests/file.spec.js +++ b/exercises/07_unit_testing/file_system/unit tests/file.spec.js @@ -2,29 +2,30 @@ 'use strict' const mock = require('mock-fs') -const fs = require('fs') - const File = require('../modules/file') +const fs = require('fs') const file = new File() + beforeAll( async() => { + mock({ + 'test': { + 'foo': 'bar' + } + }) }) afterAll( async() => { + mock.restore() }) describe('savePicture()', () => { beforeEach( async() => { - mock({ - 'test': { - 'foo': 'bar' - } - }) }) afterEach( async() => { - mock.restore() }) + test(`filename can't be empty string`, async done => { expect.assertions(1) try { @@ -59,15 +60,15 @@ describe('savePicture()', () => { } }) test(`binary information has to be correctly saved`, async done => { - expect.assertions(1) + expect.assertions(2) try { - await fs.savePicture('image', 'raboof') - fs.readFile('image', 'binary', (err, data) => { - if (err) throw new Error(err) + await file.savePicture('image', 'raboof') + file.readPicture('image', 'binary', (err, data) => { expect(data).toBe('raboof') + expect(err).toBeUndefined() }) } catch(err) { - done.fail('test failed') + expect(err.message).toBe(null) } finally { done() } @@ -113,7 +114,7 @@ describe('readPicture()', () => { await file.readPicture('nonExistent.txt') done.fail('test failed') } catch(err) { - expect(err.message).toBe(`file doesn't exist`) + expect(err.message).toBe(`ENOENT: no such file or directory, open 'nonExistent.txt'`) } finally { done() } @@ -123,7 +124,7 @@ describe('readPicture()', () => { try { expect(file.readPicture('test/foo')).toBe('bar') } catch(err) { - done.fail('test failed') + expect(err.message).toBe(null) } finally { done() } From 6e1486821895ebdd3f3938cb36d0971f6e8c5234 Mon Sep 17 00:00:00 2001 From: bordasb Date: Fri, 8 Nov 2019 12:29:41 +0000 Subject: [PATCH 073/106] trying to fix mockfs exercise --- .../07_unit_testing/file_system/index.js | 78 +++--- .../file_system/jest-test.config.js | 40 +-- .../file_system/modules/file.js | 54 ++-- .../07_unit_testing/file_system/package.json | 2 +- .../07_unit_testing/file_system/pictures.html | 22 -- .../file_system/unit tests/file.spec.js | 253 +++++++++--------- .../file_system/unit tests/trymockfs.js | 21 +- .../file_system/views/pictures.html | 38 +-- 8 files changed, 236 insertions(+), 272 deletions(-) delete mode 100644 exercises/07_unit_testing/file_system/pictures.html diff --git a/exercises/07_unit_testing/file_system/index.js b/exercises/07_unit_testing/file_system/index.js index 6677cf0b..b11dc9dd 100644 --- a/exercises/07_unit_testing/file_system/index.js +++ b/exercises/07_unit_testing/file_system/index.js @@ -1,39 +1,39 @@ -#!/usr/bin/env node - -'use strict' - -const File = require('./modules/file') - -const Koa = require('koa') -const Router = require('koa-router') -const BodyParser = require('koa-bodyparser') -const views = require('koa-views') -const status = require('http-status-codes') - -const port = 8080 -const file = new File() - -const app = new Koa() -app.use(views(`${__dirname}/views`, { extension: 'html' }, {map: { handlebars: 'handlebars' }})) -app.use(BodyParser({ - encoding: 'multipart/form-data' -})) - -const router = new Router() - -router.get('/', async ctx => { - await ctx.render('pictures.html') -}) -router.post('/', ctx => { - try { - console.log('processing the post request') - const body = ctx.request.body - console.log(body.fileUpload) - } catch(err) { - ctx.status = status.UNPROCESSABLE_ENTITY - ctx.body = err.message - } -}) - -app.use(router.routes()) -module.exports = app.listen(port, () => console.log(`listening on port ${port}`)) +#!/usr/bin/env node + +'use strict' + +const File = require('./modules/file') + +const Koa = require('koa') +const Router = require('koa-router') +const BodyParser = require('koa-bodyparser') +const views = require('koa-views') +const status = require('http-status-codes') + +const port = 8080 +const file = new File() + +const app = new Koa() +app.use(views(`${__dirname}/views`, { extension: 'html' }, {map: { handlebars: 'handlebars' }})) +app.use(BodyParser({ + encoding: 'multipart/form-data' +})) + +const router = new Router() + +router.get('/', async ctx => { + await ctx.render('pictures.html') +}) +router.post('/', ctx => { + try { + console.log('processing the post request') + const body = ctx.request.body + console.log(body.fileUpload) + } catch(err) { + ctx.status = status.UNPROCESSABLE_ENTITY + ctx.body = err.message + } +}) + +app.use(router.routes()) +module.exports = app.listen(port, () => console.log(`listening on port ${port}`)) diff --git a/exercises/07_unit_testing/file_system/jest-test.config.js b/exercises/07_unit_testing/file_system/jest-test.config.js index a758c709..fc892638 100644 --- a/exercises/07_unit_testing/file_system/jest-test.config.js +++ b/exercises/07_unit_testing/file_system/jest-test.config.js @@ -1,20 +1,20 @@ - -'use strict'; - -module.exports = { - displayName: 'test', - verbose: true, - collectCoverage: true, - coverageThreshold: { - global: { - branches: 0, - functions: 0, - lines: 0, - statements: 0 - } - }, - testPathIgnorePatterns: [ - '/node_modules/', - '/__tests__/fixtures/', - ] -} + +'use strict' + +module.exports = { + displayName: 'test', + verbose: true, + collectCoverage: true, + coverageThreshold: { + global: { + branches: 0, + functions: 0, + lines: 0, + statements: 0 + } + }, + testPathIgnorePatterns: [ + '/node_modules/', + '/__tests__/fixtures/', + ] +} diff --git a/exercises/07_unit_testing/file_system/modules/file.js b/exercises/07_unit_testing/file_system/modules/file.js index 08fd2a37..1d7a9be3 100644 --- a/exercises/07_unit_testing/file_system/modules/file.js +++ b/exercises/07_unit_testing/file_system/modules/file.js @@ -1,28 +1,26 @@ -'use strict' - -module.exports = class File { - constructor() { } - - async savePicture(filename, imageData) { - if (filename === undefined || filename === '') throw new Error(`filename can't be empty`) - if (imageData === undefined || imageData === '') throw new Error(`imageData can't be empty`) - - const fs = require('fs') - try{ - fs.writeFile(filename, imageData, 'binary') - } catch(err) - { - throw err - } - } - - readPicture(filename) { - if (filename === undefined || filename === '') throw new Error(`filename can't be empty`) - const fs = require('fs') - try { - fs.readFileSync(filename, 'binary') - } catch(err) { - throw err - } - } -} +'use strict' + +const fs = require('fs') + +module.exports = class File { + constructor() {} + + async savePicture(filename, imageData) { + if (filename === undefined || filename === '') throw new Error(`filename can't be empty`) + if (imageData === undefined || imageData === '') throw new Error(`imageData can't be empty`) + try { + fs.writeFile(filename, imageData, 'binary') + } catch(err) { + throw err + } + } + + readPicture(filename) { + if (filename === undefined || filename === '') throw new Error(`filename can't be empty`) + try { + return fs.readFileSync(filename, 'binary') + } catch(err) { + throw err + } + } +} diff --git a/exercises/07_unit_testing/file_system/package.json b/exercises/07_unit_testing/file_system/package.json index 540d1f46..001f3a84 100644 --- a/exercises/07_unit_testing/file_system/package.json +++ b/exercises/07_unit_testing/file_system/package.json @@ -18,7 +18,7 @@ "supertest": "^4.0.2" }, "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "jest --config=./jest-test.config.js --coverage" }, "author": "", "license": "ISC" diff --git a/exercises/07_unit_testing/file_system/pictures.html b/exercises/07_unit_testing/file_system/pictures.html deleted file mode 100644 index f7e21603..00000000 --- a/exercises/07_unit_testing/file_system/pictures.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - Pictures - - -

    Save new pictures

    -
    - Image to be uploaded: -
    - -

    - -
    -

    Saved pictures

    - - - - \ No newline at end of file diff --git a/exercises/07_unit_testing/file_system/unit tests/file.spec.js b/exercises/07_unit_testing/file_system/unit tests/file.spec.js index 3ff3fdce..a91c28d7 100644 --- a/exercises/07_unit_testing/file_system/unit tests/file.spec.js +++ b/exercises/07_unit_testing/file_system/unit tests/file.spec.js @@ -1,132 +1,121 @@ - -'use strict' - -const mock = require('mock-fs') -const File = require('../modules/file') - -const fs = require('fs') -const file = new File() - - -beforeAll( async() => { - mock({ - 'test': { - 'foo': 'bar' - } - }) -}) - -afterAll( async() => { - mock.restore() -}) - -describe('savePicture()', () => { - beforeEach( async() => { - }) - afterEach( async() => { - }) - - test(`filename can't be empty string`, async done => { - expect.assertions(1) - try { - await file.savePicture('', 'asd') - done.fail('test failed') - } catch(err) { - expect(err.message).toBe(`filename can't be empty`) - } finally { - done() - } - }) - test(`filename can't be undefined`, async done => { - expect.assertions(1) - try { - await file.savePicture() - done.fail('test failed') - } catch(err) { - expect(err.message).toBe(`filename can't be empty`) - } finally { - done() - } - }) - test(`imageData can't be empty`, async done => { - expect.assertions(1) - try { - await file.savePicture('foo.jpg') - done.fail('test failed') - } catch(err) { - expect(err.message).toBe(`imageData can't be empty`) - } finally { - done() - } - }) - test(`binary information has to be correctly saved`, async done => { - expect.assertions(2) - try { - await file.savePicture('image', 'raboof') - file.readPicture('image', 'binary', (err, data) => { - expect(data).toBe('raboof') - expect(err).toBeUndefined() - }) - } catch(err) { - expect(err.message).toBe(null) - } finally { - done() - } - }) -}) - -describe('readPicture()', () => { - beforeEach( async() => { - mock({ - 'test': { - 'foo': 'bar' - } - }) - }) - afterEach( async() => { - mock.restore() - }) - test(`filename can't be empty`, async done => { - expect.assertions(1) - try { - await file.readPicture('') - done.fail('test failed') - } catch(err) { - expect(err.message).toBe(`filename can't be empty`) - } finally { - done() - } - }) - test(`filename can't be undefined`, async done => { - expect.assertions(1) - try { - await file.readPicture() - done.fail('test failed') - } catch(err) { - expect(err.message).toBe(`filename can't be empty`) - } finally { - done() - } - }) - test('file has to exist', async done => { - expect.assertions(1) - try { - await file.readPicture('nonExistent.txt') - done.fail('test failed') - } catch(err) { - expect(err.message).toBe(`ENOENT: no such file or directory, open 'nonExistent.txt'`) - } finally { - done() - } - }) - test(`binary information has to be correctly read`, async done => { - expect.assertions(1) - try { - expect(file.readPicture('test/foo')).toBe('bar') - } catch(err) { - expect(err.message).toBe(null) - } finally { - done() - } - }) -}) +'use strict' + +const mock = require('mock-fs') +const File = require('../modules/file') + +const fs = require('fs') +const file = new File() + + +beforeAll( async() => { + // mock({ + // 'test': { + // 'foo': 'bar' + // } + // }) +}) + +afterAll( async() => { + // mock.restore() +}) + +describe('savePicture()', () => { + beforeEach( async() => {}) + afterEach( async() => {}) + + test(`filename can't be empty string`, async done => { + expect.assertions(1) + try { + await file.savePicture('', 'asd') + done.fail('test failed') + } catch(err) { + expect(err.message).toBe(`filename can't be empty`) + } finally { + done() + } + }) + test(`filename can't be undefined`, async done => { + expect.assertions(1) + try { + await file.savePicture() + done.fail('test failed') + } catch(err) { + expect(err.message).toBe(`filename can't be empty`) + } finally { + done() + } + }) + test(`imageData can't be empty`, async done => { + expect.assertions(1) + try { + await file.savePicture('foo.jpg') + done.fail('test failed') + } catch(err) { + expect(err.message).toBe(`imageData can't be empty`) + } finally { + done() + } + }) + test(`binary information has to be correctly saved`, async done => { + expect.assertions(3) + try { + await file.savePicture('image', 'raboof') + await file.readPicture('image', 'binary', (err, data) => { + expect(data).toBe('raboof') + expect(err).toBeUndefined() + }) + } catch(err) { + expect(err.message).toBe(null) + } finally { + done() + } + }) +}) + +describe('readPicture()', () => { + beforeEach( async() => { }) + afterEach( async() => { }) + test(`filename can't be empty`, async done => { + expect.assertions(1) + try { + await file.readPicture('') + done.fail('test failed') + } catch(err) { + expect(err.message).toBe(`filename can't be empty`) + } finally { + done() + } + }) + test(`filename can't be undefined`, async done => { + expect.assertions(1) + try { + await file.readPicture() + done.fail('test failed') + } catch(err) { + expect(err.message).toBe(`filename can't be empty`) + } finally { + done() + } + }) + test('file has to exist', async done => { + expect.assertions(1) + try { + await file.readPicture('nonExistent.txt') + done.fail('test failed') + } catch(err) { + expect(err.message).toBe(`ENOENT: no such file or directory, open 'nonExistent.txt'`) + } finally { + done() + } + }) + test(`binary information has to be correctly read`, async done => { + expect.assertions(2) + try { + expect(file.readPicture('foobar')).toBe('foobar2') + } catch(err) { + expect(err.message).toBe(null) + } finally { + done() + } + }) +}) diff --git a/exercises/07_unit_testing/file_system/unit tests/trymockfs.js b/exercises/07_unit_testing/file_system/unit tests/trymockfs.js index b0b29de2..c2553ba1 100644 --- a/exercises/07_unit_testing/file_system/unit tests/trymockfs.js +++ b/exercises/07_unit_testing/file_system/unit tests/trymockfs.js @@ -1,24 +1,23 @@ - 'use strict' const mock = require('mock-fs') const fs = require('fs') mock({ - 'test': { - 'foo': 'bar' - } + 'test': { + 'foo': 'bar' + } }) -fs.readFile('test/foo', 'UTF-8', (err, data) =>{ - if (err) throw new Error(err) - console.log(data) +fs.readFile('test/foo', 'UTF-8', (err, data) => { + if (err) throw new Error(err) + console.log(data) }) fs.writeFile('test/bar', 'foo', 'UTF-8', (err) => { - if (err) throw new Error(err) + if (err) throw new Error(err) }) -fs.readFile('test/bar', 'UTF-8', (err, data) =>{ - if (err) throw new Error(err) - console.log(data) +fs.readFile('test/bar', 'UTF-8', (err, data) => { + if (err) throw new Error(err) + console.log(data) }) mock.restore() diff --git a/exercises/07_unit_testing/file_system/views/pictures.html b/exercises/07_unit_testing/file_system/views/pictures.html index 0bdc4ed5..5f8ff74d 100644 --- a/exercises/07_unit_testing/file_system/views/pictures.html +++ b/exercises/07_unit_testing/file_system/views/pictures.html @@ -1,20 +1,20 @@ - - - - - - - Pictures - - -

    Save new pictures

    -
    - Image to be uploaded: -
    - -

    - -
    -

    Saved pictures

    - + + + + + + + Pictures + + +

    Save new pictures

    +
    + Image to be uploaded: +
    + +

    + +
    +

    Saved pictures

    + \ No newline at end of file From 5e5e55df91e180b31828aa21924fa8dbb2b98c1b Mon Sep 17 00:00:00 2001 From: harjaus Date: Fri, 8 Nov 2019 15:38:19 +0000 Subject: [PATCH 074/106] Now throws correct error on file not existing --- exercises/07_unit_testing/file_system/modules/file.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/exercises/07_unit_testing/file_system/modules/file.js b/exercises/07_unit_testing/file_system/modules/file.js index 1d7a9be3..ba29978a 100644 --- a/exercises/07_unit_testing/file_system/modules/file.js +++ b/exercises/07_unit_testing/file_system/modules/file.js @@ -15,12 +15,15 @@ module.exports = class File { } } - readPicture(filename) { + async readPicture(filename) { if (filename === undefined || filename === '') throw new Error(`filename can't be empty`) try { - return fs.readFileSync(filename, 'binary') + return fs.readFileSync(filename, 'UTF-8') } catch(err) { - throw err + if (err.message == `ENOENT: no such file or directory, open '${filename}'`) + throw new Error("file doesn't exist") + else + throw err } } } From 39db18bf9fffc8e6bc1db89b99f720ad5d9085ea Mon Sep 17 00:00:00 2001 From: harjaus Date: Fri, 8 Nov 2019 15:38:37 +0000 Subject: [PATCH 075/106] Reading mocking works --- .../file_system/unit tests/file.spec.js | 125 +++++++++--------- .../file_system/unit tests/foobar | 1 + 2 files changed, 65 insertions(+), 61 deletions(-) create mode 100644 exercises/07_unit_testing/file_system/unit tests/foobar diff --git a/exercises/07_unit_testing/file_system/unit tests/file.spec.js b/exercises/07_unit_testing/file_system/unit tests/file.spec.js index a91c28d7..88ba57f8 100644 --- a/exercises/07_unit_testing/file_system/unit tests/file.spec.js +++ b/exercises/07_unit_testing/file_system/unit tests/file.spec.js @@ -8,69 +8,69 @@ const file = new File() beforeAll( async() => { - // mock({ - // 'test': { - // 'foo': 'bar' - // } - // }) + mock({ + 'test': { + 'foobar': 'foobar2\n' + } + }) }) afterAll( async() => { - // mock.restore() + mock.restore() }) -describe('savePicture()', () => { - beforeEach( async() => {}) - afterEach( async() => {}) +// describe('savePicture()', () => { +// beforeEach( async() => {}) +// afterEach( async() => {}) - test(`filename can't be empty string`, async done => { - expect.assertions(1) - try { - await file.savePicture('', 'asd') - done.fail('test failed') - } catch(err) { - expect(err.message).toBe(`filename can't be empty`) - } finally { - done() - } - }) - test(`filename can't be undefined`, async done => { - expect.assertions(1) - try { - await file.savePicture() - done.fail('test failed') - } catch(err) { - expect(err.message).toBe(`filename can't be empty`) - } finally { - done() - } - }) - test(`imageData can't be empty`, async done => { - expect.assertions(1) - try { - await file.savePicture('foo.jpg') - done.fail('test failed') - } catch(err) { - expect(err.message).toBe(`imageData can't be empty`) - } finally { - done() - } - }) - test(`binary information has to be correctly saved`, async done => { - expect.assertions(3) - try { - await file.savePicture('image', 'raboof') - await file.readPicture('image', 'binary', (err, data) => { - expect(data).toBe('raboof') - expect(err).toBeUndefined() - }) - } catch(err) { - expect(err.message).toBe(null) - } finally { - done() - } - }) -}) +// test(`filename can't be empty string`, async done => { +// expect.assertions(1) +// try { +// await file.savePicture('', 'asd') +// done.fail('test failed') +// } catch(err) { +// expect(err.message).toBe(`filename can't be empty`) +// } finally { +// done() +// } +// }) +// test(`filename can't be undefined`, async done => { +// expect.assertions(1) +// try { +// await file.savePicture() +// done.fail('test failed') +// } catch(err) { +// expect(err.message).toBe(`filename can't be empty`) +// } finally { +// done() +// } +// }) +// test(`imageData can't be empty`, async done => { +// expect.assertions(1) +// try { +// await file.savePicture('foo.jpg') +// done.fail('test failed') +// } catch(err) { +// expect(err.message).toBe(`imageData can't be empty`) +// } finally { +// done() +// } +// }) +// test(`binary information has to be correctly saved`, async done => { +// expect.assertions(3) +// try { +// await file.savePicture('image', 'raboof') +// await file.readPicture('image', 'binary', (err, data) => { +// expect(data).toBe('raboof') +// expect(err).toBeUndefined() +// }) +// } catch(err) { +// expect(err.message).toBe("issue with writing") +// } finally { +// done() +// } +// }) +// }) describe('readPicture()', () => { beforeEach( async() => { }) @@ -103,17 +103,20 @@ describe('readPicture()', () => { await file.readPicture('nonExistent.txt') done.fail('test failed') } catch(err) { - expect(err.message).toBe(`ENOENT: no such file or directory, open 'nonExistent.txt'`) + expect(err.message).toBe("file doesn't exist") } finally { done() } }) test(`binary information has to be correctly read`, async done => { - expect.assertions(2) + expect.assertions(1) try { - expect(file.readPicture('foobar')).toBe('foobar2') + let output = await file.readPicture('test/foobar') + //console.log("Output: ", output) + expect(output).toBe("foobar2\n") } catch(err) { - expect(err.message).toBe(null) + console.log(err) + expect(err.message).toBe("issue with reading") } finally { done() } diff --git a/exercises/07_unit_testing/file_system/unit tests/foobar b/exercises/07_unit_testing/file_system/unit tests/foobar new file mode 100644 index 00000000..1c46fdb1 --- /dev/null +++ b/exercises/07_unit_testing/file_system/unit tests/foobar @@ -0,0 +1 @@ +foobar2 From 810222983f8eb68703bd4cbe583cf93289814647 Mon Sep 17 00:00:00 2001 From: harjaus Date: Fri, 8 Nov 2019 15:39:41 +0000 Subject: [PATCH 076/106] Now reads as binary --- exercises/07_unit_testing/file_system/modules/file.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/07_unit_testing/file_system/modules/file.js b/exercises/07_unit_testing/file_system/modules/file.js index ba29978a..1b5921f6 100644 --- a/exercises/07_unit_testing/file_system/modules/file.js +++ b/exercises/07_unit_testing/file_system/modules/file.js @@ -18,7 +18,7 @@ module.exports = class File { async readPicture(filename) { if (filename === undefined || filename === '') throw new Error(`filename can't be empty`) try { - return fs.readFileSync(filename, 'UTF-8') + return fs.readFileSync(filename, 'binary') } catch(err) { if (err.message == `ENOENT: no such file or directory, open '${filename}'`) throw new Error("file doesn't exist") From 0b9b9e1534e14f064aca1e05a5110c3f21d8af71 Mon Sep 17 00:00:00 2001 From: harjaus Date: Fri, 8 Nov 2019 15:56:09 +0000 Subject: [PATCH 077/106] Now writes synchronously, fixes bug --- exercises/07_unit_testing/file_system/modules/file.js | 2 +- exercises/07_unit_testing/file_system/modules/image | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 exercises/07_unit_testing/file_system/modules/image diff --git a/exercises/07_unit_testing/file_system/modules/file.js b/exercises/07_unit_testing/file_system/modules/file.js index 1b5921f6..e2eab795 100644 --- a/exercises/07_unit_testing/file_system/modules/file.js +++ b/exercises/07_unit_testing/file_system/modules/file.js @@ -9,7 +9,7 @@ module.exports = class File { if (filename === undefined || filename === '') throw new Error(`filename can't be empty`) if (imageData === undefined || imageData === '') throw new Error(`imageData can't be empty`) try { - fs.writeFile(filename, imageData, 'binary') + fs.writeFileSync(filename, imageData, 'binary') } catch(err) { throw err } diff --git a/exercises/07_unit_testing/file_system/modules/image b/exercises/07_unit_testing/file_system/modules/image new file mode 100644 index 00000000..a9acf68e --- /dev/null +++ b/exercises/07_unit_testing/file_system/modules/image @@ -0,0 +1 @@ +raboof \ No newline at end of file From 39518ac7289ce0715f1a0a877b644410e00839fe Mon Sep 17 00:00:00 2001 From: harjaus Date: Fri, 8 Nov 2019 15:57:16 +0000 Subject: [PATCH 078/106] Now can mock writing to filesystem --- .../file_system/unit tests/file.spec.js | 102 +++++++++--------- .../file_system/unit tests/image | 1 + 2 files changed, 51 insertions(+), 52 deletions(-) create mode 100644 exercises/07_unit_testing/file_system/unit tests/image diff --git a/exercises/07_unit_testing/file_system/unit tests/file.spec.js b/exercises/07_unit_testing/file_system/unit tests/file.spec.js index 88ba57f8..ef7c4ec8 100644 --- a/exercises/07_unit_testing/file_system/unit tests/file.spec.js +++ b/exercises/07_unit_testing/file_system/unit tests/file.spec.js @@ -16,61 +16,59 @@ beforeAll( async() => { }) afterAll( async() => { - mock.restore() + mock.restore() }) -// describe('savePicture()', () => { -// beforeEach( async() => {}) -// afterEach( async() => {}) +describe('savePicture()', () => { + beforeEach( async() => {}) + afterEach( async() => {}) -// test(`filename can't be empty string`, async done => { -// expect.assertions(1) -// try { -// await file.savePicture('', 'asd') -// done.fail('test failed') -// } catch(err) { -// expect(err.message).toBe(`filename can't be empty`) -// } finally { -// done() -// } -// }) -// test(`filename can't be undefined`, async done => { -// expect.assertions(1) -// try { -// await file.savePicture() -// done.fail('test failed') -// } catch(err) { -// expect(err.message).toBe(`filename can't be empty`) -// } finally { -// done() -// } -// }) -// test(`imageData can't be empty`, async done => { -// expect.assertions(1) -// try { -// await file.savePicture('foo.jpg') -// done.fail('test failed') -// } catch(err) { -// expect(err.message).toBe(`imageData can't be empty`) -// } finally { -// done() -// } -// }) -// test(`binary information has to be correctly saved`, async done => { -// expect.assertions(3) -// try { -// await file.savePicture('image', 'raboof') -// await file.readPicture('image', 'binary', (err, data) => { -// expect(data).toBe('raboof') -// expect(err).toBeUndefined() -// }) -// } catch(err) { -// expect(err.message).toBe("issue with writing") -// } finally { -// done() -// } -// }) -// }) + test(`filename can't be empty string`, async done => { + expect.assertions(1) + try { + await file.savePicture('', 'asd') + done.fail('test failed') + } catch(err) { + expect(err.message).toBe(`filename can't be empty`) + } finally { + done() + } + }) + test(`filename can't be undefined`, async done => { + expect.assertions(1) + try { + await file.savePicture() + done.fail('test failed') + } catch(err) { + expect(err.message).toBe(`filename can't be empty`) + } finally { + done() + } + }) + test(`imageData can't be empty`, async done => { + expect.assertions(1) + try { + await file.savePicture('foo.jpg') + done.fail('test failed') + } catch(err) { + expect(err.message).toBe(`imageData can't be empty`) + } finally { + done() + } + }) + test(`binary information has to be correctly saved`, async done => { + expect.assertions(1) + try { + await file.savePicture('image', 'raboof') + let output = await file.readPicture('image') + expect(output).toBe('raboof') + } catch(err) { + expect(err.message).toBe("issue with writing") + } finally { + done() + } + }) +}) describe('readPicture()', () => { beforeEach( async() => { }) diff --git a/exercises/07_unit_testing/file_system/unit tests/image b/exercises/07_unit_testing/file_system/unit tests/image new file mode 100644 index 00000000..a9acf68e --- /dev/null +++ b/exercises/07_unit_testing/file_system/unit tests/image @@ -0,0 +1 @@ +raboof \ No newline at end of file From 213478adc03f1cd8570afb1a9655948f9178ba51 Mon Sep 17 00:00:00 2001 From: harjaus Date: Fri, 8 Nov 2019 16:02:12 +0000 Subject: [PATCH 079/106] Removed unnecessary files --- exercises/07_unit_testing/file_system/unit tests/foobar | 1 - exercises/07_unit_testing/file_system/unit tests/image | 1 - 2 files changed, 2 deletions(-) delete mode 100644 exercises/07_unit_testing/file_system/unit tests/foobar delete mode 100644 exercises/07_unit_testing/file_system/unit tests/image diff --git a/exercises/07_unit_testing/file_system/unit tests/foobar b/exercises/07_unit_testing/file_system/unit tests/foobar deleted file mode 100644 index 1c46fdb1..00000000 --- a/exercises/07_unit_testing/file_system/unit tests/foobar +++ /dev/null @@ -1 +0,0 @@ -foobar2 diff --git a/exercises/07_unit_testing/file_system/unit tests/image b/exercises/07_unit_testing/file_system/unit tests/image deleted file mode 100644 index a9acf68e..00000000 --- a/exercises/07_unit_testing/file_system/unit tests/image +++ /dev/null @@ -1 +0,0 @@ -raboof \ No newline at end of file From d4fc244457e1b1b0939af8bfe609c856312535bb Mon Sep 17 00:00:00 2001 From: "Balazs Bordas (bordasb)" Date: Mon, 11 Nov 2019 14:21:37 +0000 Subject: [PATCH 080/106] minor typo and semantic fixes --- 02 HTTP.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/02 HTTP.md b/02 HTTP.md index 338c6333..0a047be3 100644 --- a/02 HTTP.md +++ b/02 HTTP.md @@ -14,7 +14,7 @@ HTTP uses a [request-response](https://en.wikipedia.org/wiki/Request–response) When this request is received by the server it analyses the information provided and sends a _response_ back to the client. This typically might include: -1. The [HTTP message body](https://en.wikipedia.org/wiki/HTTP_message_body), typically the data that was requested such as a html page or image. +1. The [HTTP message body](https://en.wikipedia.org/wiki/HTTP_message_body), typically the data that was requested such as an HTML page or image. 2. A [status code](https://searchengineland.com/the-ultimate-guide-to-http-status-codes-and-headers-for-seo-302786), a number representing the success or otherwise of the request. 3. Extra information such as the format the data is in sent as [response headers](https://developer.mozilla.org/en-US/docs/Glossary/Response_header). @@ -60,7 +60,7 @@ Study the `index.js` script in the `exercises/02_http/01_url/` directory. 1. The `let` keyword defines a _mutable variable_ which can change its value. 2. The `const` keyword defines an _immutable variable_. Once a value is assigned it cannot be changed, these are sometime called _constants_. 6. The main part of the script defines the _routes_ and we will be covering these in more detail as we progress through the lab. -7. Right at the end (line 123) we start the server on the defined port and _export_ the _koa object_ `app`. By exporting it we can import the script into our automated test suite (briefly covered in the previous lab). +7. Right at the end (line 161) we start the server on the defined port and _export_ the _koa object_ `app`. By exporting it we can import the script into our automated test suite (briefly covered in the previous lab). Now start the server: From 2cf65679808f0a3be0e819df2ac32ba78676d683 Mon Sep 17 00:00:00 2001 From: "Balazs Bordas (bordasb)" Date: Tue, 12 Nov 2019 01:53:42 +0000 Subject: [PATCH 081/106] corrected the bracket notation example --- 02 HTTP.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02 HTTP.md b/02 HTTP.md index 0a047be3..94fb440e 100644 --- a/02 HTTP.md +++ b/02 HTTP.md @@ -112,7 +112,7 @@ Each value in an object can be extracted using one or two different syntaxes: ```javascript const firstName = name.first -const lastName = name['last'] +const lastName = name['last name'] const prop = year const dobYear = name.dob.[prop] ``` From 9ff513609e9987550215511101a1ba49dd92ae60 Mon Sep 17 00:00:00 2001 From: "Balazs Bordas (bordasb)" Date: Tue, 12 Nov 2019 14:52:57 +0000 Subject: [PATCH 082/106] fixed displayed directory tree --- 03 HTML5.md | 1 - 1 file changed, 1 deletion(-) diff --git a/03 HTML5.md b/03 HTML5.md index 26d6eda5..92af98c5 100644 --- a/03 HTML5.md +++ b/03 HTML5.md @@ -8,7 +8,6 @@ In this worksheet you will be learning about the markup language HTML which is c ``` └── 03_html    ├── 01_syntax -    ├── 02_hypermedia    ├── 02_lists    ├── 03_hypermedia    ├── 04_tables From 92f29a5586f99c932208bcc408f7065f25e61971 Mon Sep 17 00:00:00 2001 From: "Balazs Bordas (bordasb)" Date: Tue, 12 Nov 2019 14:54:42 +0000 Subject: [PATCH 083/106] fixed displayed directory tree --- 03 HTML5.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/03 HTML5.md b/03 HTML5.md index 92af98c5..32ba6bae 100644 --- a/03 HTML5.md +++ b/03 HTML5.md @@ -11,8 +11,8 @@ In this worksheet you will be learning about the markup language HTML which is c    ├── 02_lists    ├── 03_hypermedia    ├── 04_tables -    ├── 05_forms - ├── 06_semantic +    ├── 05_semantic + ├── 06_markdown    └── template.html ``` From 7af1d8d6c420878771e1191a17e1ede1978b351d Mon Sep 17 00:00:00 2001 From: "Mark Tyers (aa7401)" Date: Thu, 14 Nov 2019 18:36:30 +0000 Subject: [PATCH 084/106] Added Notes on managing modules --- 06 Code Quality.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/06 Code Quality.md b/06 Code Quality.md index 81cdda6f..dff65bfa 100644 --- a/06 Code Quality.md +++ b/06 Code Quality.md @@ -56,6 +56,17 @@ In the previous example you ran the script from the terminal. If you open a proj ![Scripts Explorer](exercises/.images/npm_scripts.png) +### 1.2 Managing Modules + +As you continue developing your project you will both be adding additional dependencies and stop using some existing ones. In addition certain modules receive major updates. All these issues can cause a lack of consistency between the package manifest and the modules in use by your code. Thankfully there is a useful tool called `npm-check` to identify where there might be issues. Once installed you can run it from the `node_modules/.bin/` directory just like other binaries. + +```shell +npm install --save-dev npm-check +./node_modules/.bin/npm-check +``` + +This will generate a detailed report to help you manage your package dependencies. + ## 2 Modularisation Next you will need to do is to split your code up to make it easier to understand. Take a look at the `06_code_quality/todo/` project. If you run this you will see that it is a simple shopping list app where you can add multiple items and quantities. Currently all the functionality is contained in the `index.js` file. Locate the `modules/list.js` file. This declares a new Object Prototype called `List` which includes all the necessary functionality for the app. At the moment this is not being used by the app. From 30c5f0b1c1c3d90e28c5e37c63636e267a77dc6e Mon Sep 17 00:00:00 2001 From: Balazs Laszlo Bordas Date: Mon, 25 Nov 2019 00:01:25 +0000 Subject: [PATCH 085/106] improvements made to file_system mock-fs exercise --- .../07_unit_testing/file_system/modules/file.js | 13 +++++-------- .../file_system/unit tests/file.spec.js | 3 +-- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/exercises/07_unit_testing/file_system/modules/file.js b/exercises/07_unit_testing/file_system/modules/file.js index e2eab795..9755a6a1 100644 --- a/exercises/07_unit_testing/file_system/modules/file.js +++ b/exercises/07_unit_testing/file_system/modules/file.js @@ -8,11 +8,7 @@ module.exports = class File { async savePicture(filename, imageData) { if (filename === undefined || filename === '') throw new Error(`filename can't be empty`) if (imageData === undefined || imageData === '') throw new Error(`imageData can't be empty`) - try { - fs.writeFileSync(filename, imageData, 'binary') - } catch(err) { - throw err - } + fs.writeFileSync(filename, imageData, 'binary') } async readPicture(filename) { @@ -20,10 +16,11 @@ module.exports = class File { try { return fs.readFileSync(filename, 'binary') } catch(err) { - if (err.message == `ENOENT: no such file or directory, open '${filename}'`) - throw new Error("file doesn't exist") - else + if (err.message == `ENOENT: no such file or directory, open '${filename}'`) { + throw new Error(`file '${filename}' doesn't exist`) + } else { throw err + } } } } diff --git a/exercises/07_unit_testing/file_system/unit tests/file.spec.js b/exercises/07_unit_testing/file_system/unit tests/file.spec.js index ef7c4ec8..82f74ecd 100644 --- a/exercises/07_unit_testing/file_system/unit tests/file.spec.js +++ b/exercises/07_unit_testing/file_system/unit tests/file.spec.js @@ -101,7 +101,7 @@ describe('readPicture()', () => { await file.readPicture('nonExistent.txt') done.fail('test failed') } catch(err) { - expect(err.message).toBe("file doesn't exist") + expect(err.message).toBe("file 'nonExistent.txt' doesn't exist") } finally { done() } @@ -110,7 +110,6 @@ describe('readPicture()', () => { expect.assertions(1) try { let output = await file.readPicture('test/foobar') - //console.log("Output: ", output) expect(output).toBe("foobar2\n") } catch(err) { console.log(err) From 333dcb2e361610c4b246acabfae550afa93e19ba Mon Sep 17 00:00:00 2001 From: Balazs Laszlo Bordas Date: Mon, 25 Nov 2019 00:46:04 +0000 Subject: [PATCH 086/106] #28 create example to demonstrate saving file to mock-fs --- .../07_unit_testing/file_system/modules/image | 1 - .../file_system/modules/mockImage.js | 20 ++++++++++++++++++ .../file_system/modules/nodelogo.png | Bin 0 -> 4512 bytes .../file_system/unit tests/trymockfs.js | 6 ++++-- 4 files changed, 24 insertions(+), 3 deletions(-) delete mode 100644 exercises/07_unit_testing/file_system/modules/image create mode 100644 exercises/07_unit_testing/file_system/modules/mockImage.js create mode 100644 exercises/07_unit_testing/file_system/modules/nodelogo.png diff --git a/exercises/07_unit_testing/file_system/modules/image b/exercises/07_unit_testing/file_system/modules/image deleted file mode 100644 index a9acf68e..00000000 --- a/exercises/07_unit_testing/file_system/modules/image +++ /dev/null @@ -1 +0,0 @@ -raboof \ No newline at end of file diff --git a/exercises/07_unit_testing/file_system/modules/mockImage.js b/exercises/07_unit_testing/file_system/modules/mockImage.js new file mode 100644 index 00000000..c8937a0d --- /dev/null +++ b/exercises/07_unit_testing/file_system/modules/mockImage.js @@ -0,0 +1,20 @@ +// example file that demonstrates the File class and mock-fs working simultaneously + +'use strict' + +const mock = require('mock-fs') +const File = require('./file') +const file = new File() + +const fileName = 'nodelogo.png' + +const mockImageReadWrite = async (fileName) => { + const imageReadFromFs = await file.readPicture(fileName) + mock({}) + file.savePicture(fileName, imageReadFromFs) + const imageReadFromMock = await file.readPicture(fileName) + mock.restore() + file.savePicture(`mocked_${fileName}`, imageReadFromMock) +} + +mockImageReadWrite(fileName) diff --git a/exercises/07_unit_testing/file_system/modules/nodelogo.png b/exercises/07_unit_testing/file_system/modules/nodelogo.png new file mode 100644 index 0000000000000000000000000000000000000000..33201619e42a6e42b35fc77431a2725f20683110 GIT binary patch literal 4512 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 { if (err) throw new Error(err) console.log(data) }) - -mock.restore() +// shouldn't be restored prematurely when dealing with async code +// mock.restore() From d8ae63493e258a408f2978f6e98a3cc1dc964569 Mon Sep 17 00:00:00 2001 From: Balazs Laszlo Bordas Date: Mon, 25 Nov 2019 01:33:49 +0000 Subject: [PATCH 087/106] #28 webserver handles incoming files --- .../07_unit_testing/file_system/index.js | 88 +++++++++++-------- .../07_unit_testing/file_system/package.json | 50 +++++------ .../file_system/views/pictures.html | 40 ++++----- 3 files changed, 94 insertions(+), 84 deletions(-) diff --git a/exercises/07_unit_testing/file_system/index.js b/exercises/07_unit_testing/file_system/index.js index b11dc9dd..54972cc9 100644 --- a/exercises/07_unit_testing/file_system/index.js +++ b/exercises/07_unit_testing/file_system/index.js @@ -1,39 +1,49 @@ -#!/usr/bin/env node - -'use strict' - -const File = require('./modules/file') - -const Koa = require('koa') -const Router = require('koa-router') -const BodyParser = require('koa-bodyparser') -const views = require('koa-views') -const status = require('http-status-codes') - -const port = 8080 -const file = new File() - -const app = new Koa() -app.use(views(`${__dirname}/views`, { extension: 'html' }, {map: { handlebars: 'handlebars' }})) -app.use(BodyParser({ - encoding: 'multipart/form-data' -})) - -const router = new Router() - -router.get('/', async ctx => { - await ctx.render('pictures.html') -}) -router.post('/', ctx => { - try { - console.log('processing the post request') - const body = ctx.request.body - console.log(body.fileUpload) - } catch(err) { - ctx.status = status.UNPROCESSABLE_ENTITY - ctx.body = err.message - } -}) - -app.use(router.routes()) -module.exports = app.listen(port, () => console.log(`listening on port ${port}`)) +#!/usr/bin/env node +//todo: fix this +'use strict' + +const File = require('./modules/file') + +const Koa = require('koa') +const Router = require('koa-router') +const koaForm = require("formidable-upload-koa"); +const views = require('koa-views') +const status = require('http-status-codes') + +const port = 8080 +const file = new File() + +const app = new Koa() +app.use(views(`${__dirname}/views`, { extension: 'html' }, {map: { handlebars: 'handlebars' }})) +// app.use(Body({ +// encoding: 'multipart/form-data' +// })) +// app.use(BodyParser({ +// formidable:{uploadDir: './uploads'}, //This is where the files would come +// multipart: true, +// urlencoded: true +// })) +const options = { + uploadDir: `./upload/`, + keepExtensions: true +} +const router = new Router() + +router.get('/', async ctx => { + await ctx.render('pictures.html') +}) +router.post('/', koaForm(options), ctx => { + try { + console.log('processing the post request') + // const body = ctx.request.body + // console.log(ctx.request.body) + console.log(ctx.req.files) + } catch(err) { + console.log(err) + ctx.status = status.UNPROCESSABLE_ENTITY + ctx.body = err.message + } +}) + +app.use(router.routes()) +module.exports = app.listen(port, () => console.log(`listening on port ${port}`)) diff --git a/exercises/07_unit_testing/file_system/package.json b/exercises/07_unit_testing/file_system/package.json index 001f3a84..9a8c79ec 100644 --- a/exercises/07_unit_testing/file_system/package.json +++ b/exercises/07_unit_testing/file_system/package.json @@ -1,25 +1,25 @@ -{ - "name": "file_system", - "version": "1.0.0", - "description": "mock-fs", - "main": "index.js", - "dependencies": { - "callsites": "^3.1.0", - "fs": "^0.0.1-security", - "http-status-codes": "^1.4.0", - "koa": "^2.11.0", - "koa-bodyparser": "^4.2.1", - "koa-router": "^7.4.0", - "koa-views": "^6.2.1" - }, - "devDependencies": { - "jest": "^24.9.0", - "mock-fs": "^4.10.3", - "supertest": "^4.0.2" - }, - "scripts": { - "test": "jest --config=./jest-test.config.js --coverage" - }, - "author": "", - "license": "ISC" -} +{ + "name": "file_system", + "version": "1.0.0", + "description": "mock-fs", + "main": "index.js", + "dependencies": { + "callsites": "^3.1.0", + "formidable-upload-koa": "^1.0.1", + "fs": "^0.0.1-security", + "http-status-codes": "^1.4.0", + "koa": "^2.11.0", + "koa-router": "^7.4.0", + "koa-views": "^6.2.1" + }, + "devDependencies": { + "jest": "^24.9.0", + "mock-fs": "^4.10.3", + "supertest": "^4.0.2" + }, + "scripts": { + "test": "jest --config=./jest-test.config.js --coverage" + }, + "author": "", + "license": "ISC" +} diff --git a/exercises/07_unit_testing/file_system/views/pictures.html b/exercises/07_unit_testing/file_system/views/pictures.html index 5f8ff74d..1d0372f5 100644 --- a/exercises/07_unit_testing/file_system/views/pictures.html +++ b/exercises/07_unit_testing/file_system/views/pictures.html @@ -1,20 +1,20 @@ - - - - - - - Pictures - - -

    Save new pictures

    -
    - Image to be uploaded: -
    - -

    - -
    -

    Saved pictures

    - - \ No newline at end of file + + + + + + + Pictures + + +

    Save new pictures

    +
    + Image to be uploaded: +
    + +

    + +
    +

    Saved pictures

    + + From b166a8cd5b27c465a0721b963cff63a2e4aca5f9 Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Fri, 29 Nov 2019 17:17:07 +0000 Subject: [PATCH 088/106] Added New Materials --- 05 JavaScript.md | 46 ++++++++++++++++++++--------- exercises/05_javascript/counties.js | 16 ++++++++++ 2 files changed, 48 insertions(+), 14 deletions(-) create mode 100755 exercises/05_javascript/counties.js diff --git a/05 JavaScript.md b/05 JavaScript.md index 1cfdf9ae..02081352 100644 --- a/05 JavaScript.md +++ b/05 JavaScript.md @@ -320,11 +320,28 @@ This will retrieve the value of the grade property if defined and store it in th 3. Use the `for...in` statement to iterate over this `study01` object printing out all of the _module codes_. 4. Use the `for...of` statement to print out all of the _module names_. -### 3.3 JSON Data +### 3.3 Context + +Every JavaScript object has a reference to its current execution **context**. This refers to how the function was called. To reference the current context we use the `this` object. + +You should start by opening the `counties.js` file and studying it carefully. This simple script demonstrates some of the key features of working with context. + +1. Lines 5-7 define a simple function called `print()` which prints the context object `this`. +2. Lines 9-11 define two objects: + 1. Each contains two properties, a `name` string and the `print()` function. + 2. Since we are storing the `print()` function in a property with the same name we can use the ES6 Object Shorthand syntax. The second object uses this. +3. Line 13 calls the `print()` function from the global context. This prints an empty object. +4. Lines 15 and 16 call the `print()` function from inside each of the objects. This demonstrates that the `name` properties are part of the object context. + +If you look at the console output you will notice that, when we access `this` from _inside_ an object, it is bound to the object from where it was called. + +Because we are operating in _strict mode_, when we try to access `this` in the global context it returns `undefined`. + +### 3.4 JSON Data JSON (JavaScript Object Notation) is a standard text-based format to represent structured data. This is very useful as it means we can take any JavaScript object and convert it into a text string. This can then be saved to disk or posted to a web server, etc. It also means that you can take a JSON-formatted text string and convert it into a complex JavaScript object! -#### 3.3.1 Parsing JSON Strings into Objects +#### 3.4.1 Parsing JSON Strings into Objects It is trivial to convert a JSON string into an object using the `JSON.parse()` function. Study the following code carefully: @@ -335,7 +352,7 @@ const employee = JSON.parse(jsonstring) Notice that in a JSON string all the properties and values _must_ be enclosed in double-quotes. The constant `jsonstring` is a **String** but `employee` is a standard JavaScript **Object**. -#### 3.3.2 Converting Objects into Strings +#### 3.4.2 Converting Objects into Strings In the same way that we can convert a JSON string into a JavaScript object we can also do the reverse. @@ -365,7 +382,7 @@ const jsonstring = JSON.stringify(employee, null, 2) This inserts newline and space characters to make the string more readable. The third parameter defines the level of indent (in spaces). -#### 3.3.3 Test Your Understanding +#### 3.4.3 Test Your Understanding Lets apply our knowledge of callbacks to implement a simple quotes tool. @@ -376,7 +393,7 @@ Lets apply our knowledge of callbacks to implement a simple quotes tool. 5. Modify the code so that it only prints the quotes string (not the entire object). 6. Convert the `university` object from the previous exercise into a JSON string and save it to the filesystem as `university.json`. -### 3.3 ECMA6 Object Destructuring +### 3.5 ECMA6 Object Destructuring There are situations where we want to retrieve multiple object properties and store then in different variables, for example: @@ -405,11 +422,11 @@ console.log(first) // prints 'Colin' console.log(dept) // prints 'Computing' ``` -#### 3.3.1 Test Your Understanding +#### 3.5.1 Test Your Understanding 1. Take the `university` object you created in an earlier exercise and use a single line destructuring assignment to create three variables, `year1`, `year2` and `year3`. -### 3.4 Getters and Setters +### 3.6 Getters and Setters Most object properties are simple values and you can simply assign a value. Sometimes however properties need to be calculated. One solution is to store a function as one of the properties however we would need to call a function to retrieve the value: @@ -469,12 +486,12 @@ const employee = { employee.name = 'Micky Mouse' ``` -#### 3.4.1 Test Your Understanding +#### 3.6.1 Test Your Understanding 1. Print the person's details in an easy to understand sentence. 2. Add a getter to return the number of years the employee has been working for the company, you will need to round this down to a whole number. You should make use of one of the static methods of the built-in [Math](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math) object. -### 3.5 Modifying Objects +### 3.7 Modifying Objects Once an object has been created it can be modified in several ways. @@ -510,7 +527,7 @@ const employee = { delete employee.department ``` -### 3.6 Undefined Values +### 3.8 Undefined Values Undefined Objects @@ -531,13 +548,13 @@ const postCode = employee.address && employee.address.postCode console.log(postCode) // returns undefined ``` -#### 3.6.1 Test Your Understanding +#### 3.8.1 Test Your Understanding 1. Modify the code to handle bad data: 1. Remove the startYear property. 2. Set the startYear property to a String. -### 3.7 Object Prototypes +### 3.9 Object Prototypes All JavaScript object (such as String, Number, Array, etc.) inherit properties and methods from a **prototype**. This also applies to any new objects you create. Since JavaScript does not support _traditional_ classes, this becomes the way to add new functionality. Let's look at a simple example. @@ -559,7 +576,7 @@ There are a couple of important concepts here. 2. Inside the function we manipulate the `this` object which represents the value of the object. 1. Replace the `function() {}` construct with an arrow function. What happens when you run the script? -#### 3.7.1 Test Your Understanding +#### 3.9.1 Test Your Understanding 1. Extend the `Array` object by adding a function `toStr()` that takes an array and turns it into a string. You will need to use the [`Array.join()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join) function. @@ -627,7 +644,8 @@ class Person { constructor(name, startYear) { this.name = name this.startYear = startYear || currentYear - this.years = currentYear - this.startYear + this.years = currentYear - this.startYear + return this } } ``` diff --git a/exercises/05_javascript/counties.js b/exercises/05_javascript/counties.js new file mode 100755 index 00000000..be28ef39 --- /dev/null +++ b/exercises/05_javascript/counties.js @@ -0,0 +1,16 @@ +#!/usr/bin/env node + +'use strict' + +function print() { + console.log(this) +} + +const obj1 = { name: 'Kent', print: print } +// this example uses the ES6 Object Shorthand syntax +const obj2 = { name: 'Cornwall', print } + +print() + +obj1.print() +obj2.print() From 9cc86d43bfc1a12c0c288f947c96b17375ed05ba Mon Sep 17 00:00:00 2001 From: Mark Tyers Date: Sun, 12 Jan 2020 11:03:15 +0000 Subject: [PATCH 089/106] Added Manual Mock Example --- exercises/07_unit_testing/mocking/index.js | 8 ++++++ .../07_unit_testing/mocking/jest.config.js | 19 +++++++++++++ .../07_unit_testing/mocking/modules/todo.js | 26 ++++++++++++++++++ .../07_unit_testing/mocking/package.json | 23 ++++++++++++++++ .../mocking/tests/__mocks__/mysql-promise.js | 27 +++++++++++++++++++ .../mocking/tests/todo.test.js | 16 +++++++++++ 6 files changed, 119 insertions(+) create mode 100644 exercises/07_unit_testing/mocking/index.js create mode 100644 exercises/07_unit_testing/mocking/jest.config.js create mode 100644 exercises/07_unit_testing/mocking/modules/todo.js create mode 100644 exercises/07_unit_testing/mocking/package.json create mode 100644 exercises/07_unit_testing/mocking/tests/__mocks__/mysql-promise.js create mode 100644 exercises/07_unit_testing/mocking/tests/todo.test.js diff --git a/exercises/07_unit_testing/mocking/index.js b/exercises/07_unit_testing/mocking/index.js new file mode 100644 index 00000000..42df9deb --- /dev/null +++ b/exercises/07_unit_testing/mocking/index.js @@ -0,0 +1,8 @@ + +(async () => { + const User = require('./modules/todo') + const user = await new User() + await user.addRecord('bread', 2) + console.log(JSON.stringify(await user.getAll(), null, 2)) + return +})() diff --git a/exercises/07_unit_testing/mocking/jest.config.js b/exercises/07_unit_testing/mocking/jest.config.js new file mode 100644 index 00000000..ed2be75b --- /dev/null +++ b/exercises/07_unit_testing/mocking/jest.config.js @@ -0,0 +1,19 @@ + +module.exports = { + displayName: 'test', + verbose: true, + collectCoverage: true, + coverageThreshold: { + global: { + branches: 0, + functions: 0, + lines: 0, + statements: 0 + } + }, + testPathIgnorePatterns: [ + '/node_modules/', + '/__tests__/fixtures/', + ], + roots: ['/tests'] +} diff --git a/exercises/07_unit_testing/mocking/modules/todo.js b/exercises/07_unit_testing/mocking/modules/todo.js new file mode 100644 index 00000000..850008ff --- /dev/null +++ b/exercises/07_unit_testing/mocking/modules/todo.js @@ -0,0 +1,26 @@ + +const MySQL = require('mysql-promise') + +module.exports = class User { + constructor() { + return( async() => { + this.db = await new MySQL() + this.db.configure({ "host": "localhost", "user": "root", "password": "p455w0rd", "database": "test"}) + await this.db.query('CREATE TABLE IF NOT EXISTS list(id INTEGER PRIMARY KEY AUTO_INCREMENT, item TEXT, qty INTEGER)') + return this + })() + } + async addRecord(item, qty) { + const sql = `INSERT INTO list(item, qty) VALUES("${item}", ${qty})` + await this.db.query(sql) + return true + } + async getAll() { + const sql = 'SELECT item, qty FROM list' + const data = await this.db.query(sql) + return data + } + async close() { + await this.db.end() + } +} diff --git a/exercises/07_unit_testing/mocking/package.json b/exercises/07_unit_testing/mocking/package.json new file mode 100644 index 00000000..915eb43f --- /dev/null +++ b/exercises/07_unit_testing/mocking/package.json @@ -0,0 +1,23 @@ +{ + "name": "mocking", + "version": "1.0.0", + "description": "", + "main": "index.js", + "directories": { + "test": "tests" + }, + "dependencies": { + "handlebars": "^4.5.3", + "mysql-promise": "^5.0.0", + "prompt-async": "^0.9.9", + "sqlite-async": "^1.0.12" + }, + "devDependencies": { + "jest": "^24.9.0" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC" +} diff --git a/exercises/07_unit_testing/mocking/tests/__mocks__/mysql-promise.js b/exercises/07_unit_testing/mocking/tests/__mocks__/mysql-promise.js new file mode 100644 index 00000000..255fd8b9 --- /dev/null +++ b/exercises/07_unit_testing/mocking/tests/__mocks__/mysql-promise.js @@ -0,0 +1,27 @@ + +const sqlite = require('sqlite-async') + +class DB { + constructor() { + return ( async() => { + console.log('MOCK') + this.db = await sqlite.open(':memory:') + return this + })() + } + configure() { return true } + async isConfigured() { return true } + async getConnection() { return true } + async query(sql) { + sql = sql.replace('AUTO_INCREMENT', 'AUTOINCREMENT') //mysql uses an underscore! + const data = await this.db.all(sql) + return [ data, [ { db: 'test', table: 'mock'} ] ] + return data + } + async end() { + await this.db.close() + return true + } +} + +module.exports = DB diff --git a/exercises/07_unit_testing/mocking/tests/todo.test.js b/exercises/07_unit_testing/mocking/tests/todo.test.js new file mode 100644 index 00000000..7ea5944a --- /dev/null +++ b/exercises/07_unit_testing/mocking/tests/todo.test.js @@ -0,0 +1,16 @@ + +const User = require('../modules/todo') + +describe('simple test', () => { + test('adding a new record', async done => { + const user = await new User() + const id = await user.addRecord('bread', 4) + const data = await user.getAll() + await user.close() + expect(data[0]).toEqual([ { item: 'bread', qty: 4 } ]) + done() + }) +}) + +// if you get lots of handlebars warnings you need to install an older version: +// npm install handlebars@4.5.3 From d43bfb864e2967e9c1efffd2620b9beb90f5a269 Mon Sep 17 00:00:00 2001 From: Balazs Laszlo Bordas Date: Sat, 25 Jan 2020 17:29:47 +0000 Subject: [PATCH 090/106] removed unintentional inserted solutions by nathwan2 from 02/01/index.js, added content about package.json to 02 HTTP.md, created 02/01/package.json --- 02 HTTP.md | 36 +++++++++++++++++++++---- exercises/01_setup/index.js | 1 - exercises/02_http/01_url/index.js | 39 ++++++--------------------- exercises/02_http/01_url/package.json | 22 +++++++++++++++ 4 files changed, 61 insertions(+), 37 deletions(-) create mode 100644 exercises/02_http/01_url/package.json diff --git a/02 HTTP.md b/02 HTTP.md index 94fb440e..12020aa2 100644 --- a/02 HTTP.md +++ b/02 HTTP.md @@ -47,20 +47,46 @@ We will be working through some exercises that make use of all of these. Study the `index.js` script in the `exercises/02_http/01_url/` directory. -1. If you study lines 4-10 of `index.js` you will see a list of the modules we need to install. Refer the the previous lab if you get stuck at this point: +1. If you study lines 11-15 of `index.js` you will see a list of the modules we need to install. Refer the the previous lab if you get stuck at this point: 1. `koa` 2. `koa-router` 3. `koa-bodyparser` 4. `koa-static` 5. `js2xmlparser` + - **You can install all these dependencies by simply running 'npm install' in the terminal.** + - This command installs all the documented dependencies from the `package.json` file, which is already preconfigured in this case. + - **Have a look at your `package.json` file and understand its contents** + - When you are creating a new _project_, **you have to do this yourself**: + 1. Use the `npm init` command to create the package.json file + - You can leave all the options default, just leave them empty and keep pressing enter + - Alternatively you can run `npm init --yes`, it will simply leave everything default + 2. Install the dependencies for the first time using the `-S` _switch_ with `npm install` + - e.g.: `npm install -S koa koa-bodyparser` + - This would add something like this to the `package.json` file: + ``` + "dependencies": { + "koa": "^2.11.0", + "koa-bodyparser": "^4.2.1" + } + ``` + - When you next run `npm install -S `, the given package's _newest version_ will be simply added to the list, or in case of a new version for a _previously listed_ dependency, the _version number_ will be updated + - This `-S` is just a short version of the `--save` _switch_ + - **You can use the alternative `--save-dev` switch to install and save _development dependencies_** + - Something that you wouldn't want to deploy, but is necessary for development + - E.g. we will use `jest` for testing, and `eslint` for linting during the development phase, but these shouldn't be required to be installed during deployment + 3. This `package.json` file is also useful to store _scripts_: + - Look at the following line: ` "start": "nodemon index.js"` + - This lets us simply type `npm start` in the terminal to start our application via _nodemon_ + - Nodemon is a great tool that restarts the application every time we save a file in the given folder, so we don't actually have to manually stop and restart it after every modification. + 2. The first line is the _shebang_, it tells the script what application is needed to run it. -3. Lines 4-10 import the module packages we need for our script to work. Koa is a modular framework, on its own it does very little but depends on plugins (middleware) for its functionality. -4. Lines 11-15 are where we configure the koa _middleware_. +3. Lines 11-15 import the module packages we need for our script to work. Koa is a modular framework, on its own it does very little but depends on plugins (middleware) for its functionality. +4. Lines 18-22 are where we configure the koa _middleware_. 5. We need two global variables in our script, one to store a list of items and the second to store the port number we will be using: 1. The `let` keyword defines a _mutable variable_ which can change its value. 2. The `const` keyword defines an _immutable variable_. Once a value is assigned it cannot be changed, these are sometime called _constants_. 6. The main part of the script defines the _routes_ and we will be covering these in more detail as we progress through the lab. -7. Right at the end (line 161) we start the server on the defined port and _export_ the _koa object_ `app`. By exporting it we can import the script into our automated test suite (briefly covered in the previous lab). +7. Right at the end (line 138) we start the server on the defined port and _export_ the _koa object_ `app`. By exporting it we can import the script into our automated test suite (briefly covered in the previous lab). Now start the server: @@ -76,7 +102,7 @@ To do this we need to extract some data from the http object `ctx` which is the Start the server and access the `/books/1` route. What is displayed in the web browser? -1. Since we have not yet covered how to connect to a database, on line 34 we have defined a JavaScript array which contains 3 indexes, these are numbered 0-2. +1. Since we have not yet covered how to connect to a database, on line 41 we have defined a JavaScript array which contains 3 indexes, these are numbered 0-2. 2. Directly underneath this we have defined a route `/books/:index` which contains two **segments**: 1. The first matches the text `/books`, this works like all the routes we have seen previously. 2. The second, beginning with the colon (`:`) represents a **URL Parameter**. This represents one or more characters. diff --git a/exercises/01_setup/index.js b/exercises/01_setup/index.js index af07c3e0..ef00019f 100644 --- a/exercises/01_setup/index.js +++ b/exercises/01_setup/index.js @@ -10,4 +10,3 @@ const port = 8080 app.use(async ctx => ctx.body = 'Hello World') module.exports = app.listen(port, () => console.log(`listening on port ${port}`)) -//aasd \ No newline at end of file diff --git a/exercises/02_http/01_url/index.js b/exercises/02_http/01_url/index.js index 912dc44a..acf845f0 100644 --- a/exercises/02_http/01_url/index.js +++ b/exercises/02_http/01_url/index.js @@ -37,46 +37,23 @@ router.get('/anon', ctx => { // anon case }) -router.get('/books/:index/:index2', ctx => { - const books = ['The Hobbit', 'Alice in Wonderland', 'The Secret Garden','Animal Farm'] +router.get('/books/:index', ctx => { + const books = ['The Hobbit', 'Alice in Wonderland', 'The Secret Garden'] const parameters = ctx.params console.log(parameters) - - - if (parameters.index > 3 || parameters.index2 > 3) { - ctx.body = "Number cannot be greater than 3" - } - else if (isNaN(parameters.index) || isNaN(parameters.index2)){ - ctx.body = "A number must be entered" - } - else if (Number.isInteger(parameters.index)){ - ctx.body = "A whole number must be entered" - } - else{ - const title = books[parameters.index] - const title2 = books[parameters.index2] - ctx.body = title + title2 - } + const title = books[parameters.index] + ctx.body = title }) router.get('/name', ctx => ctx.body = JSON.stringify(ctx.query)) router.get('/hello/:name', ctx => { let myname = ctx.params.name - if(ctx.query.format === 'upper') myname = myname.toUpperCase() - else if (ctx.query.format === 'lower') myname = myname.toLowerCase() - else if (ctx.query.format === 'reverse'){ - var array1 = myname.split("") - console.log(array1) - var array2 = array1.reverse() - console.log(array2) - var array3 = array1.join("") - console.log(array3) - ctx.body = `hello ${array3}` - //myname = join(Array.reverse(myname.split())) - } + // only applies uppercase if formatting query exists - //ctx.body = `hello ${myname}` + if(ctx.query.format === 'upper') myname = myname.toUpperCase() + + ctx.body = `hello ${myname}` }) router.post('/form', ctx => { diff --git a/exercises/02_http/01_url/package.json b/exercises/02_http/01_url/package.json new file mode 100644 index 00000000..329d597e --- /dev/null +++ b/exercises/02_http/01_url/package.json @@ -0,0 +1,22 @@ +{ + "name": "01_url", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "start": "nodemon index.js", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "js2xmlparser": "^4.0.0", + "koa": "^2.11.0", + "koa-bodyparser": "^4.2.1", + "koa-router": "^8.0.6", + "koa-static": "^5.0.0" + }, + "devDependencies": { + "nodemon": "^2.0.2" + } +} From 2bc3e3d40958e3d556c589dc682c7869f9d831d7 Mon Sep 17 00:00:00 2001 From: Balazs Laszlo Bordas Date: Sat, 25 Jan 2020 17:39:31 +0000 Subject: [PATCH 091/106] added guide about npm install -production --- 02 HTTP.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/02 HTTP.md b/02 HTTP.md index 12020aa2..b74829d0 100644 --- a/02 HTTP.md +++ b/02 HTTP.md @@ -63,7 +63,7 @@ Study the `index.js` script in the `exercises/02_http/01_url/` directory. 2. Install the dependencies for the first time using the `-S` _switch_ with `npm install` - e.g.: `npm install -S koa koa-bodyparser` - This would add something like this to the `package.json` file: - ``` + ```json "dependencies": { "koa": "^2.11.0", "koa-bodyparser": "^4.2.1" @@ -71,9 +71,11 @@ Study the `index.js` script in the `exercises/02_http/01_url/` directory. ``` - When you next run `npm install -S `, the given package's _newest version_ will be simply added to the list, or in case of a new version for a _previously listed_ dependency, the _version number_ will be updated - This `-S` is just a short version of the `--save` _switch_ - - **You can use the alternative `--save-dev` switch to install and save _development dependencies_** + - **You can use the alternative `--save-dev` switch to install and save them as _development dependencies_** - Something that you wouldn't want to deploy, but is necessary for development - E.g. we will use `jest` for testing, and `eslint` for linting during the development phase, but these shouldn't be required to be installed during deployment + - You are done with adding the dependencies, now simply use `npm install` to install all of them at once! + - If you don't want to install development dependencies, use `npm install --production` 3. This `package.json` file is also useful to store _scripts_: - Look at the following line: ` "start": "nodemon index.js"` - This lets us simply type `npm start` in the terminal to start our application via _nodemon_ From e01b52b1b008dfc30b309fb00014cac7bc5289e2 Mon Sep 17 00:00:00 2001 From: Balazs Laszlo Bordas Date: Sat, 25 Jan 2020 19:25:11 +0000 Subject: [PATCH 092/106] fixed dependencies in package.json, added start script --- exercises/07_unit_testing/todo/package.json | 61 ++++++++++----------- 1 file changed, 29 insertions(+), 32 deletions(-) diff --git a/exercises/07_unit_testing/todo/package.json b/exercises/07_unit_testing/todo/package.json index ace21014..cd3afb2c 100644 --- a/exercises/07_unit_testing/todo/package.json +++ b/exercises/07_unit_testing/todo/package.json @@ -1,32 +1,29 @@ -{ - "name": "todo", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "linter": "node_modules/.bin/eslint .", - "test": "node_modules/.bin/jest --coverage --runInBand" - }, - "author": "", - "license": "ISC", - "dependencies": { - "handlebars": "^4.3.0", - "http-status-codes": "^1.3.2", - "koa": "^2.8.1", - "koa-bodyparser": "^4.2.1", - "koa-handlebars": "^1.0.0", - "koa-hbs-renderer": "^1.2.0", - "koa-router": "^7.4.0", - "koa-static": "^5.0.0", - "koa-views": "^6.2.1" - }, - "devDependencies": { - "jest": "^24.9.0", - "supertest": "^4.0.2" - }, - "jest": { - "projects": [ - "/jest-test.config.js" - ] - } -} +{ + "name": "todo", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "start": "nodemon index.js", + "linter": "node_modules/.bin/eslint .", + "test": "node_modules/.bin/jest --coverage --runInBand" + }, + "author": "", + "license": "ISC", + "jest": { + "projects": [ + "/jest-test.config.js" + ] + }, + "dependencies": { + "koa": "^2.11.0", + "koa-bodyparser": "^4.2.1", + "koa-hbs-renderer": "^1.2.0", + "koa-router": "^8.0.6", + "koa-static": "^5.0.0" + }, + "devDependencies": { + "jest": "^25.1.0", + "nodemon": "^2.0.2" + } +} From a5d0506ac3d285caabd19d1b057b2ffe4ac02ae2 Mon Sep 17 00:00:00 2001 From: Balazs Laszlo Bordas Date: Sat, 25 Jan 2020 19:31:07 +0000 Subject: [PATCH 093/106] removed npm-debug.log bloat file from root --- npm-debug.log | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 npm-debug.log diff --git a/npm-debug.log b/npm-debug.log deleted file mode 100644 index 74e9b8d4..00000000 --- a/npm-debug.log +++ /dev/null @@ -1,19 +0,0 @@ -0 info it worked if it ends with ok -1 verbose cli [ '/usr/bin/node', '/usr/bin/npm', 'run', 'test' ] -2 info using npm@3.5.2 -3 info using node@v8.10.0 -4 verbose stack Error: ENOENT: no such file or directory, open '/home/anir/foundation/package.json' -5 verbose cwd /home/anir/foundation -6 error Linux 5.0.0-23-generic -7 error argv "/usr/bin/node" "/usr/bin/npm" "run" "test" -8 error node v8.10.0 -9 error npm v3.5.2 -10 error path /home/anir/foundation/package.json -11 error code ENOENT -12 error errno -2 -13 error syscall open -14 error enoent ENOENT: no such file or directory, open '/home/anir/foundation/package.json' -15 error enoent ENOENT: no such file or directory, open '/home/anir/foundation/package.json' -15 error enoent This is most likely not a problem with npm itself -15 error enoent and is related to npm not being able to find a file. -16 verbose exit [ -2, true ] From 57865744749f9c73d4ffada9789e247cc6c09095 Mon Sep 17 00:00:00 2001 From: Balazs Laszlo Bordas Date: Sat, 25 Jan 2020 19:43:58 +0000 Subject: [PATCH 094/106] removed unnecessarily pasted example code which came from 07 Unit Testing.md --- .../todo/unit tests/todo.spec.js | 133 ++++++++---------- 1 file changed, 56 insertions(+), 77 deletions(-) diff --git a/exercises/07_unit_testing/todo/unit tests/todo.spec.js b/exercises/07_unit_testing/todo/unit tests/todo.spec.js index 2c46bac0..bd5fd3fe 100644 --- a/exercises/07_unit_testing/todo/unit tests/todo.spec.js +++ b/exercises/07_unit_testing/todo/unit tests/todo.spec.js @@ -1,77 +1,56 @@ - -'use strict' - -const todo = require('../modules/todo.js') - -beforeAll( async() => { - // stuff to do before any of the tests run -}) - -afterAll( async() => { - // runs after all the tests have completed -}) - -describe('add()', () => { - // block of tests - beforeEach( async() => { - todo.clear() - }) - afterEach( async() => { - // runs after each test completes - }) - test('add a single item', async done => { - expect.assertions(1) - try { - todo.add('bread', 3) - expect(todo.countItems()).toBe(1) - } catch(err) { - done.fail(err) - } finally { - done() - } - }) - test('qty must be a number', async done => { - expect.assertions(1) - try { - todo.add('bread', 'three') - done.fail('test failed') - } catch(err) { - expect(err.message).toBe('qty must be a number') - } finally { - done() - } - }) - - // New test goes HERE! - test('duplicates should increase qty', async done => { - expect.assertions(2) - try { - // ACT - todo.add('bread', 4) - todo.add('bread', 2) - // ASSERT - const count = todo.countItems() - expect(count).toBe(1) - const data = todo.getAll() - const qty = data[0].qty - expect(qty).toEqual(6) - } catch(err) { - done.fail('test failed') - } finally { - done() - } - }) - -}) - -describe('delete()', () => { - // any tests for the delete() function should be written here -}) - -describe('getAll()', () => { - // any tests for the getAll() function should be written here -}) - -describe('clear()', () => { - // any tests for the clear() function should be written here -}) + +'use strict' + +const todo = require('../modules/todo.js') + +beforeAll( async() => { + // stuff to do before any of the tests run +}) + +afterAll( async() => { + // runs after all the tests have completed +}) + +describe('add()', () => { + // block of tests + beforeEach( async() => { + todo.clear() + }) + afterEach( async() => { + // runs after each test completes + }) + test('add a single item', async done => { + expect.assertions(1) + try { + todo.add('bread', 3) + expect(todo.countItems()).toBe(1) + } catch(err) { + done.fail(err) + } finally { + done() + } + }) + test('qty must be a number', async done => { + expect.assertions(1) + try { + todo.add('bread', 'three') + done.fail('test failed') + } catch(err) { + expect(err.message).toBe('qty must be a number') + } finally { + done() + } + }) +}) + +describe('delete()', () => { + // any tests for the delete() function should be written here +}) + +describe('getAll()', () => { + // any tests for the getAll() function should be written here +}) + +describe('clear()', () => { + // any tests for the clear() function should be written here +}) From 3bf1be1af95ea431e9f9a19d2bd4390fcf0ecf76 Mon Sep 17 00:00:00 2001 From: Balazs Laszlo Bordas Date: Sat, 25 Jan 2020 19:46:47 +0000 Subject: [PATCH 095/106] added missing line --- exercises/07_unit_testing/todo/unit tests/todo.spec.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/exercises/07_unit_testing/todo/unit tests/todo.spec.js b/exercises/07_unit_testing/todo/unit tests/todo.spec.js index bd5fd3fe..22f13dce 100644 --- a/exercises/07_unit_testing/todo/unit tests/todo.spec.js +++ b/exercises/07_unit_testing/todo/unit tests/todo.spec.js @@ -41,6 +41,9 @@ describe('add()', () => { done() } }) + + // New test goes HERE! + }) describe('delete()', () => { From 46cab3cd9f558d320b0de05ded83f4420fcf4d68 Mon Sep 17 00:00:00 2001 From: "Mark Tyers (aa7401)" Date: Thu, 30 Jan 2020 15:45:34 +0000 Subject: [PATCH 096/106] corrected lab code --- exercises/02_http/01_url/index.js | 33 +++---------------------------- 1 file changed, 3 insertions(+), 30 deletions(-) diff --git a/exercises/02_http/01_url/index.js b/exercises/02_http/01_url/index.js index 912dc44a..b161dff2 100644 --- a/exercises/02_http/01_url/index.js +++ b/exercises/02_http/01_url/index.js @@ -37,26 +37,11 @@ router.get('/anon', ctx => { // anon case }) -router.get('/books/:index/:index2', ctx => { +router.get('/books/:index', ctx => { const books = ['The Hobbit', 'Alice in Wonderland', 'The Secret Garden','Animal Farm'] const parameters = ctx.params console.log(parameters) - - - if (parameters.index > 3 || parameters.index2 > 3) { - ctx.body = "Number cannot be greater than 3" - } - else if (isNaN(parameters.index) || isNaN(parameters.index2)){ - ctx.body = "A number must be entered" - } - else if (Number.isInteger(parameters.index)){ - ctx.body = "A whole number must be entered" - } - else{ - const title = books[parameters.index] - const title2 = books[parameters.index2] - ctx.body = title + title2 - } + ctx.body = title }) router.get('/name', ctx => ctx.body = JSON.stringify(ctx.query)) @@ -64,19 +49,7 @@ router.get('/name', ctx => ctx.body = JSON.stringify(ctx.query)) router.get('/hello/:name', ctx => { let myname = ctx.params.name if(ctx.query.format === 'upper') myname = myname.toUpperCase() - else if (ctx.query.format === 'lower') myname = myname.toLowerCase() - else if (ctx.query.format === 'reverse'){ - var array1 = myname.split("") - console.log(array1) - var array2 = array1.reverse() - console.log(array2) - var array3 = array1.join("") - console.log(array3) - ctx.body = `hello ${array3}` - //myname = join(Array.reverse(myname.split())) - } - // only applies uppercase if formatting query exists - //ctx.body = `hello ${myname}` + ctx.body = `hello ${myname}` }) router.post('/form', ctx => { From be072e11e706a74b9b04a4827790045f097af2c9 Mon Sep 17 00:00:00 2001 From: Balazs Laszlo Bordas Date: Sun, 2 Feb 2020 02:03:27 +0000 Subject: [PATCH 097/106] solutions added for 02/01/index 1.3.2 TYU --- solutions/02_http/01_url/index.js | 153 ++++++++++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 solutions/02_http/01_url/index.js diff --git a/solutions/02_http/01_url/index.js b/solutions/02_http/01_url/index.js new file mode 100644 index 00000000..01a585c0 --- /dev/null +++ b/solutions/02_http/01_url/index.js @@ -0,0 +1,153 @@ +#!/usr/bin/env node + +/* eslint max-lines-per-function: 0 */ +/* eslint complexity: 0 */ +/* eslint max-len: 0 */ +/* eslint max-lines: 0 */ + +'use strict' + +/* IMPORTING MODULES */ +const Koa = require('koa') +const Router = require('koa-router') +const bodyParser = require('koa-bodyparser') +const staticFiles = require('koa-static') +const js2xmlparser = require('js2xmlparser') + +/* CONFIGURING THE MIDDLEWARE */ +const app = new Koa() +app.use(bodyParser()) +const router = new Router() +app.use(router.routes()) +app.use(staticFiles('./public')) + +/* GLOBAL VARIABLES */ +const port = 8080 +let names = [] + +function hello(ctx) { + ctx.body = 'Hello World' +} + +router.get('/', hello) +// base case + +router.get('/anon', ctx => { + ctx.body = 'Hello World' + // anon case +}) + +router.get('/books/:index/:index2', ctx => { + const books = ['The Hobbit', 'Alice in Wonderland', 'The Secret Garden', '1984'] + const maxIndex = books.length - 1 + const parameters = ctx.params + console.log(parameters) + + if (isNaN(parameters.index) || isNaN(parameters.index2)) { + ctx.status = 400 + ctx.body = 'Two numbers must be entered' + } else if (!Number.isInteger(parseFloat(parameters.index)) + || !Number.isInteger(parseFloat(parameters.index2))) { + ctx.status = 400 + ctx.body = 'Indexes must be integers' + } else if (parameters.index1 > maxIndex || parameters.index2 > maxIndex) { + ctx.status = 400 + ctx.body = `Neither index cannot be greater than ${maxIndex}` + } else { + const title = books[parseInt(parameters.index)] + const title2 = books[parseInt(parameters.index2)] + ctx.body = `${title}\n${title2}` + } +}) + +router.get('/name', ctx => ctx.body = JSON.stringify(ctx.query)) + +router.get('/hello/:name', ctx => { + let myname = ctx.params.name + + // only applies uppercase if formatting query exists + if(ctx.query.format === 'upper') myname = myname.toUpperCase() + + ctx.body = `hello ${myname}` +}) + +router.post('/form', ctx => { + const minLength = 3 + console.log(ctx.request.body) + const body = ctx.request.body + if(body.lastname.length >= minLength) { + names.push( { firstname: body.firstname, lastname: body.lastname } ) + ctx.status = 201 + ctx.body = `your name is ${body.firstname} ${body.lastname}` + } else { + ctx.status = 422 + ctx.body = 'invalid lastname' + } + //ctx.body = 'form processed' +}) + +router.get('/names', ctx => { + let list = names + let search = 'x' + const minLength = 3 + + if(ctx.query.search && ctx.query.search.length >= minLength) { + search = ctx.query.search.toLowerCase() + } else if(ctx.headers.search && ctx.headers.search.length >= minLength) { + search = ctx.headers.search.toLowerCase() + } + + console.log(`Accept: ${ctx.get('Accept')}`) + + if(search.length >= minLength) list = names.filter( val => `${val.firstname} ${val.lastname}`.toLowerCase().includes(search)) + if(list.length === 0) { + ctx.status = 404 + ctx.body = 'No Names found' + return + } + switch (ctx.accepts('application/json', 'application/xml', 'text/html', 'text/html', 'text/csv')) { + case 'text/csv': + ctx.set('content-type', 'text/csv') + ctx.body = formatCSV(list) + break + case 'text/html': + ctx.set('content-type', 'text/html') + ctx.body = formatHTML(list) + break + case 'application/json': + ctx.set('content-type', 'application/json') + ctx.body = {names: list} + break + case 'application/xml': + ctx.set('content-type', 'application/xml') + ctx.body = js2xmlparser.parse('people', list) + break + default: + ctx.status = 406 + ctx.body = 'unsupported MIME type' + break + } +}) + +router.del('/names', ctx => { + names = [] + ctx.status = 204 + ctx.body = 'all names deleted' +}) + +function formatCSV(list) { + let data = '' + for(const name of list) data += `${name.firstname}, ${name.lastname}\n` + return data +} + +function formatHTML(list) { + let data = '' + for(const name of list) { + data += `\n` + } + data += '
    ${name.firstname}${name.lastname}
    ' + return data +} + +module.exports = app.listen(port, () => console.log(`listening on port ${port}`)) From 034f60475950b3d312ecbfe5ee586b1823247663 Mon Sep 17 00:00:00 2001 From: Balazs Bordas Date: Sat, 27 Jun 2020 01:24:37 +0200 Subject: [PATCH 098/106] fine tuned 02_HTTP.md, added solutions for 02_HTTP --- 02 HTTP.md | 27 +++++++++++++-------------- solutions/02_http/01_url/index.js | 15 ++++++++++----- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/02 HTTP.md b/02 HTTP.md index b74829d0..4c8e91e1 100644 --- a/02 HTTP.md +++ b/02 HTTP.md @@ -115,7 +115,7 @@ Start the server and access the `/books/1` route. What is displayed in the web b 4. This index value is used to look up the title of the book in the array, the book title is stored in a constant. 5. Finally the book title is sent to the web browser. -#### 1.3.1 Core Knowledge +#### 1.2.1 Core Knowledge JavaScript objects comprise one or more **property-value pairs**. There is an example below to illustrate this. @@ -153,7 +153,7 @@ delete name.first delete name['last name'] ``` -#### 1.3.2 Test Your Understanding +#### 1.2.2 Test Your Understanding In this section you will learn about a number of JavaScript functions. In each case you will be provided with a link to the documentation. @@ -163,13 +163,13 @@ In this section you will learn about a number of JavaScript functions. In each c 2. Make sure this is triggered by restarting the server and accessing this by passing a second parameter. 3. Modify the script to print out both book titles. 3. Next you need to add some validation to make sure the script does not crash (note that if you are using GoormIDE you will not be able to test it): - 1. If the index in the URL exceeds to number of books in the array you get an error. Insert an [`if...else` statement](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/if...else) that sends a suitable message to the browser if the index number in the URL is too high. - 2. The index must be a number. Use the [`isNaN()` function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN) to check and send a suitable message to the browser if it is not. if it is, use the [`parseInt()` function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt) to convert it to a number. - 3. The number needs to be a whole number (integer). All JavaScript numbers are objects and have a number of useful functions. Use the [`Number.isInteger()` function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger) to check it is indeed an integer. Send a suitable message to the browser if it is not. + 1. If the index in the URL exceeds the number of books in the array, you get an error. Insert an [`if...else` statement](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/if...else) that sends a suitable message to the browser if the index number in the URL is too high. + 2. The index must be a number. Use the [`isNaN()` function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN) to check and send a suitable message to the browser if it is not. if it is, use the [`parseFloat()` function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat) to convert it to a number. + 3. The number needs to be a whole number (integer). All JavaScript numbers are objects and have a number of useful functions. Use the [`Number.isInteger()` function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger) to check it is indeed an integer. Send a suitable message to the browser if it is not. You can convert it to an integer using the [`parseInt()` function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt). ### 1.3 URL Query Strings -Whilst URL parameters are used to define unique URLS to identify online resources, sometimes we want to be able to pass additional information and this is done through the use of **query strings**. +Whilst URL parameters are used to define unique URLs to identify online resources, sometimes we want to be able to pass additional information and this is done through the use of **query strings**. 1. Restart the server and access the `/hello/John%20Doe` route. 1. Since spaces are not permitted in a URL we have to replace spaces with special codes. This is known as **URL Encoding** and there are specific [codes](https://www.degraeve.com/reference/urlencoding.php) to use. @@ -177,7 +177,7 @@ Whilst URL parameters are used to define unique URLS to identify online resource 2. Now change the URL to `/hello/John%20Doe?format=upper`. 1. Notice that the same data has been displayed just the format has changed. -Open the `index.js` file. The route is between lines 48-52. +Open the `index.js` file. The route is between lines 50-57. 1. Notice that the query string(s) are not part of the route. 2. The query string comprises name-value pairs. @@ -203,12 +203,11 @@ Headers allow for additional information to be passed: Make sure the server is still running and use the [Chrome web browser](https://www.google.com/chrome/) to access the root URL `/`. -1. Open the [Chrome Developer Tools](https://developers.google.com/web/tools/chrome-devtools/) by clicking on the _customise and control Google Chrome tools_ button (the three dots to the extreme right of the address bar). -2. Choose **More tools** from the menu and then **Developer tools** from the submenu. -3. Locate the **Network** tab in the Chrome developer tools. -4. Reload the web page. (Press F5) -5. You should now see the resource sent in the HTTP response together with some data dealing with response times. -6. Click on the file name (as shown) to display the HTTP headers. +1. Open the [Chrome Developer Tools](https://developers.google.com/web/tools/chrome-devtools/) by clicking on the _Customise and control Chrome_ button (the three dots to the extreme right of the address bar), choosing **More tools** from the menu and then **Developer tools** from the submenu. +2. Locate the **Network** tab in the Chrome developer tools. +3. Reload the web page. (Press F5) +4. You should now see the resource sent in the HTTP response together with some data dealing with response times. +5. Click on the file name (as shown) to display the HTTP headers. ![how to show the headers in Chrome](exercises/.images/chrome_02.png) @@ -234,7 +233,7 @@ In addition to the **Response Body** (the information in the web browser window) 2. The `Date` header is a string representing the date and time the response was sent. 3. The `ETag` header contains a hash of the contents and is used to see if the content has changed since the last request. -### 1.1 Test Your Knowledge +#### 1.4.1 Test Your Knowledge As part of the worksheets you will be given some exercises to carry out to make sure you fully understand the content covered. diff --git a/solutions/02_http/01_url/index.js b/solutions/02_http/01_url/index.js index 01a585c0..e26c5ff1 100644 --- a/solutions/02_http/01_url/index.js +++ b/solutions/02_http/01_url/index.js @@ -45,14 +45,14 @@ router.get('/books/:index/:index2', ctx => { if (isNaN(parameters.index) || isNaN(parameters.index2)) { ctx.status = 400 - ctx.body = 'Two numbers must be entered' + ctx.body = `Indexes must be numbers` } else if (!Number.isInteger(parseFloat(parameters.index)) || !Number.isInteger(parseFloat(parameters.index2))) { ctx.status = 400 - ctx.body = 'Indexes must be integers' - } else if (parameters.index1 > maxIndex || parameters.index2 > maxIndex) { + ctx.body = `Indexes must be integers` + } else if (parameters.index > maxIndex || parameters.index2 > maxIndex){ ctx.status = 400 - ctx.body = `Neither index cannot be greater than ${maxIndex}` + ctx.body = `Neither index can be greater than ${maxIndex}` } else { const title = books[parseInt(parameters.index)] const title2 = books[parseInt(parameters.index2)] @@ -66,7 +66,12 @@ router.get('/hello/:name', ctx => { let myname = ctx.params.name // only applies uppercase if formatting query exists - if(ctx.query.format === 'upper') myname = myname.toUpperCase() + if (ctx.query.format === 'upper') myname = myname.toUpperCase() + if (ctx.query.format === 'upper') myname = myname.toLowerCase() + + if (ctx.query.reverse === 'true') { + myname = myname.split('').reverse().join('') + } ctx.body = `hello ${myname}` }) From 77a9bdf7b9f708d5be681acd24caab9fcc5a2af3 Mon Sep 17 00:00:00 2001 From: Balazs Bordas Date: Wed, 1 Jul 2020 15:23:04 +0200 Subject: [PATCH 099/106] moved npm chapter to 01_Setup.md --- 01 Setup.md | 40 +++++++++++++++++++++++++++++---- 02 HTTP.md | 28 ++--------------------- exercises/01_setup/package.json | 18 +++++++++++++++ 3 files changed, 56 insertions(+), 30 deletions(-) create mode 100644 exercises/01_setup/package.json diff --git a/01 Setup.md b/01 Setup.md index 7f94b616..065039bd 100644 --- a/01 Setup.md +++ b/01 Setup.md @@ -141,14 +141,46 @@ $ node index.js Now we have the server up and running so the final task is to view the web page using the web browser. Simply open the Chrome browser and navigate to localhost:8080 where you should see a message. If this works you are ready to start the lab exercises. -## 5 Pushing the Changes to GitHub +## 5 Using npm and its package.json + +**Have a look at your `package.json` file and understand its contents** +- When you are starting a new _project_, **you have to create this yourself**: + 1. Use the `npm init` command to create the package.json file + - You can leave all the options default, just leave them empty and keep pressing enter + - Alternatively you can run `npm init --yes`, it will simply leave everything default + 2. Install the dependencies for the first time using the `-S` _switch_ with `npm install` + - e.g.: `npm install -S koa koa-bodyparser` + - This would add something like this to the `package.json` file: + ```json + "dependencies": { + "koa": "^2.11.0", + "koa-bodyparser": "^4.2.1" + } + ``` + - When you next run `npm install -S `, the given package's _newest version_ will be simply added to the list, or in case of a new version for a _previously listed_ dependency, the _version number_ will be updated + - This `-S` is just a short version of the `--save` _switch_ + - **You can use the alternative `--save-dev` switch to install and save them as _development dependencies_** + - Something that you wouldn't want to deploy, but is necessary for development + - E.g. we will use `jest` for testing, and `eslint` for linting during the development phase, but these shouldn't be required to be installed during deployment + - You are done with adding the dependencies, now simply use `npm install` to install all of them at once! + - If you don't want to install development dependencies, use `npm install --production` + 3. This `package.json` file is also useful to store _scripts_: + - Look at the following line: ` "start": "nodemon index.js"` + - This lets us simply type `npm start` in the terminal to start our application via _nodemon_ + - Nodemon is a great tool that restarts the application every time we save a file in the given folder, so we don't actually have to manually stop and restart it after every modification. + + + + + +## 6 Pushing the Changes to GitHub As you work through the lab activities two things are likely to happen: 1. You make changes to the code that you want to push to the forked copy of your repository. 2. You will need to pull any bug fixes from the original repository. -### 5.1 Configuring the Repository +### 6.1 Configuring the Repository Before you start interacting with the GitHub server you need to configure the local repository. Open the Bash Shell and run the following commands: @@ -159,7 +191,7 @@ git config user.email 'doej@coventry.ac.uk' remember to replace the values with you own name and your university email (but without the uni part). -### 5.2 Pushing Changes +### 6.2 Pushing Changes **NOTE: You only need to carry out this step when you have make changes to the code! This will normally need to take place each time you complete a "Test Your Understanding" section.** @@ -177,7 +209,7 @@ Now you should click on the **Sync** icon (shown below) to push the new commit u At this point you should be able to refresh your GitHub repository page to see the changes. -### 5.3 Pulling from Upstream +### 6.3 Pulling from Upstream As new materials and resources are added to the original repository (and bugs fixed) you will want to merge these into your forked repository. Before you can do this you will need to add a link to the upstream repository. Open a bash shell: diff --git a/02 HTTP.md b/02 HTTP.md index 4c8e91e1..39e3792d 100644 --- a/02 HTTP.md +++ b/02 HTTP.md @@ -55,32 +55,8 @@ Study the `index.js` script in the `exercises/02_http/01_url/` directory. 5. `js2xmlparser` - **You can install all these dependencies by simply running 'npm install' in the terminal.** - This command installs all the documented dependencies from the `package.json` file, which is already preconfigured in this case. - - **Have a look at your `package.json` file and understand its contents** - - When you are creating a new _project_, **you have to do this yourself**: - 1. Use the `npm init` command to create the package.json file - - You can leave all the options default, just leave them empty and keep pressing enter - - Alternatively you can run `npm init --yes`, it will simply leave everything default - 2. Install the dependencies for the first time using the `-S` _switch_ with `npm install` - - e.g.: `npm install -S koa koa-bodyparser` - - This would add something like this to the `package.json` file: - ```json - "dependencies": { - "koa": "^2.11.0", - "koa-bodyparser": "^4.2.1" - } - ``` - - When you next run `npm install -S `, the given package's _newest version_ will be simply added to the list, or in case of a new version for a _previously listed_ dependency, the _version number_ will be updated - - This `-S` is just a short version of the `--save` _switch_ - - **You can use the alternative `--save-dev` switch to install and save them as _development dependencies_** - - Something that you wouldn't want to deploy, but is necessary for development - - E.g. we will use `jest` for testing, and `eslint` for linting during the development phase, but these shouldn't be required to be installed during deployment - - You are done with adding the dependencies, now simply use `npm install` to install all of them at once! - - If you don't want to install development dependencies, use `npm install --production` - 3. This `package.json` file is also useful to store _scripts_: - - Look at the following line: ` "start": "nodemon index.js"` - - This lets us simply type `npm start` in the terminal to start our application via _nodemon_ - - Nodemon is a great tool that restarts the application every time we save a file in the given folder, so we don't actually have to manually stop and restart it after every modification. - + - Refer to the `01_Setup.md` document's `Using npm and its package.json` chapter for more information + 2. The first line is the _shebang_, it tells the script what application is needed to run it. 3. Lines 11-15 import the module packages we need for our script to work. Koa is a modular framework, on its own it does very little but depends on plugins (middleware) for its functionality. 4. Lines 18-22 are where we configure the koa _middleware_. diff --git a/exercises/01_setup/package.json b/exercises/01_setup/package.json new file mode 100644 index 00000000..1d289bea --- /dev/null +++ b/exercises/01_setup/package.json @@ -0,0 +1,18 @@ +{ + "name": "01_setup", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "start": "nodemon index.js", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "koa": "^2.13.0" + }, + "devDependencies": { + "nodemon": "^2.0.4" + } +} From f68c14cd6cfdd0520f2be68690a232e6a03d31d7 Mon Sep 17 00:00:00 2001 From: Balazs Bordas Date: Mon, 13 Jul 2020 18:58:55 +0200 Subject: [PATCH 100/106] updated and corrected the content in 03_HTML.md and exercises/03_HTML/ --- 03 HTML5.md | 34 ++++---- exercises/03_html/02_lists/commodore64.html | 10 --- exercises/03_html/02_lists/computers80.html | 11 +-- .../03_hypermedia/views/commodore64.html | 14 ++-- .../03_html/03_hypermedia/views/index.html | 23 +++--- exercises/03_html/04_tables/comparison.html | 6 +- .../03_html/05_semantic/public/java_cafe.png | Bin 0 -> 116805 bytes .../05_semantic/public/waiting_room.jpg | Bin 8561 -> 0 bytes exercises/03_html/05_semantic/views/cafe.html | 45 ++++++++--- .../03_html/05_semantic/views/review.html | 75 ++++++++++++------ exercises/03_html/template.html | 18 ++--- 11 files changed, 135 insertions(+), 101 deletions(-) delete mode 100644 exercises/03_html/02_lists/commodore64.html create mode 100644 exercises/03_html/05_semantic/public/java_cafe.png delete mode 100644 exercises/03_html/05_semantic/public/waiting_room.jpg diff --git a/03 HTML5.md b/03 HTML5.md index 32ba6bae..ce5419c8 100644 --- a/03 HTML5.md +++ b/03 HTML5.md @@ -58,7 +58,7 @@ See what happens, when you change the list type to ordered list (`ol`). Next, try a definition list. Add the following piece of code at the very end of the document, right before the `` end tag: ```html -

    There are two types of memory:

    +

    There are two types of memory:

    - -
    +

    Disclaimer: All opinions in this page reflect the views of their author(s), not the organization.

    - - - + \ No newline at end of file diff --git a/exercises/04_css/01_formatting/views/hello-world.html b/exercises/04_css/01_formatting/views/hello-world.html deleted file mode 100644 index 32dc15b0..00000000 --- a/exercises/04_css/01_formatting/views/hello-world.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - Document - - - - - - - - - - -
    - -
      -
    • -
    • -
    • -
    • -
    • -
    \ No newline at end of file diff --git a/exercises/04_css/01_formatting/views/hello.html b/exercises/04_css/01_formatting/views/hello.html index de2ff46d..cce2dd6e 100644 --- a/exercises/04_css/01_formatting/views/hello.html +++ b/exercises/04_css/01_formatting/views/hello.html @@ -1,16 +1,15 @@ - - + - - - Let's see CSS at Work - - - - - -

    Hello CSS!

    -

    Use this file to see how CSS can be used to change the appearance of a web page.

    - + + Let's see CSS at Work + + + + + + +

    Hello CSS!

    +

    Use this file to see how CSS can be used to change the appearance of a web page.

    + \ No newline at end of file diff --git a/exercises/04_css/01_formatting/views/selectors.html b/exercises/04_css/01_formatting/views/selectors.html index 771ea37f..c06c258b 100644 --- a/exercises/04_css/01_formatting/views/selectors.html +++ b/exercises/04_css/01_formatting/views/selectors.html @@ -1,9 +1,10 @@ - + + Selectors - - + +

    Classes and identifiers.

    @@ -17,6 +18,5 @@

    Classes and identifiers.

    This paragraph should be uniquely formatted. It is assigned an identifier.

    This paragraph is in 'alert' class, too.

    - \ No newline at end of file diff --git a/exercises/04_css/01_formatting/views/targets.html b/exercises/04_css/01_formatting/views/targets.html index 5738cf46..001e9655 100644 --- a/exercises/04_css/01_formatting/views/targets.html +++ b/exercises/04_css/01_formatting/views/targets.html @@ -1,40 +1,35 @@ - + + Selecting elements - - + + -

    Element selection demo

    -

    The sources of energy are:

    1. protein
    2. carbohydrates
    3. fat
    -

    Sources of carbohydrates:

    • Fruits and berries
    • Wheat and pasta
    • Sweet products
        -
      • Candies
          -
        • Jelly beans
        • -
        • Irish toffee
        • -
        • Fruit drops
        • - -
      • - +
      • Candies +
          +
        • Jelly beans
        • +
        • Irish toffee
        • +
        • Fruit drops
        • +
        +
      • Pastries
    • -
    - - \ No newline at end of file diff --git a/exercises/04_css/02_layout/public/css/floatstyles.css b/exercises/04_css/02_layout/public/css/floatstyles.css index 92edd7b0..12f64d84 100644 --- a/exercises/04_css/02_layout/public/css/floatstyles.css +++ b/exercises/04_css/02_layout/public/css/floatstyles.css @@ -1,10 +1,4 @@ - body { - font-family: Arial, Verdana, sans-serif; + font-family: Arial, Helvetica, sans-serif; margin-left: 200px; -} - - - - - +} \ No newline at end of file diff --git a/exercises/04_css/02_layout/public/css/menustyles.css b/exercises/04_css/02_layout/public/css/menustyles.css index 78aadc59..c90a2fcc 100644 --- a/exercises/04_css/02_layout/public/css/menustyles.css +++ b/exercises/04_css/02_layout/public/css/menustyles.css @@ -1,7 +1,5 @@ - - body { - font-family: Arial, Verdana, sans-serif; + font-family: Arial, Helvetica, sans-serif; } nav ul { diff --git a/exercises/04_css/02_layout/views/boxmodel.html b/exercises/04_css/02_layout/views/boxmodel.html index 5f488c4e..93224c08 100644 --- a/exercises/04_css/02_layout/views/boxmodel.html +++ b/exercises/04_css/02_layout/views/boxmodel.html @@ -1,27 +1,25 @@ - + + Illustration of CSS box model - + +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce in malesuada libero. Etiam consectetur enim enim, id porta neque facilisis non. Proin consequat a sapien eu consectetur. Quisque bibendum lorem tortor, nec facilisis risus venenatis vel. Nullam et nunc varius, elementum mi vitae, mattis lacus. Mauris et lacinia magna. Nam faucibus purus ac felis vulputate suscipit. Sed vitae est egestas, euismod neque eu, molestie leo. +

    + +

    + Fusce viverra enim ante, vel dapibus metus maximus et. Proin ac metus justo. Donec nec scelerisque ante. Vestibulum a lectus nisl. Curabitur dictum a purus non sagittis. Cras semper ipsum ut eros lobortis vestibulum. Aenean eu urna nulla. Quisque mattis ex nec odio sollicitudin, a pulvinar nibh faucibus. Nullam quis rutrum purus, nec condimentum est. Aenean sagittis feugiat ante, sit amet dignissim elit vulputate ac. Aenean nec erat blandit, posuere orci malesuada, aliquam sem. Ut rutrum neque nec sapien consectetur dignissim. +

    + +

    + Nam odio lectus, accumsan vitae dignissim vitae, condimentum eu ipsum. Ut tristique vel leo at condimentum. Quisque tincidunt et tellus ut feugiat. Proin consectetur nulla eu fringilla cursus. Vivamus mi tellus, consectetur vitae commodo vitae, placerat sit amet nisl. Vestibulum et porttitor est. Cras varius quam a enim commodo consequat. Ut egestas dapibus est, a varius enim tincidunt ac. Quisque scelerisque ante quis porta mollis. Mauris nec maximus orci. Nunc ac justo ut nisl euismod vehicula in lacinia ante. Nulla sollicitudin nisi posuere, volutpat lorem nec, sagittis purus. Duis suscipit vulputate purus ac vulputate. Pellentesque suscipit ornare mi, et finibus tortor rutrum eget. +

    - -

    -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce in malesuada libero. Etiam consectetur enim enim, id porta neque facilisis non. Proin consequat a sapien eu consectetur. Quisque bibendum lorem tortor, nec facilisis risus venenatis vel. Nullam et nunc varius, elementum mi vitae, mattis lacus. Mauris et lacinia magna. Nam faucibus purus ac felis vulputate suscipit. Sed vitae est egestas, euismod neque eu, molestie leo. -

    - -

    -Fusce viverra enim ante, vel dapibus metus maximus et. Proin ac metus justo. Donec nec scelerisque ante. Vestibulum a lectus nisl. Curabitur dictum a purus non sagittis. Cras semper ipsum ut eros lobortis vestibulum. Aenean eu urna nulla. Quisque mattis ex nec odio sollicitudin, a pulvinar nibh faucibus. Nullam quis rutrum purus, nec condimentum est. Aenean sagittis feugiat ante, sit amet dignissim elit vulputate ac. Aenean nec erat blandit, posuere orci malesuada, aliquam sem. Ut rutrum neque nec sapien consectetur dignissim. -

    - -

    -Nam odio lectus, accumsan vitae dignissim vitae, condimentum eu ipsum. Ut tristique vel leo at condimentum. Quisque tincidunt et tellus ut feugiat. Proin consectetur nulla eu fringilla cursus. Vivamus mi tellus, consectetur vitae commodo vitae, placerat sit amet nisl. Vestibulum et porttitor est. Cras varius quam a enim commodo consequat. Ut egestas dapibus est, a varius enim tincidunt ac. Quisque scelerisque ante quis porta mollis. Mauris nec maximus orci. Nunc ac justo ut nisl euismod vehicula in lacinia ante. Nulla sollicitudin nisi posuere, volutpat lorem nec, sagittis purus. Duis suscipit vulputate purus ac vulputate. Pellentesque suscipit ornare mi, et finibus tortor rutrum eget. -

    - -

    -In at ipsum id ligula vehicula porttitor. Suspendisse in risus vitae nunc lacinia lacinia. Cras finibus diam odio, vel posuere justo vestibulum tempor. Integer sed pharetra lacus. Integer elit mauris, vehicula ut tortor ut, vehicula iaculis odio. Integer tincidunt tincidunt quam, a laoreet sem mollis porta. Sed consequat sagittis urna quis aliquet. Proin vitae orci ultrices nisi rutrum blandit. -

    - +

    + In at ipsum id ligula vehicula porttitor. Suspendisse in risus vitae nunc lacinia lacinia. Cras finibus diam odio, vel posuere justo vestibulum tempor. Integer sed pharetra lacus. Integer elit mauris, vehicula ut tortor ut, vehicula iaculis odio. Integer tincidunt tincidunt quam, a laoreet sem mollis porta. Sed consequat sagittis urna quis aliquet. Proin vitae orci ultrices nisi rutrum blandit. +

    \ No newline at end of file diff --git a/exercises/04_css/02_layout/views/columns.html b/exercises/04_css/02_layout/views/columns.html index 7f84098d..012ff8cc 100644 --- a/exercises/04_css/02_layout/views/columns.html +++ b/exercises/04_css/02_layout/views/columns.html @@ -1,61 +1,59 @@ - + + Test file for CSS formatting - + + -

    Text to be formatted in columns

    - - -

    -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris efficitur nisi nulla, condimentum suscipit tellus ullamcorper in. In vulputate leo vitae orci lacinia, at feugiat leo ullamcorper. Morbi malesuada consectetur dolor, et luctus massa lacinia id. Ut interdum egestas luctus. Vivamus ac orci tristique, mattis dui ut, auctor leo. Nulla commodo, ante id blandit tempor, diam ante pellentesque lectus, ac iaculis enim tortor a mi. Morbi orci quam, dictum id nibh eget, mollis ultricies erat. Pellentesque porttitor leo ut laoreet convallis. Praesent porttitor sapien nec lacus ullamcorper, sed euismod risus sagittis. Curabitur non ultricies diam. Suspendisse ac eros in ante fringilla interdum et nec justo. Proin ac massa eleifend, tincidunt purus sit amet, hendrerit leo. Fusce ac nisl tempus, pellentesque lacus eu, mattis quam. Quisque et erat tortor. Sed at egestas erat. -

    - -

    -Cras pharetra feugiat orci, sed aliquam felis condimentum vel. Quisque id nunc nulla. Aliquam efficitur sagittis pulvinar. In aliquam ac lacus et consequat. In dapibus condimentum vulputate. Aliquam dictum ut sapien nec condimentum. Vestibulum non facilisis nisi. Donec dictum risus et est rutrum consectetur. Integer nec aliquet ex, egestas convallis velit. Sed egestas dolor id suscipit imperdiet. Vestibulum malesuada tincidunt urna, eu rutrum orci luctus ac. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Praesent iaculis aliquam elit eu porttitor. Phasellus tincidunt massa id sem placerat, nec cursus ipsum porta. Integer diam magna, consequat eget sodales id, placerat in ante. Nam et enim at ipsum sodales commodo. -

    - -

    -Curabitur faucibus elit in sapien dapibus, vel tristique ligula lacinia. Morbi non ex dapibus, viverra mi eget, efficitur dui. Fusce hendrerit turpis eget justo consequat, in tempus mauris vestibulum. Sed sed rutrum odio. Curabitur eget ipsum imperdiet, accumsan lectus vitae, fermentum justo. Integer quam ex, rhoncus sit amet sem ut, tincidunt fermentum eros. In hac habitasse platea dictumst. Duis posuere lectus nec ex suscipit accumsan. Vivamus lectus ante, porttitor a semper id, ullamcorper et erat. Phasellus sed velit ac risus ultrices porttitor non vel neque. Proin porttitor turpis vitae pretium vehicula. Proin pellentesque urna at iaculis tristique. -

    - -

    -Fusce suscipit, ex ac pretium pretium, magna mauris condimentum nisi, id porta sapien est ac turpis. Nulla sit amet blandit metus. Morbi a arcu facilisis, consequat dui vitae, dapibus lacus. Etiam vestibulum nisl consequat enim condimentum lobortis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum elementum ac metus ac aliquam. Nulla quis massa venenatis diam convallis sodales. Duis quis lobortis nibh. Sed dolor justo, condimentum non orci sit amet, efficitur maximus est. Sed gravida vulputate condimentum. Maecenas libero ex, condimentum quis blandit quis, tincidunt vitae risus. Morbi ultricies eu arcu nec faucibus. -

    - -

    -Donec a vehicula neque, ac efficitur augue. In malesuada laoreet fringilla. Proin est massa, mattis at iaculis eu, auctor eu nibh. Sed tempus, felis eget dapibus commodo, enim neque ultricies ex, nec convallis dui nisl quis neque. Suspendisse potenti. Curabitur ac finibus ipsum, sit amet egestas felis. Sed cursus, est faucibus tempor lobortis, nisl ante blandit lectus, sit amet tincidunt justo tortor eget elit. Aliquam erat volutpat. Aenean enim nisl, tincidunt eleifend nisl ut, egestas laoreet massa. -

    - -

    -Sed vitae venenatis diam. Nulla consectetur nisl justo, vel rutrum diam volutpat eu. Proin dictum mi eu elementum gravida. Nunc tristique, lorem sit amet placerat ornare, libero tortor iaculis nibh, non accumsan turpis nulla nec elit. Nunc sed dui lorem. Quisque velit sem, sagittis eget mauris a, bibendum viverra ligula. Nam posuere tincidunt leo. Aenean a volutpat lacus. Maecenas condimentum, purus sit amet accumsan varius, arcu sem fringilla enim, nec sodales urna odio eu ante. Morbi ut suscipit mi. Ut rutrum urna purus, sit amet tristique diam mattis vel. Nunc pharetra, risus ac rutrum consequat, arcu quam dignissim nibh, eget pretium enim metus cursus felis. Pellentesque purus dui, imperdiet at nulla sed, accumsan posuere diam. Vestibulum varius condimentum ex, vulputate tempus mauris congue id. Sed ullamcorper mauris sed diam convallis dapibus. Vestibulum dictum sit amet mauris eu hendrerit. -

    - -

    -Vestibulum condimentum dui ac mi accumsan, eu interdum augue sollicitudin. Donec rutrum iaculis turpis et ultrices. Interdum et malesuada fames ac ante ipsum primis in faucibus. Vestibulum consequat feugiat elit, sed malesuada tortor tristique eget. Quisque et elementum lacus. Sed nec tincidunt nisl. Curabitur tincidunt lorem a dolor tincidunt mattis. Nullam vehicula vulputate enim, eu lacinia ex imperdiet semper. Cras sollicitudin magna quis orci lacinia facilisis. Vivamus mauris odio, pharetra a est et, tempus congue purus. Mauris urna felis, ornare quis sem blandit, scelerisque molestie nunc. Sed pulvinar sagittis nulla sit amet dapibus. Nunc hendrerit, metus vel rutrum pharetra, tellus magna accumsan felis, quis venenatis dolor dui vel leo. Aliquam erat volutpat. Sed egestas in lorem id malesuada. -

    - -

    -Cras risus sem, euismod nec porta sagittis, ornare vitae orci. Sed tristique, neque sit amet interdum eleifend, massa augue varius magna, sed tempor neque risus et lacus. Curabitur a ullamcorper lorem, vel gravida eros. Phasellus vitae convallis diam. Proin tempor, diam nec congue aliquet, libero dolor rhoncus magna, at dapibus quam purus nec orci. Proin sed vehicula tortor, id consequat ligula. Maecenas nunc magna, rutrum non malesuada id, facilisis eget tortor. Curabitur quis lacus non lectus interdum dapibus. Donec interdum varius tempus. Nunc convallis suscipit placerat. Integer facilisis sapien ut risus placerat, id vehicula neque pretium. Ut non bibendum risus. -

    - -

    -Vivamus sagittis augue turpis, quis convallis risus sagittis eu. Donec suscipit pharetra elit, non faucibus purus accumsan a. Suspendisse at tincidunt elit, vel aliquam felis. Curabitur pretium, quam nec volutpat bibendum, purus nisl rhoncus nibh, ut posuere ex odio non orci. Mauris eget lobortis nisl. Mauris sapien justo, tristique vulputate velit mollis, convallis mollis magna. In ante leo, pretium eget nibh at, malesuada scelerisque erat. Vestibulum finibus ultrices sollicitudin. Vivamus odio ex, vestibulum nec commodo sed, sagittis in orci. Donec aliquam arcu varius faucibus mattis. Mauris eleifend eros at volutpat auctor. Aenean vel ligula at velit sodales consectetur in a massa. In vitae rhoncus felis, non fringilla lorem. Maecenas vel pharetra dui, vel sodales est. In sodales nulla orci, id consectetur felis malesuada at. -

    - -

    -Donec elementum, arcu quis maximus congue, neque ante convallis leo, quis cursus enim augue vitae justo. Nam mattis sed arcu eget ornare. Integer dignissim dui nec egestas tristique. Aliquam erat volutpat. Cras eget tortor diam. In hac habitasse platea dictumst. Integer tempus egestas felis eget mollis. Nam a neque accumsan erat auctor condimentum. Etiam quis venenatis lectus. Praesent sed lacus in massa lacinia tempor. Pellentesque laoreet metus vel augue gravida, in iaculis velit ultricies. Donec porta faucibus volutpat. Vestibulum in risus velit. -

    - -

    -Aenean lacinia justo efficitur tellus mattis, ac pellentesque elit finibus. Curabitur et diam turpis. Curabitur lobortis nec ipsum nec eleifend. Proin pulvinar, neque eget consectetur ornare, sem eros posuere neque, vel mattis dui risus vitae nisl. Nulla non sollicitudin lacus, sed faucibus ligula. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In fermentum eget elit sed fringilla. Curabitur viverra justo diam, quis vehicula turpis tristique quis. Proin ultrices elit risus. Praesent scelerisque metus ut augue suscipit, id pretium enim consectetur. Ut pulvinar malesuada rutrum. -

    - -

    -Nunc vel quam consequat, eleifend lectus porttitor, fringilla sapien. Integer id semper arcu, ut luctus nulla. Duis id risus ac erat mollis auctor sed in leo. Mauris dignissim ligula at nulla gravida tempor. Integer fringilla venenatis accumsan. In semper facilisis nisi sit amet commodo. Nulla dapibus nunc eu hendrerit suscipit. -

    - +

    Text to be formatted in columns

    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris efficitur nisi nulla, condimentum suscipit tellus ullamcorper in. In vulputate leo vitae orci lacinia, at feugiat leo ullamcorper. Morbi malesuada consectetur dolor, et luctus massa lacinia id. Ut interdum egestas luctus. Vivamus ac orci tristique, mattis dui ut, auctor leo. Nulla commodo, ante id blandit tempor, diam ante pellentesque lectus, ac iaculis enim tortor a mi. Morbi orci quam, dictum id nibh eget, mollis ultricies erat. Pellentesque porttitor leo ut laoreet convallis. Praesent porttitor sapien nec lacus ullamcorper, sed euismod risus sagittis. Curabitur non ultricies diam. Suspendisse ac eros in ante fringilla interdum et nec justo. Proin ac massa eleifend, tincidunt purus sit amet, hendrerit leo. Fusce ac nisl tempus, pellentesque lacus eu, mattis quam. Quisque et erat tortor. Sed at egestas erat. +

    + +

    + Cras pharetra feugiat orci, sed aliquam felis condimentum vel. Quisque id nunc nulla. Aliquam efficitur sagittis pulvinar. In aliquam ac lacus et consequat. In dapibus condimentum vulputate. Aliquam dictum ut sapien nec condimentum. Vestibulum non facilisis nisi. Donec dictum risus et est rutrum consectetur. Integer nec aliquet ex, egestas convallis velit. Sed egestas dolor id suscipit imperdiet. Vestibulum malesuada tincidunt urna, eu rutrum orci luctus ac. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Praesent iaculis aliquam elit eu porttitor. Phasellus tincidunt massa id sem placerat, nec cursus ipsum porta. Integer diam magna, consequat eget sodales id, placerat in ante. Nam et enim at ipsum sodales commodo. +

    + +

    + Curabitur faucibus elit in sapien dapibus, vel tristique ligula lacinia. Morbi non ex dapibus, viverra mi eget, efficitur dui. Fusce hendrerit turpis eget justo consequat, in tempus mauris vestibulum. Sed sed rutrum odio. Curabitur eget ipsum imperdiet, accumsan lectus vitae, fermentum justo. Integer quam ex, rhoncus sit amet sem ut, tincidunt fermentum eros. In hac habitasse platea dictumst. Duis posuere lectus nec ex suscipit accumsan. Vivamus lectus ante, porttitor a semper id, ullamcorper et erat. Phasellus sed velit ac risus ultrices porttitor non vel neque. Proin porttitor turpis vitae pretium vehicula. Proin pellentesque urna at iaculis tristique. +

    + +

    + Fusce suscipit, ex ac pretium pretium, magna mauris condimentum nisi, id porta sapien est ac turpis. Nulla sit amet blandit metus. Morbi a arcu facilisis, consequat dui vitae, dapibus lacus. Etiam vestibulum nisl consequat enim condimentum lobortis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum elementum ac metus ac aliquam. Nulla quis massa venenatis diam convallis sodales. Duis quis lobortis nibh. Sed dolor justo, condimentum non orci sit amet, efficitur maximus est. Sed gravida vulputate condimentum. Maecenas libero ex, condimentum quis blandit quis, tincidunt vitae risus. Morbi ultricies eu arcu nec faucibus. +

    + +

    + Donec a vehicula neque, ac efficitur augue. In malesuada laoreet fringilla. Proin est massa, mattis at iaculis eu, auctor eu nibh. Sed tempus, felis eget dapibus commodo, enim neque ultricies ex, nec convallis dui nisl quis neque. Suspendisse potenti. Curabitur ac finibus ipsum, sit amet egestas felis. Sed cursus, est faucibus tempor lobortis, nisl ante blandit lectus, sit amet tincidunt justo tortor eget elit. Aliquam erat volutpat. Aenean enim nisl, tincidunt eleifend nisl ut, egestas laoreet massa. +

    + +

    + Sed vitae venenatis diam. Nulla consectetur nisl justo, vel rutrum diam volutpat eu. Proin dictum mi eu elementum gravida. Nunc tristique, lorem sit amet placerat ornare, libero tortor iaculis nibh, non accumsan turpis nulla nec elit. Nunc sed dui lorem. Quisque velit sem, sagittis eget mauris a, bibendum viverra ligula. Nam posuere tincidunt leo. Aenean a volutpat lacus. Maecenas condimentum, purus sit amet accumsan varius, arcu sem fringilla enim, nec sodales urna odio eu ante. Morbi ut suscipit mi. Ut rutrum urna purus, sit amet tristique diam mattis vel. Nunc pharetra, risus ac rutrum consequat, arcu quam dignissim nibh, eget pretium enim metus cursus felis. Pellentesque purus dui, imperdiet at nulla sed, accumsan posuere diam. Vestibulum varius condimentum ex, vulputate tempus mauris congue id. Sed ullamcorper mauris sed diam convallis dapibus. Vestibulum dictum sit amet mauris eu hendrerit. +

    + +

    + Vestibulum condimentum dui ac mi accumsan, eu interdum augue sollicitudin. Donec rutrum iaculis turpis et ultrices. Interdum et malesuada fames ac ante ipsum primis in faucibus. Vestibulum consequat feugiat elit, sed malesuada tortor tristique eget. Quisque et elementum lacus. Sed nec tincidunt nisl. Curabitur tincidunt lorem a dolor tincidunt mattis. Nullam vehicula vulputate enim, eu lacinia ex imperdiet semper. Cras sollicitudin magna quis orci lacinia facilisis. Vivamus mauris odio, pharetra a est et, tempus congue purus. Mauris urna felis, ornare quis sem blandit, scelerisque molestie nunc. Sed pulvinar sagittis nulla sit amet dapibus. Nunc hendrerit, metus vel rutrum pharetra, tellus magna accumsan felis, quis venenatis dolor dui vel leo. Aliquam erat volutpat. Sed egestas in lorem id malesuada. +

    + +

    + Cras risus sem, euismod nec porta sagittis, ornare vitae orci. Sed tristique, neque sit amet interdum eleifend, massa augue varius magna, sed tempor neque risus et lacus. Curabitur a ullamcorper lorem, vel gravida eros. Phasellus vitae convallis diam. Proin tempor, diam nec congue aliquet, libero dolor rhoncus magna, at dapibus quam purus nec orci. Proin sed vehicula tortor, id consequat ligula. Maecenas nunc magna, rutrum non malesuada id, facilisis eget tortor. Curabitur quis lacus non lectus interdum dapibus. Donec interdum varius tempus. Nunc convallis suscipit placerat. Integer facilisis sapien ut risus placerat, id vehicula neque pretium. Ut non bibendum risus. +

    + +

    + Vivamus sagittis augue turpis, quis convallis risus sagittis eu. Donec suscipit pharetra elit, non faucibus purus accumsan a. Suspendisse at tincidunt elit, vel aliquam felis. Curabitur pretium, quam nec volutpat bibendum, purus nisl rhoncus nibh, ut posuere ex odio non orci. Mauris eget lobortis nisl. Mauris sapien justo, tristique vulputate velit mollis, convallis mollis magna. In ante leo, pretium eget nibh at, malesuada scelerisque erat. Vestibulum finibus ultrices sollicitudin. Vivamus odio ex, vestibulum nec commodo sed, sagittis in orci. Donec aliquam arcu varius faucibus mattis. Mauris eleifend eros at volutpat auctor. Aenean vel ligula at velit sodales consectetur in a massa. In vitae rhoncus felis, non fringilla lorem. Maecenas vel pharetra dui, vel sodales est. In sodales nulla orci, id consectetur felis malesuada at. +

    + +

    + Donec elementum, arcu quis maximus congue, neque ante convallis leo, quis cursus enim augue vitae justo. Nam mattis sed arcu eget ornare. Integer dignissim dui nec egestas tristique. Aliquam erat volutpat. Cras eget tortor diam. In hac habitasse platea dictumst. Integer tempus egestas felis eget mollis. Nam a neque accumsan erat auctor condimentum. Etiam quis venenatis lectus. Praesent sed lacus in massa lacinia tempor. Pellentesque laoreet metus vel augue gravida, in iaculis velit ultricies. Donec porta faucibus volutpat. Vestibulum in risus velit. +

    + +

    + Aenean lacinia justo efficitur tellus mattis, ac pellentesque elit finibus. Curabitur et diam turpis. Curabitur lobortis nec ipsum nec eleifend. Proin pulvinar, neque eget consectetur ornare, sem eros posuere neque, vel mattis dui risus vitae nisl. Nulla non sollicitudin lacus, sed faucibus ligula. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In fermentum eget elit sed fringilla. Curabitur viverra justo diam, quis vehicula turpis tristique quis. Proin ultrices elit risus. Praesent scelerisque metus ut augue suscipit, id pretium enim consectetur. Ut pulvinar malesuada rutrum. +

    +

    + Nunc vel quam consequat, eleifend lectus porttitor, fringilla sapien. Integer id semper arcu, ut luctus nulla. Duis id risus ac erat mollis auctor sed in leo. Mauris dignissim ligula at nulla gravida tempor. Integer fringilla venenatis accumsan. In semper facilisis nisi sit amet commodo. Nulla dapibus nunc eu hendrerit suscipit. +

    \ No newline at end of file diff --git a/exercises/04_css/02_layout/views/floating.html b/exercises/04_css/02_layout/views/floating.html index d45bda94..cfb936a6 100644 --- a/exercises/04_css/02_layout/views/floating.html +++ b/exercises/04_css/02_layout/views/floating.html @@ -1,53 +1,48 @@ - + + Illustration of a floating element - - + + +

    Onions

    +
    +

    Onions in cooking

    + +
    + Onions +
    Image: Petr Kratochvil, public domain via www.publicdomainpictures.net.
    +
    + +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce in malesuada libero. Etiam consectetur enim enim, id porta neque facilisis non. Proin consequat a sapien eu consectetur. Quisque bibendum lorem tortor, nec facilisis risus venenatis vel. Nullam et nunc varius, elementum mi vitae, mattis lacus. Mauris et lacinia magna. Nam faucibus purus ac felis vulputate suscipit. Sed vitae est egestas, euismod neque eu, molestie leo. +

    + +

    + Fusce viverra enim ante, vel dapibus metus maximus et. Proin ac metus justo. Donec nec scelerisque ante. Vestibulum a lectus nisl. Curabitur dictum a purus non sagittis. Cras semper ipsum ut eros lobortis vestibulum. Aenean eu urna nulla. Quisque mattis ex nec odio sollicitudin, a pulvinar nibh faucibus. Nullam quis rutrum purus, nec condimentum est. Aenean sagittis feugiat ante, sit amet dignissim elit vulputate ac. Aenean nec erat blandit, posuere orci malesuada, aliquam sem. Ut rutrum neque nec sapien consectetur dignissim. +

    + +

    + Nam odio lectus, accumsan vitae dignissim vitae, condimentum eu ipsum. Ut tristique vel leo at condimentum. Quisque tincidunt et tellus ut feugiat. Proin consectetur nulla eu fringilla cursus. Vivamus mi tellus, consectetur vitae commodo vitae, placerat sit amet nisl. Vestibulum et porttitor est. Cras varius quam a enim commodo consequat. Ut egestas dapibus est, a varius enim tincidunt ac. Quisque scelerisque ante quis porta mollis. Mauris nec maximus orci. Nunc ac justo ut nisl euismod vehicula in lacinia ante. Nulla sollicitudin nisi posuere, volutpat lorem nec, sagittis purus. Duis suscipit vulputate purus ac vulputate. Pellentesque suscipit ornare mi, et finibus tortor rutrum eget. +

    + +

    + In at ipsum id ligula vehicula porttitor. Suspendisse in risus vitae nunc lacinia lacinia. Cras finibus diam odio, vel posuere justo vestibulum tempor. Integer sed pharetra lacus. Integer elit mauris, vehicula ut tortor ut, vehicula iaculis odio. Integer tincidunt tincidunt quam, a laoreet sem mollis porta. Sed consequat sagittis urna quis aliquet. Proin vitae orci ultrices nisi rutrum blandit. +

    + +

    + Mauris dapibus auctor diam sit amet euismod. Sed in nibh augue. Mauris porttitor consequat egestas. Mauris consectetur commodo blandit. Suspendisse faucibus tristique nulla, in maximus elit feugiat nec. Mauris sagittis orci eu elit mattis lacinia. Donec molestie risus sed urna maximus eleifend. Nunc accumsan facilisis eros et vestibulum. +

    + +

    + Sed dui turpis, pellentesque egestas eleifend eget, accumsan id dolor. Vestibulum suscipit in urna at semper. Curabitur luctus eros et luctus rhoncus. Sed ac ipsum dolor. Integer ex sapien, egestas quis sapien vel, fringilla aliquam libero. In sapien eros, feugiat quis auctor at, facilisis sit amet magna. Fusce leo ex, viverra quis gravida sit amet, faucibus a quam. Cras tempus lorem vitae metus cursus malesuada. +

    -

    Onions

    - -
    - -

    Onions in cooking

    - -
    -Onions -
    Image: Petr Kratochvil, public domain via www.publicdomainpictures.net.
    -
    - -

    -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce in malesuada libero. Etiam consectetur enim enim, id porta neque facilisis non. Proin consequat a sapien eu consectetur. Quisque bibendum lorem tortor, nec facilisis risus venenatis vel. Nullam et nunc varius, elementum mi vitae, mattis lacus. Mauris et lacinia magna. Nam faucibus purus ac felis vulputate suscipit. Sed vitae est egestas, euismod neque eu, molestie leo. -

    - -

    -Fusce viverra enim ante, vel dapibus metus maximus et. Proin ac metus justo. Donec nec scelerisque ante. Vestibulum a lectus nisl. Curabitur dictum a purus non sagittis. Cras semper ipsum ut eros lobortis vestibulum. Aenean eu urna nulla. Quisque mattis ex nec odio sollicitudin, a pulvinar nibh faucibus. Nullam quis rutrum purus, nec condimentum est. Aenean sagittis feugiat ante, sit amet dignissim elit vulputate ac. Aenean nec erat blandit, posuere orci malesuada, aliquam sem. Ut rutrum neque nec sapien consectetur dignissim. -

    - -

    -Nam odio lectus, accumsan vitae dignissim vitae, condimentum eu ipsum. Ut tristique vel leo at condimentum. Quisque tincidunt et tellus ut feugiat. Proin consectetur nulla eu fringilla cursus. Vivamus mi tellus, consectetur vitae commodo vitae, placerat sit amet nisl. Vestibulum et porttitor est. Cras varius quam a enim commodo consequat. Ut egestas dapibus est, a varius enim tincidunt ac. Quisque scelerisque ante quis porta mollis. Mauris nec maximus orci. Nunc ac justo ut nisl euismod vehicula in lacinia ante. Nulla sollicitudin nisi posuere, volutpat lorem nec, sagittis purus. Duis suscipit vulputate purus ac vulputate. Pellentesque suscipit ornare mi, et finibus tortor rutrum eget. -

    - -

    -In at ipsum id ligula vehicula porttitor. Suspendisse in risus vitae nunc lacinia lacinia. Cras finibus diam odio, vel posuere justo vestibulum tempor. Integer sed pharetra lacus. Integer elit mauris, vehicula ut tortor ut, vehicula iaculis odio. Integer tincidunt tincidunt quam, a laoreet sem mollis porta. Sed consequat sagittis urna quis aliquet. Proin vitae orci ultrices nisi rutrum blandit. -

    - -

    -Mauris dapibus auctor diam sit amet euismod. Sed in nibh augue. Mauris porttitor consequat egestas. Mauris consectetur commodo blandit. Suspendisse faucibus tristique nulla, in maximus elit feugiat nec. Mauris sagittis orci eu elit mattis lacinia. Donec molestie risus sed urna maximus eleifend. Nunc accumsan facilisis eros et vestibulum. -

    - -

    -Sed dui turpis, pellentesque egestas eleifend eget, accumsan id dolor. Vestibulum suscipit in urna at semper. Curabitur luctus eros et luctus rhoncus. Sed ac ipsum dolor. Integer ex sapien, egestas quis sapien vel, fringilla aliquam libero. In sapien eros, feugiat quis auctor at, facilisis sit amet magna. Fusce leo ex, viverra quis gravida sit amet, faucibus a quam. Cras tempus lorem vitae metus cursus malesuada. -

    - -

    -Nullam egestas id augue nec eleifend. Curabitur facilisis malesuada orci at venenatis. Duis at porttitor felis, ac varius elit. Sed pellentesque ligula eros, eu sollicitudin dolor placerat quis. Vestibulum suscipit, leo sit amet tristique hendrerit, ante velit congue lorem, sit amet volutpat ante ligula eget ex. Sed at ultrices turpis. Nulla sit amet egestas sapien. Donec sed lacinia mauris. Morbi suscipit erat nec orci vehicula iaculis. Fusce rhoncus at nunc vitae pretium. Nam consectetur luctus est, sit amet rhoncus ex consectetur ac. Nam in pretium nisl. Vivamus ultricies interdum elit a mattis. Phasellus lectus tellus, molestie in ultricies a, volutpat in ipsum. Aenean maximus viverra congue. -

    - -
    - - +

    + Nullam egestas id augue nec eleifend. Curabitur facilisis malesuada orci at venenatis. Duis at porttitor felis, ac varius elit. Sed pellentesque ligula eros, eu sollicitudin dolor placerat quis. Vestibulum suscipit, leo sit amet tristique hendrerit, ante velit congue lorem, sit amet volutpat ante ligula eget ex. Sed at ultrices turpis. Nulla sit amet egestas sapien. Donec sed lacinia mauris. Morbi suscipit erat nec orci vehicula iaculis. Fusce rhoncus at nunc vitae pretium. Nam consectetur luctus est, sit amet rhoncus ex consectetur ac. Nam in pretium nisl. Vivamus ultricies interdum elit a mattis. Phasellus lectus tellus, molestie in ultricies a, volutpat in ipsum. Aenean maximus viverra congue. +

    +
    \ No newline at end of file diff --git a/exercises/04_css/02_layout/views/menu.html b/exercises/04_css/02_layout/views/menu.html index 5e1cddd3..518127f9 100644 --- a/exercises/04_css/02_layout/views/menu.html +++ b/exercises/04_css/02_layout/views/menu.html @@ -1,32 +1,33 @@ + HTML Menus - - + + -

    HTML/CSS Menu demonstration

    - - - + \ No newline at end of file diff --git a/solutions/03_html/01_syntax/coventry.html b/solutions/03_html/01_syntax/coventry.html index 8f9ce227..7174d23c 100644 --- a/solutions/03_html/01_syntax/coventry.html +++ b/solutions/03_html/01_syntax/coventry.html @@ -3,9 +3,8 @@ History of a City: Coventry - + -

    History of a City: Coventry

    diff --git a/solutions/03_html/02_lists/computers80.html b/solutions/03_html/02_lists/computers80.html index 93706753..2767b833 100644 --- a/solutions/03_html/02_lists/computers80.html +++ b/solutions/03_html/02_lists/computers80.html @@ -1,11 +1,10 @@ - + 1980s' home computers - + -
    A computer with a monitor @@ -91,5 +90,4 @@

    There are two types of memory:

    - \ No newline at end of file diff --git a/solutions/03_html/03_hypermedia/views/commodore64.html b/solutions/03_html/03_hypermedia/views/commodore64.html index 96ee476f..334fd38e 100644 --- a/solutions/03_html/03_hypermedia/views/commodore64.html +++ b/solutions/03_html/03_hypermedia/views/commodore64.html @@ -1,17 +1,15 @@ - + Commodore 64 -
    - A commodore 64 computer + A commodore 64 computer
    Photo: Bill Bertram, CC via https://commons.wikimedia.org/

    Read the Wikipedia article for Retrocomputing.

    Back

    - \ No newline at end of file diff --git a/solutions/03_html/03_hypermedia/views/index.html b/solutions/03_html/03_hypermedia/views/index.html index 53141651..30a36d96 100644 --- a/solutions/03_html/03_hypermedia/views/index.html +++ b/solutions/03_html/03_hypermedia/views/index.html @@ -1,13 +1,13 @@ - + - - - Retro Computers - - - - + + + Retro Computers + + + +

    Retro Computers

    1. Commodore 64
    2. @@ -15,19 +15,19 @@

      Retro Computers

    3.4.1 Test Your Understanding

    Embedded local video

    Embedded youtube video via iframe

    Embedded youtube video via object

    - + \ No newline at end of file diff --git a/solutions/03_html/03_hypermedia/views/spectrum.html b/solutions/03_html/03_hypermedia/views/spectrum.html index 22b82ba0..332d19a8 100644 --- a/solutions/03_html/03_hypermedia/views/spectrum.html +++ b/solutions/03_html/03_hypermedia/views/spectrum.html @@ -1,10 +1,9 @@ - + Sinclair ZX Spectrum -

    Sinclair ZX Spectrum

    diff --git a/solutions/04_css/01_formatting/comparison.css b/solutions/04_css/01_formatting/comparison.css new file mode 100644 index 00000000..995aa2d0 --- /dev/null +++ b/solutions/04_css/01_formatting/comparison.css @@ -0,0 +1,47 @@ +body { + font-family: Arial, Helvetica, sans-serif; +} + +p { + text-align: center; +} + +table { + border: 1px solid black; + border-collapse: collapse; + margin-left: auto; + margin-right: auto; +} + +caption { + text-transform: uppercase; + border: 0.5px solid black; + font-weight: bold; + letter-spacing: 0.2em; +} + +thead { + background-color: red; + color: white; +} + +th { + text-transform: uppercase; + font-weight: bold; + padding-left: 0.5em; + padding-right: 0.5em; +} +th:first-child { + border-right: 1px solid black; + text-align: left; +} + +td { + padding-left: 0.5em; + padding-right: 0.5em; +} + +em { + font-weight: bold; + font-style: normal; +} \ No newline at end of file diff --git a/exercises/04_css/01_formatting/html/comparison.html b/solutions/04_css/01_formatting/comparison.html similarity index 76% rename from exercises/04_css/01_formatting/html/comparison.html rename to solutions/04_css/01_formatting/comparison.html index 42b0dda9..67f01085 100644 --- a/exercises/04_css/01_formatting/html/comparison.html +++ b/solutions/04_css/01_formatting/comparison.html @@ -1,13 +1,13 @@ - + Comparison of three computers - + + - -

    A comparison of technical data of three popular 80's home computers:

    +

    A comparison of technical data of three popular 80's home computers:

    @@ -21,28 +21,24 @@ - + - + - +
    Technical comparison
    CPUCPU MOS Technology 6510 Zilog Z80 MOS Technology 6502
    RAMRAM 64 kilobytes 16 or 64 kilobytes 5 kilobytes
    ROMROM 20 kilobytes 16 kilobytes 16 kilobytes
    - -
    - - \ No newline at end of file diff --git a/exercises/04_css/01_formatting/html/csstest.html b/solutions/04_css/01_formatting/csstest.html similarity index 74% rename from exercises/04_css/01_formatting/html/csstest.html rename to solutions/04_css/01_formatting/csstest.html index 0791d1a4..73a04ea9 100644 --- a/exercises/04_css/01_formatting/html/csstest.html +++ b/solutions/04_css/01_formatting/csstest.html @@ -1,18 +1,21 @@ - - + + Vintage Home Computers - + + + +

    This is different from all the other paragraphs

    1980's Home Computers

    In early 1980's, home computers became mainstream. For the first time, computers could be purchased by an average family household.

    - A computer with a monitor -
    Photo: Piotr Siedlecki, public domain via http://www.publicdomainpictures.net.
    + A computer with a monitor +
    Photo: Piotr Siedlecki, public domain via http://www.publicdomainpictures.net.

    Novel uses

    The main usage for a home computer was, of course, games. As cool games may not be a valid reason for purchasing an expensive gadget, @@ -46,11 +49,14 @@

    Key concepts

    Read-only memory. This was normally smaller in size than RAM and roughly corresponded to the hardware implementation of the operating system.
    - - -
    -

    Disclaimer: All opinions in this page reflect the views of their author(s), not the organization.

    - +

    Basic programming

    +

    Basic was a common language for programming 80s' home computers +

    
    +        10 PRINT "Hello, World"
    +        20 INPUT "Continue (y/n)?", R$
    +        30 IF R$="y" THEN GOTO 10
    +        
    +
    +

    Disclaimer: All opinions in this page reflect the views of their author(s), not the organization.

    - - + \ No newline at end of file diff --git a/solutions/04_css/01_formatting/selectors.css b/solutions/04_css/01_formatting/selectors.css new file mode 100644 index 00000000..f34d61f7 --- /dev/null +++ b/solutions/04_css/01_formatting/selectors.css @@ -0,0 +1,23 @@ +body { + font-family: Arial, Helvetica, sans-serif; +} + +p { + color: blue; +} + +h1.alert { + font-size: 3em; +} + +.alert { + color: red; +} + +p#unique { + font-size: 0.8em; +} + +.underlined { + text-decoration: underline; +} \ No newline at end of file diff --git a/exercises/04_css/01_formatting/html/selectors.html b/solutions/04_css/01_formatting/selectors.html similarity index 53% rename from exercises/04_css/01_formatting/html/selectors.html rename to solutions/04_css/01_formatting/selectors.html index 771ea37f..a789d4bc 100644 --- a/exercises/04_css/01_formatting/html/selectors.html +++ b/solutions/04_css/01_formatting/selectors.html @@ -1,22 +1,22 @@ - + + Selectors - - + +

    Classes and identifiers.

    -

    This is a regular paragraph.

    +

    This is a regular paragraph.

    This is a regular paragraph, too.

    -

    This paragraph belongs to a special group of paragraphs. It is a member of 'alert' class.

    +

    This paragraph belongs to a special group of paragraphs. It is a member of 'alert' class.

    This paragraph should be uniquely formatted. It is assigned an identifier.

    -

    This paragraph is in 'alert' class, too.

    - +

    This paragraph is in 'alert' class, too.

    \ No newline at end of file diff --git a/solutions/04_css/01_formatting/test.css b/solutions/04_css/01_formatting/test.css new file mode 100644 index 00000000..f877a654 --- /dev/null +++ b/solutions/04_css/01_formatting/test.css @@ -0,0 +1,60 @@ +body { + background-color: lightcyan; + color: rgba(65, 105, 225, 0.7); +} + +h1 { + color: orange; +} + +p { + text-indent: 10pt; +} + +ol, ul { + border-style: solid; + border-width: 1pt; + text-indent: 10pt; +} + +li { + color: darkgray; +} + +figcaption { + font-size: smaller; + font-weight: bold; +} + +p.copyright-notice { + font-size: 0.8em; +} + +#special { + font-size: 0.8em; + color: yellowgreen; + font-style: italic; + border-left: 2px solid black; + margin-left: 40px; + padding-left: 10px; +} + +pre { + white-space: pre-wrap; +} + +p::first-letter { + font-size:8em; +} + +p::first-line { + font-weight: bold; +} + +p::before { + content: "Note! "; +} + +p::after { + content: url(/images/tickmark.png); +} \ No newline at end of file diff --git a/solutions/04_css/02_layout/berries.css b/solutions/04_css/02_layout/berries.css new file mode 100644 index 00000000..e8abcd43 --- /dev/null +++ b/solutions/04_css/02_layout/berries.css @@ -0,0 +1,56 @@ +body { + font-family: Arial, Helvetica, sans-serif; + text-align: center; +} + +img { + border: 2px solid lightblue; +} + +figcaption { + font-weight: bold; + margin-top: 1em; + margin-bottom: 3em; +} + +h1, h2, h3 { + padding-top: 0em; + padding-bottom: 0em; + margin: 0em; + font-weight: normal; +} + +h1 { + font-size: 6em; +} + +h2 { + padding-top: 8pt; + font-size: 2em; +} + +h3 { + padding-bottom: 8pt; + font-style: italic; + font-size: 1em; +} + +div { + width: 15em; + margin: auto; +} + +div div { + border-bottom: thin solid black; +} + +div div:first-child { + border-top: thin solid black; + background-color: lightblue; +} +div:last-child { + background-color: pink; +} +div:nth-child(2) { + background-color: beige; +} \ No newline at end of file diff --git a/solutions/04_css/02_layout/berries.html b/solutions/04_css/02_layout/berries.html new file mode 100644 index 00000000..b49c6289 --- /dev/null +++ b/solutions/04_css/02_layout/berries.html @@ -0,0 +1,30 @@ + + + + + Berries + + + + +

    Berries

    +
    + berries +
    Image: Scott Bauer, USDA ARS, public domain
    +
    +
    +
    +

    Blueberry

    +

    Vaccinium corymbosum

    +
    +
    +

    Cloudberry

    +

    Rubus chamaemorus

    +
    +
    +

    Lingonberry

    +

    Vaccinium vitis-idaea

    +
    +
    + + \ No newline at end of file diff --git a/solutions/04_css/02_layout/boxstyles.css b/solutions/04_css/02_layout/boxstyles.css new file mode 100644 index 00000000..92198cb0 --- /dev/null +++ b/solutions/04_css/02_layout/boxstyles.css @@ -0,0 +1,25 @@ +p.one { + border: 1px solid black; + padding: 3em; + margin: 1em; + margin-bottom: 0em; +} + +p.two { + border: 1px solid black; + margin: 5em; + margin-top: 0em; +} + +p.three { + border-left: 3px solid black; + padding: 1em; + padding-top: 0em; + margin-top: 2em; + margin-bottom: 8em; +} + +p.four { + border: 5px dashed red; + border-radius: 1em; +} \ No newline at end of file diff --git a/solutions/04_css/02_layout/columnstyles.css b/solutions/04_css/02_layout/columnstyles.css new file mode 100644 index 00000000..eb5b85d9 --- /dev/null +++ b/solutions/04_css/02_layout/columnstyles.css @@ -0,0 +1,13 @@ +body { + column-count: 3; + /*alternatively: column-width: 15em; */ + column-gap: 2em; + column-rule-style: solid; + column-rule-width: 1px; + column-rule-color: red; + /*alternatively: column-rule: 1px solid red; */ +} + +h1 { + column-span: all; +} \ No newline at end of file diff --git a/solutions/04_css/02_layout/floating.html b/solutions/04_css/02_layout/floating.html new file mode 100644 index 00000000..1f3d8aa8 --- /dev/null +++ b/solutions/04_css/02_layout/floating.html @@ -0,0 +1,64 @@ + + + + + Illustration of a floating element + + + + +

    Onions

    + +
    +

    Did you know?

    +
      +
    • The latin name for onion plant is Allium Cepa.
    • +
    • Onions have been used in cooking for thousands of years.
    • +
    • 89% of onions' content is water.
    • +
    +
    + +
    +

    Onions in cooking

    + +
    + Onions +
    Image: Petr Kratochvil, public domain via www.publicdomainpictures.net.
    +
    + +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce in malesuada libero. Etiam consectetur enim enim, id porta neque facilisis non. Proin consequat a sapien eu consectetur. Quisque bibendum lorem tortor, nec facilisis risus venenatis vel. Nullam et nunc varius, elementum mi vitae, mattis lacus. Mauris et lacinia magna. Nam faucibus purus ac felis vulputate suscipit. Sed vitae est egestas, euismod neque eu, molestie leo. +

    + +

    + Fusce viverra enim ante, vel dapibus metus maximus et. Proin ac metus justo. Donec nec scelerisque ante. Vestibulum a lectus nisl. Curabitur dictum a purus non sagittis. Cras semper ipsum ut eros lobortis vestibulum. Aenean eu urna nulla. Quisque mattis ex nec odio sollicitudin, a pulvinar nibh faucibus. Nullam quis rutrum purus, nec condimentum est. Aenean sagittis feugiat ante, sit amet dignissim elit vulputate ac. Aenean nec erat blandit, posuere orci malesuada, aliquam sem. Ut rutrum neque nec sapien consectetur dignissim. +

    + +

    + Nam odio lectus, accumsan vitae dignissim vitae, condimentum eu ipsum. Ut tristique vel leo at condimentum. Quisque tincidunt et tellus ut feugiat. Proin consectetur nulla eu fringilla cursus. Vivamus mi tellus, consectetur vitae commodo vitae, placerat sit amet nisl. Vestibulum et porttitor est. Cras varius quam a enim commodo consequat. Ut egestas dapibus est, a varius enim tincidunt ac. Quisque scelerisque ante quis porta mollis. Mauris nec maximus orci. Nunc ac justo ut nisl euismod vehicula in lacinia ante. Nulla sollicitudin nisi posuere, volutpat lorem nec, sagittis purus. Duis suscipit vulputate purus ac vulputate. Pellentesque suscipit ornare mi, et finibus tortor rutrum eget. +

    + +

    + In at ipsum id ligula vehicula porttitor. Suspendisse in risus vitae nunc lacinia lacinia. Cras finibus diam odio, vel posuere justo vestibulum tempor. Integer sed pharetra lacus. Integer elit mauris, vehicula ut tortor ut, vehicula iaculis odio. Integer tincidunt tincidunt quam, a laoreet sem mollis porta. Sed consequat sagittis urna quis aliquet. Proin vitae orci ultrices nisi rutrum blandit. +

    + +

    + Mauris dapibus auctor diam sit amet euismod. Sed in nibh augue. Mauris porttitor consequat egestas. Mauris consectetur commodo blandit. Suspendisse faucibus tristique nulla, in maximus elit feugiat nec. Mauris sagittis orci eu elit mattis lacinia. Donec molestie risus sed urna maximus eleifend. Nunc accumsan facilisis eros et vestibulum. +

    + +

    + Sed dui turpis, pellentesque egestas eleifend eget, accumsan id dolor. Vestibulum suscipit in urna at semper. Curabitur luctus eros et luctus rhoncus. Sed ac ipsum dolor. Integer ex sapien, egestas quis sapien vel, fringilla aliquam libero. In sapien eros, feugiat quis auctor at, facilisis sit amet magna. Fusce leo ex, viverra quis gravida sit amet, faucibus a quam. Cras tempus lorem vitae metus cursus malesuada. +

    + +

    + Nullam egestas id augue nec eleifend. Curabitur facilisis malesuada orci at venenatis. Duis at porttitor felis, ac varius elit. Sed pellentesque ligula eros, eu sollicitudin dolor placerat quis. Vestibulum suscipit, leo sit amet tristique hendrerit, ante velit congue lorem, sit amet volutpat ante ligula eget ex. Sed at ultrices turpis. Nulla sit amet egestas sapien. Donec sed lacinia mauris. Morbi suscipit erat nec orci vehicula iaculis. Fusce rhoncus at nunc vitae pretium. Nam consectetur luctus est, sit amet rhoncus ex consectetur ac. Nam in pretium nisl. Vivamus ultricies interdum elit a mattis. Phasellus lectus tellus, molestie in ultricies a, volutpat in ipsum. Aenean maximus viverra congue. +

    +
    + + + \ No newline at end of file diff --git a/solutions/04_css/02_layout/floatstyles.css b/solutions/04_css/02_layout/floatstyles.css new file mode 100644 index 00000000..26efd179 --- /dev/null +++ b/solutions/04_css/02_layout/floatstyles.css @@ -0,0 +1,22 @@ +body { + font-family: Arial, Helvetica, sans-serif; + margin-left: 200px; +} + +figure#floating { + float: right; +} + +section#factbox { + float: left; + border: 1px solid black; + margin: 2em; + padding: 1em; +} + +nav { + position: absolute; + top: 120px; + left: 40px; + width: 100px; +} \ No newline at end of file diff --git a/solutions/04_css/02_layout/menu.html b/solutions/04_css/02_layout/menu.html new file mode 100644 index 00000000..32cf35e2 --- /dev/null +++ b/solutions/04_css/02_layout/menu.html @@ -0,0 +1,54 @@ + + + + + HTML Menus + + + + +

    HTML/CSS Menu demonstration

    + + + \ No newline at end of file diff --git a/solutions/04_css/02_layout/menustyles.css b/solutions/04_css/02_layout/menustyles.css new file mode 100644 index 00000000..e97b659f --- /dev/null +++ b/solutions/04_css/02_layout/menustyles.css @@ -0,0 +1,53 @@ +body { + font-family: Arial, Helvetica, sans-serif; +} + +nav ul { + list-style: none; + font-size: 16pt; + padding: 0px; +} + +nav > ul > li{ + background-color: green; + font-weight: bold; + padding: 3pt; + float: left; +} + +nav ul li { + width: 100pt; + color: white; +} + +nav ul li ul { + list-style-position: inside; + visibility: hidden; + position: absolute; + border: 2pt solid black; + background-color: white; + font-weight: normal; + color: black; + margin-left: -2pt; +} + +nav > ul > li > ul { + margin-top: 3pt; + border-top: none; +} + +nav ul li:hover > ul { + visibility:visible; +} + +ul li ul li ul { + margin-top: -20.5pt; + margin-left: 100.5pt; +} +nav a { + color: white; + text-decoration: none; +} +nav ul li ul a { + color: black; +} \ No newline at end of file From 078678a1661867cd06b615c901e53cc9d0d0d497 Mon Sep 17 00:00:00 2001 From: Balazs Bordas Date: Tue, 29 Sep 2020 19:31:51 +0200 Subject: [PATCH 104/106] fixed errors and added all solutions up to the end of 05_javascript --- 05 JavaScript.md | 363 +++++++++++++----------- exercises/05_javascript/currency.js | 21 +- exercises/05_javascript/employee.js | 8 +- exercises/05_javascript/weather.js | 7 +- solutions/05_javascript/contact.js | 81 ++++++ solutions/05_javascript/employee.js | 78 +++++ solutions/05_javascript/maths.js | 106 +++++++ solutions/05_javascript/quotes.js | 12 + solutions/05_javascript/quotes.json | 42 +++ solutions/05_javascript/university.json | 17 ++ solutions/05_javascript/vehicles.js | 49 ++++ solutions/05_javascript/weather.js | 22 ++ 12 files changed, 636 insertions(+), 170 deletions(-) create mode 100644 solutions/05_javascript/contact.js create mode 100644 solutions/05_javascript/employee.js create mode 100644 solutions/05_javascript/maths.js create mode 100644 solutions/05_javascript/quotes.js create mode 100644 solutions/05_javascript/quotes.json create mode 100644 solutions/05_javascript/university.json create mode 100644 solutions/05_javascript/vehicles.js create mode 100644 solutions/05_javascript/weather.js diff --git a/05 JavaScript.md b/05 JavaScript.md index 02081352..b6e863ad 100644 --- a/05 JavaScript.md +++ b/05 JavaScript.md @@ -17,9 +17,9 @@ Lets start with a simple example. ```javascript function largestNumber(a, b) { - if (a > b) return a - if (b > a) return b - return null + if (a > b) return a + if (b > a) return b + return null } const biggest = largestNumber(5, 8) @@ -31,45 +31,45 @@ const biggest = largestNumber(5, 8) - These are variables with local scope (they can't be accessed outside the function) - When the function is called, you need to pass two **values** which get assigned to the two parameters. - If you pass too many values the extra ones get _ignored_. - - If you don't pass enough values the remainder are assigned a value of `null`. `Null` is an assignment value (means a value of no value). + - If you don't pass enough values the remainder are assigned a value of [`undefined`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined). + >`undefined` is a [`primitive`](https://developer.mozilla.org/en-US/docs/Glossary/Primitive), which is data that is not an object and has no methods. 3. The function returns a value. - If the numbers are not the same it returns the largest. - - If they are the same it returns `null`. + - If they are the same, it returns [`null`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null). #### 1.1.1 Test Your Understanding Start by running the `maths.js` script and map the output it generates against the `console.log` statements in the script. 1. Create a new function called `multiply()` that takes two parameters, `a` and `b` and returns the _product_ of the two. - - what happens if you call it with only a single parameter? -2. Write an _arrow function expression_ stored in a constant called `squareRoot` which calculates and returns the square root of the supplied number. You will need to use the `sqrt()` method which is part of the `Math` object. - -Open the `contact.js` script, implement the `validateEmail()` function and thoroughly test it, you should avoid using regular expressions at this stage: - -1. Check that the string is at least 5 character long -2. Check that there is a `@` character and that it is not at the start of the string (HINT: use the [indexOf](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf) String prototype method. -3. Check that there is a period (.) character after the `@` character but before the end of the string. + - what happens if you call it with only a single parameter? +2. Open the `contact.js` script, implement the `validateEmail()` function and thoroughly test it, you should avoid using regular expressions at this stage: + 1. Check that the string is at least 5 character long + 2. Check that there is a `@` character and that it is not at the start of the string (HINT: use the [`lastIndexOf`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/lastIndexOf) String prototype method. + 3. Check that there are no spaces (`' '`) + 4. Check that there are no double dots (`'..'`) + 5. Check that there is a period (.) character after the `@` character but before the end of the string. #### 1.1.2 Function Parameters In the JavaScript language although we define a function with a set of specified _parameters_, when we call the function we don't need to pass these arguments: -We can choose to pass fewer arguments than are specified in the function parameters. Any parameters that don't have a matching argument are set to `undefined`. For example, the following code will print `undefined`. +We can choose to pass fewer arguments than are specified in the function parameters. Any parameters that don't have a matching argument are set to `undefined`. For example, in the following code num has a value of [`undefined`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined), so it can't be squared. ```javascript function sqr(num) { - return num * num + return num * num } sql() // returns NaN (not a number) ``` -This can cause issues in your code so to prevent this we provide [Default Parameters](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Default_parameters). If an arguement is missing when a function is called this specified a default value to use. For example consider this version of the function: +This can cause issues in your code so to prevent this we provide [Default Parameters](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Default_parameters). If an arguement is missing when a function is called this specifies a default value to use. For example consider this version of the function: ```javascript function sqr(num = null) { - return num * num + return num * num } -sqr() // returns 0 +sqr() // returns 0 ``` In JavaScript: @@ -81,48 +81,47 @@ It is also possible to pass in more arguements than there are parameters in the ```javascript function add(num1, num2) { - return num1 + num2 + return num1 + num2 } -add(4, 2, 1) // returns 6 +console.log(add(4, 2, 1)) // returns 6 ``` -As you can see, if there are too many arguments, the extra ones are ignored however JavaScript provides a mechanism to access all the arguments passed to a function regardless of whether they match the parameter list by using the _array-like_ `arguments` object, for example: +As you can see, if there are too many arguments, the extra ones are ignored, however, JavaScript provides a mechanism to access all the arguments passed to a function regardless of whether they match the parameter list by using the _array-like_ `arguments` object, for example: ```javascript function add() { - let total = 0 - for(arg of arguments) total += arg - return total + let total = 0 + for(const arg of arguments) total += arg + return total } -add(4, 2, 1) // returns 7 +console.log(add(4, 2, 1)) // returns 7 ``` Using _hidden_ or _magic_ variables that magically come into existence can make your code hard to understand so ECMA6 introduced [Rest Parameters](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters), parameters that can hold any arguments that don't match the parameters in the function declaration. Take the following code: ```javascript function add(num1, num2, ...others) { - let total = num1 + num2 - for(arg of others) total += arg - return total + let total = num1 + num2 + for(const arg of others) total += arg + return total } -add(4, 2,1) // returns 7 +console.log(add(4, 2, 1)) // returns 7 ``` This demonstrates how the rest parameter _mops up_ any surplus arguments and could be written as: ```javascript function add(...numbers) { - let total = 0 - for(arg of numbers) total += arg - return total + let total = 0 + for(const arg of numbers) total += arg + return total } - -console.log(add(4, 2, 1)) // returns 7 +console.log(add(4, 2, 1)) // returns 7 ``` #### 1.1.3 Test Your Understanding -1. create a function called `divideThis()` that takes two arguments, a number to be divided, `dividend` and the number to divide by, `divisor`. The function should return the _quotient_. +1. In the `maths.js` file, create a function called `divideThis()` that takes two arguments, a number to be divided, `dividend` and the number to divide by, `divisor`. The function should return the _quotient_. 2. What happens if you don't pass a parameter for the `divisor` parameter? Can you fix this by supplying a suitable _default parameter_? 3. Call the `multiply()` function from the previous task omitting the second parameter. Can you modify the function so it uses a default parameter to multiply by 1 if the second parameter is missing. - What happens if you don't supply _any_ parameters? @@ -137,8 +136,8 @@ Functions are a data type in JavaScript (they are objects but more on that later ```javascript const remainder = function(dividend, divisor) { - const quotient = Math.floor(dividend / divisor) - return dividend - quotient + const quotient = Math.floor(dividend / divisor) + return dividend - quotient } ``` @@ -150,12 +149,12 @@ To execute the function you simply reference the variable and append `()`. const rem = remainder(8, 5) ``` -ECMA6 introduced a better way to handle function expressions, called an **arrow function expression**. This has a much shorter (and cleaner) syntax. Here is the same function expression written using this new syntax, make a careful note of the differences. +ECMA6 introduced a better way to handle function expressions, called an [**`arrow function expression`**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions). This has a much shorter (and cleaner) syntax. Here is the same function expression written using this new syntax, make a careful note of the differences. ```javascript const remainder2 = (dividend, divisor) => { - const quotient = Math.floor(dividend / divisor) - return dividend - quotient + const quotient = Math.floor(dividend / divisor) + return dividend - quotient } ``` @@ -174,25 +173,33 @@ const sqr = num => num * num ### 1.2.1 Test Your Understanding 1. Refactor the `remainder2` function expression to take advantage of the implicit return (you will need to reduce it to a single line of code). -2. Compare this to the original version: which is more _readable_? + - Compare this to the original version: which is more _readable_? +2. Write an _arrow function expression_ stored in a constant called `squareRoot` which calculates and returns the square root of the supplied number. You will need to use the `sqrt()` method which is part of the `Math` object. 3. Create a function expression that takes two string parameters and returns the longest string and assign this to a constant called `longest. check this works correctly. -4. Modify the function expression so that it can handle any number of string parameters (use a _rest parameter_). (hint: you will need to use a [`for...in`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in) statement to loop through the strings. How does this differ from a [`for...of`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of) statement?) -5. Use a [ternary operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator) instead of the `if` statement in the loop. -6. Finally use the [`reduce()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce) method to replace the `for...in` loop to reduce the function to a single line. + - Modify the function expression so that it can handle any number of string parameters (use a _rest parameter_). (hint: you will need to use a [`for...of`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of) statement to loop through the strings. How does this differ from a [`for...in`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in) statement?) + - Make sure there are no errors thrown and `null` is returned when the function is called without any arguments + - Use a [`ternary operator`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator) instead of the `if` statement in the loop. + - Finally use the [`reduce()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce) method to replace the `for...of` loop to reduce the function to a single line. ## 2 Callbacks -Since JavaScript supports _first class functions_, we can use a function in any place where we could use a literal, object or variable. Open the `currency.js` script and look at line 17. As you can see the `request` object has a key called `get` that stores a function (we have already covered this). This takes two parameters: +Since JavaScript supports [_first class functions_](https://developer.mozilla.org/en-US/docs/Glossary/First-class_Function), we can use a function in any place where we could use a literal, object or variable. Open the `currency.js` script and look at line 22. As you can see the `fs` object has a key called `readFile` that stores a function (we have already covered this). This takes two parameters: -1. A string representing the url to be accessed. -2. A function that will be called once the data has been retrived from the url. This was defined earlier in the script and takes 3 parameters. +1. A string representing the path of the file to be read. +2. A function that will be called once the file has been read. This was defined earlier in the script and takes 2 parameters. ```javascript -const printRates = (err, res, body) => { - const data = JSON.parse(body) - console.log(`for each EUR you will get ${data.rates[symbol]} ${symbol} today`) +const printRates = (err, data) => { + if (err) throw err + const parsedData = JSON.parse(data) // this converts the formatted string into a javascript object + for (const country of parsedData) { + if (country.code === symbol) { + console.log(`For each GBP you will get ${country.rate} ${symbol} today.`) + return + } + } } -request.get(url, printRates) +fs.readFile(filePath, printRates) ``` This is a common construct used in JavaScript/NodeJS. The second function parameter is known as a **callback**. @@ -206,9 +213,15 @@ Because callbacks are such a fundamental part of NodeJS you need to spend time t Although this code works, you will rarely see callbacks written in this manner. Creating a function literal is a bit clunky and we can clean up the code by simply passing an anonymous function. ```javascript -request.get( url, (err, res, body) => { - const data = JSON.parse(body) - console.log(`for each EUR you will get ${data.rates[symbol]} ${symbol} today`) +fs.readFile(filePath, (err, data) => { + if (err) throw err + const parsedData = JSON.parse(data) // this converts the formatted string into a javascript object + for (const country of parsedData) { + if (country.code === symbol) { + console.log(`For each GBP you will get ${country.rate} ${symbol} today.`) + return + } + } }) ``` @@ -219,10 +232,13 @@ Take a few moments to make sure you fully understand the syntax, you will be see You are now going to apply you knowledge of JavaScript callbacks by connecting to the [Open Weather API](https://openweathermap.org/api). Start by opening the `weather.js` file: 1. Read through the code to make sure you understand how it works. -2. Register for an API key and add this to the script where indicated. -3. Run the script and check the output, can you explain the first two lines of output, why are the data types as shown? -4. Can you make sense of the other data? -5. Use the [Open Weather API](https://openweathermap.org/api) to retrieve and display the hourly forcast. + - An API key was already registered and is stored in the `apiKey` variable + - Run the script and check the output, can you explain the first two lines of output, why are the data types as shown? + - Can you make sense of the other data? +2. Use the `Open Weather API` to retrieve and display the [hourly forecast](https://openweathermap.org/api/one-call-api). + - Look at the format of the API calls, and substitute the `{lat}`, `{lon}` and `{API key}` placeholders + >`https://api.openweathermap.org/data/2.5/onecall?lat={lat}&lon={lon}&appid={API key}` + - What's the easiest place to put the new request? Why? Why is this problematic? ## 2.2 Defining Functions with Callbacks @@ -238,7 +254,7 @@ Start by opening the `files.js` script and study it carefully: ## 3 Objects -Lets start by creating an manipulating objects using **object literals**. Open the `employee.js` file, read through it and see if you can work out what it does. Now run it to see if you were correct. +Lets start by creating and manipulating objects using **object literals**. Open the `employee.js` file, read through it and see if you can work out what it does. Now run it to see if you were correct. ### 3.1 Creating Object Literals @@ -246,12 +262,13 @@ The simplest way to create new objects is by creating an _object literal_ which ```javascript const employee = { - firstName: 'Colin', - 'last name': 'Stephen' + firstName: 'Colin', + 'last name': 'Stephen', + startYear: 2010 } ``` -As you can see from the simple example above, the data is stored in name-value pairs, referred to as **Properties**. This example is defining an object with **2** properties. +As you can see from the simple example above, the data is stored in name-value pairs, referred to as **Properties**. This example is defining an object with **3** properties. The _name_ part of each property is a JavaScript string which may be enclosed in single quotes. These quotes are optional if the _property name_ is a valid _JavaScript variable_ but they are required if this is not the case. @@ -290,9 +307,9 @@ Whilst it is possible (and useful) to log an entire object to the console, norma ```javascript const employee = { - firstName: 'Colin', - 'last name': 'Stephen', - 'department': 'Computing' + firstName: 'Colin', + 'last name': 'Stephen', + 'department': 'Computing' } console.log(employee) @@ -301,9 +318,9 @@ const lastName = employee['last name'] const grade = employee.grade ``` -Passing the object name to `console.log()` will print out the string representation of the object. To retrieve a specific property value there are two options. If the name is a _legal JS variable name_ the dot `.` notation can be used. This is used to log the `firstName` property in the example above. +Passing the object name to `console.log()` will print out the string representation of the object. To retrieve a specific property value there are two options. If the name is a _legal JS variable name_ the dot `.` notation can be used. This is used to extract the `firstName` property in the example above. -If the name is not a valid JavaScript variable name we need to turn it into a string by using quotes `''` and enclose it in square braces `[]`. This is used to log the `last name` property. +If the name is not a valid JavaScript variable name, we need to turn it into a string by using quotes `''` and enclose it in square brackets `[]`. This is used for the `last name` property. The `grade` variable will be `undefined` because `employee.grade` does not exist. If you want to avoid this and assign a default value if the property is missing you can use the **OR** operator `||`. @@ -317,8 +334,7 @@ This will retrieve the value of the grade property if defined and store it in th 1. Create a new object called `university` which should contain three properties, `year1`, `year2` and `year3`. Each of these properties should store an object whos keys are the module codes and values the titles of the modules. 2. Create a variable called `study01` containing the `year1` object. -3. Use the `for...in` statement to iterate over this `study01` object printing out all of the _module codes_. -4. Use the `for...of` statement to print out all of the _module names_. +3. Use the `for...in` statement to iterate over this `study01` object printing out all of the _module codes_ and the _module names_. ### 3.3 Context @@ -335,7 +351,7 @@ You should start by opening the `counties.js` file and studying it carefully. Th If you look at the console output you will notice that, when we access `this` from _inside_ an object, it is bound to the object from where it was called. -Because we are operating in _strict mode_, when we try to access `this` in the global context it returns `undefined`. +Because we are operating in [_strict mode_](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode), when we try to access `this` in the global context it returns `undefined`. ### 3.4 JSON Data @@ -358,9 +374,9 @@ In the same way that we can convert a JSON string into a JavaScript object we ca ```javascript const employee = { - firstName: 'Colin', - 'last name': 'Stephen', - 'department': 'Computing' + firstName: 'Colin', + 'last name': 'Stephen', + 'department': 'Computing' } const jsonstring = JSON.stringify(employee) console.log(jsonstring) @@ -373,9 +389,9 @@ In this example `jsonstring` is a **String**. If we print out this string we wil const jsonstring = JSON.stringify(employee, null, 2) /* { - "firstName": "Colin", - "last name": "Stephen", - "department": "Computing" + "firstName": "Colin", + "last name": "Stephen", + "department": "Computing" } *? ``` @@ -388,20 +404,20 @@ Lets apply our knowledge of callbacks to implement a simple quotes tool. 1. Create a json-formatted text file called `quotes.json` containing 10 quotes, you can find lots of these on websites such as [brainyquotes](https://www.brainyquote.com/topics/inspirational). Each quote should include the quote and the author. 2. Create a new script called `quotes.js` and use the [`fs.readfile()`](https://nodejs.org/api/fs.html#fs_fs_readfile_path_options_callback) function to read the contents of the file and display it in the terminal. -3. The contents of the file is a utf8 string, use `JSON.parse()` to convert this into a JavaScript object (array) and print this to the terminal instead. +3. The contents of the file is a `UTF-8` string, use `JSON.parse()` to convert this into a JavaScript object (array) and print this to the terminal instead. 4. Create a loop to iterate through the array, printing the contents of each index. -5. Modify the code so that it only prints the quotes string (not the entire object). +5. Modify the code so that it only prints the quote string (not the entire object). 6. Convert the `university` object from the previous exercise into a JSON string and save it to the filesystem as `university.json`. ### 3.5 ECMA6 Object Destructuring -There are situations where we want to retrieve multiple object properties and store then in different variables, for example: +There are situations where we want to retrieve multiple object properties and store them in different variables, for example: ```javascript const employee = { - firstName: 'Colin', - 'last name': 'Stephen', - 'department': 'Computing' + firstName: 'Colin', + 'last name': 'Stephen', + 'department': 'Computing' } const first = employee.firstName const last = employee['last name'] @@ -412,9 +428,9 @@ In ECMA6 it is possible to extract multiple pieces of data into separate variabl ```javascript const employee = { - firstName: 'Colin', - 'last name': 'Stephen', - 'department': 'Computing' + firstName: 'Colin', + 'last name': 'Stephen', + 'department': 'Computing' } const {firstName: first, 'last name': last, department: dept} = employee @@ -424,31 +440,33 @@ console.log(dept) // prints 'Computing' #### 3.5.1 Test Your Understanding -1. Take the `university` object you created in an earlier exercise and use a single line destructuring assignment to create three variables, `year1`, `year2` and `year3`. +1. Take the `university` object inside `employee.js` that you created in an earlier exercise and use a single line destructuring assignment to create three variables, `year1`, `year2` and `year3`. ### 3.6 Getters and Setters -Most object properties are simple values and you can simply assign a value. Sometimes however properties need to be calculated. One solution is to store a function as one of the properties however we would need to call a function to retrieve the value: +Most object properties are simple values and you can simply assign a value. Sometimes however properties need to be calculated. One solution is to store a function as one of the properties, however, we would need to call a function to retrieve the value: ```javascript const employee = { - firstName: 'Colin', - 'last name': 'Stephen', - getName: () => `${this.firstName} ${this['last name']}` + firstName: 'Colin', + 'last name': 'Stephen', + getName: function() { + return `${this.firstName} ${this["last name"]}` + } } const name = employee.getName() ``` -Whilst this works fine it looks a little clunky. Thankfully in the newer versions of JavaScript you can use a **getter** which makes the code far more intuitive. +Whilst this works fine, it looks a little clunky. Thankfully in the newer versions of JavaScript you can use a [**`getter`**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get) which makes the code far more intuitive. ```javascript const employee = { - firstName: 'Colin', - 'last name': 'Stephen', - get name() { - return `${this.firstName} ${this['last name']}` - } + firstName: 'Colin', + 'last name': 'Stephen', + get name() { + return `${this.firstName} ${this['last name']}` + } } const name = employee.name @@ -458,29 +476,29 @@ In the same manner, some properties when set may need to change other properties ```javascript const employee = { - firstName: 'Colin', - 'last name': 'Stephen', - setName: function(fullname) { - const words = fullname.toString().split(' ') - this.firstName = words[0] || '' - this['last name'] = words[1] || '' - } + firstName: 'Colin', + 'last name': 'Stephen', + setName: function(fullname) { + const words = fullname.toString().split(' ') + this.firstName = words[0] || '' + this['last name'] = words[1] || '' + } } employee.setName('Micky Mouse') ``` -By using a **setter**, it behaves just like any other property. +By using a [**`setter`**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set), it behaves just like any other property. ```javascript const employee = { - firstName: 'Colin', - 'last name': 'Stephen', - set name(fullname) { - const words = fullname.toString().split(' ') - this.firstName = words[0] || '' - this['last name'] = words[1] || '' - } + firstName: 'Colin', + 'last name': 'Stephen', + set name(fullname) { + const words = fullname.toString().split(' ') + this.firstName = words[0] || '' + this['last name'] = words[1] || '' + } } employee.name = 'Micky Mouse' @@ -488,8 +506,20 @@ employee.name = 'Micky Mouse' #### 3.6.1 Test Your Understanding -1. Print the person's details in an easy to understand sentence. -2. Add a getter to return the number of years the employee has been working for the company, you will need to round this down to a whole number. You should make use of one of the static methods of the built-in [Math](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math) object. +1. In `employee.js`, print the person's details in an easy to understand sentence. + - Notice how `JSON.stringify` also doesn't omit the getter from the string representation of the object, but displays its current output after the property name: + ```json + { + "firstName": "Micky", + "last name": "Mouse", + "startYear": 2010, + "gender": "male", + "date of birth": "1980-01-01", + "details": "firstName: Micky, lastName: Mouse, startYear: 2010, gender: male, DoB: 1980-01-01" + } + ``` +2. Add a getter to return the number of years the employee has been working for the company, you will need to create a [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) object containing the current time, and then its [`getFullYear()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getFullYear) method to get the year value. +3. Create a proper setter that updates the employee's `firstName` and `last name` properties the same way as the one provided does ### 3.7 Modifying Objects @@ -503,9 +533,9 @@ Once an object has been created, additional properties cane be added by setting ```javascript const employee = { - firstName: 'Colin', - 'last name': 'Stephen', - 'department': 'Computing' + firstName: 'Colin', + 'last name': 'Stephen', + 'department': 'Computing' } employee.grade = 4 @@ -519,9 +549,9 @@ Properties can be removed from an object literal using the `delete` operator. Th ```javascript const employee = { - firstName: 'Colin', - 'last name': 'Stephen', - 'department': 'Computing' + firstName: 'Colin', + 'last name': 'Stephen', + 'department': 'Computing' } delete employee.department @@ -530,23 +560,40 @@ delete employee.department ### 3.8 Undefined Values Undefined Objects - -If you try to retrieve a value from an object that is undefined, JS throws a TypeError exception: +- If you try to retrieve a non-existent object, JS throws a `ReferenceError` + - Same thing happens when you try to access "one of its properties" (quotes because the object doesn't exist) +- If you try to retrieve one of `undefined`'s properties, JS throws a `TypeError` +- If you retrieve an existing object's non-existent property, it returns `undefined` + - If you try to retrieve the `undefined` property's property, JS throws a `TypeError` as with any other `undefined` ```javascript -const nonExistentObject.postCode // throws "TypeError" -const addressObject = employee.address // returns undefined -const postCode = employee.address.postCode // throws "TypeError" +nonExistingObject // throws ReferenceError +nonExistentObject.whatever // throws ReferenceError +undefined.whatever // throws TypeError +const existingObject = {} +existingObject.nonExistentProperty // returns undefined +existingObject.nonExistentProperty.whatever // throws TypeError ``` -To see what a `typeError` looks like, try uncommenting the three lines at the end of the `employee.js` file. So how can we avoid this? +To see what a `TypeError` looks like, try uncommenting lines marked with `"TypeError:"` in the `employee.js` file. So how can we avoid this? -The **AND** operator `&&` can be used to guard against this problem. +The [**`Logical AND`** `(&&)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_AND) operator can be used to guard against this problem. +- As this operator doesn't evaluate the second value if the first one is [`falsy`](https://developer.mozilla.org/en-US/docs/Glossary/falsy), we can be sure it won't try to retrieve a property of `undefined`. ```javascript const postCode = employee.address && employee.address.postCode console.log(postCode) // returns undefined ``` +- `postCode` gets the value of `employee.address` if it's [`falsy`](https://developer.mozilla.org/en-US/docs/Glossary/falsy) (e.g. `undefined` (as it's in this case), `false`, `0`, or `''` (empty string)) +- but would get the value of `employee.address.postCode` if `employee.address` is [`truthy`](https://developer.mozilla.org/en-US/docs/Glossary/truthy) (e.g. `true`, `1`, `'a'` (non-empty string), or an existing object (even empty object)) + +General examples: +```javascript +'' && 'foo' // returns '' +false && 'foo' // returns false +{} && 'foo' // returns 'foo' +1 && 0 // returns 0 +``` #### 3.8.1 Test Your Understanding @@ -556,14 +603,13 @@ console.log(postCode) // returns undefined ### 3.9 Object Prototypes -All JavaScript object (such as String, Number, Array, etc.) inherit properties and methods from a **prototype**. This also applies to any new objects you create. Since JavaScript does not support _traditional_ classes, this becomes the way to add new functionality. Let's look at a simple example. +All JavaScript objects (such as `String`, `Number`, `Array`, etc.) inherit properties and methods from a [**`prototype`**](https://developer.mozilla.org/en-US/docs/Glossary/Prototype-based_programming). This also applies to any new objects you create. Since JavaScript does not support _traditional_ classes, this becomes the way to add new functionality. Let's look at a simple example. The `String` object does not have a way to convert a string into an array of characters so we will add this. After it is added we can see that _all strings_ have this new behaviour. ```javascript String.prototype.toArray = function() { - const strArr = this.split('') - return strArr + return this.split('') } const nameArray = 'John Doe'.toArray() @@ -582,14 +628,14 @@ There are a couple of important concepts here. ## 4 Object Constructors -As you have seen from the previous section, each object (String, Number, etc) has its own _prototype_, but what about the custom objects you created? It turns out that these also have a prototype, _Object_. Any functionality you add to this will get added to _all the objects in your application!_. To get round this problem NodeJS has the `new` keyword. When this is used we can isolate any changes to the targeted object. +As you have seen from the previous section, each object (String, Number, etc) has its own _prototype_, but what about the custom objects you created? It turns out that these also have a prototype, _Object_. Any functionality you add to this will get added to _all the objects in your application!_. To get around this problem NodeJS has the `new` keyword. When this is used, we can isolate any changes to the targeted object. ### 4.1 Object Constructor Functions -Until ECMA6, there wa a way to achieve this by using a **constructor function**. Whilst this is not now considered the optimal way to achieve our goal there are so many examples of this approach it is important you understand both the syntax and how it works. When we use this approach using the `new` keyword triggers four steps: +Until ECMA6, there was a way to achieve this by using a **constructor function**. While now this isn't considered the optimal way to achieve our goal, there are so many examples of this approach, that it's important you understand both the syntax and how it works. When we use this approach, using the `new` keyword triggers four steps: 1. We create an empty object. -2. We set the its prototype property to the constructor function's prototype function. +2. We set its prototype property to the constructor function's prototype function. 3. We bind its `this` object to the new object. 4. We then return the new object. @@ -621,7 +667,7 @@ Whilst this syntax is not using traditional classes, one object can _extend_ ano ```javascript function Student(name, startYear, course) { Person.call(this, name, startYear) - this.subject = course || 'not enrolled' + this.course = course || 'not enrolled' } const emily = new Student('emily', 2017, 'architecture') @@ -639,14 +685,14 @@ Whilst constructor functions are not particularly elegant they do provide a way ```javascript class Person { - const currentYear = 2019 - - constructor(name, startYear) { - this.name = name - this.startYear = startYear || currentYear - this.years = currentYear - this.startYear - return this - } + constructor(name, startYear) { + const currentYear = 2019 + + this.name = name + this.startYear = startYear || currentYear + this.years = currentYear - this.startYear + return this + } } ``` @@ -654,10 +700,10 @@ Since this is syntactic sugar for the constructor function we can extend this to ```javascript class Student extends Person { - constructor(name, startYear, course) { - super(name, startYear) - this.subject = course || 'not enrolled' - } + constructor(name, startYear, course) { + super(name, startYear) + this.subject = course || 'not enrolled' + } } ``` @@ -667,16 +713,16 @@ We can also make use of **getters** and **setters** to retrieve and modify objec ```javascript class Student extends Person { - constructor(name, startYear, course) { - super(name, startYear) - this.subject = course || 'not enrolled' - } - get course() { - return this.subject - } - set course(newCourse) { - this.subject = newCourse - } + constructor(name, startYear, course) { + super(name, startYear) + this.subject = course || 'not enrolled' + } + get course() { + return this.subject + } + set course(newCourse) { + this.subject = newCourse + } } ``` @@ -686,13 +732,13 @@ Currently each instance of a prototype function is completely self-contained. Wh ```javascript class ECMA6Student extends Person { - constructor(name, startYear, course) { + constructor(name, startYear, course) { super(name, startYear) this.subject = course || 'not enrolled' if(ECMA6Student.count === undefined) ECMA6Student.count = 0 ECMA6Student.count++ - } - static studentCount() { + } + static studentCount() { return ECMA6Student.count } } @@ -718,6 +764,7 @@ You should take time to understand the [pros and cons](https://2ality.com/2016/0 ### 4.6 Test Your Understanding +In a new file called `vehicles.js`: 1. Create a **constructor function** called `OldVehicle` that includes `make`, `model` and `price` information. Use this to create two vehicles of your choice. 2. Use this to create a second **constructor function** class called `OldPickup` that includes `payload` and `seats` fields and use this to create two pickup objects. 3. Now use the same information to create a class called `NewVehicle` and extend this to create a class called `NewPickup` and use this to create two or more pickup objects. diff --git a/exercises/05_javascript/currency.js b/exercises/05_javascript/currency.js index 0725b1f2..82551691 100644 --- a/exercises/05_javascript/currency.js +++ b/exercises/05_javascript/currency.js @@ -2,16 +2,21 @@ 'use strict' -const request = require('request') +const fs = require('fs') -const symbol = 'GBP' +const symbol = 'EUR' -const printRates = (err, res, body) => { - if (err) throw 'could not complete request' - const data = JSON.parse(body) // this converts the formatted string into a javascript object - console.log(`for each EUR you will get ${data.rates[symbol]} ${symbol} today`) +const printRates = (err, data) => { + if (err) throw err + const parsedData = JSON.parse(data) // this converts the formatted string into a javascript object + for (const country of parsedData) { + if (country.code === symbol) { + console.log(`For each GBP you will get ${country.rate} ${symbol} today.`) + return + } + } } -const url = 'currency.json' +const filePath = 'currency.json' -request.get( url, printRates) +fs.readFile(filePath, printRates) \ No newline at end of file diff --git a/exercises/05_javascript/employee.js b/exercises/05_javascript/employee.js index 507492a0..04133976 100644 --- a/exercises/05_javascript/employee.js +++ b/exercises/05_javascript/employee.js @@ -7,7 +7,9 @@ const employee = { firstName: 'Colin', 'last name': 'Stephen', startYear: 2010, - getName: () => `${this.firstName} ${this['last name']}`, + getName: function() { + return `${this.firstName} ${this["last name"]}` + }, setName: function(fullname) { console.log(fullname) const words = fullname.toString().split(' ') @@ -23,3 +25,7 @@ console.log(jsonString) employee.setName('Micky Mouse') console.log(JSON.stringify(employee, null, 2)) + +// TypeError: +// const postCode = employee.address.postCode +// console.log(postCode) \ No newline at end of file diff --git a/exercises/05_javascript/weather.js b/exercises/05_javascript/weather.js index f139cc00..e72b7bac 100755 --- a/exercises/05_javascript/weather.js +++ b/exercises/05_javascript/weather.js @@ -4,12 +4,13 @@ const request = require('request') -const url = 'https://api.openweathermap.org/data/2.5/weather?q=coventry,uk&appid=44c39f3fa462f86b3fc88f5678e5c5ff' +const apiKey = '44c39f3fa462f86b3fc88f5678e5c5ff' +const cityName = 'coventry,uk' -request(url, (err, response, body) => { +request(`https://api.openweathermap.org/data/2.5/weather?q=${cityName}&appid=${apiKey}`, (err, response, body) => { if(err) console.log(err.message) console.log(`the body variable contains a ${typeof body}`) const data = JSON.parse(body) console.log(`the data variable contains an ${typeof data}`) console.log(data) -}) +}) \ No newline at end of file diff --git a/solutions/05_javascript/contact.js b/solutions/05_javascript/contact.js new file mode 100644 index 00000000..3d358404 --- /dev/null +++ b/solutions/05_javascript/contact.js @@ -0,0 +1,81 @@ +#!/usr/bin/env node + +'use strict' + +/* This script demonstrates how JavaScript can be used to handle exceptions. */ + +const readline = require('readline-sync') + +/* any code that could throw an exception needs to be wrapped in a try block. If any line of code in the try block throws an exception the program immediately jumps to the catch block, passing the Error object thrown. Regardless of whether an error was thrown or not, the code in the finally block is run. */ +try { + const email = String(readline.question('enter email address: ')) + console.log('email is a '+typeof email+' and contains '+email) + validateEmail(email) + const score = Number(readline.question('assign score 1-10: ')) + console.log('score is a '+typeof score+' and contains '+score) + validateScore(score) + const comment = String(readline.question('enter your comment : ')) + validateComment(comment) + console.log(`Thank you ${email}. You gave us a rating of ${score}/10 with the comment "${comment}"`) +} catch(err) { + console.log(`${err.name} thrown`) + console.log(`The error message is: ${err.message}`) + console.log(err.stack) +} finally { + console.log('the script has finished') +} + +/** + * Checks to see if the supplied parameter is formatted as a valid email + * address. + * @param {string} email - The email address to be checked. + * @returns {bool} the validity of the email address string + * @throws {TypeError} if the parameter is not a valid email address. + */ +function validateEmail(email) { + console.log(email) + const atIndex = email.lastIndexOf('@') + const dotIndex = email.lastIndexOf('.') + if ( email.length < 5 + || atIndex < 1 + || email.indexOf(' ') !== -1 + || email.indexOf('..') !== -1 + || dotIndex < atIndex + || dotIndex === email.length - 1 ) { + throw TypeError + } + return true +} + +/** + * Checks to see if the supplied parameter is a valid integer in the range 1-10. + * @param {string} score - The user-specified score. + * @returns {bool} whether the parameter is a valid integer in range + * @throws {TypeError} if the parameter is not a valid integer. + * @throws {RangeError} if the parameter is not in the range 1-10. + */ +function validateScore(score) { + const minScore = 0 + const maxScore = 10 + if (Number.isNaN(score) || score % 1 !== minScore) { + throw new TypeError('parameter is not a valid integer') + } + if (score < 1 || score > maxScore) { + throw new RangeError('parameter should be in the range 1-10') + } + return true +} + +/** + * Checks to see if the supplied comment is 'valid'. + * @param {string} comment - The user-specified score. + * @returns {bool} whether the comment is 'valid' + * @throws {RangeError} if the comment is not long enough. + */ +function validateComment(comment) { + const minLen = 5 + if (comment.length < minLen) { + throw new RangeError('comment should be at least 5 characters long') + } + return true +} diff --git a/solutions/05_javascript/employee.js b/solutions/05_javascript/employee.js new file mode 100644 index 00000000..54429d58 --- /dev/null +++ b/solutions/05_javascript/employee.js @@ -0,0 +1,78 @@ +#!/usr/bin/env node +/* eslint no-magic-numbers: 0 */ + +'use strict' + +const employee = { + firstName: 'Colin', + 'last name': 'Stephen', + startYear: 2010, + gender: 'male', + 'date of birth': '1980-01-01', + getName: function() { + return `${this.firstName} ${this["last name"]}` + }, + setName: function(fullname) { + console.log(fullname) + const words = fullname.toString().split(' ') + console.log(words) + console.log(this) + this.firstName = words[0] || '' + this['last name'] = words[1] || '' + }, + get details() { + return `firstName: ${this.firstName}, lastName: ${this["last name"]}, startYear: ${this.startYear}, gender: ${this.gender}, DoB: ${this["date of birth"]}` + }, + get yearsWorked() { + return (new Date().getFullYear() - this.startYear) + }, + set name(fullname) { + const names = fullname.toString().split(' ') + this.firstName = names[0] + this["last name"] = names[1] + } +} + +const jsonString = JSON.stringify(employee, null, 2) +console.log(jsonString) + +employee.setName('Micky Mouse') +console.log(JSON.stringify(employee, null, 2)) + +// TypeError: +// const postCode = employee.address.postCode +// console.log(postCode) + +const university = { + year1: { + a101: 'something11', + b104: 'something12', + c134: 'something13' + }, + year2: { + d201: 'something21', + e204: 'something22', + f234: 'something23' + }, + year3: { + g301: 'something31', + h304: 'something32', + i334: 'something33' + } +} + +const study01 = university.year1 +for(const code in study01) console.log(`${code} ${study01[code]}`) + +const {year1: year1, year2: year2, year3: year3} = university + +delete employee.startYear +employee.startYear = '2010' + +String.prototype.toArray = function() { + return this.split('') +} +Array.prototype.toStr = function() { + return this.join('') +} +console.log('foobar'.toArray().toStr()) \ No newline at end of file diff --git a/solutions/05_javascript/maths.js b/solutions/05_javascript/maths.js new file mode 100644 index 00000000..e7e6e769 --- /dev/null +++ b/solutions/05_javascript/maths.js @@ -0,0 +1,106 @@ +#!/usr/bin/env node +/* eslint no-magic-numbers: 0 */ + +'use strict' + +function largestNumber(a, b) { + if (a > b) return a + if (b > a) return b + return null +} + +const biggest = largestNumber(5, 8) +console.log(biggest) +// the code below achieves the same using the 'spread operator' +const nums = [5, 8] +const biggest2 = largestNumber(...nums) +console.log(biggest2) + +// example using the arguments object +function add() { + let total = 0 + console.log(arguments) + console.log(arguments['1']) + for(const arg of arguments) { + total += arg + } + return total +} + +const addNums = add(1, 2, 3, 4) +console.log(addNums) + + +// example using a rest parameter +function add2(...values) { + let total = 0 + console.log(values) + for (let i=0; i dividend - Math.floor(dividend / divisor) * divisor +console.log('remainder2: ' + remainder2(13, 4)) + +// function expression using arrow syntax and one parameter +const sqr = num => num * num +console.log(sqr(4)) + +function multiply(a = 1, b = 1) { + return a * b +} +console.log(multiply(3, 5)) + +function divideThis(dividend, divisor = 1) { + return dividend / divisor +} +console.log(divideThis(5, 2)) + +function average(...numbers) { + if (numbers.length === 0) return 0 + let sum = 0 + for (const number of numbers) sum += number + return sum / numbers.length +} +console.log(`average of [2, 4, 6]: ${average(2, 4, 6)}`) + +const squareRoot = a => Math.sqrt(a) +console.log(`squareRoot of 4096: ${squareRoot(4096)}`) + +const longest = (...strings) => strings.length === 0 ? null : strings.reduce((longestString, currentString) => currentString.length > longestString.length ? currentString : longestString) +// simple version without using reduce: +// const longest = (...strings) => { +// if (strings.length === 0) return null +// let longest = strings[0] +// for (const string of strings) if (string > longest) longest = string +// return longest +// } +console.log(`longest of ['a', 'aaa', 'aa']: ${longest('a', 'aaa', 'aa')}`) \ No newline at end of file diff --git a/solutions/05_javascript/quotes.js b/solutions/05_javascript/quotes.js new file mode 100644 index 00000000..45b2c6e4 --- /dev/null +++ b/solutions/05_javascript/quotes.js @@ -0,0 +1,12 @@ +#!/usr/bin/env node + +'use strict' + +require('fs').readFile('quotes.json', (err, data) => { + if (err) console.log(err) + const quotesArray = JSON.parse(data) + console.log(quotesArray) + for (const quoteObject of quotesArray) { + console.log(quoteObject.quote) + } +}) \ No newline at end of file diff --git a/solutions/05_javascript/quotes.json b/solutions/05_javascript/quotes.json new file mode 100644 index 00000000..bd394721 --- /dev/null +++ b/solutions/05_javascript/quotes.json @@ -0,0 +1,42 @@ +[ + { + "quote":"We know what we are, but know not what we may be.", + "author":"William Shakespeare" + }, + { + "quote":"Perfection is not attainable, but if we chase perfection we can catch excellence.", + "author":"Vince Lombardi" + }, + { + "quote":"Do your little bit of good where you are; it's those little bits of good put together that overwhelm the world.", + "author":"Desmond Tutu" + }, + { + "quote":"My mission in life is not merely to survive, but to thrive; and to do so with some passion, some compassion, some humor, and some style.", + "author":"Maya Angelou" + }, + { + "quote":"We must let go of the life we have planned, so as to accept the one that is waiting for us.", + "author":"Joseph Campbell" + }, + { + "quote":"The measure of who we are is what we do with what we have.", + "author":"Vince Lombardi" + }, + { + "quote":"Don't judge each day by the harvest you reap but by the seeds that you plant.", + "author":"Robert Louis Stevenson" + }, + { + "quote":"I hated every minute of training, but I said, 'Don't quit. Suffer now and live the rest of your life as a champion.'", + "author":"Muhammad Ali" + }, + { + "quote":"Thousands of candles can be lighted from a single candle, and the life of the candle will not be shortened. Happiness never decreases by being shared.", + "author":"Buddha" + }, + { + "quote":"How wonderful it is that nobody need wait a single moment before starting to improve the world.", + "author":"Anne Frank" + } +] \ No newline at end of file diff --git a/solutions/05_javascript/university.json b/solutions/05_javascript/university.json new file mode 100644 index 00000000..50ce27a3 --- /dev/null +++ b/solutions/05_javascript/university.json @@ -0,0 +1,17 @@ +{ + "year1": { + "a101": "something11", + "b104": "something12", + "c134": "something13" + }, + "year2": { + "d201": "something21", + "e204": "something22", + "f234": "something23" + }, + "year3": { + "g301": "something31", + "h304": "something32", + "i334": "something33" + } +} \ No newline at end of file diff --git a/solutions/05_javascript/vehicles.js b/solutions/05_javascript/vehicles.js new file mode 100644 index 00000000..d0dfeaf1 --- /dev/null +++ b/solutions/05_javascript/vehicles.js @@ -0,0 +1,49 @@ +#!/usr/bin/env node + +'use strict' + +function OldVehicle(make, model, price) { + this.make = make + this.model = model + this.price = price +} + +const OldVehicle1 = new OldVehicle('Jaguar', 'E-type', 5600) +console.log(OldVehicle1) +const OldVehicle2 = new OldVehicle('Volkswagen', 'Beetle', 3200) +console.log(OldVehicle2) + +function OldPickup(make, model, price, payload, seats) { + OldVehicle.call(this, make, model, price) + this.payload = payload + this.seats = seats +} + +const OldPickup1 = new OldPickup('GMC', 'Sonoma', 14000, 1500, 2) +console.log(OldPickup1) +const OldPickup2 = new OldPickup('Jeep', 'Comanche', 15900, 1800, 2) +console.log(OldPickup2) + +class NewVehicle { + constructor(make, model, price) { + this.make = make + this.model = model + this.price = price + } +} + +class NewPickup extends NewVehicle { + static totalValue = 0 + constructor(make, model, price, payload, seats) { + super(make, model, price) + this.payload = payload + this.seats = seats + NewPickup.totalValue += price + } +} + +const NewPickup1 = new NewPickup('Ford', 'F-150', 46900, 3000, 5) +console.log(NewPickup1) +const NewPickup2 = new NewPickup('Chevrolet', 'Silverado', 44900, 2500, 5) +console.log(NewPickup2) +console.log(NewPickup.totalValue) \ No newline at end of file diff --git a/solutions/05_javascript/weather.js b/solutions/05_javascript/weather.js new file mode 100644 index 00000000..d8f45dab --- /dev/null +++ b/solutions/05_javascript/weather.js @@ -0,0 +1,22 @@ +#!/usr/bin/env node + +'use strict' + +const request = require('request') + +const apiKey = '44c39f3fa462f86b3fc88f5678e5c5ff' +const cityName = 'coventry,uk' + +request(`https://api.openweathermap.org/data/2.5/weather?q=${cityName}&appid=${apiKey}`, (err, response, body) => { + if(err) console.log(err.message) + console.log(`the body variable contains a ${typeof body}`) + const data = JSON.parse(body) + console.log(`the data variable contains an ${typeof data}`) + console.log(data) + + request(`https://api.openweathermap.org/data/2.5/onecall?lat=${data.coord.lat}&lon=${data.coord.lon}&appid=${apiKey}`, (err, response, body) => { + if(err) console.log(err.message) + const data = JSON.parse(body) + console.log(data) + }) +}) \ No newline at end of file From 059e611b3275533e6487d045d574abfef5aff25a Mon Sep 17 00:00:00 2001 From: Balazs Bordas Date: Wed, 7 Oct 2020 12:39:51 +0200 Subject: [PATCH 105/106] fixed errors and added solutions for 06_code_quality --- 06 Code Quality.md | 167 ++++++++++--------- exercises/06_code_quality/asyncFunctions.js | 2 +- exercises/06_code_quality/todo/jsdoc.conf | 24 +++ solutions/06_code_quality/asyncFunctions.js | 67 ++++++++ solutions/06_code_quality/nestedCallbacks.js | 52 ++++++ solutions/06_code_quality/promises.js | 70 ++++++++ solutions/06_code_quality/todo/index.js | 80 +++++++++ solutions/06_code_quality/todo/list.js | 53 ++++++ 8 files changed, 433 insertions(+), 82 deletions(-) create mode 100644 exercises/06_code_quality/todo/jsdoc.conf create mode 100644 solutions/06_code_quality/asyncFunctions.js create mode 100644 solutions/06_code_quality/nestedCallbacks.js create mode 100644 solutions/06_code_quality/promises.js create mode 100644 solutions/06_code_quality/todo/index.js create mode 100644 solutions/06_code_quality/todo/list.js diff --git a/06 Code Quality.md b/06 Code Quality.md index dff65bfa..70301121 100644 --- a/06 Code Quality.md +++ b/06 Code Quality.md @@ -34,11 +34,11 @@ The package manifest includes a `scripts` object which can be used to store your ```json "scripts": { - "linter": "./node_modules/.bin/eslint ." - } + "linter": "./node_modules/.bin/eslint ." +} ``` -Don't wory about understanding what a linter is for the moment. Since you have already installed all the module dependencies in the previous section you can run the script using: +Don't worry about understanding what a linter is for the moment. Since you have already installed all the module dependencies in the previous section you can run the script using: ```shell $ npm run linter @@ -81,11 +81,11 @@ The object property value shorthand notation is useful if the keys have the same ```javascript module.exports = { - List: List + List: List } ``` -Now look at the top of the `index.js` file. Lines 18-19 import the module and create an instance of the List prototype. Notice that we are only importing the `List` prototype from the module. This `List` object prototype is then used to create a new object. This object is called `list` and provides access to all the functionality defined in the object prototype. Foe example to add an item we can use: +Now look at the top of the `index.js` file. Lines 18-19 import the module and create an instance of the List prototype. Notice that we are only importing the `List` prototype from the module. This `List` object prototype is then used to create a new object. This object is called `list` and provides access to all the functionality defined in the object prototype. For example to add an item we can use: ```javascript list.add('bread', 42) @@ -116,10 +116,10 @@ Locate the `06_code_quality/todo/` directory and study the `index.js` file. You You should start by ensuring you have installed `eslint` which is considered the industry standard and that you have a copy of the approved configuration file `.eslintrc.json` in the root directory of your project. -Now navigate to the `06_code_quality/` directory using terminal and run the linter on the `index.js` code in the `todo/` directory: +Now navigate to the `06_code_quality/todo` directory using terminal and run the linter on the `index.js` script: ```shell -$ node_modules/.bin/eslint todo/index.js +$ node_modules/.bin/eslint index.js ``` You will see a list of issues that the linter has flagged in your code. Notice that some of these are flagged as errors (serious) and some as warnings (recommendations). Each message includes: @@ -133,7 +133,7 @@ The latter can be used to quickly look up the rules in the [comprehensive docume Instead of running separate checks on every file, we can specify the directory we want to check and it will automatically scan all the subdirectories. For example to scan all the files in the `modules/` directory we could run: ```shell -$ node_modules/.bin/eslint todo/ +$ node_modules/.bin/eslint modules/ ``` ### 3.1 Test Your Understanding @@ -144,7 +144,7 @@ $ node_modules/.bin/eslint todo/ ## 4 Documentation -In this third and last topic we will be using the [JSDoc](http://usejsdoc.org) tool to build a detailed code documentation website by extracting special comments inserted into our source code. +In this topic we will be using the [JSDoc](http://usejsdoc.org) tool to build a detailed code documentation website by extracting special comments inserted into our source code. The default set of documentation tools provided in JSDoc are not suitable for documenting Koa routes and so we will be using a plugin called [jsdoc-route-plugin](https://www.npmjs.com/package/jsdoc-route-plugin). This should have been installed by the package manifest however you should check that you are using the current version of the `package.json` file and update if needed, rerunning the `npm install` command to ensure all packages are installed. You should also check that you have the latest version of the `jsdoc.conf` configuration file. @@ -162,6 +162,11 @@ If you run this command you should see a new directory called `docs/` which will You will probably have noticed that only a couple of the functions include complete JSDoc comments and so the documentation website is incomplete. Your task is to use the existing comments for guidance and complete the task of documenting your code. You will find the [JSDoc](http://usejsdoc.org) and [jsdoc-route-plugin](https://www.npmjs.com/package/jsdoc-route-plugin) documentation helpful. +To run `jsdoc` as preconfigured with the `jsdoc.conf` file, including the plugin, simply use: +```shell +./node_modules/.bin/jsdoc -c jsdoc.conf +``` + ## 5 Improved Async Code Since NodeJS has a single thread that handles all incoming requests it is vital that we push long-running tasks into their own threads, typically through the use of _callback functions_. In this section of the lab you will learn about the limitations of callbacks and explore more powerful ways to handle multi-threading. @@ -170,15 +175,15 @@ Since NodeJS has a single thread that handles all incoming requests it is vital Because the code to be run after a callback is run needs to be _inside_ the callback code it is very challenging to build a script that contains several long-running tasks you get into a situation where you nest callbacks inside callbacks (inside callbacks) which makes the code very difficult to write, debug and read and means its very difficult to split into separate functions, a situation commonly known as **Callback Hell**. -Open the file `nestedCallbacks.js` which asks for a _base_ currency code then prints out all the exchange rates against other currencies. Notice that there are four functions defined, three of which include a callback. Our script is designed to capture user input using `stdin` (needing a callback), identify whether a currency code is valid (requiring a second callback) and then getting the currency conversion rates for the specified currency (requiring a third callback). +Open the file `nestedCallbacks.js` which asks for a _base_ currency code then prints out all the exchange rates against other currencies. Notice that there are four functions defined, each of them including a callback. Our script is designed to capture user input using `stdin` (needing a callback), identify whether a currency code is valid (requiring a second callback) and then getting the currency conversion rates for the specified currency (requiring a third callback). -1. The script starts be calling the `read.question()` function (line 13) which takes a callback function as its second parameter. +1. The script starts by calling the `read.question()` function (line 13) which takes a callback function as its second parameter. 2. We want the first `request()` function (line 18) to be run after the initial `read.question()` function has completed. - 1. To do this it needs to be called from inside the `read.question()` callback function. + - To do this it needs to be called from inside the `read.question()` callback function. 3. The second `request()` function should run after the first one has completed and the data has been processed. - 1. To do this it needs to be called from inside the callback function of the first `request()` call. + - To do this it needs to be called from inside the callback function of the first `request()` call. 4. The final step is to call the `read.question()` function again (line 38)) which should be run once the second request has completed. - 1. Therefore this needs to be in the callback function from the second `request()` function. + - Therefore this needs to be in the callback function from the second `request()` function. As you can see, each step has to be nested inside the previous step's callback, creating an ever increasing level of nested code sometime referred to as [Callback Hell](http://callbackhell.com/) or the [Pyramid of Doom](https://en.wikipedia.org/wiki/Pyramid_of_doom_(programming)). @@ -189,21 +194,21 @@ Callbacks are the simplest possible mechanism for asynchronous code in JavaScrip The callbacks are already nested 4 deep. You are now going to add some additional functionality and, in doing this, are going to have to make use of additional nested callbacks! 1. The deepest callback is a prompt asking the user for the currency they want to convert into. Add the logic to retrieve the correct exchange rate from the data returned from the previous API call. -2. Instead of printing the exchange rate, ask for the amount to be converted and them return the equivalent in the chosen currency +2. Instead of printing the exchange rate, ask for the amount to be converted and then return the equivalent in the chosen currency 3. The `currencies.json` file contains a map between the currency code and the country name. Load this file into the script using the [`fs`](https://nodejs.org/api/fs.html) module, convert to a JavaScript object using the [`JSON`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON) object and use it to display the full name of the chosen currency. Below is some code to get you started. You will need to import the `fs` module and use the `fs.readFile()` function which takes a callback! ```javascript fs.readFile('currencies.json', 'utf8', (err, contents) => { - if(err) console.log('you need to handle this properly') - console.log(contents) + if(err) console.log('you need to handle this properly') + console.log(contents) }) ``` Even though the script is still simple you are probably already getting in a tangle! Imagine a more complex script with conditions, it would quickly get out of hand and become practically impossible to debug. -Thankfully there are a number of advance features in NodeJS that are designed to flatten out these callbacks and to treat asynchronous code in a more _synchronous_ manner. These care called _Generators_, _Promises_ and _Async Functions_ and are described below. Even though you don't technically _need_ to know these, its worth learning them to keep your code manageable. +Thankfully there are a number of advanced features in NodeJS that are designed to flatten out these callbacks and to treat asynchronous code in a more _synchronous_ manner. These are called _Generators_, _Promises_ and _Async Functions_ and are described below. Even though you don't technically _need_ to know these, its worth learning them to keep your code manageable. ## 6 Promises @@ -222,10 +227,10 @@ Promises are created using the `new` keyword. This function is called immediatel ```javascript const url = 'https://api.exchangeratesapi.io/latest?base=GBP' const getData = url => new Promise( (resolve, reject) => { - request(url, (err, res, body) => { - if (err) reject(new Error('invalid API call')) - resolve(body) - }) + request(url, (err, res, body) => { + if (err) reject(new Error('invalid API call')) + resolve(body) + }) }) ``` @@ -248,7 +253,7 @@ aPromise.then( data => console.log(data)) aPromise.catch( err => console.error(`error: ${err.message}`) ) ``` -In this example we create a _new Promise_ and store it in a variable. It get executed _immediately_. The second line calls its `then()` method which will get executed if the promise state becomes _fulfilled_ (the API call is successful). The parameter will be assigned the value passed when the `resolve()` function is called in the promise, in this case it will contain the JSON data returned by the API call. +In this example we create a _new Promise_ and store it in a variable. It gets executed _immediately_. The second line calls its `then()` method which will get executed if the promise state becomes _fulfilled_ (the API call is successful). The parameter will be assigned the value passed when the `resolve()` function is called in the promise, in this case it will contain the JSON data returned by the API call. If the state of the promise changes to _rejected_, the `catch()` method is called. The parameter will be set to the value passed to the `reject()` function inside the promise. In this example it will contain an `Error` object. @@ -256,41 +261,41 @@ This code can be written in a more concise way by _chaining_ the promise methods ```javascript getData('https://api.exchangeratesapi.io/latest?base=GBP') - .then( data => console.log(data)) - .catch( err => console.error(`error: ${err.message}`)) + .then( data => console.log(data)) + .catch( err => console.error(`error: ${err.message}`)) ``` Because the Promise is executed immediately we don't need to store it in a variable. The `.then()` and `.catch()` methods are simply chained onto the promise. This form is much more compact and allows us to chain multiple promises together to solve more complex tasks. ### 6.3 Chaining Promises -The real power of promises comes from their ability to be _chained_. This allows the results from a promise to be passed to another promise. All you need to do is pass another promise to the `next()` method. +The real power of promises comes from their ability to be _chained_. This allows the results from a promise to be passed to another promise. All you need to do is pass another promise to the `then()` method. ```javascript const getData = url => new Promise( (resolve, reject) => { - request(url, (err, res, body) => { - if (err) reject(new Error('invalid API call')) - resolve(body) - }) + request(url, (err, res, body) => { + if (err) reject(new Error('invalid API call')) + resolve(body) + }) }) const printObject = data => new Promise( resolve => { - const indent = 2 - data = JSON.parse(data) - const str = JSON.stringify(data, null, indent) - console.log(str) - resolve() + const indent = 2 + data = JSON.parse(data) + const str = JSON.stringify(data, null, indent) + console.log(str) + resolve() }) const exit = () => new Promise( () => { - process.exit() + process.exit() }) getData('https://api.exchangeratesapi.io/latest?base=GBP') - .then( data => printObject(data)) - .then( () => exit()) - .catch(err => console.error(`error: ${err.message}`)) - .then( () => exit()) + .then( data => printObject(data)) + .then( () => exit()) + .catch(err => console.error(`error: ${err.message}`)) + .then( () => exit()) ``` Notice that we pass the `printObject` promise to the `then()` method. The data passed back from the `getData` promise is passed to the `printObject` promise. @@ -303,32 +308,32 @@ If a promise only takes a single parameter and this matches the data passed back ```javascript getData('https://api.exchangeratesapi.io/latest?base=GBP') - .then(printObject) - .then(exit) - .catch(err => console.error(`error: ${err.message}`)) - .then(exit) + .then(printObject) + .then(exit) + .catch(err => console.error(`error: ${err.message}`)) + .then(exit) ``` There are some situations where you can't simply pass the output from one promise to the input of the next one. Sometimes you need to store data for use further down the promise chain. This can be achieved by storing the data in the `this` object. ```javascript getData('https://api.exchangeratesapi.io/latest?base=GBP') - .then( data => this.jsonData = data) - .then( () => printObject(this.jsonData)) - .then(exit) - .catch(err => console.error(`error: ${err.message}`)) - .then(exit) + .then( data => this.jsonData = data) + .then( () => printObject(this.jsonData)) + .then(exit) + .catch(err => console.error(`error: ${err.message}`)) + .then(exit) ``` In the example above we store the data returned from the `getData` promise in the `this` object. This is then used when we call the `printObject` promise. ### 6.4 Test Your Knowledge -Run the `promises.js` script. Its functionality should be familiar to the `currency.js` script you worked with in chapter 3. +Run the `promises.js` script. Its functionality should be familiar to the `currency.js` script you worked with in chapter 5. Study the code carefully. Notice that it defines 5 promises and chains them together. You are going to extend the functionality by defining some additional promises and adding them to the promise chain. -1. Modify the script to ask for the currency to convert to and display only the one conversion rate. +1. Modify the script to display only the one conversion rate from the user input. 2. Instead of printing the exchange rate, ask for the amount to be converted and them return the equivalent in the chosen currency. 3. The `currencies.json` file contains a map between the currency code and the country name. Load this file into the script using the [`fs`](https://nodejs.org/api/fs.html) module, convert to a JavaScript object using the [`JSON`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON) object and use it to display the full name of the chosen currency. @@ -337,8 +342,8 @@ Study the code carefully. Notice that it defines 5 promises and chains them toge In the async examples we have seen so far, each async function needs to complete before the next async call is run. The diagram below shows how this looks. ``` - 1 2 3 - ───⬤─────⬤─────⬤ + 1 2 3 + ────⬤─────⬤─────⬤ ``` The program flow is. @@ -367,7 +372,7 @@ dataArray.forEach( curr => { In the example above we loop through the `dataArray`, creating a new promise object that we push onto our `promiseArray`. - Once we have an array of promises there are two possible scenarios. +Once we have an array of promises there are two possible scenarios. 1. We want _all_ the promises in the array to be fulfilled before continuing the promise chain. 2. We want _one_ of the promises to be fulfilled but we don't care which one. @@ -378,8 +383,8 @@ In the first scenario we want _all_ the promises to be fulfilled before continui ```javascript Promise.all(itemPromises) - .then( results => results.forEach( item => console.log(item))) - .catch( err => console.log(`error: ${err.message}`)) + .then( results => results.forEach( item => console.log(item))) + .catch( err => console.log(`error: ${err.message}`)) ``` When the `Promise.all()` method fulfills it returns an array of results. In the example above we loop through these and print each to the terminal. @@ -413,52 +418,52 @@ Here is a simple example. ```javascript const getData = url => new Promise( (resolve, reject) => { - request(url, (err, res, body) => { - if (err) reject(new Error('invalid API call')) - resolve(body) - }) + request(url, (err, res, body) => { + if (err) reject(new Error('invalid API call')) + resolve(body) + }) }) const printObject = data => new Promise( resolve => { - console.log(JSON.stringify(JSON.parse(data), null, 2)) - resolve() + console.log(JSON.stringify(JSON.parse(data), null, 2)) + resolve() }) async function main() { - try { - const data = await getData('https://api.exchangeratesapi.io/latest?base=GBP') - await printObject(data) - process.exit() - } catch (err) { - console.log(`error: ${err.message}`) - process.exit() - } + try { + const data = await getData('https://api.exchangeratesapi.io/latest?base=GBP') + await printObject(data) + process.exit() + } catch (err) { + console.log(`error: ${err.message}`) + process.exit() + } } main() ``` Async functions are declared using the `async` keyword in the function declaration, all errors are handled using the standard `try-catch` block. Because the main block of code needs to be in an _async function_, this has to be explicitly executed at the end of the script. -The `getData()` function returns a _promise_. it is called using the `await` keyword, this pauses the execution of the `main()` function until `getData()` is either _fulfilled_ or _rejected_. If it is _fulfilled_, the data returned is stored in the `data` variable and control moves to the next line, if it is _rejected_ code execution jumps to the `catch()` block. +The `getData()` function returns a _promise_. It is called using the `await` keyword, this pauses the execution of the `main()` function until `getData()` is either _fulfilled_ or _rejected_. If it is _fulfilled_, the data returned is stored in the `data` variable and control moves to the next line, if it is _rejected_ code execution jumps to the `catch()` block. ### 7.2 Simplified Promises Async functions are implicitly wrapped in a `Promise.resolve()` and any uncaught errors are wrapped in a `Promise.reject()`. This means that an _async function_ can be substituted for a _promise_. let's look at a simple example. ```javascript -const printObjectPromise = data => new Promise( (resolve) => { - const indent = 2 - data = JSON.parse(data) - const str = JSON.stringify(data, null, indent) - console.log(str) - resolve() +const printObjectPromise = data => new Promise( resolve => { + const indent = 2 + data = JSON.parse(data) + const str = JSON.stringify(data, null, indent) + console.log(str) + resolve() }) const printObjectAsync = async data => { - const indent = 2 - data = JSON.parse(data) - const str = JSON.stringify(data, null, indent) - console.log(str) + const indent = 2 + data = JSON.parse(data) + const str = JSON.stringify(data, null, indent) + console.log(str) } ``` diff --git a/exercises/06_code_quality/asyncFunctions.js b/exercises/06_code_quality/asyncFunctions.js index cca2bfda..a272cf25 100644 --- a/exercises/06_code_quality/asyncFunctions.js +++ b/exercises/06_code_quality/asyncFunctions.js @@ -30,7 +30,7 @@ const checkValidCurrencyCode = code => new Promise( (resolve, reject) => { request(baseURL, (err, res, body) => { if (err) reject(new Error('invalid API call')) const rates = JSON.parse(body).rates - if (!rates.hasOwnProperty(code)) it.throw(new Error(`invalid currency code ${code}`)) + if (!rates.hasOwnProperty(code)) throw new Error(`invalid currency code ${code}`) resolve() }) }) diff --git a/exercises/06_code_quality/todo/jsdoc.conf b/exercises/06_code_quality/todo/jsdoc.conf new file mode 100644 index 00000000..a8b02479 --- /dev/null +++ b/exercises/06_code_quality/todo/jsdoc.conf @@ -0,0 +1,24 @@ +{ + "plugins": ["jsdoc-route-plugin"], + "recurseDepth": 10, + "source": { + "include": [ "." ], + "exclude": [ "node_modules" ], + "includePattern": ".+\\.js(doc|x)?$", + "excludePattern": "(^|\\/|\\\\)_" + }, + "sourceType": "module", + "tags": { + "allowUnknownTags": true, + "dictionaries": ["jsdoc","closure"] + }, + "templates": { + "cleverLinks": false, + "monospaceLinks": false + }, + "opts": { + "encoding": "utf8", + "destination": "./docs/jsdoc", + "recurse": true + } +} \ No newline at end of file diff --git a/solutions/06_code_quality/asyncFunctions.js b/solutions/06_code_quality/asyncFunctions.js new file mode 100644 index 00000000..eaa1d1b3 --- /dev/null +++ b/solutions/06_code_quality/asyncFunctions.js @@ -0,0 +1,67 @@ + +'use strict' + +const request = require('request') +const readline = require('readline-sync') +const fs = require('fs') + +const baseURL = 'https://api.exchangeratesapi.io/latest' + +async function main() { + try { + const base = await getInput('enter base currency') + await checkValidCurrencyCode(base) + const data = await getData(`${baseURL}?base=${base}`) + const rates = JSON.parse(data).rates + await printObject(data) + const to = await getInput('convert to') + await checkValidCurrencyCode(to) + console.log(to) + const amount = await getInput('enter exchange amount') + const decoder = await readObjectFromFile('currencies.json') + console.log(`${amount} ${decoder[base]} (${base}) is worth ${ + (rates[to] * amount).toFixed(4)} ${decoder[to]} (${to})`) + process.exit() + } catch (err) { + console.log(`error: ${err.message}`) + } +} + +const getInput = async prompt => readline.question(`${prompt}: `) + +const checkValidCurrencyCode = code => new Promise( (resolve, reject) => { + code = code.trim() + request(baseURL, (err, res, body) => { + if (err) reject(new Error('invalid API call')) + const rates = JSON.parse(body).rates + if (!rates.hasOwnProperty(code)) throw new Error(`invalid currency code ${code}`) + resolve() + }) +}) + +const getData = url => new Promise( (resolve, reject) => { + request(url, (err, res, body) => { + if (err) reject(new Error('invalid API call')) + resolve(body) + }) +}) + +const printObject = async data => { + const indent = 2 + data = await JSON.parse(data) + const str = JSON.stringify(data, null, indent) + await new Promise( resolve => { + console.log(str) + resolve() + }) + +} + +const readObjectFromFile = fileName => new Promise( (resolve, reject) => { + fs.readFile(fileName, 'utf-8', (err, content) => { + if (err) reject(new Error(err)) + return resolve(JSON.parse(content)) + }) +}) + +main() diff --git a/solutions/06_code_quality/nestedCallbacks.js b/solutions/06_code_quality/nestedCallbacks.js new file mode 100644 index 00000000..789ae5c1 --- /dev/null +++ b/solutions/06_code_quality/nestedCallbacks.js @@ -0,0 +1,52 @@ +#!/usr/bin/env node + +/* eslint max-lines-per-function: 0 */ + +'use strict' + +const request = require('request') +const readline = require('readline') +const fs = require('fs') + +const io = { input: process.stdin, output: process.stdout } + +const read = readline.createInterface(io) +read.question('input base currency: ', base => { + console.log(`You entered ${base}`) + read.close() + base = base.trim() + // now we need to check the code is valid + request('https://api.exchangeratesapi.io/latest', (err, res, body) => { + if (err) { + console.error(err.message) + process.exit() + } + const rates = JSON.parse(body).rates + if (!rates.hasOwnProperty(base)) { + console.error(`invalid currency code ${base}`) + process.exit() + } + // now we can get the currency rates + request(`https://api.exchangeratesapi.io/latest?base=${base}`, (err, res, body) => { + if (err) { + console.error(err.message) + process.exit() + } + body = JSON.parse(body) + console.log(body) + // lets ask another question + const read = readline.createInterface(io) + read.question('convert to: ', convertTo => { + read.question('amount to convert: ', amount => { + read.close() + fs.readFile('currencies.json', 'utf8', (err, content) => { + if(err) console.error(error.message) + const decoder = JSON.parse(content) + console.log(`${amount} ${decoder[base]} (${base}) is worth ${ + (body.rates[convertTo] * amount).toFixed(4)} ${decoder[convertTo]} (${convertTo})`) + }) + }) + }) + }) + }) +}) diff --git a/solutions/06_code_quality/promises.js b/solutions/06_code_quality/promises.js new file mode 100644 index 00000000..82a6d831 --- /dev/null +++ b/solutions/06_code_quality/promises.js @@ -0,0 +1,70 @@ + +'use strict' + +const request = require('request') +const readline = require('readline') +const fs = require('fs') + +const baseURL = 'https://api.exchangeratesapi.io/latest' + +const getInput = prompt => new Promise(resolve => { + const read = readline.createInterface({ input: process.stdin, output: process.stdout }) + read.question(`${prompt}: `, value => { + console.log(`You entered ${value}`) + read.close() + return resolve(value) + }) +}) + +const checkValidCurrencyCode = code => new Promise( (resolve, reject) => { + code = code.trim() + request(baseURL, (err, res, body) => { + if (err) reject(new Error('invalid API call')) + const rates = JSON.parse(body).rates + if (!rates.hasOwnProperty(code)) reject(new Error(`invalid currency code ${code}`)) + return resolve(code) + }) +}) + +const getData = code => new Promise( (resolve, reject) => { + request(`${baseURL}?base=${code}`, (err, res, body) => { + if (err) reject(new Error('invalid API call')) + return resolve(body) + }) +}) + +const printObject = data => new Promise( resolve => { + const indent = 2 + data = JSON.parse(data) + const str = JSON.stringify(data, null, indent) + console.log(str) + return resolve() +}) + +const exit = () => new Promise( () => { + process.exit() +}) + +const readObjectFromFile = fileName => new Promise( (resolve, reject) => { + fs.readFile(fileName, 'utf-8', (err, content) => { + if (err) reject(new Error(err)) + return resolve(JSON.parse(content)) + }) +}) + +getInput('enter base currency') + .then(checkValidCurrencyCode) + .then(code => this.base = code) + .then( () => getData(this.base)) + .then( body => this.rates = JSON.parse(body).rates) + .then( () => getInput('convert to')) + .then(checkValidCurrencyCode) + .then( code => this.convertTo = code) + .then( () => readObjectFromFile('currencies.json')) + .then(fileObject => this.decoder = fileObject) + .then( () => getInput('enter exchange amount')) + .then( amount => console.log(`${amount} ${this.decoder[this.base]} (${this.base}) is worth ${ + (this.rates[this.convertTo] * amount).toFixed(4)} ${this.decoder[this.convertTo]} (${this.convertTo})`)) + .then(exit) + .catch(err => console.error(`error: ${err.message}`)) + .then(exit) diff --git a/solutions/06_code_quality/todo/index.js b/solutions/06_code_quality/todo/index.js new file mode 100644 index 00000000..2c514484 --- /dev/null +++ b/solutions/06_code_quality/todo/index.js @@ -0,0 +1,80 @@ +#!/usr/bin/env node + +/** + * Server index module + * @module index + */ + +const Koa = require('koa') +const Router = require('koa-router') +const stat = require('koa-static') +const bodyParser = require('koa-bodyparser') +const handlebars = require('koa-hbs-renderer') + +const app = new Koa() +const router = new Router() +app.use(stat('public')) +app.use(bodyParser()) +app.use(handlebars({ paths: { views: `${__dirname}/views` } })) +app.use(router.routes()) + +// The through which the server will communicate +const port = 8080 + +const List = require('./modules/list').List +const list = new List() + +/** + * Get the home page + * @name Home + * @route {GET} / + */ +router.get('/', ctx => { + try { + const items = list.getAll() + console.log(items) + const data = {items} + ctx.render('home', data) + } catch(err) { + console.log(err.message) + ctx.render('home', {msg: err.message}) + } +}) + +/** + * Add an item to the list + * @name Add item + * @route {POST} / + */ +router.post('/', ctx => { + try { + const body = ctx.request.body + console.log(body) + list.add(body.item, body.qty) + ctx.redirect('/') + } catch(err) { + console.log(err.message) + ctx.redirect(`/?msg=${err.message}`) + } +}) + +/** + * Delete an item from the list + * @name Delete item + * @route {get} /delete/:key + */ +router.get('/delete/:key', ctx => { + try { + const key = ctx.params.key + console.log(`key: ${key}`) + list.delete(key) + ctx.redirect('/?msg=item deleted') + } catch(err) { + console.log(err.message) + ctx.redirect(`/${err.message}`) + } +}) + +module.exports = app.listen(port, () => { + console.log(`listening on port ${port}`) +}) diff --git a/solutions/06_code_quality/todo/list.js b/solutions/06_code_quality/todo/list.js new file mode 100644 index 00000000..33b8dc9b --- /dev/null +++ b/solutions/06_code_quality/todo/list.js @@ -0,0 +1,53 @@ + +/** + * Class representing a list of items. + * */ +class List { + + /** + * Create a list. + */ + constructor() { + this.items = [] + } + + /** + * Add an item to the list. + * @param {String} item - The name of the eitem. + * @param {Number} qty - The number of items to add. + */ + add(item, qty) { + const data = {item: item, qty: qty} + this.items.push(data) + } + + /** + * Return the list of items. + * @return {Array.<{item: String, qty: Number}>} An array containing the items. + */ + getAll() { + return this.items.map( (element, index) => ({key: index, item: element.item, qty: element.qty})) + } + + /** + * Delete an item from the list. + * @param {Number} id - The index of the deletable item + */ + delete(id) { + this.items.splice(id, 1) + } + + /** + * Return the number of items in the list + * @return {Number} The number of items in the list + */ + count() { + return this.items.count + } + +} + +// exporting the class by name adds the name to the documentation +module.exports = { + List +} From 276525ad90f0824b1384fb4ee23ec7cd9e544ff4 Mon Sep 17 00:00:00 2001 From: Balazs Bordas Date: Sun, 25 Oct 2020 20:26:32 +0100 Subject: [PATCH 106/106] sample solutions and error fixes for 07_unit_testing --- 07 Unit Testing.md | 20 +- .../07_unit_testing/database/modules/todo.js | 7 +- solutions/07_unit_testing/database/todo.js | 59 +++++ .../07_unit_testing/database/todo.spec.js | 163 ++++++++++++ solutions/07_unit_testing/todo/todo.js | 43 ++++ solutions/07_unit_testing/todo/todo.spec.js | 242 ++++++++++++++++++ 6 files changed, 521 insertions(+), 13 deletions(-) create mode 100644 solutions/07_unit_testing/database/todo.js create mode 100644 solutions/07_unit_testing/database/todo.spec.js create mode 100644 solutions/07_unit_testing/todo/todo.js create mode 100644 solutions/07_unit_testing/todo/todo.spec.js diff --git a/07 Unit Testing.md b/07 Unit Testing.md index 6242a6e7..8b2d41ba 100644 --- a/07 Unit Testing.md +++ b/07 Unit Testing.md @@ -17,7 +17,7 @@ We will be using a tool called [Jest](https://jestjs.io) which was originally de READ THE FOLLOWING CAREFULLY -**In the previous labs you have opened the `foundation` directory in VS Code and hd access to all the files and subfolders. The testing tools require you to open the folder containing the project we want to test directly so you will need to use the file menu and open the `foundation/exercises/07_unit_testing/todo/` directory.** +**In the previous labs you have opened the `foundation` directory in VS Code and had access to all the files and subfolders. The testing tools require you to open the folder containing the project we want to test directly so you will need to use the file menu and open the `foundation/exercises/07_unit_testing/todo/` directory.** The project has a number of node package dependencies which are listed in the `package.json` file. Start by installing all of these and then you should start the server and have a look at the website. As you can see it is a simple todo list, try adding a few items and deleting them, you will see that only some of the functionality has been implemented! @@ -110,7 +110,7 @@ Any code highlighted in red is not covered by your test suite. ### 1.4 Running the Tests Using Visual Studio Code -In the previous section you learned how to run a test suite and check code coverage just using the CLI (terminal) and this will work regardless of the environment you are using. In this section you will learn how to run your test suite using VS Code together with a feww useful extensions. +In the previous section you learned how to run a test suite and check code coverage just using the CLI (terminal) and this will work regardless of the environment you are using. In this section you will learn how to run your test suite using VS Code together with a few useful extensions. ### 1.5 Visual Studio Code Extensions @@ -268,11 +268,11 @@ Here is a possible solution: ```javascript module.exports.add = (item, qty) => { qty = Number(qty) - if(isNaN(qty)) throw new Error('the quantity must be a number') + if(isNaN(qty)) throw new Error('qty must be a number') let flag = false for(let index in data) { if (data[index].item === item) { - data[index].qty+= qty + data[index].qty += qty flag = true } } @@ -295,11 +295,11 @@ There is not a lot we can do to the program code: ```javascript module.exports.add = (item, qty) => { qty = Number(qty) - if(isNaN(qty)) throw new Error('the quantity must be a number') + if(isNaN(qty)) throw new Error('qty must be a number') let flag = false for(const index in data) { if (data[index].item === item) { - data[index].qty+= qty + data[index].qty += qty flag = true } } @@ -327,7 +327,7 @@ Run the test suite to check there are no errors. }) ``` -Again, check that all the test still pass. As a final check start the web server and see if it works in the browser. Congratulations, you have now completed your first TDD iteration. +Again, check that all the tests still pass. As a final check start the web server and see if it works in the browser. Congratulations, you have now completed your first TDD iteration. ### 1.8 Test Your Understanding @@ -378,7 +378,7 @@ In this version we export a NodeJS [Class](https://developer.mozilla.org/en-US/d The `unit tests/todo.js` script contains the same tests as the array-based version but each test now: -1. Uses an object constructor to get a `ToDo` object asynchronouly. +1. Uses an object constructor to get a `ToDo` object asynchronously. 2. Calls the appropriate async method(s). ### 2.2 In-Memory Databases @@ -419,10 +419,10 @@ You will now complete a few more TDD iterations: 1. What happens if you leave the item box empty? This should throw an error, not add a blank item. 2. What happens if you leave the qty box empty? Solve this in a similar way. -3. What happens if you click on one of the **Delete** links? Implement this feature. Remember that since this is testing the `delete()` function you need to create a new _test suite_ called `delete()` in the same test suite. +3. What happens if you click on one of the **Delete** links? Implement this feature. Remember that since this is testing the `delete()` function you need to create a new _test suite_ called `delete()` in the same unit test script. 4. Can you write one or more tests for the `getAll()` function? 5. And for the `clear()` function as well. As before, are you gettting 100% code coverage? If not, write more tests. Are you covering the edge cases and checking for correct handling of bad data? -Note that there appears to be a bug in the VS Code debugger when stepping through a function that returns a promise. If the debugger sends you to a script called `async_hooks.js` you can get stuck in an loop. When the debugger is highlighting the closing brace of an async function press the **Step Out** button a few times (typically) to return to the parent function. Remember you can add breakpoints to the test as well as the module code. +Note that there appears to be a bug in the VS Code debugger when stepping through a function that returns a promise. If the debugger sends you to a script called `async_hooks.js` you can get stuck in a loop. When the debugger is highlighting the closing brace of an async function press the **Step Out** button a few times (typically) to return to the parent function. Remember you can add breakpoints to the test as well as the module code. diff --git a/exercises/07_unit_testing/database/modules/todo.js b/exercises/07_unit_testing/database/modules/todo.js index 8e6309e7..3b74179d 100644 --- a/exercises/07_unit_testing/database/modules/todo.js +++ b/exercises/07_unit_testing/database/modules/todo.js @@ -17,9 +17,7 @@ module.exports = class ToDo { async add(item, qty) { qty = Number(qty) if(isNaN(qty)) throw new Error('the quantity must be a number') - let sql = 'SELECT * FROM items;' - // const dataAll = await this.db.all(sql) - sql = `SELECT * FROM items WHERE ITEM = "${item}"` + let sql = `SELECT * FROM items WHERE ITEM = "${item}"` const data = await this.db.all(sql) if(data.length === 0) { sql = `INSERT INTO items(item, qty) VALUES("${item}", ${qty})` @@ -49,4 +47,7 @@ module.exports = class ToDo { return data.items } + async clear() { + await this.db.run('DELETE FROM items') + } } diff --git a/solutions/07_unit_testing/database/todo.js b/solutions/07_unit_testing/database/todo.js new file mode 100644 index 00000000..106f408d --- /dev/null +++ b/solutions/07_unit_testing/database/todo.js @@ -0,0 +1,59 @@ + +'use strict' + +const sqlite = require('sqlite-async') + +module.exports = class ToDo { + + constructor(dbName = ':memory:') { + return (async() => { + this.db = await sqlite.open(dbName) + const sql = 'CREATE TABLE IF NOT EXISTS items(id INTEGER PRIMARY KEY AUTOINCREMENT, item TEXT, qty NUMERIC)' + await this.db.run(sql) + return this + })() + } + + async add(item, qty) { + if (item === '') throw new Error('item cannot be empty') + if (qty === '') throw new Error('qty cannot be empty') + qty = Number(qty) + if(isNaN(qty)) throw new Error('the quantity must be a number') + let sql = `SELECT * FROM items WHERE ITEM = "${item}"` + const data = await this.db.all(sql) + if(data.length === 0) { + sql = `INSERT INTO items(item, qty) VALUES("${item}", ${qty})` + await this.db.run(sql) + } else { + const newQty = data[0].qty + qty + sql = `UPDATE items SET qty=${newQty} WHERE ITEM = "${item}"` + await this.db.run(sql) + } + } + + async getAll() { + const sql = 'SELECT * FROM items' + const data = await this.db.all(sql) + console.log(data) + return data + } + + async delete(id) { + if (id === undefined) throw new Error('id cannot be undefined') + id = Number(id) + if (isNaN(id)) throw new Error('id must be a number') + const sql = `DELETE FROM items WHERE id=${id}` + if ((await this.db.run(sql)).changes === 0) throw new Error('id has to exist') + } + + async countItems() { + const sql = 'SELECT COUNT(*) as items FROM items' + const data = await this.db.get(sql) + return data.items + } + + async clear() { + await this.db.run('DELETE FROM items') + } + +} diff --git a/solutions/07_unit_testing/database/todo.spec.js b/solutions/07_unit_testing/database/todo.spec.js new file mode 100644 index 00000000..7a3663af --- /dev/null +++ b/solutions/07_unit_testing/database/todo.spec.js @@ -0,0 +1,163 @@ + +'use strict' + +const ToDo = require('../modules/todo.js') + +beforeAll( async() => { + // stuff to do before any of the tests run +}) + +afterAll( async() => { + // runs after all the tests have completed +}) + +describe('add()', () => { + // block of tests + // beforeEach( async() => { + // todo.clear() + // }) + afterEach( async() => { + // runs after each test completes + }) + test('add a single item', async done => { + expect.assertions(1) + // ARRANGE + const todo = await new ToDo() // DB runs in-memory if no name supplied + // ACT + await todo.add('bread', 3) + const count = await todo.countItems() + // ASSERT + expect(count).toBe(1) + done() + }) + + test('qty must be a number', async done => { + expect.assertions(1) + const todo = await new ToDo() + await expect( todo.add('bread', 'three') ).rejects.toEqual( Error('the quantity must be a number') ) + done() + }) + + test('duplicates should increase qty', async done => { + expect.assertions(2) + // ARRANGE + const todo = await new ToDo() + // ACT + await todo.add('bread', 4) + await todo.add('bread', 2) + const data = await todo.getAll() + const qty = data[0].qty + // ASSERT (note there are two assertions as stated on line 42) + expect(data).toHaveLength(1) + expect(qty).toEqual(6) + done() + }) + + test('item cannot be empty', async done => { + expect.assertions(1) + const todo = await new ToDo() + await expect( todo.add('', 1) ).rejects.toEqual( Error('item cannot be empty') ) + done() + }) + + test('qty cannot be empty', async done => { + expect.assertions(1) + const todo = await new ToDo() + await expect( todo.add('bread', '') ).rejects.toEqual( Error('qty cannot be empty') ) + done() + }) + +}) + +describe('delete()', () => { + beforeEach( async() => { + this.todo = await new ToDo() + await this.todo.add('bread', 5) + }) + + test('id cannot be undefined', async done => { + expect.assertions(1) + await expect( this.todo.delete() ).rejects.toEqual( Error('id cannot be undefined') ) + done() + }) + + test('id must be a number', async done => { + expect.assertions(1) + await expect( this.todo.delete('a') ).rejects.toEqual( Error('id must be a number') ) + done() + }) + + test('id has to exist', async done => { + expect.assertions(1) + await expect( this.todo.delete(2) ).rejects.toEqual( Error('id has to exist') ) + done() + }) + + test('delete an item', async done => { + expect.assertions(2) + await this.todo.delete(1) + expect(await this.todo.countItems()).toEqual(0) + expect(await this.todo.getAll()).toEqual([]) + done() + }) +}) + +describe('getAll()', () => { + beforeEach( async() => { + this.todo = await new ToDo() + }) + + test('getAll() with no items', async done => { + expect.assertions(1) + expect(await this.todo.getAll()).toEqual([]) + done() + }) + + test('getAll() with a single item', async done => { + expect.assertions(1) + await this.todo.add('bread', 2) + expect(await this.todo.getAll()).toEqual([{"item":"bread", "qty":2, "id":1}]) + done() + }) + + test('getAll() with two items', async done => { + expect.assertions(1) + await this.todo.add('bread', 2) + await this.todo.add('ham', 3) + expect(await this.todo.getAll()).toEqual([{"item":"bread", "qty":2, "id":1}, {"item":"ham", "qty":3, "id":2}]) + done() + }) +}) + +describe('clear()', () => { + beforeEach( async() => { + this.todo = await new ToDo() + }) + + test('clear() with no items', async done => { + expect.assertions(2) + await this.todo.clear() + expect(await this.todo.countItems()).toEqual(0) + expect(await this.todo.getAll()).toEqual([]) + done() + }) + + test('clear() with a single item', async done => { + expect.assertions(2) + await this.todo.add('bread', 2) + await this.todo.clear() + expect(await this.todo.countItems()).toEqual(0) + expect(await this.todo.getAll()).toEqual([]) + done() + }) + + test('clear() with two items', async done => { + expect.assertions(2) + await this.todo.add('bread', 2) + await this.todo.add('ham', 3) + await this.todo.clear() + expect(await this.todo.countItems()).toEqual(0) + expect(await this.todo.getAll()).toEqual([]) + done() + }) +}) diff --git a/solutions/07_unit_testing/todo/todo.js b/solutions/07_unit_testing/todo/todo.js new file mode 100644 index 00000000..844c2a62 --- /dev/null +++ b/solutions/07_unit_testing/todo/todo.js @@ -0,0 +1,43 @@ + +'use strict' + +let data = [] + +module.exports.clear = () => { + data = [] +} + +module.exports.add = (item, qty) => { + if (item === '') throw new Error('item cannot be empty') + if (qty === '') throw new Error('qty cannot be empty') + qty = Number(qty) + if(isNaN(qty)) throw new Error('qty must be a number') + let flag = false + for(const index in data) { + if (data[index].item === item) { + data[index].qty += qty + flag = true + } + } + if(flag === false) data.push({item: item, qty: qty}) +} + +module.exports.getAll = () => { + for(const key in data) data[key].key = Number(key) + return data +} + +module.exports.delete = key => { + console.log(`delete key ${key}`) + if (key === undefined) throw new Error('key cannot be undefined') + key = Number(key) + if (isNaN(key)) throw new Error('key must be a number') + try { + this.getAll()[key].key // throws error unless the item with the target key exists + data.splice(key, 1) + } catch { + throw new Error('key has to exist') + } +} + +module.exports.countItems = () => data.length diff --git a/solutions/07_unit_testing/todo/todo.spec.js b/solutions/07_unit_testing/todo/todo.spec.js new file mode 100644 index 00000000..a0bdc7d4 --- /dev/null +++ b/solutions/07_unit_testing/todo/todo.spec.js @@ -0,0 +1,242 @@ + +'use strict' + +const todo = require('../modules/todo.js') + +beforeAll( async() => { + // stuff to do before any of the tests run +}) + +afterAll( async() => { + // runs after all the tests have completed +}) + +describe('add()', () => { + // block of tests + beforeEach( async() => { + todo.clear() + }) + afterEach( async() => { + // runs after each test completes + }) + test('add a single item', async done => { + expect.assertions(1) + try { + todo.add('bread', 3) + expect(todo.countItems()).toBe(1) + } catch(err) { + done.fail(err) + } finally { + done() + } + }) + test('qty must be a number', async done => { + expect.assertions(1) + try { + todo.add('bread', 'three') + done.fail('test failed') + } catch(err) { + expect(err.message).toBe('qty must be a number') + } finally { + done() + } + }) + + test('duplicates should increase qty', async done => { + expect.assertions(2) + try { + // ACT + todo.add('bread', 4) + todo.add('bread', 2) + // ASSERT + const count = todo.countItems() + expect(count).toBe(1) + const data = todo.getAll() + const qty = data[0].qty + expect(qty).toEqual(6) + } catch(err) { + done.fail('test failed') + } finally { + done() + } + }) + + test('item cannot be empty', async done => { + expect.assertions(1) + try { + todo.add('', 1) + done.fail('test failed') + } catch(err) { + expect(err.message).toBe('item cannot be empty') + } finally { + done() + } + }) + + test('qty cannot be empty', async done => { + expect.assertions(1) + try { + todo.add('bread', '') + done.fail('test failed') + } catch(err) { + expect(err.message).toBe('qty cannot be empty') + } finally { + done() + } + }) +}) + +describe('delete()', () => { + beforeEach( async() => { + todo.clear() + todo.add('bread', 2) + }) + afterEach( async() => { + }) + + test('key cannot be undefined', async done => { + expect.assertions(1) + try { + todo.delete() + done.fail('test failed') + } catch(err) { + expect(err.message).toBe('key cannot be undefined') + } finally { + done() + } + }) + + test('key must be a number', async done => { + expect.assertions(1) + try { + todo.delete('a') + done.fail('test failed') + } catch(err) { + expect(err.message).toBe('key must be a number') + } finally { + done() + } + }) + + test('key has to exist', async done => { + expect.assertions(1) + try { + todo.delete(1) + done.fail('test failed') + } catch(err) { + expect(err.message).toBe('key has to exist') + } finally { + done() + } + }) + + test('delete an item', async done => { + expect.assertions(1) + try { + todo.delete(0) + expect(todo.getAll()).toEqual([]) + } catch(err) { + done.fail('test failed') + console.log(err) + } finally { + done() + } + }) +}) + +describe('getAll()', () => { + beforeEach( async() => { + todo.clear() + }) + afterEach( async() => { + }) + + test('getAll() with no items', async done => { + expect.assertions(1) + try { + expect(todo.getAll()).toEqual([]) + } catch(err) { + done.fail('test failed') + console.log(err) + } finally { + done() + } + }) + + test('getAll() with a single item', async done => { + expect.assertions(1) + try { + todo.add('bread', 2) + expect(todo.getAll()).toEqual([{"item":"bread", "qty":2, "key":0}]) + } catch(err) { + done.fail('test failed') + console.log(err) + } finally { + done() + } + }) + + test('getAll() with two items', async done => { + expect.assertions(1) + try { + todo.add('bread', 2) + todo.add('ham', 3) + expect(todo.getAll()).toEqual([{"item":"bread", "qty":2, "key":0}, {"item":"ham", "qty":3, "key":1}]) + } catch(err) { + done.fail('test failed') + console.log(err) + } finally { + done() + } + }) +}) + +describe('clear()', () => { + beforeEach( async() => { + todo.clear() + }) + afterEach( async() => { + }) + + test('clear() with no items', async done => { + expect.assertions(1) + try { + todo.clear() + expect(todo.getAll()).toEqual([]) + } catch(err) { + done.fail('test failed') + console.log(err) + } finally { + done() + } + }) + + test('clear() with 1 item', async done => { + expect.assertions(1) + try { + todo.add('bread', 2) + todo.clear() + expect(todo.getAll()).toEqual([]) + } catch(err) { + done.fail('test failed') + console.log(err) + } finally { + done() + } + }) + + test('clear() with 2 items', async done => { + expect.assertions(1) + try { + todo.add('bread', 2) + todo.add('ham', 3) + todo.clear() + expect(todo.getAll()).toEqual([]) + } catch(err) { + done.fail('test failed') + console.log(err) + } finally { + done() + } + }) +})
    RAM
    @@ -92,7 +92,7 @@ Every resource on the WWW (such as html documents and images) has a unique URL a 1. Some resources need to be directly accessible in the web browser (they are accessed either directly or loaded by the html web page). These need to have their own directly accessible URL. 1. One directory needs to be specified as being publicly available. In this example we have created a directory called `public/` 2. Koa needs to make this directory public. This is achieved on line by importing a static module and using this to specify the public directory. - 3. assuming the server is running you can directly view the image using the URL `http://xxx:8080/paradox.jpeg`, remembering to substitute your server's URL. + 3. Assuming the server is running you can directly view the image using the URL `http://localhost:8080/paradox.jpeg`, remembering to substitute your server's URL. 2. Some resources are _virtual_ and are generated by a script running on the server before being sent back to the browser client. 1. There are some simple examples in `index.js`. Both the `/` and `/paradoxes` routes trigger scripts that take the contents of html files and send this back to the browser. 2. When you access the `/date` route it displays today's date. Look at the script that does this (you don't need to understand the code details). @@ -100,7 +100,7 @@ Every resource on the WWW (such as html documents and images) has a unique URL a #### 3.1.1 Test Your Knowledge 1. There is a file called `coventry_cathedral.jpg` in the `public/` directory. Display this in the browser. -2. Create a route called `/cathedral` which should return the contents of the `cathedral.html` file located in the `html/` directory. +2. Create a route called `/cathedral` which should return the contents of the `cathedral.html` file located in the `views/` directory. 3. Create a route called `/time` that displays the current time in hours and minutes. There is detailed documentation on the [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) function on the Mozilla website. ### 3.2 Hyperlinks @@ -115,23 +115,21 @@ Add a link to the appropriate Wikipedia article to this web page, in a suitable To test the functionality in your browser you will need to make sure the server is running and navigate to the correct URL. -A link, defined by the `a` element contains the URL of the linked web page as its `href` attribute. The link above contains an absolute path to a document on the external server. The absolute path begins will full protocol identifier and domain name. +A link, defined by the `a` element contains the URL of the linked web page as its `href` attribute. The link above contains an absolute path to a document on the external server. The absolute path begins with full protocol identifier and domain name. Unlike block elements (such as `h1` or `p`), links are inline elements: they always need a block element as a container and they are considered as a running part of the content of the parent block element. -A relative link is intended for links within the same domain. The parsing of the file path starts from the default directory, which is the directory where the containing HTML document is located. For instance: +A relative link is intended for links within the same domain. The parsing of the file path starts from the default directory, which is the directory where the containing HTML document is located, or as it is in this case, the directory specified with `koa-static`, which is `public/`. For instance: - `"document.html"` points to a document of that name in the default directory. - `"info/document.html"` points to a document in `info` subdirectory of the default directory. - `"../document.html"` points to a document in the parent directory of the default directory. (Note that, for security reasons, web servers prohibit the traversal of server's directory structure outside the dedicated document root folder.) -Add a link or two to suitable places in **computers80.html**. - ### Test your understanding -1. Create a relative link between the list item on the home page and the page on the Commodore 64. -2. Add a link at the bottom of the Commodore 64 page called **Back** which returns the user to the home page. -3. Create a file called **spectrum.html** in the `html/` directory with the content shown below correctly marked up as HTML 5. +1. Create a relative link between the list item on the home page and the page on the `Commodore 64`. +2. Add a link at the bottom of the `Commodore 64` page called **Back** which returns the user to the home page. +3. Create a file called **spectrum.html** in the `views/` directory with the content shown below correctly marked up as HTML 5. 4. Create a new `/spectrum` route in the `index.js`. 5. Add new link to the list on the home page to send the user to this new page. 6. Make sure there is a link on the Spectrum page to return the user to the home page! @@ -184,7 +182,7 @@ There are a couple of notable things about the `img` element: | Attribute | Purpose | |-----------|---------------------------------------------------------------------------------------------------------------------------------------------| -| src | For locating the image file. The file path is normally given as relative path, starting from the directory where the HTML file is located. | +| src | For locating the image file. The file path is normally given as relative path, starting from the default directory. | | alt | For displaying an alternative text if the image cannot be displayed, or if the user prefers using a screen reader for accessibility purposes. | #### 3.3.1 Test Your Understanding @@ -206,7 +204,7 @@ Now we will learn how to embed audio in a website. There are a number of resourc 2. In a similar way, video can also be embedded: 1. Most browsers require a video file encoded as `.mp4`. 2. Firefox needs an `.ogg` encoded version. -3. You can also embed a [YouTube](https://www.youtube.com) video in an ` +

    Embedded youtube video via object

    + + + \ No newline at end of file diff --git a/solutions/03_html/03_hypermedia/views/spectrum.html b/solutions/03_html/03_hypermedia/views/spectrum.html new file mode 100644 index 00000000..22b82ba0 --- /dev/null +++ b/solutions/03_html/03_hypermedia/views/spectrum.html @@ -0,0 +1,66 @@ + + + + + Sinclair ZX Spectrum + + + +

    Sinclair ZX Spectrum

    +
    + A Sinclair ZX Spectrum computer +
    Photo: Bill Bertram, CC via https://commons.wikimedia.org/
    +
    +
    + + \ No newline at end of file diff --git a/solutions/03_html/04_tables/comparison.html b/solutions/03_html/04_tables/comparison.html new file mode 100644 index 00000000..b512bad0 --- /dev/null +++ b/solutions/03_html/04_tables/comparison.html @@ -0,0 +1,62 @@ + + + + + Comparison of three computers + + + + +

    A comparison of technical data of three popular 80's home computers:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Technical comparison
    PropertyCommodore 64ZX SpectrumCommodore VIC-20Spectravideo SV-328
    CPUMOS Technology 6510Zilog Z80MOS Technology 6502Zilog Z80A
    RAM64 kilobytes16 or 64 kilobytes5 kilobytes64 kilobytes
    ROM20 kilobytes16 kilobytes16 kilobytes32 kilobytes
    Main usagehome computing
    Killer gameJet Set WillyJelly MonstersArmoured Assault
    + +
    + + + + \ No newline at end of file diff --git a/solutions/03_html/05_semantic/cafe.html b/solutions/03_html/05_semantic/cafe.html new file mode 100644 index 00000000..05a525ab --- /dev/null +++ b/solutions/03_html/05_semantic/cafe.html @@ -0,0 +1,43 @@ + + + + + + The Java Bakery Cafe + + + + + Logo of Java Bakery Cafe + +

    Welcome to the Java Bakery Cafe

    + +

    + The Java Cafe is passionate in providing quality home-baked goods, deliciously innovative + classic dishes and excellent beverages that evoke the atmosphere of the 1990s. +

    + +

    + Our cafés in Coventry and Cupertino aim to provide a wonderful place to relax, socialise, work, + hold meetings and above all enjoy exceptional-quality food and drinks at an unbeatable price. +

    + +

    Payment in GBP only.

    + +

    Price range: $$

    + +

    Hours: Mo-Fri 10am-7pm Sa 10am-22pm Su 10am-21pm

    + +

    Payment accepted: Cash, Credit Card

    + +

    Priory Street, Coventry, CV1 5FB

    + +

    Tourist Board 4 star rating

    + +

    Serves Lavazza coffee

    + +

    javacafe@example.com

    + +

    Tel: 024 7655 5555

    + + diff --git a/solutions/03_html/06_markdown/computers.md b/solutions/03_html/06_markdown/computers.md new file mode 100644 index 00000000..60eeef7c --- /dev/null +++ b/solutions/03_html/06_markdown/computers.md @@ -0,0 +1,41 @@ + +# 80s Computers + +Here is a list of the best computers from the 1980s. + +1. Sinclair ZX80 +1. Commodore 64 +1. ZX Spectrum +1. Compaq Portable + +| Computer | Year | +| --------------- | ----: | +| Sinclair ZX80 | 1980 | +| Commodore64 | 1982 | +| ZX Spectrum | 1982 | +| Compaq Portable | 1982 | + +## Hardware +- Sinclair + - Z80 @ 3.25 MHz + - 1 KB (16 KB max.) +- Commodore 64 + - MOS Technology 6510/8500 + - MOS Technology VIC-II + - MOS Technology 6581/8580 SID + - Two 6526 Complex Interface Adapters + - 64 KB RAM + - 20 KB ROM +- ZX Spectrum + - Z80A @ 3.5 MHz + - 16 KB / 48 KB / 128 KB +- Compaq Portable + - Intel 8088, 4.77MHz + - 128 kilobytes RAM (expandable to 640 KiB) + +## Software +- Microsoft Word +- Pac-man +- Lotus 1-2-3 +- HyperCard +- Adobe Photoshop From c2c0cc96a7bcb7e87424ef863872cd2f604cd177 Mon Sep 17 00:00:00 2001 From: Balazs Bordas Date: Mon, 14 Sep 2020 20:34:49 +0200 Subject: [PATCH 102/106] fixed minor errors --- 01 Setup.md | 51 +++++++++++++++---------------- 02 HTTP.md | 32 +++++++++---------- 03 HTML5.md | 20 ++++++------ exercises/02_http/01_url/index.js | 4 +-- solutions/02_http/01_url/index.js | 6 ++-- 5 files changed, 54 insertions(+), 59 deletions(-) diff --git a/01 Setup.md b/01 Setup.md index 065039bd..3bd171e2 100644 --- a/01 Setup.md +++ b/01 Setup.md @@ -143,35 +143,32 @@ Now we have the server up and running so the final task is to view the web page ## 5 Using npm and its package.json -**Have a look at your `package.json` file and understand its contents** +**Have a look at your `package.json` file and understand its contents**. - When you are starting a new _project_, **you have to create this yourself**: - 1. Use the `npm init` command to create the package.json file - - You can leave all the options default, just leave them empty and keep pressing enter - - Alternatively you can run `npm init --yes`, it will simply leave everything default - 2. Install the dependencies for the first time using the `-S` _switch_ with `npm install` - - e.g.: `npm install -S koa koa-bodyparser` - - This would add something like this to the `package.json` file: - ```json - "dependencies": { - "koa": "^2.11.0", - "koa-bodyparser": "^4.2.1" - } - ``` - - When you next run `npm install -S `, the given package's _newest version_ will be simply added to the list, or in case of a new version for a _previously listed_ dependency, the _version number_ will be updated - - This `-S` is just a short version of the `--save` _switch_ - - **You can use the alternative `--save-dev` switch to install and save them as _development dependencies_** - - Something that you wouldn't want to deploy, but is necessary for development - - E.g. we will use `jest` for testing, and `eslint` for linting during the development phase, but these shouldn't be required to be installed during deployment - - You are done with adding the dependencies, now simply use `npm install` to install all of them at once! - - If you don't want to install development dependencies, use `npm install --production` - 3. This `package.json` file is also useful to store _scripts_: - - Look at the following line: ` "start": "nodemon index.js"` - - This lets us simply type `npm start` in the terminal to start our application via _nodemon_ - - Nodemon is a great tool that restarts the application every time we save a file in the given folder, so we don't actually have to manually stop and restart it after every modification. - - - +1. Use the `npm init` command to create the package.json file + - You can leave all the options default, just leave them empty and keep pressing enter + - Alternatively you can run `npm init --yes`, it will simply leave everything default +2. Install the dependencies for the first time using the `-S` _switch_ with `npm install` + - e.g.: `npm install -S koa koa-bodyparser` + - This would add something like this to the `package.json` file: + ```json + "dependencies": { + "koa": "^2.11.0", + "koa-bodyparser": "^4.2.1" + } + ``` + - When you next run `npm install -S `, the given package's _newest version_ will be simply added to the list, or in case of a new version for a _previously listed_ dependency, the _version number_ will be updated + - This `-S` is just a short version of the `--save` _switch_ + - **You can use the alternative `--save-dev` switch to install and save them as _development dependencies_** + - Something that you wouldn't want to deploy, but is necessary for development + - E.g. we will use `jest` for testing, and `eslint` for linting during the development phase, but these shouldn't be required to be installed during deployment + - You are done with adding the dependencies, now simply use `npm install` to install all of them at once! + - If you don't want to install development dependencies, use `npm install --production` +3. This `package.json` file is also useful to store _scripts_: + - Look at the following line: ` "start": "nodemon index.js"` + - This lets us simply type `npm start` in the terminal to start our application via _nodemon_ + - Nodemon is a great tool that restarts the application every time we save a file in the given folder, so we don't actually have to manually stop and restart it after every modification. ## 6 Pushing the Changes to GitHub diff --git a/02 HTTP.md b/02 HTTP.md index 39e3792d..d1817184 100644 --- a/02 HTTP.md +++ b/02 HTTP.md @@ -53,7 +53,7 @@ Study the `index.js` script in the `exercises/02_http/01_url/` directory. 3. `koa-bodyparser` 4. `koa-static` 5. `js2xmlparser` - - **You can install all these dependencies by simply running 'npm install' in the terminal.** + - **You can install all these dependencies by simply running `npm install` in the terminal.** - This command installs all the documented dependencies from the `package.json` file, which is already preconfigured in this case. - Refer to the `01_Setup.md` document's `Using npm and its package.json` chapter for more information @@ -66,7 +66,7 @@ Study the `index.js` script in the `exercises/02_http/01_url/` directory. 6. The main part of the script defines the _routes_ and we will be covering these in more detail as we progress through the lab. 7. Right at the end (line 138) we start the server on the defined port and _export_ the _koa object_ `app`. By exporting it we can import the script into our automated test suite (briefly covered in the previous lab). -Now start the server: +Now start the server by typing `npm start` into the terminal while in the correct directory and hitting enter: 1. Access the root url, notice that the message **Hello World** is displayed in the browser. 2. Access the `/anon` url. This should result in the same message being displayed. @@ -74,7 +74,7 @@ Now start the server: ### 1.2 URL Parameters -In the HTTP protocol URLs represent resources on the server. Up to this point each URL has matched a different _route_ (defined by an `router.get()` function) but on a real server there might be a database containing many thousands of records that we want to be able to access. For this to work, each record would need a different, unique, URL! Since each record in an SQL database has a unique key (primary key), a simple solution would be to include the primary key in the URL thus creating a different URL for each record. +In the HTTP protocol URLs represent resources on the server. Up to this point each URL has matched a different _route_ (defined by a `router.get()` function), but on a real server there might be a database containing many thousands of records that we want to be able to access. For this to work, each record would need a different, unique, URL! Since each record in an SQL database has a unique key (primary key), a simple solution would be to include the primary key in the URL thus creating a different URL for each record. To do this we need to extract some data from the http object `ctx` which is the parameter passed to the _anonymous callback function_. The `ctx` object is a _JavaScript Object_ and so we need to fully understand how these work. @@ -117,8 +117,8 @@ Each value in an object can be extracted using one or two different syntaxes: ```javascript const firstName = name.first const lastName = name['last name'] -const prop = year -const dobYear = name.dob.[prop] +const prop = 'year' +const dobYear = name.dob[prop] ``` New properties can be added and removed from an object. @@ -136,11 +136,11 @@ In this section you will learn about a number of JavaScript functions. In each c 1. Add a fourth book to the array and make sure you can access this by passing its index in the URL. 2. We are not restricted to only having two URL segments: 1. Modify the route to add a second parameter called `index2`. - 2. Make sure this is triggered by restarting the server and accessing this by passing a second parameter. + 2. Make sure this is triggered by restarting the server (which should happen automatically if you used `npm start`, which uses `nodemon`) and accessing this by passing a second parameter. 3. Modify the script to print out both book titles. 3. Next you need to add some validation to make sure the script does not crash (note that if you are using GoormIDE you will not be able to test it): 1. If the index in the URL exceeds the number of books in the array, you get an error. Insert an [`if...else` statement](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/if...else) that sends a suitable message to the browser if the index number in the URL is too high. - 2. The index must be a number. Use the [`isNaN()` function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN) to check and send a suitable message to the browser if it is not. if it is, use the [`parseFloat()` function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat) to convert it to a number. + 2. The index must be a number. Use the [`isNaN()` function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN) to check and send a suitable message to the browser if it is not. If it is, use the [`parseFloat()` function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat) to convert it to a number. 3. The number needs to be a whole number (integer). All JavaScript numbers are objects and have a number of useful functions. Use the [`Number.isInteger()` function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger) to check it is indeed an integer. Send a suitable message to the browser if it is not. You can convert it to an integer using the [`parseInt()` function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt). ### 1.3 URL Query Strings @@ -148,7 +148,7 @@ In this section you will learn about a number of JavaScript functions. In each c Whilst URL parameters are used to define unique URLs to identify online resources, sometimes we want to be able to pass additional information and this is done through the use of **query strings**. 1. Restart the server and access the `/hello/John%20Doe` route. - 1. Since spaces are not permitted in a URL we have to replace spaces with special codes. This is known as **URL Encoding** and there are specific [codes](https://www.degraeve.com/reference/urlencoding.php) to use. + 1. Since spaces are not permitted in a URL we have to replace spaces with special codes. This is known as **URL Encoding** and there are specific [codes](https://www.degraeve.com/reference/urlencoding.php) to use; however, your browser will probably do this automatically. 2. Notice that the message `hello John Doe` is displayed in the browser. 2. Now change the URL to `/hello/John%20Doe?format=upper`. 1. Notice that the same data has been displayed just the format has changed. @@ -179,7 +179,7 @@ Headers allow for additional information to be passed: Make sure the server is still running and use the [Chrome web browser](https://www.google.com/chrome/) to access the root URL `/`. -1. Open the [Chrome Developer Tools](https://developers.google.com/web/tools/chrome-devtools/) by clicking on the _Customise and control Chrome_ button (the three dots to the extreme right of the address bar), choosing **More tools** from the menu and then **Developer tools** from the submenu. +1. Open the [Chrome Developer Tools](https://developers.google.com/web/tools/chrome-devtools/) by pressing `ctrl+shift+i` or by clicking on the _Customise and control Chrome_ button (the three dots to the extreme right of the address bar), choosing **More tools** from the menu and then **Developer tools** from the submenu. 2. Locate the **Network** tab in the Chrome developer tools. 3. Reload the web page. (Press F5) 4. You should now see the resource sent in the HTTP response together with some data dealing with response times. @@ -201,7 +201,7 @@ In the **Request Headers** note that: 2. Next it specifies the host the request is being sent to. 3. Then there are multiple request headers. These are always property-value pairs. Lets look at a few of the more interesting ones: 1. The `User-Agent` header sends information about the browser being used. - 2. The `Accepts` header tells the server what [MIME](https://goo.gl/W2SWtZ) data types our browser prefers. + 2. The `Accepts` header tells the server what [MIME data types](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) our browser prefers. In addition to the **Response Body** (the information in the web browser window), the server has returned a **Status Code** (in this case it is `200` meaning `OK`) plus a set of **Response Headers** that provide additional information. @@ -215,14 +215,12 @@ As part of the worksheets you will be given some exercises to carry out to make 1. Go to the [University website](http://www.coventry.ac.uk) and use the Chrome Developer Tools to examine the request and response headers. 1. Are there any headers that were missing from the example above? - 2. [Look up](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers) the meaning of all the headers. + 2. Look up the meaning of all the [headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers). ## 2 Using the POST Method Now we have a good understanding of the request-response process used by the HTTP protocol and have learned about the headers we will extend this by examining the use of the HTTP POST method. -Before completing this section in the lab sheet you will need to install the `koa-static` package. - 1. Start by accessing the list of names on the `/names` url Make sure you have the Chrome Developer Tools open on the Network tab.: 1. Notice the browser displays an error message. 2. If you look at the HTTP Status Code you will see it is `404 Not Found` which makes sense as there are no names in the list (yet) @@ -231,12 +229,12 @@ Before completing this section in the lab sheet you will need to install the `ko 1. Notice that the Request Method has changed to `POST`. 2. Notice that the Response Code is `201 Created` to indicate that your data has been uploaded and stored. 3. There is a section called **Form Data** which is the request body and contains the data you submitted using the form. Use the _View Source_ link to display the raw data. This is how your data is sent to the server. -4. Use the back button to return to the form and use this to add the names of everyone else on your table. +4. Use the back button to return to the form and use this to add the names of everyone else at your table. 5. Access the `/names` url which should now respond with the HTTP Status Code `200 OK` and display your names in an HTML table. ## 3 Meta-Data -The path in the Uniform Resource Locator (URL) represents a _resource_ on the server however sometimes you need to pass _metadata_ to tell the server what you want it to do with this resource. There are two ways to pass metadata in an HTTP request, query strings and request headers. They differ in that anything in the URL is part of a book mark whilst the request headers are not. You need to decide whether this is important before deciding which to use. +The path in the Uniform Resource Locator (URL) represents a _resource_ on the server; however, sometimes you need to pass _metadata_ to tell the server what you want it to do with this resource. There are two ways to pass metadata in an HTTP request, query strings and request headers. They differ in that anything in the URL is part of a bookmark whilst the request headers are not. You need to decide whether this is important before deciding which to use. ### 3.1 Query Strings @@ -262,7 +260,7 @@ To complete this section of the lab you need to install the [Modify Headers](htt ![editing the request headers](exercises/.images/chrome_05.png) -You can also modify the standard request headers. In this example we will change the `Accept` header which defines the prefered format of the response data. The data formats are defined as [MIME types](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) The default settings look something like: +You can also modify the standard request headers. In this example we will change the `Accept` header which defines the prefered format of the response data. The data formats are defined as [MIME types](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types). The default settings look something like: ``` text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 @@ -271,7 +269,7 @@ text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*; This specified that the browser would prefer data in HTML/XML format (0.9 weighting) but will accept certain image formats and everything else. We will be changing this to request our data in specific formats. 1. Still on the `/names` URL, modify the request headers by removing any search terms. -2. Add a custom `Accept` header which will modify the default and set its value to `text/html` (see the screenshot below). If you refresh the browser you will see that the data is still displayed in an HTML table (because this format has been provided by the server). +2. Add a custom `Accept` header which will modify the default and set its value to `text/html` (see the screenshot below). If you refresh the browser you will see that the data is still displayed in an HTML table (because this format was used previously as well). 3. Now try the following MIME types: 1. `application/json` 2. `application/xml` diff --git a/03 HTML5.md b/03 HTML5.md index ce5419c8..15f2d85f 100644 --- a/03 HTML5.md +++ b/03 HTML5.md @@ -18,7 +18,7 @@ In this worksheet you will be learning about the markup language HTML which is c ## 1 Syntax -Lets take a look at some basic HTML syntax. Start by locating the `exercises/03_html/01_syntax/` directory. Navigate to this using the SSH Terminal, install the all the necessary `koa` packages and start the web server. If you navigate to the base route `/` you will see a screen full of text. +Lets take a look at some basic HTML syntax. Start by locating the `exercises/03_html/01_syntax/` directory. Navigate here using the terminal, install all the necessary `koa` packages with `npm install` and start the web server with `node index.js`. If you navigate to the base route `/`, you will see a screen full of text. ![the unformatted text](exercises/.images/chrome_07.png) @@ -35,7 +35,7 @@ As you work, save the html file and refresh the browser, you don't need to resta ## 2 Lists -Now you have mastered the basics of html its time to move on to how it can be used to render lists of different types. Start by locating the files in the `exercises/02_html/02_lists/` directory. Now install the necessary packages, start the `koa` server and view the root URL `/`. This should display a simple page with the title **1980's Home Computers**. +Now that you have mastered the basics of HTML, it's time to move on to how it can be used to render lists of different types. Start by locating the files in the `exercises/02_html/02_lists/` directory. Now install the necessary packages, start the `koa` server and view the root URL `/`. This should display a simple page with the title **1980s' Home Computers**. Now, add a list on your web page. Insert the following lines of code after the paragraph describing clever uses for home computers: @@ -83,7 +83,7 @@ The definitions list contains two elements for each item: a `dt` for the term an ## 3 Hypermedia -Now you have mastered the basics of HTML markup we will look at one of the most important features, the ability to link resources together (known as **hypermedia**), this is one of the cornerstones of the World Wide Web (WWW). +Now that you have mastered the basics of HTML markup, we will look at one of the most important features, the ability to link resources together (known as **hypermedia**), this is one of the cornerstones of the World Wide Web (WWW). ### 3.1 Routes @@ -91,11 +91,11 @@ Every resource on the WWW (such as html documents and images) has a unique URL a 1. Some resources need to be directly accessible in the web browser (they are accessed either directly or loaded by the html web page). These need to have their own directly accessible URL. 1. One directory needs to be specified as being publicly available. In this example we have created a directory called `public/` - 2. Koa needs to make this directory public. This is achieved on line by importing a static module and using this to specify the public directory. + 2. Koa needs to make this directory public. This is achieved on line 8 by importing a static module and using this to specify the public directory. 3. Assuming the server is running you can directly view the image using the URL `http://localhost:8080/paradox.jpeg`, remembering to substitute your server's URL. 2. Some resources are _virtual_ and are generated by a script running on the server before being sent back to the browser client. 1. There are some simple examples in `index.js`. Both the `/` and `/paradoxes` routes trigger scripts that take the contents of html files and send this back to the browser. - 2. When you access the `/date` route it displays today's date. Look at the script that does this (you don't need to understand the code details). + 2. When you access the `/date` route it, displays today's date. Look at the script that does this (you don't need to understand the code details). #### 3.1.1 Test Your Knowledge @@ -154,7 +154,7 @@ Sinclair ZX Spectrum ### 3.3 Images -In HTML5, images are put inside a `figure` element. The `figure` element normally contains one image, possibly with a caption, but technically it can serve as a container for multiple images. because the images are loaded by the HTML web page (and not directly by the web server) they need to be in a publicly accessible directory. On our web server this has been defined as the `public/` directory. You should create subdirectories within this to organise your files. +In HTML5, images are put inside a `figure` element. The `figure` element normally contains one image, possibly with a caption, but technically it can serve as a container for multiple images. Because the images are loaded by the HTML web page (and not directly by the web server) they need to be in a publicly accessible directory. On our web server this has been defined as the `public/` directory. You should create subdirectories within this to organise your files. Locate the `03_hypermedia/public/` directory and create a new folder inside this called `images/`. Find an image of a 1980s computer and drag it into this new directory. You can use the image below if you wish. @@ -247,12 +247,12 @@ Verify that you understand the elements used in marking up the table: ## 5 Semantic Markup -In this final exercise we will look at how [MicroData](https://developer.mozilla.org/en-US/docs/Web/HTML/Microdata) can be used to add semantic information to a web page. Start by using the SSH Terminal to run the server in the `exercises/03_html/05_semantic/` directory and navigating to the base route `/`. This should display a simple review page. +In this final exercise we will look at how [MicroData](https://developer.mozilla.org/en-US/docs/Web/HTML/Microdata) can be used to add semantic information to a web page. Start by using the terminal to run the server in the `exercises/03_html/05_semantic/` directory and navigating to the base route `/`. This should display a simple review page. 1. Paste the HTML code into Google's [Structured Data Testing Tool](https://search.google.com/structured-data/testing-tool) to see what semantic data it contains. Notice: - 1. There are two **items** on in the webpage, a movie and a rating. These are defined using the `itemscope` attribute in the html. Each item has an `itemtype` attribute that points to the appropriate Microdata definition. + 1. There is one main **item** on the webpage, which is a `review`, but it has many properties, some of which also consist of other **items**. These are defined using the `itemscope` attribute in the HTML file. Each item has an `itemtype` attribute that points to the appropriate Microdata definition. 2. Within each `itemscope`, the information has been tagged using the `itemprop` attribute. The allowed values are defined by the `itemtype` definition available on the [Schema.org website](http://schema.org/docs/full.html). - 3. The schema definitions define what `itemtype` are allowed and also what items can be nested inside which items. + 3. The schema definitions define what `itemtype`s are allowed and also what items can be nested inside which items. 2. The [Structured Data Testing Tool](https://search.google.com/structured-data/testing-tool) will not only extract the metadata but will also identify any errors in your implementation of the MicroData schema. 3. Install the [Structured Data Testing Tool Plugin](https://chrome.google.com/webstore/detail/structured-data-testing-t/kfdjeigpgagildmolfanniafmplnplpl/related?hl=en) for your Chrome Browser and use it to see the metadata. @@ -267,7 +267,7 @@ Hand-coding HTML can be a hassle, especially because you have to remember to add Start by running the server (note that you need to install an additional package called `marked`). 1. View the root path `/`. Notice that it displays a web page. -2. Use the **Elements** tab in the Chrome Developer Tools to view the markup, notice that the page contains a `

    `,a `

    ` element plus an ordered list and a table. +2. Use the **Elements** tab in the Chrome Developer Tools to view the markup, notice that the page contains an `

    `, a `

    ` element, plus an ordered list and a table. 3. Now open the `computers.md` file: 1. Notice how a single `#` symbol is used to denote a top level `

    ` element. 2. The `

    ` paragraph is denoted by text with no additional markup. diff --git a/exercises/02_http/01_url/index.js b/exercises/02_http/01_url/index.js index acf845f0..50e91348 100644 --- a/exercises/02_http/01_url/index.js +++ b/exercises/02_http/01_url/index.js @@ -73,8 +73,8 @@ router.post('/form', ctx => { router.get('/names', ctx => { let list = names - let search = 'x' - const minLength = 3 + let search = '' + const minLength = 1 if(ctx.query.search && ctx.query.search.length >= minLength) { search = ctx.query.search.toLowerCase() diff --git a/solutions/02_http/01_url/index.js b/solutions/02_http/01_url/index.js index e26c5ff1..000cfda9 100644 --- a/solutions/02_http/01_url/index.js +++ b/solutions/02_http/01_url/index.js @@ -67,7 +67,7 @@ router.get('/hello/:name', ctx => { // only applies uppercase if formatting query exists if (ctx.query.format === 'upper') myname = myname.toUpperCase() - if (ctx.query.format === 'upper') myname = myname.toLowerCase() + if (ctx.query.format === 'lower') myname = myname.toLowerCase() if (ctx.query.reverse === 'true') { myname = myname.split('').reverse().join('') @@ -93,8 +93,8 @@ router.post('/form', ctx => { router.get('/names', ctx => { let list = names - let search = 'x' - const minLength = 3 + let search = '' + const minLength = 1 if(ctx.query.search && ctx.query.search.length >= minLength) { search = ctx.query.search.toLowerCase() From e4321b034e0a353bc0fbac2a071f8257b89d496b Mon Sep 17 00:00:00 2001 From: Balazs Bordas Date: Sat, 19 Sep 2020 14:42:11 +0200 Subject: [PATCH 103/106] fixed errors and added all solutions up to the end of 04_css --- 04 CSS3.md | 105 +++++++++--------- exercises/03_html/02_lists/computers80.html | 6 +- .../03_hypermedia/views/commodore64.html | 3 +- .../01_formatting/html/hello-world.html | 24 ---- .../04_css/01_formatting/html/hello.html | 16 --- .../04_css/01_formatting/html/targets.html | 40 ------- .../04_css/01_formatting/public/css/hello.css | 3 +- .../01_formatting/public/css/selectors.css | 2 +- .../01_formatting/public/css/simple.css | 9 -- .../01_formatting/public/css/targetstyles.css | 2 +- .../01_formatting/views/comparison.html | 15 +-- .../04_css/01_formatting/views/csstest.html | 17 ++- .../01_formatting/views/hello-world.html | 24 ---- .../04_css/01_formatting/views/hello.html | 25 ++--- .../04_css/01_formatting/views/selectors.html | 8 +- .../04_css/01_formatting/views/targets.html | 27 ++--- .../02_layout/public/css/floatstyles.css | 10 +- .../02_layout/public/css/menustyles.css | 4 +- .../04_css/02_layout/views/boxmodel.html | 36 +++--- exercises/04_css/02_layout/views/columns.html | 104 +++++++++-------- .../04_css/02_layout/views/floating.html | 85 +++++++------- exercises/04_css/02_layout/views/menu.html | 45 ++++---- solutions/03_html/01_syntax/coventry.html | 3 +- solutions/03_html/02_lists/computers80.html | 6 +- .../03_hypermedia/views/commodore64.html | 6 +- .../03_html/03_hypermedia/views/index.html | 30 ++--- .../03_html/03_hypermedia/views/spectrum.html | 3 +- solutions/04_css/01_formatting/comparison.css | 47 ++++++++ .../04_css/01_formatting}/comparison.html | 18 ++- .../04_css/01_formatting}/csstest.html | 30 +++-- solutions/04_css/01_formatting/selectors.css | 23 ++++ .../04_css/01_formatting}/selectors.html | 14 +-- solutions/04_css/01_formatting/test.css | 60 ++++++++++ solutions/04_css/02_layout/berries.css | 56 ++++++++++ solutions/04_css/02_layout/berries.html | 30 +++++ solutions/04_css/02_layout/boxstyles.css | 25 +++++ solutions/04_css/02_layout/columnstyles.css | 13 +++ solutions/04_css/02_layout/floating.html | 64 +++++++++++ solutions/04_css/02_layout/floatstyles.css | 22 ++++ solutions/04_css/02_layout/menu.html | 54 +++++++++ solutions/04_css/02_layout/menustyles.css | 53 +++++++++ 41 files changed, 731 insertions(+), 436 deletions(-) delete mode 100644 exercises/04_css/01_formatting/html/hello-world.html delete mode 100644 exercises/04_css/01_formatting/html/hello.html delete mode 100644 exercises/04_css/01_formatting/html/targets.html delete mode 100644 exercises/04_css/01_formatting/public/css/simple.css delete mode 100644 exercises/04_css/01_formatting/views/hello-world.html create mode 100644 solutions/04_css/01_formatting/comparison.css rename {exercises/04_css/01_formatting/html => solutions/04_css/01_formatting}/comparison.html (76%) rename {exercises/04_css/01_formatting/html => solutions/04_css/01_formatting}/csstest.html (74%) create mode 100644 solutions/04_css/01_formatting/selectors.css rename {exercises/04_css/01_formatting/html => solutions/04_css/01_formatting}/selectors.html (53%) create mode 100644 solutions/04_css/01_formatting/test.css create mode 100644 solutions/04_css/02_layout/berries.css create mode 100644 solutions/04_css/02_layout/berries.html create mode 100644 solutions/04_css/02_layout/boxstyles.css create mode 100644 solutions/04_css/02_layout/columnstyles.css create mode 100644 solutions/04_css/02_layout/floating.html create mode 100644 solutions/04_css/02_layout/floatstyles.css create mode 100644 solutions/04_css/02_layout/menu.html create mode 100644 solutions/04_css/02_layout/menustyles.css diff --git a/04 CSS3.md b/04 CSS3.md index 4630da37..0c442e20 100644 --- a/04 CSS3.md +++ b/04 CSS3.md @@ -5,7 +5,7 @@ Before you start you need to pull any _upstream changes_. Detailed instructions ## 1 Introduction to CSS3 -The purpose of HTML is to define the structure and contents of a website. It is not intended to contain any representational markups. CSS (Cascaded Style Sheets) is designed for that purpose. +The purpose of HTML is to define the structure and contents of a website. It is not intended to contain any representational markups. CSS (Cascading Style Sheets) is designed for that purpose. > CSS is amazingly powerful. As an example, click to visit [CSS Zen Garden](http://www.csszengarden.com). Different CSS files are applied to a single HTML file by clicking on the navigation links to the right of the screen. There's a book for it as well on [Amazon](http://www.amazon.co.uk/ZEN-CSS-Design-Visual-Enlightenment/dp/0321303474). @@ -14,9 +14,9 @@ This worksheet is split into two sections: 1. The basics of CSS 2. The CSS box model and layouts -In the first part of this lab, you do the following tasks, and it takes approximately 2 hours. +The first part of this lab takes approximately 2 hours, and you'll do the following tasks: -1. Perform basic formatting (colors, fonts, etc.) of your web pages. +1. Perform basic formatting (colours, fonts, etc.) of your web pages. 2. Use CSS classes and identifiers to pick the correct elements 3. Fine-tune your selection by picking nested elements and using pseudo elements. @@ -28,13 +28,6 @@ Start by locating the `exercises/04_css/01_formatting/` directory. This contains > This diagram was created using the `tree` command run inside the `01_formatting/` directory. -1. The `index.js` script is in the root directory and contains the routes served by the Express web server (just like the ones in the previous weeks). -2. The `package.json` includes all the _metadata_ for this project including the packages that need to be installed. To install all the required packages run `npm install`. -3. The HTML files that are served by the routes are stored in a directory called `html/`. -4. Any resources that are linked to the html document need to have their own external URLs and are kept in the `public/` directory. - 1. There are some CSS files which we will be editing. - 2. There are some images loaded by the web pages. - ``` . ├── index.js @@ -48,7 +41,6 @@ Start by locating the `exercises/04_css/01_formatting/` directory. This contains └── public ├── css │   ├── selectors.css - │   ├── simple.css │   └── targetstyles.css └── images ├── comparison.png @@ -56,15 +48,22 @@ Start by locating the `exercises/04_css/01_formatting/` directory. This contains └── tickmark.png ``` +1. The `index.js` script is in the root directory and contains the routes served by the Koa web server (just like the ones in the previous weeks). +2. The `package.json` file includes all the _metadata_ for this project, including the packages that need to be installed. To install all the required packages, run `npm install`. +3. The HTML files that are served by the routes are stored in the `views/` directory. +4. Any resources that are linked to the html document need to have their own external URLs and are kept in the `public/` directory. + 1. There are some CSS files which we will be editing. + 2. There are some images loaded by the web pages. + The purpose of a style sheet is to collect all information on how the pages in a website should be visually rendered, into one place. Ideally, all web pages in a site should be linked to one style sheet (one CSS file) that contains all visual formatting rules for the entire website. -This approach makes a clear separation between content and representation. The approach makes it easy to get a uniform outlook for the entire site. Moreover, one can easily build alternative views that may be strikingly different visually yet they share the same content. +>This approach creates a clear separation between content and representation, and makes it easy to get a uniform outlook for the entire site. Moreover, one can easily build alternative views that may be strikingly different visually yet share the same content. -1. Look at the `index.js` file and locate the base route (`/`). Notice that it loads the contents of the `html/hello.html` file and sends this to the browser. -2. In the `` tags you should see a `` tag which loads the `public/css/hello.css` stylesheet file. Note that the script defines all the files in the `public/` directory as publicly visible which means the contents of this folder are treated as being in the web server root directory. In simple terms we don't need to specify the `public/` directory in the path to the CSS file. -3. Now start the server (if you have not already done so) and view the base url. You will see the heading is coloured in red. +1. Look at the `index.js` file and locate the base route (`/`). Notice that it loads the contents of the `views/hello.html` file and sends this to the browser. +2. In the `` tags you should see a `` tag which loads the `public/css/hello.css` stylesheet file. Note that the script defines all the files in the `public/` directory as publicly visible which means the contents of this folder are treated as being in the web server root directory. In simple terms, we don't need to specify the `public/` directory in the path to the CSS file. +3. Now start the server (if you have not already done so) and view the base URL. You will see the heading is coloured in red. 1. Look at the `hello.css` file and see if you can figure out why this has happened. 2. Change the colour of the heading to a different [named colour](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value). 4. Add the following to the css file and see what effect this has on the appearance of the web page. @@ -72,7 +71,7 @@ This approach makes a clear separation between content and representation. The a ```css body { - font-family: Arial, Verdana, sans-serif; + font-family: Arial, Helvetica, sans-serif; } h1, h2 { @@ -83,10 +82,10 @@ h1, h2 { Examine the CSS file and verify that you understand its contents. Pay attention to the following points: -- The file contains two rules. Each rule begins with the list of elements it has an effect on. The first rule is applied to the `body` element whilst the second rule is applied to `h1` and `h2` header elements. +- The file contains two rules. Each rule begins with the list of elements it has an effect on. The first rule is applied to the `body` element, while the second rule is applied to `h1` and `h2` header elements. - Followed by the element names (called selectors), there is a block starting with `{` and ending with `}`. This block contains a list of properties. - The first rule (applicable to the `body` element) contains one property for setting the font. -- The second rule (applicable to major headers) contains two properties, one for setting blue font color and the other for bold text. +- The second rule (applicable to major headers) contains two properties, one for setting blue font colour and the other for bold text. - The rules are automatically in effect in the nested subelements, so the font setting for `body` element applies to all elements in the page, including headers, lists, and paragraphs. - The fonts are given as a list of alternatives. The browser uses the first font in the list that it is capable of. The list should always end in a generic font such as `serif` or `sans-serif`. @@ -94,14 +93,14 @@ Examine the CSS file and verify that you understand its contents. Pay attention 1. View the `/test` url which should display a page about 1980s computers. 2. Create a new stylesheet in the `public/css/` directory called `test.css`. -3. Add a `h1` selector and apply a style to turn the headings _orange_. +3. Add an `h1` selector and apply a style to turn the headings _orange_. 4. Edit the `csstest.html` file and link to the spreadsheet. - 1. If you have done this correctly the heading should be orange when you refresh the browser! + - If you have done this correctly, the heading should be orange when you refresh the browser! 5. Spend time experimenting with different **selectors** and add new **rules** and **properties** to the file and see how they affect the web page. There is a complete list of CSS property names and possible values (among other information) at the [W3C Cascading Stylesheets documentation](http://www.w3.org/TR/CSS/) website. - 1. Add a border to each list and change the color of list items to dark grey. + 1. Add a border to each list and change the colour of list items to dark grey. 2. Indent the paragraphs and lists. 3. Make figure captions smaller and use bold face. - 4. Set a background color for the page. + 4. Set a background colour for the page. 6. Try specifying the page colours: 1. Using named colours ("red", "blue", etc.). 2. Specifying the same colours using RGB decimal values, eg `rgb(65,105,225)`. @@ -111,7 +110,7 @@ Examine the CSS file and verify that you understand its contents. Pay attention 1. Start by specifying the absolute size of the text by using _pixels_ (px) 2. Now change this to use _points_ (pt) 3. What is the change when you define the font sizes in _ems_. - 4. Finally change all font sizes are in percentages. + 4. Finally try font sizes in percentages. | Unit | Type | Meaning | |------|----------|----------------------------------------------------------| @@ -173,7 +172,7 @@ The paragraph element above belongs to two classes: `info` and `urgent`. #### 1.2.2 Identifiers -As seen before, multiple elements can belong to the same class. However, unique identifiers are a better option to generate rules that are applied only once. +As seen before, multiple elements can belong to the same class, however, unique identifiers are a better option to generate rules that are applied only once. This is marked in HTML by the identifier attribute: @@ -205,8 +204,8 @@ In the file, there are five paragraphs (`p`) and one header (`h1`). Verify that - The first and the second paragraphs are regular paragraph elements (start tag `

    `). For these paragraphs, standard rules for `p` elements are applied. - The third and the fifth paragraphs are assigned a common class name (start tag `

    `). For these paragraphs, standard rules for paragraphs are applied. In addition, rules for all `alert` class elements (`.alert`) are applied as well as those rules that are specific to paragraphs belonging to alert class (`p.alert`). - The fourth paragraph is supposed to have a unique formatting. Thus, it is assigned an identifier (start tag `

    `). For this paragraph, standard paragraph rules plus rules specific to this identifier (#unique) apply. -- The header belongs to `alert` class like two of the paragraphs. It is affected by a rule that is targeted to all elements of `alert` class (`.alert`). In addition, all rules for `h1` would be applied but there is none. -- The rule for `body` element is applied to all elements as they are nested elements inside the body element. +- The header belongs to the `alert` class, like two of the paragraphs. It is affected by a rule that is targeted to all elements of the `alert` class (`.alert`). In addition, all rules for `h1` would be applied but there are none. +- The rule for the`body` element is applied to all elements as they are nested elements inside the body element. If a property of an element would be defined in multiple CSS rules, the rule whose selector has the highest specificity wins. For instance, the properties defined in a class-specific rule override the attributes defined in the general rule for the element. @@ -214,7 +213,7 @@ If a property of an element would be defined in multiple CSS rules, the rule who 1. Modify the `selectors.html` and `selectors.css` files so that the first, third, and fifth paragraph appear underlined (in addition to the existing formatting). You should achieve this with a single CSS rule. 2. In `csstest.html` file, add a paragraph about Basic programming to the bottom of the page (Basic was a common language for programming 80's home computers). Below the paragraph, add a sample program as below: - ``` + ```basic 10 PRINT "Hello, World" 20 INPUT "Continue (y/n)?", R$ 30 IF R$="y" THEN GOTO 10 @@ -257,7 +256,7 @@ ul li ul li ul { As the HTML file contains several list elements, nested and unnested, we can't make the correct elements as targets of the rules using a single element as a selector. However, CSS provides a straightforward way to achieve our goal. -- In the first rule, selector `ol > li` matches only those `li` elements that are direct children of the unordered list. +- In the first rule, selector `ol > li` matches only those `li` elements that are direct children of the ordered list. - In the second rule, those unordered lists are selected that appear in list items of a higher-level unordered list. Note that this rule applies to both the second and the third levels of the nested list in the example. - The third rule applies only to the third level (and potential deeper levels) in nested unordered lists. @@ -274,15 +273,15 @@ input[type="submit"] { } ``` -Of course, you can use also the normal selectors for elements like `form`, `legend`, `fieldset`, etc. Unfortunately support for styling form controls is inconsistent across browsers. +>Of course, you can also use the normal selectors for elements like `form`, `legend`, `fieldset`, etc. -Therefore, you should always check that the results are what is expected. +Unfortunately, support for styling form controls is inconsistent across browsers. Therefore, you should always check that the results are what is expected. #### 1.3.3 Nested and Pseudo Elements Pseudoelements allow formatting only certain parts of an element. Using pseudoelements, it is, for instance, possible to pick the first letter or line of a paragraph. -Add the following line into `simple.css` (that is linked to `csstest.html`): +Add the following lines to `test.css` (that is linked to `csstest.html`): ```css p::first-letter { @@ -326,7 +325,7 @@ As these approaches obscure the separation of content and presentation, their us #### 1.3.5 Test your Understanding -You need the aforementioned file `simple.css`. CSS pseudo elements `::before` and `::after` allow inserting content right before or after an element for stylistic purposes. These are normally used in conjunction with `content` property that specifies the content to be included. +You need the aforementioned file `test.css`. CSS pseudo elements `::before` and `::after` allow inserting content right before or after an element for stylistic purposes. These are normally used in conjunction with `content` property that specifies the content to be included. - Add a rule that adds the text `Note!` before each paragraph in `csstest.html`. - Add a rule that prints the image of a tick mark after each paragraph in `csstest.html`. A public domain tick mark image (Author: Kosta Kostov, via http://www.publicdomainpictures.net/) can be found in the lab's `public/images/` directory. @@ -347,7 +346,7 @@ In this section you will be doing the following tasks, it takes approximately 2 ### 2.1 CSS Box Model -First locate the `exercises/04_css/02_layout/` directory, start the Express server and open the `/boxmodel` route. This will display the contents of the `boxmodel.html` file. This will be used to illustrate the CSS box model which is vital for understanding how to set the dimensions, margins and paddings of elements in a web page. Check the contents of the file. You notice that it contains four paragraph elements, each labeled to belong to a different class. +First locate the `exercises/04_css/02_layout/` directory, start the Koa server and open the `/boxmodel` route. This will display the contents of the `boxmodel.html` file. This will be used to illustrate the CSS box model which is vital for understanding how to set the dimensions, margins and paddings of elements in a web page. Check the contents of the file. You notice that it contains four paragraph elements, each labeled to belong to a different class. Create a file called `boxstyles.css` in the correct directory and link it to the HTML file. @@ -384,13 +383,13 @@ Now, add rules for the remaining paragraph classes (two, three, four) to generat - class `two`: same border as for class `one`, no padding, 5em margins except for the top where no should be no margin. - class `three`: a 3-pixel wide solid black border only in the left edge of the paragraph, 1em padding except for the top where no padding is applied, 2em top margin, 8em bottom margin, no left and right margins. -- class `four`: a 5 pixels wide dashed red margin with rounded corners (1em radius). +- class `four`: a 5 pixels wide dashed red border with rounded corners (1em radius). Verify that all four paragraphs are displayed exactly as intended. #### 2.1.1 Developer tools -In Google Chrome browser, there are a built-in Developer Tools for viewing the layout of an individual element. It is an important tool for finding and correcting layout problems. Click options menu to the right of the menu bar, then More Tools ==> Developer Tools to view it. +In Google Chrome browser, there are a built-in Developer Tools for viewing the layout of an individual element. It is an important tool for finding and correcting layout problems. Press `ctrl+shift+i` or click options menu to the right of the menu bar, then More Tools -> Developer Tools to view it. ![](exercises/.images/03_tools.png) @@ -400,7 +399,7 @@ Alternatively, you can simply right-click on an element and select **Inspect**. #### 2.1.2 Test Your Understanding -The file `box_assignment.png` in the lab's `public/images/` directory contains an image of intended appearance for a webpage. Using CSS box model, construct an HTML page and the associated CSS file that reproduce the appearance of the image. +The file `box_assignment.png` in the lab's `public/images/` directory contains an image of intended appearance for a webpage. Using CSS box model, construct an HTML page and the associated CSS file that reproduce the appearance of the image. Don't forget to add the new route to the index.js file. In the lab's `public/images/` directory you also find the public domain image `berries.png` (author Scott Bauer, via http://commons.wikimedia.org) needed for this task. @@ -434,7 +433,7 @@ The HTML file contains one image tag. First, add an identifier for the figure ho ```html

    -Onions + Onions
    Onions are delicious.
    ``` @@ -453,12 +452,12 @@ Next, we make a floating fact box that contains multiple elements. Add the follo ```html
    -

    Did you know?

    -
      -
    • The latin name for onion plant is Allium Cepa.
    • -
    • Onions have been used in cooking for thousands of years.
    • -
    • 89% of onion's content is water.
    • -
    +

    Did you know?

    +
      +
    • The latin name for onion plant is Allium Cepa.
    • +
    • Onions have been used in cooking for thousands of years.
    • +
    • 89% of onions' content is water.
    • +
    ``` @@ -491,11 +490,11 @@ Add the navigation information (using the HTML5 `nav` element) into the bottom o ```html + Nutrition + Recipes + Growing + History + ``` Note that the routes that the links point to do not exist. We could add them later. @@ -519,14 +518,14 @@ Note that the elements positioned using absolute positioning may appear on top o ```css body { - font-family: Arial, Verdana, sans-serif; + font-family: Arial, Helvetica, sans-serif; margin-left: 200px; } ``` #### 2.2.3 Test Your Understanding -1. Open file **columns.html**. Generate a style sheet **columnstyles.css** where the paragraphs are displayed in: +1. Open file **columns.html**. Generate a style sheet **columnstyles.css** (which is already linked to the HTML file) where the paragraphs are displayed in: 1. two columns 2. three columns 3. Search for CSS properties containing the word `column`. Currently, there are browser restrictions and inconsistencies in displaying multi-column content, but the workarounds are well documented. Try to take these into account in your CSS. @@ -536,15 +535,15 @@ body { The next task is to build a navigation menu bar to the website using CSS. Depending on the number of menu items, the menu bar can contain multi-level menus. -A menu bar can be defined as a HTML unordered list. Each menu in a menu bar is a list item. +A menu bar can be defined as an HTML unordered list. Each menu in a menu bar is a list item. The menus can contain submenus. A submenu is coded as a list that is within the parent menu's list item. -Open the `/menu` route and find the appropriate html and css files. +Open the `/menu` route and find the appropriate `.html` and `.css` files. Try the functionality of the two-level menu by hovering the mouse pointer over the **Item 1**, **Item 2**, and **Item 3** texts. The last two have submenus. -Examine, how the hierarchical menu was created using plain CSS. Note that the links are just dummies; they don't lead to any web pages. In the example, the barebones menu bar contains only minimum formatting that is necessary for correct layout. +Examine, how the hierarchical menu was created using plain CSS. Note that the links are just dummies: they don't lead to any web pages. In the example, the barebones menu bar contains only the minimum formatting that is necessary for correct layout. Important things to note: diff --git a/exercises/03_html/02_lists/computers80.html b/exercises/03_html/02_lists/computers80.html index 5c185f87..e4fafc19 100644 --- a/exercises/03_html/02_lists/computers80.html +++ b/exercises/03_html/02_lists/computers80.html @@ -1,11 +1,10 @@ - + 1980s' home computers - + -
    A computer with a monitor @@ -28,5 +27,4 @@

    Key concepts

    The hardware charateristics of a home computer could be defined by its graphics and sound capabilities, CPU, and amount of memory.

    - \ No newline at end of file diff --git a/exercises/03_html/03_hypermedia/views/commodore64.html b/exercises/03_html/03_hypermedia/views/commodore64.html index 3315d8a1..a98baa85 100644 --- a/exercises/03_html/03_hypermedia/views/commodore64.html +++ b/exercises/03_html/03_hypermedia/views/commodore64.html @@ -1,10 +1,9 @@ - + Commodore 64 - diff --git a/exercises/04_css/01_formatting/html/hello-world.html b/exercises/04_css/01_formatting/html/hello-world.html deleted file mode 100644 index 32dc15b0..00000000 --- a/exercises/04_css/01_formatting/html/hello-world.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - Document - - - - - - - - - - -
    - -
      -
    • -
    • -
    • -
    • -
    • -
    \ No newline at end of file diff --git a/exercises/04_css/01_formatting/html/hello.html b/exercises/04_css/01_formatting/html/hello.html deleted file mode 100644 index de2ff46d..00000000 --- a/exercises/04_css/01_formatting/html/hello.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - Let's see CSS at Work - - - - - -

    Hello CSS!

    -

    Use this file to see how CSS can be used to change the appearance of a web page.

    - - \ No newline at end of file diff --git a/exercises/04_css/01_formatting/html/targets.html b/exercises/04_css/01_formatting/html/targets.html deleted file mode 100644 index 5738cf46..00000000 --- a/exercises/04_css/01_formatting/html/targets.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - Selecting elements - - - - - -

    Element selection demo

    - -

    The sources of energy are:

    -
      -
    1. protein
    2. -
    3. carbohydrates
    4. -
    5. fat
    6. -
    - -

    Sources of carbohydrates:

    -
      -
    • Fruits and berries
    • -
    • Wheat and pasta
    • -
    • Sweet products -
        -
      • Candies
          -
        • Jelly beans
        • -
        • Irish toffee
        • -
        • Fruit drops
        • - -
      • - -
      • Pastries
      • -
      -
    • - -
    - - - - \ No newline at end of file diff --git a/exercises/04_css/01_formatting/public/css/hello.css b/exercises/04_css/01_formatting/public/css/hello.css index fb0e5d21..4717ad4b 100644 --- a/exercises/04_css/01_formatting/public/css/hello.css +++ b/exercises/04_css/01_formatting/public/css/hello.css @@ -1,4 +1,3 @@ - h1 { - color: red; + color: red; } \ No newline at end of file diff --git a/exercises/04_css/01_formatting/public/css/selectors.css b/exercises/04_css/01_formatting/public/css/selectors.css index 41f8b1cc..8a7ab42d 100644 --- a/exercises/04_css/01_formatting/public/css/selectors.css +++ b/exercises/04_css/01_formatting/public/css/selectors.css @@ -1,5 +1,5 @@ body { - font-family: Arial, Verdana, sans-serif; + font-family: Arial, Helvetica, sans-serif; } p { diff --git a/exercises/04_css/01_formatting/public/css/simple.css b/exercises/04_css/01_formatting/public/css/simple.css deleted file mode 100644 index 061fbf3b..00000000 --- a/exercises/04_css/01_formatting/public/css/simple.css +++ /dev/null @@ -1,9 +0,0 @@ -body { - font-family: Arial, Verdana, sans-serif; -} - -h1, -h2 { - color: blue; - font-weight: bold; -} \ No newline at end of file diff --git a/exercises/04_css/01_formatting/public/css/targetstyles.css b/exercises/04_css/01_formatting/public/css/targetstyles.css index 7cebbae5..8843f31f 100644 --- a/exercises/04_css/01_formatting/public/css/targetstyles.css +++ b/exercises/04_css/01_formatting/public/css/targetstyles.css @@ -1,3 +1,3 @@ body { - font-family: Arial, Verdana, sans-serif; + font-family: Arial, Helvetica, sans-serif; } diff --git a/exercises/04_css/01_formatting/views/comparison.html b/exercises/04_css/01_formatting/views/comparison.html index 42b0dda9..a0e45264 100644 --- a/exercises/04_css/01_formatting/views/comparison.html +++ b/exercises/04_css/01_formatting/views/comparison.html @@ -1,11 +1,10 @@ - + Comparison of three computers - + -

    A comparison of technical data of three popular 80's home computers:

    @@ -21,28 +20,24 @@ - CPU + CPU MOS Technology 6510 Zilog Z80 MOS Technology 6502 - RAM + RAM 64 kilobytes 16 or 64 kilobytes 5 kilobytes - ROM + ROM 20 kilobytes 16 kilobytes 16 kilobytes - -
    - - \ No newline at end of file diff --git a/exercises/04_css/01_formatting/views/csstest.html b/exercises/04_css/01_formatting/views/csstest.html index 0791d1a4..4880a54c 100644 --- a/exercises/04_css/01_formatting/views/csstest.html +++ b/exercises/04_css/01_formatting/views/csstest.html @@ -1,9 +1,9 @@ - - + + Vintage Home Computers - +
    @@ -11,8 +11,8 @@

    1980's Home Computers

    In early 1980's, home computers became mainstream. For the first time, computers could be purchased by an average family household.

    - A computer with a monitor -
    Photo: Piotr Siedlecki, public domain via http://www.publicdomainpictures.net.
    + A computer with a monitor +
    Photo: Piotr Siedlecki, public domain via http://www.publicdomainpictures.net.

    Novel uses

    The main usage for a home computer was, of course, games. As cool games may not be a valid reason for purchasing an expensive gadget, @@ -47,10 +47,7 @@

    Key concepts