For this project, we expect you to look at these concepts:
Read or watch:
- ECMAScript 6 - ECMAScript 2015
- Statements and declarations
- Arrow functions
- Default parameters
- Rest parameter
- Javascript ES6 — Iterables and Iterators
- Promise
- JavaScript Promise: An introduction
- Await
- Async
- Throw / Try
At the end of this project, you are expected to be able to explain to anyone, without the help of Google:
- What ES6 is
- New features introduced in ES6
- The difference between a constant and a variable
- Block-scoped variables
- Arrow functions and function parameters default to them
- Rest and spread function parameters
- String templating in ES6
- Object creation and their properties in ES6
- Iterators and for-of loops
- Promises (how, why, and what)
- How to use the
then
,resolve
,catch
methods - How to use every method of the Promise object
- Throw / Try
- The await operator
- How to use an
async
function
- All your files will be executed on Ubuntu 18.04 LTS using NodeJS
12.11.x
- Allowed editors:
vi
,vim
,emacs
,Visual Studio Code
- All your files should end with a new line
- A
README.md
file, at the root of the folder of the project, is mandatory - Your code should use the
js
extension - Your code will be tested using the Jest Testing Framework
- Your code will be analyzed using the linter ESLint along with specific rules that we’ll provide
- All of your functions must be exported
(in your home directory):
curl -sL https://deb.nodesource.com/setup_12.x -o nodesource_setup.sh
sudo bash nodesource_setup.sh
sudo apt install nodejs -y
$ nodejs -v
v12.11.1
$ npm -v
6.11.3
in your project directory, install Jest, Babel and ESList by using the supplied package.json
and run npm install
.
Add the files below to your project directory
package.json
{
"scripts": {
"lint": "./node_modules/.bin/eslint",
"check-lint": "lint [0-9]*.js",
"dev": "npx babel-node",
"test": "jest",
"full-test": "./node_modules/.bin/eslint [0-9]*.js && jest"
},
"devDependencies": {
"@babel/core": "^7.6.0",
"@babel/node": "^7.8.0",
"@babel/preset-env": "^7.6.0",
"eslint": "^6.4.0",
"eslint-config-airbnb-base": "^14.0.0",
"eslint-plugin-import": "^2.18.2",
"eslint-plugin-jest": "^22.17.0",
"jest": "^24.9.0"
}
}
babel.config.js
module.exports = {
presets: [
[
'@babel/preset-env',
{
targets: {
node: 'current',
},
},
],
],
};
utils.js
Use when you get to tasks requiring uploadPhoto
and createUser
.
export function uploadPhoto() {
return Promise.resolve({
status: 200,
body: 'photo-profile-1',
});
}
export function createUser() {
return Promise.resolve({
firstName: 'Guillaume',
lastName: 'Salva',
});
}
.eslintrc.js
module.exports = {
env: {
browser: false,
es6: true,
jest: true,
},
extends: [
'airbnb-base',
'plugin:jest/all',
],
globals: {
Atomics: 'readonly',
SharedArrayBuffer: 'readonly',
},
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module',
},
plugins: ['jest'],
rules: {
'no-console': 'off',
'no-shadow': 'off',
'no-restricted-syntax': [
'error',
'LabeledStatement',
'WithStatement',
],
},
overrides:[
{
files: ['*.js'],
excludedFiles: 'babel.config.js',
}
]
};
Don’t forget to run $ npm install
when you have the package.json
uploadPhoto
returns a response with the format
{
status: 200,
body: 'photo-profile-1',
}
createUser
returns a response with the format
{
firstName: 'Guillaume',
lastName: 'Salva',
}